| Index: chrome/browser/chromeos/extensions/input_ime_extension_api.cc
|
| diff --git a/chrome/browser/chromeos/extensions/input_ime_extension_api.cc b/chrome/browser/chromeos/extensions/input_ime_extension_api.cc
|
| deleted file mode 100644
|
| index f81c79e93cee127e1a8a04b3ddb49ce3c232d477..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/extensions/input_ime_extension_api.cc
|
| +++ /dev/null
|
| @@ -1,860 +0,0 @@
|
| -// Copyright (c) 2011 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/chromeos/extensions/input_ime_extension_api.h"
|
| -
|
| -#include "base/json/json_writer.h"
|
| -#include "base/string_number_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/chromeos/input_method/input_method_engine.h"
|
| -#include "chrome/browser/extensions/extension_event_router.h"
|
| -#include "chrome/browser/extensions/extension_input_module_constants.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -
|
| -namespace keys = extension_input_module_constants;
|
| -
|
| -namespace {
|
| -
|
| -const char kStyleNone[] = "none";
|
| -const char kStyleCheck[] = "check";
|
| -const char kStyleRadio[] = "radio";
|
| -const char kStyleSeparator[] = "separator";
|
| -
|
| -const char kErrorEngineNotAvailable[] = "Engine is not available";
|
| -const char kErrorBadCandidateList[] = "Invalid candidate list provided";
|
| -const char kErrorSetMenuItemsFail[] = "Could not create menu Items";
|
| -const char kErrorUpdateMenuItemsFail[] = "Could not update menu Items";
|
| -
|
| -bool ReadMenuItems(
|
| - ListValue* menu_items,
|
| - std::vector<chromeos::InputMethodEngine::MenuItem>* output) {
|
| - for (size_t i = 0; i < menu_items->GetSize(); ++i) {
|
| - DictionaryValue* item_dict;
|
| - if (!menu_items->GetDictionary(i, &item_dict)) {
|
| - return false;
|
| - }
|
| -
|
| - std::string id;
|
| - std::string label;
|
| - chromeos::InputMethodEngine::MenuItemStyle style =
|
| - chromeos::InputMethodEngine::MENU_ITEM_STYLE_NONE;
|
| - bool visible = true;
|
| - bool enabled = true;
|
| - bool checked = false;
|
| - std::string icon;
|
| - chromeos::InputMethodEngine::KeyboardEvent shortcut_key;
|
| -
|
| - unsigned int modified = 0;
|
| -
|
| - if (!item_dict->GetString(keys::kIdKey, &id)) {
|
| - return false;
|
| - }
|
| -
|
| - if (item_dict->HasKey(keys::kLabelKey)) {
|
| - if (!item_dict->GetString(keys::kLabelKey, &label)) {
|
| - return false;
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_LABEL;
|
| - }
|
| - if (item_dict->HasKey(keys::kStyleKey)) {
|
| - std::string style_string;
|
| - if (!item_dict->GetString(keys::kStyleKey, &style_string)) {
|
| - return false;
|
| - }
|
| -
|
| - if (style_string == kStyleNone) {
|
| - style = chromeos::InputMethodEngine::MENU_ITEM_STYLE_NONE;
|
| - } else if (style_string == kStyleCheck) {
|
| - style = chromeos::InputMethodEngine::MENU_ITEM_STYLE_CHECK;
|
| - } else if (style_string == kStyleRadio) {
|
| - style = chromeos::InputMethodEngine::MENU_ITEM_STYLE_RADIO;
|
| - } else if (style_string == kStyleSeparator) {
|
| - style = chromeos::InputMethodEngine::MENU_ITEM_STYLE_SEPARATOR;
|
| - } else {
|
| - return false;
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_STYLE;
|
| - }
|
| -
|
| - if (item_dict->HasKey(keys::kVisibleKey)) {
|
| - if (!item_dict->GetBoolean(keys::kVisibleKey, &visible)) {
|
| - return false;
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_VISIBLE;
|
| - }
|
| -
|
| - if (item_dict->HasKey(keys::kCheckedKey)) {
|
| - if (!item_dict->GetBoolean(keys::kCheckedKey, &checked)) {
|
| - return false;
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_CHECKED;
|
| - }
|
| -
|
| - if (item_dict->HasKey(keys::kEnabledKey)) {
|
| - if (!item_dict->GetBoolean(keys::kEnabledKey, &enabled)) {
|
| - return false;
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_ENABLED;
|
| - }
|
| -
|
| - if (item_dict->HasKey(keys::kIconKey)) {
|
| - if (!item_dict->GetString(keys::kIconKey, &icon)) {
|
| - return false;
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_ICON;
|
| - }
|
| -
|
| - if (item_dict->HasKey(keys::kShortcutKey)) {
|
| - DictionaryValue* shortcut_dict;
|
| - if (!item_dict->GetDictionary(keys::kShortcutKey, &shortcut_dict)) {
|
| - return false;
|
| - }
|
| -
|
| - if (!shortcut_dict->GetString(keys::kKeyKey, &(shortcut_key.key))) {
|
| - return false;
|
| - }
|
| -
|
| - if (shortcut_dict->HasKey(keys::kAltKeyKey)) {
|
| - if (!item_dict->GetBoolean(keys::kAltKeyKey, &(shortcut_key.alt_key))) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - if (shortcut_dict->HasKey(keys::kCtrlKeyKey)) {
|
| - if (!shortcut_dict->GetBoolean(keys::kCtrlKeyKey,
|
| - &(shortcut_key.ctrl_key))) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - if (shortcut_dict->HasKey(keys::kShiftKeyKey)) {
|
| - if (!shortcut_dict->GetBoolean(keys::kShiftKeyKey,
|
| - &(shortcut_key.shift_key))) {
|
| - return false;
|
| - }
|
| - }
|
| - modified |= chromeos::InputMethodEngine::MENU_ITEM_MODIFIED_SHORTCUT_KEY;
|
| - }
|
| -
|
| - output->push_back(chromeos::InputMethodEngine::MenuItem());
|
| - output->back().id = id;
|
| - output->back().label = label;
|
| - output->back().style = style;
|
| - output->back().visible = visible;
|
| - output->back().enabled = enabled;
|
| - output->back().checked = checked;
|
| - output->back().icon = icon;
|
| - output->back().shortcut_key = shortcut_key;
|
| -
|
| - output->back().modified = modified;
|
| -
|
| - if (item_dict->HasKey(keys::kItemsKey)) {
|
| - ListValue* sub_list;
|
| - if (!item_dict->GetList(keys::kItemsKey, &sub_list)) {
|
| - return false;
|
| - }
|
| -
|
| - if (!ReadMenuItems(sub_list, &(output->back().children))) {
|
| - return false;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -}
|
| -
|
| -namespace events {
|
| -
|
| -const char kOnActivate[] = "experimental.input.ime.onActivate";
|
| -const char kOnDeactivated[] = "experimental.input.ime.onDeactivated";
|
| -const char kOnFocus[] = "experimental.input.ime.onFocus";
|
| -const char kOnBlur[] = "experimental.input.ime.onBlur";
|
| -const char kOnInputContextUpdate[] =
|
| - "experimental.input.ime.onInputContextUpdate";
|
| -const char kOnKeyEvent[] = "experimental.input.ime.onKeyEvent";
|
| -const char kOnCandidateClicked[] = "experimental.input.ime.onCandidateClicked";
|
| -const char kOnMenuItemActivated[] =
|
| - "experimental.input.ime.onMenuItemActivated";
|
| -
|
| -} // namespace events
|
| -
|
| -namespace chromeos {
|
| -class ImeObserver : public chromeos::InputMethodEngine::Observer {
|
| - public:
|
| - ImeObserver(Profile* profile, const std::string& extension_id,
|
| - const std::string& engine_id) :
|
| - profile_(profile),
|
| - extension_id_(extension_id),
|
| - engine_id_(engine_id) {
|
| - }
|
| -
|
| - virtual ~ImeObserver() {
|
| - }
|
| -
|
| - virtual void OnActivate(const std::string& engine_id) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - ListValue args;
|
| - args.Append(Value::CreateStringValue(engine_id));
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnActivate, json_args, profile_, GURL());
|
| - }
|
| -
|
| - virtual void OnDeactivated(const std::string& engine_id) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - ListValue args;
|
| - args.Append(Value::CreateStringValue(engine_id));
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnDeactivated, json_args, profile_, GURL());
|
| - }
|
| -
|
| - virtual void OnFocus(const InputMethodEngine::InputContext& context) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - DictionaryValue* dict = new DictionaryValue();
|
| - dict->SetInteger("contextID", context.id);
|
| - dict->SetString("type", context.type);
|
| -
|
| - ListValue args;
|
| - args.Append(dict);
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnFocus, json_args, profile_, GURL());
|
| - }
|
| -
|
| - virtual void OnBlur(int context_id) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - ListValue args;
|
| - args.Append(Value::CreateIntegerValue(context_id));
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnBlur, json_args, profile_, GURL());
|
| - }
|
| -
|
| - virtual void OnInputContextUpdate(
|
| - const InputMethodEngine::InputContext& context) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - DictionaryValue* dict = new DictionaryValue();
|
| - dict->SetInteger("contextID", context.id);
|
| - dict->SetString("type", context.type);
|
| -
|
| - ListValue args;
|
| - args.Append(dict);
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnInputContextUpdate, json_args, profile_,
|
| - GURL());
|
| - }
|
| -
|
| - virtual void OnKeyEvent(const std::string& engine_id,
|
| - const InputMethodEngine::KeyboardEvent& event,
|
| - chromeos::input_method::KeyEventHandle* key_data) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - std::string request_id =
|
| - InputImeExtensionEventRouter::GetInstance()->AddRequest(engine_id,
|
| - key_data);
|
| -
|
| - DictionaryValue* dict = new DictionaryValue();
|
| - dict->SetString("type", event.type);
|
| - dict->SetString("requestId", request_id);
|
| - dict->SetString("key", event.key);
|
| - dict->SetString("keyCode", event.key_code);
|
| - dict->SetBoolean("altKey", event.alt_key);
|
| - dict->SetBoolean("ctrlKey", event.ctrl_key);
|
| - dict->SetBoolean("shiftKey", event.shift_key);
|
| -
|
| - ListValue args;
|
| - args.Append(Value::CreateStringValue(engine_id));
|
| - args.Append(dict);
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnKeyEvent, json_args, profile_, GURL());
|
| - }
|
| -
|
| - virtual void OnCandidateClicked(
|
| - const std::string& engine_id,
|
| - int candidate_id,
|
| - chromeos::InputMethodEngine::MouseButtonEvent button) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - ListValue args;
|
| - args.Append(Value::CreateStringValue(engine_id));
|
| - args.Append(Value::CreateIntegerValue(candidate_id));
|
| - switch (button) {
|
| - case chromeos::InputMethodEngine::MOUSE_BUTTON_MIDDLE:
|
| - args.Append(Value::CreateStringValue("middle"));
|
| - break;
|
| -
|
| - case chromeos::InputMethodEngine::MOUSE_BUTTON_RIGHT:
|
| - args.Append(Value::CreateStringValue("right"));
|
| - break;
|
| -
|
| - case chromeos::InputMethodEngine::MOUSE_BUTTON_LEFT:
|
| - // Default to left.
|
| - default:
|
| - args.Append(Value::CreateStringValue("left"));
|
| - break;
|
| - }
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnCandidateClicked, json_args, profile_,
|
| - GURL());
|
| - }
|
| -
|
| - virtual void OnMenuItemActivated(const std::string& engine_id,
|
| - const std::string& menu_id) {
|
| - if (profile_ == NULL || extension_id_.empty())
|
| - return;
|
| -
|
| - ListValue args;
|
| - args.Append(Value::CreateStringValue(engine_id));
|
| - args.Append(Value::CreateStringValue(menu_id));
|
| -
|
| - std::string json_args;
|
| - base::JSONWriter::Write(&args, false, &json_args);
|
| - profile_->GetExtensionEventRouter()->DispatchEventToExtension(
|
| - extension_id_, events::kOnMenuItemActivated, json_args, profile_,
|
| - GURL());
|
| - }
|
| -
|
| - private:
|
| - Profile* profile_;
|
| - std::string extension_id_;
|
| - std::string engine_id_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ImeObserver);
|
| -};
|
| -} // namespace chromeos
|
| -
|
| -
|
| -InputImeExtensionEventRouter*
|
| -InputImeExtensionEventRouter::GetInstance() {
|
| - return Singleton<InputImeExtensionEventRouter>::get();
|
| -}
|
| -
|
| -InputImeExtensionEventRouter::InputImeExtensionEventRouter()
|
| - : next_request_id_(1) {
|
| -}
|
| -
|
| -InputImeExtensionEventRouter::~InputImeExtensionEventRouter() {
|
| -}
|
| -
|
| -void InputImeExtensionEventRouter::Init() {
|
| -}
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -bool InputImeExtensionEventRouter::RegisterIme(
|
| - Profile* profile,
|
| - const std::string& extension_id,
|
| - const Extension::InputComponentInfo& component) {
|
| - VLOG(1) << "RegisterIme: " << extension_id << " id: " << component.id;
|
| -
|
| - std::map<std::string, chromeos::InputMethodEngine*>& engine_map =
|
| - engines_[extension_id];
|
| -
|
| - std::map<std::string, chromeos::InputMethodEngine*>::iterator engine_ix =
|
| - engine_map.find(component.id);
|
| - if (engine_ix != engine_map.end()) {
|
| - return false;
|
| - }
|
| -
|
| - std::string error;
|
| - chromeos::ImeObserver* observer = new chromeos::ImeObserver(profile,
|
| - extension_id,
|
| - component.id);
|
| - chromeos::InputMethodEngine::KeyboardEvent shortcut_key;
|
| - shortcut_key.key = component.shortcut_keycode;
|
| - shortcut_key.key_code = component.shortcut_keycode;
|
| - shortcut_key.alt_key = component.shortcut_alt;
|
| - shortcut_key.ctrl_key = component.shortcut_ctrl;
|
| - shortcut_key.shift_key = component.shortcut_shift;
|
| -
|
| - std::vector<std::string> layouts;
|
| - layouts.assign(component.layouts.begin(), component.layouts.end());
|
| -
|
| - chromeos::InputMethodEngine* engine =
|
| - chromeos::InputMethodEngine::CreateEngine(
|
| - observer, component.name.c_str(), extension_id.c_str(),
|
| - component.id.c_str(), component.description.c_str(),
|
| - component.language.c_str(), layouts,
|
| - shortcut_key, &error);
|
| - if (!engine) {
|
| - delete observer;
|
| - LOG(ERROR) << "RegisterIme: " << error;
|
| - return false;
|
| - }
|
| -
|
| - engine_map[component.id] = engine;
|
| -
|
| - std::map<std::string, chromeos::ImeObserver*>& observer_list =
|
| - observers_[extension_id];
|
| -
|
| - observer_list[component.id] = observer;
|
| -
|
| - return true;
|
| -}
|
| -#endif
|
| -
|
| -chromeos::InputMethodEngine* InputImeExtensionEventRouter::GetEngine(
|
| - const std::string& extension_id, const std::string& engine_id) {
|
| - std::map<std::string,
|
| - std::map<std::string, chromeos::InputMethodEngine*> >::const_iterator
|
| - engine_list = engines_.find(extension_id);
|
| - if (engine_list != engines_.end()) {
|
| - std::map<std::string, chromeos::InputMethodEngine*>::const_iterator
|
| - engine_ix = engine_list->second.find(engine_id);
|
| - if (engine_ix != engine_list->second.end()) {
|
| - return engine_ix->second;
|
| - }
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -chromeos::InputMethodEngine* InputImeExtensionEventRouter::GetActiveEngine(
|
| - const std::string& extension_id) {
|
| - std::map<std::string,
|
| - std::map<std::string, chromeos::InputMethodEngine*> >::const_iterator
|
| - engine_list = engines_.find(extension_id);
|
| - if (engine_list != engines_.end()) {
|
| - std::map<std::string, chromeos::InputMethodEngine*>::const_iterator
|
| - engine_ix;
|
| - for (engine_ix = engine_list->second.begin();
|
| - engine_ix != engine_list->second.end();
|
| - ++engine_ix) {
|
| - if (engine_ix->second->IsActive()) {
|
| - return engine_ix->second;
|
| - }
|
| - }
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -void InputImeExtensionEventRouter::OnEventHandled(
|
| - const std::string& extension_id,
|
| - const std::string& request_id,
|
| - bool handled) {
|
| - RequestMap::iterator request = request_map_.find(request_id);
|
| - if (request == request_map_.end()) {
|
| - LOG(ERROR) << "Request ID not found: " << request_id;
|
| - return;
|
| - }
|
| -
|
| - std::string engine_id = request->second.first;
|
| - chromeos::input_method::KeyEventHandle* key_data = request->second.second;
|
| - request_map_.erase(request);
|
| -
|
| - chromeos::InputMethodEngine* engine = GetEngine(extension_id, engine_id);
|
| - if (!engine) {
|
| - LOG(ERROR) << "Engine does not exist: " << engine_id;
|
| - return;
|
| - }
|
| -
|
| - engine->KeyEventDone(key_data, handled);
|
| -}
|
| -
|
| -std::string InputImeExtensionEventRouter::AddRequest(
|
| - const std::string& engine_id,
|
| - chromeos::input_method::KeyEventHandle* key_data) {
|
| - std::string request_id = base::IntToString(next_request_id_);
|
| - ++next_request_id_;
|
| -
|
| - request_map_[request_id] = std::make_pair(engine_id, key_data);
|
| -
|
| - return request_id;
|
| -}
|
| -
|
| -bool SetCompositionFunction::RunImpl() {
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->
|
| - GetActiveEngine(extension_id());
|
| - if (!engine) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| -
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| - int context_id;
|
| - std::string text;
|
| - int selection_start;
|
| - int selection_end;
|
| - std::vector<chromeos::InputMethodEngine::SegmentInfo> segments;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey,
|
| - &context_id));
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kTextKey, &text));
|
| - if (args->HasKey(keys::kSelectionStartKey)) {
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kSelectionStartKey,
|
| - &selection_start));
|
| - } else {
|
| - selection_start = 0;
|
| - }
|
| - if (args->HasKey(keys::kSelectionEndKey)) {
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kSelectionEndKey,
|
| - &selection_end));
|
| - } else {
|
| - selection_end = 0;
|
| - }
|
| -
|
| - if (args->HasKey(keys::kSegmentsKey)) {
|
| - // TODO: Handle segments
|
| - ListValue* segment_list;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetList(keys::kSegmentsKey,
|
| - &segment_list));
|
| - int start;
|
| - int end;
|
| - std::string style;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kStartKey,
|
| - &start));
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kEndKey, &end));
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kStyleKey, &style));
|
| -
|
| - segments.push_back(chromeos::InputMethodEngine::SegmentInfo());
|
| - segments.back().start = start;
|
| - segments.back().end = end;
|
| - if (style == keys::kStyleUnderline) {
|
| - segments.back().style =
|
| - chromeos::InputMethodEngine::SEGMENT_STYLE_UNDERLINE;
|
| - } else if (style == keys::kStyleDoubleUnderline) {
|
| - segments.back().style =
|
| - chromeos::InputMethodEngine::SEGMENT_STYLE_DOUBLE_UNDERLINE;
|
| - }
|
| - }
|
| -
|
| - if (engine->SetComposition(context_id, text.c_str(), selection_start,
|
| - selection_end, segments, &error_)) {
|
| - result_.reset(Value::CreateBooleanValue(true));
|
| - } else {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool ClearCompositionFunction::RunImpl() {
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->
|
| - GetActiveEngine(extension_id());
|
| - if (!engine) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| -
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| - int context_id;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey,
|
| - &context_id));
|
| -
|
| - if (engine->ClearComposition(context_id, &error_)) {
|
| - result_.reset(Value::CreateBooleanValue(true));
|
| - } else {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool CommitTextFunction::RunImpl() {
|
| - // TODO(zork): Support committing when not active.
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->
|
| - GetActiveEngine(extension_id());
|
| - if (!engine) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| -
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| - int context_id;
|
| - std::string text;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey,
|
| - &context_id));
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kTextKey, &text));
|
| -
|
| - if (engine->CommitText(context_id, text.c_str(), &error_)) {
|
| - result_.reset(Value::CreateBooleanValue(true));
|
| - } else {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool SetCandidateWindowPropertiesFunction::RunImpl() {
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| -
|
| - std::string engine_id;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id));
|
| -
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->GetEngine(extension_id(),
|
| - engine_id);
|
| - if (!engine) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| -
|
| - DictionaryValue* properties;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetDictionary(keys::kPropertiesKey,
|
| - &properties));
|
| -
|
| - if (properties->HasKey(keys::kVisibleKey)) {
|
| - bool visible;
|
| - EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kVisibleKey,
|
| - &visible));
|
| - if (!engine->SetCandidateWindowVisible(visible, &error_)) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - if (properties->HasKey(keys::kCursorVisibleKey)) {
|
| - bool visible;
|
| - EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kCursorVisibleKey,
|
| - &visible));
|
| - engine->SetCandidateWindowCursorVisible(visible);
|
| - }
|
| -
|
| - if (properties->HasKey(keys::kVerticalKey)) {
|
| - bool vertical;
|
| - EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kVerticalKey,
|
| - &vertical));
|
| - engine->SetCandidateWindowVertical(vertical);
|
| - }
|
| -
|
| - if (properties->HasKey(keys::kPageSizeKey)) {
|
| - int page_size;
|
| - EXTENSION_FUNCTION_VALIDATE(properties->GetInteger(keys::kPageSizeKey,
|
| - &page_size));
|
| - engine->SetCandidateWindowPageSize(page_size);
|
| - }
|
| -
|
| - if (properties->HasKey(keys::kAuxiliaryTextKey)) {
|
| - std::string aux_text;
|
| - EXTENSION_FUNCTION_VALIDATE(properties->GetString(keys::kAuxiliaryTextKey,
|
| - &aux_text));
|
| - engine->SetCandidateWindowAuxText(aux_text.c_str());
|
| - }
|
| -
|
| - if (properties->HasKey(keys::kAuxiliaryTextVisibleKey)) {
|
| - bool visible;
|
| - EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(
|
| - keys::kAuxiliaryTextVisibleKey,
|
| - &visible));
|
| - engine->SetCandidateWindowAuxTextVisible(visible);
|
| - }
|
| -
|
| - result_.reset(Value::CreateBooleanValue(true));
|
| -
|
| - return true;
|
| -}
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -bool SetCandidatesFunction::ReadCandidates(
|
| - ListValue* candidates,
|
| - std::vector<chromeos::InputMethodEngine::Candidate>* output) {
|
| - for (size_t i = 0; i < candidates->GetSize(); ++i) {
|
| - DictionaryValue* candidate_dict;
|
| - EXTENSION_FUNCTION_VALIDATE(candidates->GetDictionary(i, &candidate_dict));
|
| -
|
| - std::string candidate;
|
| - int id;
|
| - std::string label;
|
| - std::string annotation;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(candidate_dict->GetString(keys::kCandidateKey,
|
| - &candidate));
|
| - EXTENSION_FUNCTION_VALIDATE(candidate_dict->GetInteger(keys::kIdKey, &id));
|
| -
|
| - if (candidate_dict->HasKey(keys::kLabelKey)) {
|
| - EXTENSION_FUNCTION_VALIDATE(candidate_dict->GetString(keys::kLabelKey,
|
| - &label));
|
| - }
|
| - if (candidate_dict->HasKey(keys::kAnnotationKey)) {
|
| - EXTENSION_FUNCTION_VALIDATE(candidate_dict->GetString(
|
| - keys::kAnnotationKey,
|
| - &annotation));
|
| - }
|
| -
|
| - output->push_back(chromeos::InputMethodEngine::Candidate());
|
| - output->back().value = candidate;
|
| - output->back().id = id;
|
| - output->back().label = label;
|
| - output->back().annotation = annotation;
|
| -
|
| - if (candidate_dict->HasKey(keys::kCandidatesKey)) {
|
| - ListValue* sub_list;
|
| - EXTENSION_FUNCTION_VALIDATE(candidate_dict->GetList(keys::kCandidatesKey,
|
| - &sub_list));
|
| - if (!ReadCandidates(sub_list, &(output->back().candidates))) {
|
| - error_ = kErrorBadCandidateList;
|
| - return false;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool SetCandidatesFunction::RunImpl() {
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->
|
| - GetActiveEngine(extension_id());
|
| - if (!engine) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| -
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| -
|
| - int context_id;
|
| - std::vector<chromeos::InputMethodEngine::Candidate> candidates;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey,
|
| - &context_id));
|
| -
|
| - ListValue* candidate_list;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetList(keys::kCandidatesKey,
|
| - &candidate_list));
|
| - if (!ReadCandidates(candidate_list, &candidates)) {
|
| - error_ = kErrorBadCandidateList;
|
| - return false;
|
| - }
|
| -
|
| - std::string error;
|
| - if (engine->SetCandidates(context_id, candidates, &error_)) {
|
| - result_.reset(Value::CreateBooleanValue(true));
|
| - } else {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool SetCursorPositionFunction::RunImpl() {
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->
|
| - GetActiveEngine(extension_id());
|
| - if (!engine) {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - return true;
|
| - }
|
| -
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| - int context_id;
|
| - int candidate_id;
|
| -
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey,
|
| - &context_id));
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kCandidateIdKey,
|
| - &candidate_id));
|
| -
|
| - if (engine->SetCursorPosition(context_id, candidate_id, &error_)) {
|
| - result_.reset(Value::CreateBooleanValue(true));
|
| - } else {
|
| - result_.reset(Value::CreateBooleanValue(false));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool SetMenuItemsFunction::RunImpl() {
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| -
|
| - std::string engine_id;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id));
|
| -
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->GetEngine(extension_id(),
|
| - engine_id);
|
| - if (!engine) {
|
| - error_ = kErrorEngineNotAvailable;
|
| - return false;
|
| - }
|
| -
|
| - ListValue* items;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetList(keys::kItemsKey, &items));
|
| -
|
| - std::vector<chromeos::InputMethodEngine::MenuItem> menu_items;
|
| - EXTENSION_FUNCTION_VALIDATE(ReadMenuItems(items, &menu_items));
|
| -
|
| - if (!engine->SetMenuItems(menu_items)) {
|
| - error_ = kErrorSetMenuItemsFail;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool UpdateMenuItemsFunction::RunImpl() {
|
| - DictionaryValue* args;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
|
| -
|
| - std::string engine_id;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id));
|
| -
|
| - chromeos::InputMethodEngine* engine =
|
| - InputImeExtensionEventRouter::GetInstance()->GetEngine(extension_id(),
|
| - engine_id);
|
| - if (!engine) {
|
| - error_ = kErrorEngineNotAvailable;
|
| - return false;
|
| - }
|
| -
|
| - ListValue* items;
|
| - EXTENSION_FUNCTION_VALIDATE(args->GetList(keys::kItemsKey, &items));
|
| -
|
| - std::vector<chromeos::InputMethodEngine::MenuItem> menu_items;
|
| - EXTENSION_FUNCTION_VALIDATE(ReadMenuItems(items, &menu_items));
|
| -
|
| - if (!engine->UpdateMenuItems(menu_items)) {
|
| - error_ = kErrorUpdateMenuItemsFail;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool InputEventHandled::RunImpl() {
|
| - std::string request_id_str;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &request_id_str));
|
| -
|
| - bool handled = false;
|
| - EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(1, &handled));
|
| -
|
| - InputImeExtensionEventRouter::GetInstance()->OnEventHandled(
|
| - extension_id(), request_id_str, handled);
|
| -
|
| - return true;
|
| -}
|
| -#endif
|
|
|