// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/spellchecker/spellcheck_action.h" #include "base/logging.h" #include "base/values.h" SpellcheckAction::SpellcheckAction() : type_(TYPE_PENDING), index_(-1) {} SpellcheckAction::SpellcheckAction(SpellcheckActionType type, int index, base::string16 value) : type_(type), index_(index), value_(value) {} SpellcheckAction::~SpellcheckAction() {} bool SpellcheckAction::IsFinal() const { return type_ == TYPE_ADD_TO_DICT || type_ == TYPE_IGNORE || type_ == TYPE_IN_DICTIONARY || type_ == TYPE_MANUALLY_CORRECTED || type_ == TYPE_NO_ACTION || type_ == TYPE_SELECT; } void SpellcheckAction::Finalize() { switch (type_) { case TYPE_PENDING: type_ = TYPE_NO_ACTION; break; case TYPE_PENDING_IGNORE: type_ = TYPE_IGNORE; break; default: DCHECK(IsFinal()); break; } } base::DictionaryValue* SpellcheckAction::Serialize() const { base::DictionaryValue* result = new base::DictionaryValue; switch (type_) { case TYPE_SELECT: result->SetString("actionType", "SELECT"); result->SetInteger("actionTargetIndex", index_); break; case TYPE_ADD_TO_DICT: result->SetString("actionType", "ADD_TO_DICT"); break; case TYPE_IGNORE: result->SetString("actionType", "IGNORE"); break; case TYPE_IN_DICTIONARY: result->SetString("actionType", "IN_DICTIONARY"); break; case TYPE_NO_ACTION: result->SetString("actionType", "NO_ACTION"); break; case TYPE_MANUALLY_CORRECTED: result->SetString("actionType", "MANUALLY_CORRECTED"); result->SetString("actionTargetValue", value_); break; case TYPE_PENDING: case TYPE_PENDING_IGNORE: result->SetString("actionType", "PENDING"); break; default: NOTREACHED(); break; } return result; }