diff options
author | azurewei <azurewei@chromium.org> | 2015-11-06 00:30:02 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-06 08:30:49 +0000 |
commit | 5fcf9a3cc3ab65c9d362d7a39385694ab914ee99 (patch) | |
tree | 9496158e5a30caa6e9b98c60feebff5a77f55dd5 /chrome/browser/chromeos/input_method | |
parent | d00698770563ec58c60c8e2fd8930e1e9ac06e07 (diff) | |
download | chromium_src-5fcf9a3cc3ab65c9d362d7a39385694ab914ee99.zip chromium_src-5fcf9a3cc3ab65c9d362d7a39385694ab914ee99.tar.gz chromium_src-5fcf9a3cc3ab65c9d362d7a39385694ab914ee99.tar.bz2 |
Make ChromeOS IME APIs platform-independent, step 2: Combine class chromeos::InputMethodInterface with ui::IMEEngineHandlerInterface.
See the step 1 in: https://codereview.chromium.org/1403543004/
As class chromeos::InputMethodEngineInterface and ui::IMEEngineHandlerInterface both are virtual classes and implemented by chromeos::input_method::InputMethodEngine. We can combine these two classes as one for a substantially cleaner code structure.
Main changes:
1. Delete class chromeos::InputMethodEngineInterface and remove all its virtual functions to class ui::IMEEngineHandlerInterface.
2. Add new class ui::IMEEngineObserver (original class chromeos::InputMethodEngineInterface::Observer).
3. Combine duplicated struct InputMethodEngineInterface::InputContext with IMEEngineHandlerInterface::InputContext, and add
ConvertInputContextXxxx functions in IMEObserver for information transformation between the browser and extension.
4. Combine duplicated typedef KeyEventHandle and KeyEventDoneCallback, and store copy of KeyEventDoneCallback in RequestMap rather than allocate on heap.
5. Update all related files including and namespace using.
BUG=517773
TEST=No compiling errors.
Review URL: https://codereview.chromium.org/1419593002
Cr-Commit-Position: refs/heads/master@{#358285}
Diffstat (limited to 'chrome/browser/chromeos/input_method')
13 files changed, 114 insertions, 474 deletions
diff --git a/chrome/browser/chromeos/input_method/input_method_engine.cc b/chrome/browser/chromeos/input_method/input_method_engine.cc index 66b7508..e417e36 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine.cc @@ -53,8 +53,8 @@ void UpdateComposition(const ui::CompositionText& composition_text, ui::IMEInputContextHandlerInterface* input_context = ui::IMEBridge::Get()->GetInputContextHandler(); if (input_context) - input_context->UpdateCompositionText( - composition_text, cursor_pos, is_visible); + input_context->UpdateCompositionText(composition_text, cursor_pos, + is_visible); } // Returns the length of characters of a UTF-8 string with unknown string @@ -82,9 +82,8 @@ std::string GetKeyFromEvent(const ui::KeyEvent& event) { return code.substr(5); if (code == "Escape") return "Esc"; - if (code == "Backspace" || code == "Tab" || - code == "Enter" || code == "CapsLock" || - code == "Power") + if (code == "Backspace" || code == "Tab" || code == "Enter" || + code == "CapsLock" || code == "Power") return code; // Cases for media keys. switch (event.key_code()) { @@ -124,8 +123,7 @@ std::string GetKeyFromEvent(const ui::KeyEvent& event) { uint16 ch = 0; // Ctrl+? cases, gets key value for Ctrl is not down. if (event.flags() & ui::EF_CONTROL_DOWN) { - ui::KeyEvent event_no_ctrl(event.type(), - event.key_code(), + ui::KeyEvent event_no_ctrl(event.type(), event.key_code(), event.flags() ^ ui::EF_CONTROL_DOWN); ch = event_no_ctrl.GetCharacter(); } else { @@ -167,13 +165,11 @@ InputMethodEngine::InputMethodEngine() sent_key_event_(NULL), profile_(NULL) {} -InputMethodEngine::~InputMethodEngine() { -} +InputMethodEngine::~InputMethodEngine() {} -void InputMethodEngine::Initialize( - scoped_ptr<InputMethodEngineInterface::Observer> observer, - const char* extension_id, - Profile* profile) { +void InputMethodEngine::Initialize(scoped_ptr<ui::IMEEngineObserver> observer, + const char* extension_id, + Profile* profile) { DCHECK(observer) << "Observer must not be null."; // TODO(komatsu): It is probably better to set observer out of Initialize. @@ -240,8 +236,7 @@ bool InputMethodEngine::SetComposition( return true; } -bool InputMethodEngine::ClearComposition(int context_id, - std::string* error) { +bool InputMethodEngine::ClearComposition(int context_id, std::string* error) { if (!IsActive()) { *error = kErrorNotActive; return false; @@ -257,7 +252,8 @@ bool InputMethodEngine::ClearComposition(int context_id, return true; } -bool InputMethodEngine::CommitText(int context_id, const char* text, +bool InputMethodEngine::CommitText(int context_id, + const char* text, std::string* error) { if (!IsActive()) { // TODO: Commit the text anyways. @@ -305,9 +301,9 @@ bool InputMethodEngine::SendKeyEvents( key_code = ui::DomKeycodeToKeyboardCode(event.code); int flags = ui::EF_NONE; - flags |= event.alt_key ? ui::EF_ALT_DOWN : ui::EF_NONE; - flags |= event.ctrl_key ? ui::EF_CONTROL_DOWN : ui::EF_NONE; - flags |= event.shift_key ? ui::EF_SHIFT_DOWN : ui::EF_NONE; + flags |= event.alt_key ? ui::EF_ALT_DOWN : ui::EF_NONE; + flags |= event.ctrl_key ? ui::EF_CONTROL_DOWN : ui::EF_NONE; + flags |= event.shift_key ? ui::EF_SHIFT_DOWN : ui::EF_NONE; flags |= event.caps_lock ? ui::EF_CAPS_LOCK_DOWN : ui::EF_NONE; ui::KeyEvent ui_event( @@ -332,7 +328,7 @@ InputMethodEngine::GetCandidateWindowProperty() const { void InputMethodEngine::SetCandidateWindowProperty( const CandidateWindowProperty& property) { - // Type conversion from InputMethodEngineInterface::CandidateWindowProperty to + // Type conversion from IMEEngineHandlerInterface::CandidateWindowProperty to // CandidateWindow::CandidateWindowProperty defined in chromeos/ime/. ui::CandidateWindow::CandidateWindowProperty dest_property; dest_property.page_size = property.page_size; @@ -412,7 +408,8 @@ bool InputMethodEngine::SetCandidates( return true; } -bool InputMethodEngine::SetCursorPosition(int context_id, int candidate_id, +bool InputMethodEngine::SetCursorPosition(int context_id, + int candidate_id, std::string* error) { if (!IsActive()) { *error = kErrorNotActive; @@ -455,9 +452,8 @@ bool InputMethodEngine::UpdateMenuItems( menu_item_list.push_back(property); } - ui::ime::InputMethodMenuManager::GetInstance()-> - SetCurrentInputMethodMenuItemList( - menu_item_list); + ui::ime::InputMethodMenuManager::GetInstance() + ->SetCurrentInputMethodMenuItemList(menu_item_list); return true; } @@ -490,7 +486,7 @@ bool InputMethodEngine::DeleteSurroundingText(int context_id, void InputMethodEngine::HideInputView() { keyboard::KeyboardController* keyboard_controller = - keyboard::KeyboardController::GetInstance(); + keyboard::KeyboardController::GetInstance(); if (keyboard_controller) { keyboard_controller->HideKeyboard( keyboard::KeyboardController::HIDE_REASON_MANUAL); @@ -527,40 +523,9 @@ void InputMethodEngine::FocusIn( context_id_ = next_context_id_; ++next_context_id_; - InputMethodEngineInterface::InputContext context; - context.id = context_id_; - switch (current_input_type_) { - case ui::TEXT_INPUT_TYPE_SEARCH: - context.type = "search"; - break; - case ui::TEXT_INPUT_TYPE_TELEPHONE: - context.type = "tel"; - break; - case ui::TEXT_INPUT_TYPE_URL: - context.type = "url"; - break; - case ui::TEXT_INPUT_TYPE_EMAIL: - context.type = "email"; - break; - case ui::TEXT_INPUT_TYPE_NUMBER: - context.type = "number"; - break; - case ui::TEXT_INPUT_TYPE_PASSWORD: - context.type = "password"; - break; - default: - context.type = "text"; - break; - } - - context.auto_correct = - !(input_context.flags & ui::TEXT_INPUT_FLAG_AUTOCORRECT_OFF); - context.auto_complete = - !(input_context.flags & ui::TEXT_INPUT_FLAG_AUTOCOMPLETE_OFF); - context.spell_check = - !(input_context.flags & ui::TEXT_INPUT_FLAG_SPELLCHECK_OFF); - - observer_->OnFocus(context); + observer_->OnFocus(ui::IMEEngineHandlerInterface::InputContext( + context_id_, input_context.type, input_context.mode, + input_context.flags)); } void InputMethodEngine::FocusOut() { @@ -616,15 +581,11 @@ bool InputMethodEngine::IsInterestedInKeyEvent() const { return observer_->IsInterestedInKeyEvent(); } -void InputMethodEngine::ProcessKeyEvent( - const ui::KeyEvent& key_event, - const KeyEventDoneCallback& callback) { +void InputMethodEngine::ProcessKeyEvent(const ui::KeyEvent& key_event, + KeyEventDoneCallback& callback) { if (!CheckProfile()) return; - KeyEventDoneCallback* handler = new KeyEventDoneCallback(); - *handler = callback; - KeyboardEvent ext_event; GetExtensionKeyboardEventFromKeyEvent(key_event, &ext_event); @@ -635,10 +596,7 @@ void InputMethodEngine::ProcessKeyEvent( if (&key_event == sent_key_event_) ext_event.extension_id = extension_id_; - observer_->OnKeyEvent( - active_component_id_, - ext_event, - reinterpret_cast<input_method::KeyEventHandle*>(handler)); + observer_->OnKeyEvent(active_component_id_, ext_event, callback); } void InputMethodEngine::CandidateClicked(uint32 index) { @@ -649,8 +607,8 @@ void InputMethodEngine::CandidateClicked(uint32 index) { } // Only left button click is supported at this moment. - observer_->OnCandidateClicked( - active_component_id_, candidate_ids_.at(index), MOUSE_BUTTON_LEFT); + observer_->OnCandidateClicked(active_component_id_, candidate_ids_.at(index), + ui::IMEEngineObserver::MOUSE_BUTTON_LEFT); } void InputMethodEngine::SetSurroundingText(const std::string& text, diff --git a/chrome/browser/chromeos/input_method/input_method_engine.h b/chrome/browser/chromeos/input_method/input_method_engine.h index 9977042..72e9461 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine.h +++ b/chrome/browser/chromeos/input_method/input_method_engine.h @@ -9,8 +9,9 @@ #include <string> #include <vector> #include "base/time/time.h" -#include "chrome/browser/chromeos/input_method/input_method_engine_interface.h" #include "ui/base/ime/chromeos/input_method_descriptor.h" +#include "ui/base/ime/ime_engine_handler_interface.h" +#include "ui/base/ime/ime_engine_observer.h" #include "url/gurl.h" class Profile; @@ -18,6 +19,8 @@ class Profile; namespace ui { class CandidateWindow; struct CompositionText; +class IMEEngineHandlerInterface; +class IMEEngineObserver; class KeyEvent; namespace ime { @@ -27,21 +30,17 @@ struct InputMethodMenuItem; namespace chromeos { -namespace input_method { -struct KeyEventHandle; -} // namespace input_method - -class InputMethodEngine : public InputMethodEngineInterface { +class InputMethodEngine : public ui::IMEEngineHandlerInterface { public: InputMethodEngine(); ~InputMethodEngine() override; - void Initialize(scoped_ptr<InputMethodEngineInterface::Observer> observer, + void Initialize(scoped_ptr<ui::IMEEngineObserver> observer, const char* extension_id, Profile* profile); - // InputMethodEngineInterface overrides. + // IMEEngineHandlerInterface overrides. const std::string& GetActiveComponentId() const override; bool SetComposition(int context_id, const char* text, @@ -83,7 +82,7 @@ class InputMethodEngine : public InputMethodEngineInterface { void PropertyActivate(const std::string& property_name) override; void Reset() override; void ProcessKeyEvent(const ui::KeyEvent& key_event, - const KeyEventDoneCallback& callback) override; + KeyEventDoneCallback& callback) override; void CandidateClicked(uint32 index) override; void SetSurroundingText(const std::string& text, uint32 cursor_pos, @@ -120,7 +119,7 @@ class InputMethodEngine : public InputMethodEngineInterface { std::string extension_id_; // The observer object recieving events for this IME. - scoped_ptr<InputMethodEngineInterface::Observer> observer_; + scoped_ptr<ui::IMEEngineObserver> observer_; // The current preedit text, and it's cursor position. scoped_ptr<ui::CompositionText> composition_text_; diff --git a/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc b/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc index d242d93..fc0d68c 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc @@ -185,9 +185,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, KeyEventDoneCallback callback(false); // EchoBackIME doesn't consume keys. ExtensionTestMessageListener keyevent_listener("onKeyEvent", false); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); ASSERT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -269,9 +269,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::KeyEvent key_event( ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -287,9 +287,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -305,9 +305,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -323,9 +323,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_SHIFT_DOWN); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -341,9 +341,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CAPS_LOCK_DOWN); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -359,9 +359,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -377,9 +377,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); @@ -425,9 +425,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, kMediaKeyCases[i].keycode, ui::KeycodeConverter::CodeStringToDomCode(kMediaKeyCases[i].code), ui::EF_NONE); - engine_handler->ProcessKeyEvent(key_event, - base::Bind(&KeyEventDoneCallback::Run, - base::Unretained(&callback))); + ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = + base::Bind(&KeyEventDoneCallback::Run, base::Unretained(&callback)); + engine_handler->ProcessKeyEvent(key_event, keyevent_callback); ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); EXPECT_TRUE(keyevent_listener.was_satisfied()); callback.WaitUntilCalled(); diff --git a/chrome/browser/chromeos/input_method/input_method_engine_interface.cc b/chrome/browser/chromeos/input_method/input_method_engine_interface.cc deleted file mode 100644 index 102ef15..0000000 --- a/chrome/browser/chromeos/input_method/input_method_engine_interface.cc +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 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/chromeos/input_method/input_method_engine_interface.h" - -namespace chromeos { - -InputMethodEngineInterface::KeyboardEvent::KeyboardEvent() - : alt_key(false), - ctrl_key(false), - shift_key(false), - caps_lock(false) { -} - -InputMethodEngineInterface::KeyboardEvent::~KeyboardEvent() { -} - -InputMethodEngineInterface::MenuItem::MenuItem() { -} - -InputMethodEngineInterface::MenuItem::~MenuItem() { -} - -InputMethodEngineInterface::Candidate::Candidate() { -} - -InputMethodEngineInterface::Candidate::~Candidate() { -} - -namespace { -// The default entry number of a page in CandidateWindowProperty. -const int kDefaultPageSize = 9; -} // namespace - -// When the default values are changed, please modify -// CandidateWindow::CandidateWindowProperty defined in chromeos/ime/ too. -InputMethodEngineInterface::CandidateWindowProperty::CandidateWindowProperty() - : page_size(kDefaultPageSize), - is_cursor_visible(true), - is_vertical(false), - show_window_at_composition(false) { -} - -InputMethodEngineInterface::CandidateWindowProperty::~CandidateWindowProperty() -{ -} - -InputMethodEngineInterface::Observer::~Observer() { -} -} // namespace chromeos diff --git a/chrome/browser/chromeos/input_method/input_method_engine_interface.h b/chrome/browser/chromeos/input_method/input_method_engine_interface.h deleted file mode 100644 index 5120831..0000000 --- a/chrome/browser/chromeos/input_method/input_method_engine_interface.h +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 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. - -#ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_ -#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_ - -#include <string> -#include <vector> - -#include "ui/base/ime/ime_engine_handler_interface.h" - -class GURL; - -namespace chromeos { - -namespace input_method { -class InputMethodDescriptor; -struct KeyEventHandle; -} // namespace input_method - -// InputMethodEngine is used to translate from the Chrome IME API to the native -// API. -class InputMethodEngineInterface : public ui::IMEEngineHandlerInterface { - public: - struct KeyboardEvent { - KeyboardEvent(); - virtual ~KeyboardEvent(); - - std::string type; - std::string key; - std::string code; - int key_code; // only used by on-screen keyboards. - std::string extension_id; - bool alt_key; - bool ctrl_key; - bool shift_key; - bool caps_lock; - }; - - enum { - MENU_ITEM_MODIFIED_LABEL = 0x0001, - MENU_ITEM_MODIFIED_STYLE = 0x0002, - MENU_ITEM_MODIFIED_VISIBLE = 0x0004, - MENU_ITEM_MODIFIED_ENABLED = 0x0008, - MENU_ITEM_MODIFIED_CHECKED = 0x0010, - MENU_ITEM_MODIFIED_ICON = 0x0020, - }; - - enum MenuItemStyle { - MENU_ITEM_STYLE_NONE, - MENU_ITEM_STYLE_CHECK, - MENU_ITEM_STYLE_RADIO, - MENU_ITEM_STYLE_SEPARATOR, - }; - - enum MouseButtonEvent { - MOUSE_BUTTON_LEFT, - MOUSE_BUTTON_RIGHT, - MOUSE_BUTTON_MIDDLE, - }; - - enum SegmentStyle { - SEGMENT_STYLE_UNDERLINE, - SEGMENT_STYLE_DOUBLE_UNDERLINE, - SEGMENT_STYLE_NO_UNDERLINE, - }; - - enum CandidateWindowPosition { - WINDOW_POS_CURSOR, - WINDOW_POS_COMPOSITTION, - }; - - struct MenuItem { - MenuItem(); - virtual ~MenuItem(); - - std::string id; - std::string label; - MenuItemStyle style; - bool visible; - bool enabled; - bool checked; - - unsigned int modified; - std::vector<MenuItem> children; - }; - - struct InputContext { - int id; - std::string type; - bool auto_correct; - bool auto_complete; - bool spell_check; - }; - - struct UsageEntry { - std::string title; - std::string body; - }; - - struct Candidate { - Candidate(); - virtual ~Candidate(); - - std::string value; - int id; - std::string label; - std::string annotation; - UsageEntry usage; - std::vector<Candidate> candidates; - }; - - struct CandidateWindowProperty { - CandidateWindowProperty(); - virtual ~CandidateWindowProperty(); - int page_size; - bool is_cursor_visible; - bool is_vertical; - bool show_window_at_composition; - - // Auxiliary text is typically displayed in the footer of the candidate - // window. - std::string auxiliary_text; - bool is_auxiliary_text_visible; - }; - - struct SegmentInfo { - int start; - int end; - SegmentStyle style; - }; - - class Observer { - public: - virtual ~Observer(); - - // Called when the IME becomes the active IME. - virtual void OnActivate(const std::string& engine_id) = 0; - - // Called when the IME is no longer active. - virtual void OnDeactivated(const std::string& engine_id) = 0; - - // Called when a text field gains focus, and will be sending key events. - virtual void OnFocus(const InputContext& context) = 0; - - // Called when a text field loses focus, and will no longer generate events. - virtual void OnBlur(int context_id) = 0; - - // Called when an InputContext's properties change while it is focused. - virtual void OnInputContextUpdate(const InputContext& context) = 0; - - // Returns whether the observer is interested in key events. - virtual bool IsInterestedInKeyEvent() const = 0; - - // Called when the user pressed a key with a text field focused. - virtual void OnKeyEvent(const std::string& engine_id, - const KeyboardEvent& event, - input_method::KeyEventHandle* key_data) = 0; - - // Called when the user clicks on an item in the candidate list. - virtual void OnCandidateClicked(const std::string& engine_id, - int candidate_id, - MouseButtonEvent button) = 0; - - // Called when a menu item for this IME is interacted with. - virtual void OnMenuItemActivated(const std::string& engine_id, - const std::string& menu_id) = 0; - - // Called when a surrounding text is changed. - virtual void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, - int cursor_pos, - int anchor_pos, - int offset_pos) = 0; - - // Called when composition bounds are changed. - virtual void OnCompositionBoundsChanged( - const std::vector<gfx::Rect>& bounds) = 0; - - // Called when Chrome terminates on-going text input session. - virtual void OnReset(const std::string& engine_id) = 0; - }; - - ~InputMethodEngineInterface() override {} - - // Set the current composition and associated properties. - virtual bool SetComposition(int context_id, - const char* text, - int selection_start, - int selection_end, - int cursor, - const std::vector<SegmentInfo>& segments, - std::string* error) = 0; - - // Clear the current composition. - virtual bool ClearComposition(int context_id, std::string* error) = 0; - - // Commit the specified text to the specified context. Fails if the context - // is not focused. - virtual bool CommitText(int context_id, const char* text, - std::string* error) = 0; - - // Send the sequence of key events. - virtual bool SendKeyEvents(int context_id, - const std::vector<KeyboardEvent>& events) = 0; - - // This function returns the current property of the candidate window. - // The caller can use the returned value as the default property and - // modify some of specified items. - virtual const CandidateWindowProperty& - GetCandidateWindowProperty() const = 0; - - // Change the property of the candidate window and repaint the candidate - // window widget. - virtual void SetCandidateWindowProperty( - const CandidateWindowProperty& property) = 0; - - // Show or hide the candidate window. - virtual bool SetCandidateWindowVisible(bool visible, std::string* error) = 0; - - // Set the list of entries displayed in the candidate window. - virtual bool SetCandidates(int context_id, - const std::vector<Candidate>& candidates, - std::string* error) = 0; - - // Set the position of the cursor in the candidate window. - virtual bool SetCursorPosition(int context_id, int candidate_id, - std::string* error) = 0; - - // Set the list of items that appears in the language menu when this IME is - // active. - virtual bool SetMenuItems(const std::vector<MenuItem>& items) = 0; - - // Update the state of the menu items. - virtual bool UpdateMenuItems(const std::vector<MenuItem>& items) = 0; - - // Returns true if this IME is active, false if not. - virtual bool IsActive() const = 0; - - // Returns the current active input_component id. - virtual const std::string& GetActiveComponentId() const = 0; - - // Deletes |number_of_chars| unicode characters as the basis of |offset| from - // the surrounding text. The |offset| is relative position based on current - // caret. - // NOTE: Currently we are falling back to backspace forwarding workaround, - // because delete_surrounding_text is not supported in Chrome. So this - // function is restricted for only preceding text. - // TODO(nona): Support full spec delete surrounding text. - virtual bool DeleteSurroundingText(int context_id, - int offset, - size_t number_of_chars, - std::string* error) = 0; - - // Hides the input view window (from API call). - virtual void HideInputView() = 0; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_ diff --git a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc index 75b919c..51127ed 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc @@ -9,7 +9,6 @@ #include "base/test/histogram_tester.h" #include "chrome/browser/chromeos/input_method/input_method_configuration.h" #include "chrome/browser/chromeos/input_method/input_method_engine.h" -#include "chrome/browser/chromeos/input_method/input_method_engine_interface.h" #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" #include "chrome/browser/profiles/profile_manager.h" #include "testing/gtest/include/gtest/gtest.h" @@ -17,6 +16,8 @@ #include "ui/base/ime/chromeos/mock_component_extension_ime_manager_delegate.h" #include "ui/base/ime/chromeos/mock_ime_input_context_handler.h" #include "ui/base/ime/ime_bridge.h" +#include "ui/base/ime/ime_engine_handler_interface.h" +#include "ui/base/ime/ime_engine_observer.h" #include "ui/base/ime/text_input_flags.h" #include "ui/gfx/geometry/rect.h" @@ -65,7 +66,7 @@ void InitInputMethod() { InitializeForTesting(manager); } -class TestObserver : public InputMethodEngineInterface::Observer { +class TestObserver : public ui::IMEEngineObserver { public: TestObserver() : calls_bitmap_(NONE) {} ~TestObserver() override {} @@ -77,20 +78,20 @@ class TestObserver : public InputMethodEngineInterface::Observer { calls_bitmap_ |= DEACTIVATED; } void OnFocus( - const InputMethodEngineInterface::InputContext& context) override { + const ui::IMEEngineHandlerInterface::InputContext& context) override { calls_bitmap_ |= ONFOCUS; } void OnBlur(int context_id) override { calls_bitmap_ |= ONBLUR; } bool IsInterestedInKeyEvent() const override { return true; } - void OnKeyEvent(const std::string& engine_id, - const InputMethodEngineInterface::KeyboardEvent& event, - input_method::KeyEventHandle* key_data) override {} - void OnInputContextUpdate( - const InputMethodEngineInterface::InputContext& context) override {} - void OnCandidateClicked( + void OnKeyEvent( const std::string& engine_id, - int candidate_id, - InputMethodEngineInterface::MouseButtonEvent button) override {} + const ui::IMEEngineHandlerInterface::KeyboardEvent& event, + ui::IMEEngineHandlerInterface::KeyEventDoneCallback& key_data) override {} + void OnInputContextUpdate( + const ui::IMEEngineHandlerInterface::InputContext& context) override {} + void OnCandidateClicked(const std::string& engine_id, + int candidate_id, + MouseButtonEvent button) override {} void OnMenuItemActivated(const std::string& engine_id, const std::string& menu_id) override {} void OnSurroundingTextChanged(const std::string& engine_id, @@ -116,7 +117,7 @@ class TestObserver : public InputMethodEngineInterface::Observer { DISALLOW_COPY_AND_ASSIGN(TestObserver); }; -class InputMethodEngineTest : public testing::Test { +class InputMethodEngineTest : public testing::Test { public: InputMethodEngineTest() : observer_(NULL), input_view_("inputview.html") { languages_.push_back("en-US"); @@ -137,7 +138,7 @@ class InputMethodEngineTest : public testing::Test { void CreateEngine(bool whitelisted) { engine_.reset(new InputMethodEngine()); observer_ = new TestObserver(); - scoped_ptr<InputMethodEngineInterface::Observer> observer_ptr(observer_); + scoped_ptr<ui::IMEEngineObserver> observer_ptr(observer_); engine_->Initialize(observer_ptr.Pass(), whitelisted ? kTestExtensionId : kTestExtensionId2, ProfileManager::GetActiveUserProfile()); @@ -240,7 +241,7 @@ TEST_F(InputMethodEngineTest, TestHistograms) { CreateEngine(true); FocusIn(ui::TEXT_INPUT_TYPE_TEXT); engine_->Enable(kTestImeComponentId); - std::vector<InputMethodEngineInterface::SegmentInfo> segments; + std::vector<ui::IMEEngineHandlerInterface::SegmentInfo> segments; int context = engine_->GetCotextIdForTesting(); std::string error; base::HistogramTester histograms; @@ -264,8 +265,7 @@ TEST_F(InputMethodEngineTest, TestCompositionBoundsChanged) { std::vector<gfx::Rect> rects; rects.push_back(gfx::Rect()); engine_->SetCompositionBounds(rects); - EXPECT_EQ(ONCOMPOSITIONBOUNDSCHANGED, - observer_->GetCallsBitmapAndReset()); + EXPECT_EQ(ONCOMPOSITIONBOUNDSCHANGED, observer_->GetCallsBitmapAndReset()); } } // namespace input_method diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc index 4eaf669..7f75d6b 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc @@ -23,7 +23,6 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/input_method/candidate_window_controller.h" #include "chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.h" -#include "chrome/browser/chromeos/input_method/input_method_engine.h" #include "chrome/browser/chromeos/input_method/input_method_switch_recorder.h" #include "chrome/browser/chromeos/language_preferences.h" #include "chrome/browser/chromeos/login/session/user_session_manager.h" @@ -446,7 +445,7 @@ bool InputMethodManagerImpl::StateImpl::MethodAwaitsExtensionLoad( void InputMethodManagerImpl::StateImpl::AddInputMethodExtension( const std::string& extension_id, const InputMethodDescriptors& descriptors, - InputMethodEngineInterface* engine) { + ui::IMEEngineHandlerInterface* engine) { if (manager_->ui_session_ == STATE_TERMINATING) return; @@ -975,7 +974,7 @@ void InputMethodManagerImpl::ChangeInputMethodInternal( if (notify_menu) { // Clear property list. Property list would be updated by - // extension IMEs via InputMethodEngine::(Set|Update)MenuItems. + // extension IMEs via IMEEngineHandlerInterface::(Set|Update)MenuItems. // If the current input method is a keyboard layout, empty // properties are sufficient. const ui::ime::InputMethodMenuItemList empty_menu_item_list; diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.h b/chrome/browser/chromeos/input_method/input_method_manager_impl.h index 7b11c0d..8860afc 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.h +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.h @@ -17,6 +17,11 @@ #include "chrome/browser/profiles/profile.h" #include "ui/base/ime/chromeos/input_method_manager.h" #include "ui/base/ime/chromeos/input_method_whitelist.h" +#include "ui/base/ime/ime_engine_handler_interface.h" + +namespace ui { +class IMEEngineHandlerInterface; +} // namespace ui namespace chromeos { class ComponentExtensionIMEManager; @@ -71,9 +76,10 @@ class InputMethodManagerImpl : public InputMethodManager, // InputMethodManager::State overrides. scoped_refptr<InputMethodManager::State> Clone() const override; - void AddInputMethodExtension(const std::string& extension_id, - const InputMethodDescriptors& descriptors, - InputMethodEngineInterface* instance) override; + void AddInputMethodExtension( + const std::string& extension_id, + const InputMethodDescriptors& descriptors, + ui::IMEEngineHandlerInterface* instance) override; void RemoveInputMethodExtension(const std::string& extension_id) override; void ChangeInputMethod(const std::string& input_method_id, bool show_message) override; @@ -254,7 +260,7 @@ class InputMethodManagerImpl : public InputMethodManager, bool enable_extension_loading_; // The engine map from extension_id to an engine. - typedef std::map<std::string, InputMethodEngineInterface*> EngineMap; + typedef std::map<std::string, ui::IMEEngineHandlerInterface*> EngineMap; typedef std::map<Profile*, EngineMap, ProfileCompare> ProfileEngineMap; ProfileEngineMap engine_map_; diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc index 2b021b5..a91a3fe 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc @@ -14,7 +14,6 @@ #include "base/memory/scoped_ptr.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" -#include "chrome/browser/chromeos/input_method/input_method_engine_interface.h" #include "chrome/browser/chromeos/input_method/mock_candidate_window_controller.h" #include "chrome/browser/chromeos/input_method/mock_input_method_engine.h" #include "chrome/browser/profiles/profile_manager.h" diff --git a/chrome/browser/chromeos/input_method/mock_input_method_engine.cc b/chrome/browser/chromeos/input_method/mock_input_method_engine.cc index 852a095..203527f 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_engine.cc +++ b/chrome/browser/chromeos/input_method/mock_input_method_engine.cc @@ -1,3 +1,4 @@ + // Copyright 2014 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. @@ -28,7 +29,7 @@ bool MockInputMethodEngine::SetComposition( } bool MockInputMethodEngine::ClearComposition(int context_id, - std::string* error) { + std::string* error) { return true; } @@ -50,8 +51,7 @@ MockInputMethodEngine::GetCandidateWindowProperty() const { } void MockInputMethodEngine::SetCandidateWindowProperty( - const CandidateWindowProperty& property) { -} + const CandidateWindowProperty& property) {} bool MockInputMethodEngine::SetCandidateWindowVisible(bool visible, std::string* error) { @@ -91,15 +91,12 @@ bool MockInputMethodEngine::DeleteSurroundingText(int context_id, return true; } -void MockInputMethodEngine::HideInputView() { -} +void MockInputMethodEngine::HideInputView() {} void MockInputMethodEngine::FocusIn( - const IMEEngineHandlerInterface::InputContext& input_context) { -} + const IMEEngineHandlerInterface::InputContext& input_context) {} -void MockInputMethodEngine::FocusOut() { -} +void MockInputMethodEngine::FocusOut() {} void MockInputMethodEngine::Enable(const std::string& component_id) { active_component_id_ = component_id; @@ -113,20 +110,16 @@ void MockInputMethodEngine::PropertyActivate(const std::string& property_name) { last_activated_property_ = property_name; } -void MockInputMethodEngine::Reset() { -} +void MockInputMethodEngine::Reset() {} bool MockInputMethodEngine::IsInterestedInKeyEvent() const { return true; } -void MockInputMethodEngine::ProcessKeyEvent( - const ui::KeyEvent& key_event, - const KeyEventDoneCallback& callback) { -} +void MockInputMethodEngine::ProcessKeyEvent(const ui::KeyEvent& key_event, + KeyEventDoneCallback& callback) {} -void MockInputMethodEngine::CandidateClicked(uint32 index) { -} +void MockInputMethodEngine::CandidateClicked(uint32 index) {} void MockInputMethodEngine::SetSurroundingText(const std::string& text, uint32 cursor_pos, @@ -134,7 +127,6 @@ void MockInputMethodEngine::SetSurroundingText(const std::string& text, uint32 offset_pos) {} void MockInputMethodEngine::SetCompositionBounds( - const std::vector<gfx::Rect>& bounds) { -} + const std::vector<gfx::Rect>& bounds) {} } // namespace chromeos diff --git a/chrome/browser/chromeos/input_method/mock_input_method_engine.h b/chrome/browser/chromeos/input_method/mock_input_method_engine.h index 5151d39..2aa3952 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_engine.h +++ b/chrome/browser/chromeos/input_method/mock_input_method_engine.h @@ -8,10 +8,11 @@ #include <string> #include <vector> -#include "chrome/browser/chromeos/input_method/input_method_engine_interface.h" #include "ui/base/ime/chromeos/input_method_descriptor.h" +#include "ui/base/ime/ime_engine_handler_interface.h" namespace ui { +class IMEEngineHandlerInterface; class KeyEvent; namespace ime { @@ -25,15 +26,14 @@ class CompositionText; namespace input_method { class CandidateWindow; -struct KeyEventHandle; } -class MockInputMethodEngine : public InputMethodEngineInterface { +class MockInputMethodEngine : public ui::IMEEngineHandlerInterface { public: MockInputMethodEngine(); ~MockInputMethodEngine() override; - // InputMethodEngineInterface overrides. + // IMEEngineHandlerInterface overrides. const std::string& GetActiveComponentId() const override; bool SetComposition(int context_id, const char* text, @@ -76,7 +76,7 @@ class MockInputMethodEngine : public InputMethodEngineInterface { void Reset() override; bool IsInterestedInKeyEvent() const override; void ProcessKeyEvent(const ui::KeyEvent& key_event, - const KeyEventDoneCallback& callback) override; + KeyEventDoneCallback& callback) override; void CandidateClicked(uint32 index) override; void SetSurroundingText(const std::string& text, uint32 cursor_pos, diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc index 7254bf9..ef233ac 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc +++ b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc @@ -116,8 +116,7 @@ void MockInputMethodManager::ActivateInputMethodMenuItem( void MockInputMethodManager::State::AddInputMethodExtension( const std::string& extension_id, const InputMethodDescriptors& descriptors, - InputMethodEngineInterface* instance) { -} + ui::IMEEngineHandlerInterface* instance) {} void MockInputMethodManager::State::RemoveInputMethodExtension( const std::string& extension_id) { diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.h b/chrome/browser/chromeos/input_method/mock_input_method_manager.h index 7673045..3a41db1 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_manager.h +++ b/chrome/browser/chromeos/input_method/mock_input_method_manager.h @@ -23,9 +23,10 @@ class MockInputMethodManager : public InputMethodManager { explicit State(MockInputMethodManager* manager); scoped_refptr<InputMethodManager::State> Clone() const override; - void AddInputMethodExtension(const std::string& extension_id, - const InputMethodDescriptors& descriptors, - InputMethodEngineInterface* instance) override; + void AddInputMethodExtension( + const std::string& extension_id, + const InputMethodDescriptors& descriptors, + ui::IMEEngineHandlerInterface* instance) override; void RemoveInputMethodExtension(const std::string& extension_id) override; void ChangeInputMethod(const std::string& input_method_id, bool show_message) override; |