diff options
author | kochi@chromium.org <kochi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-17 08:23:58 +0000 |
---|---|---|
committer | kochi@chromium.org <kochi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-17 08:23:58 +0000 |
commit | 0b3ff5177a0ea7c29aa9a93f940175af0adacf59 (patch) | |
tree | a293fc8b602e706d5628e6326796477a55405f24 /ui/base | |
parent | c2d18f1b43fd9bee6fde1cf37891a4c9ec42e78f (diff) | |
download | chromium_src-0b3ff5177a0ea7c29aa9a93f940175af0adacf59.zip chromium_src-0b3ff5177a0ea7c29aa9a93f940175af0adacf59.tar.gz chromium_src-0b3ff5177a0ea7c29aa9a93f940175af0adacf59.tar.bz2 |
Plumb TSF candidate window events to IMEAPI's events
This connects TSF's candidate window monitor to IME API's
JS candidatewindow events.
Currently only show/hide events are supported, and
update event is to be added.
BUG=238585
TEST=ui_unittests.exe --gtest_filter=*.OnCandidatePopupChanged
R=yukawa@chromium.org
Review URL: https://codereview.chromium.org/102723008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241212 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base')
-rw-r--r-- | ui/base/ime/remote_input_method_win.cc | 8 | ||||
-rw-r--r-- | ui/base/ime/remote_input_method_win_unittest.cc | 37 |
2 files changed, 44 insertions, 1 deletions
diff --git a/ui/base/ime/remote_input_method_win.cc b/ui/base/ime/remote_input_method_win.cc index af450fe..113e7c5 100644 --- a/ui/base/ime/remote_input_method_win.cc +++ b/ui/base/ime/remote_input_method_win.cc @@ -313,6 +313,14 @@ class RemoteInputMethodWin : public InputMethod, virtual void OnCandidatePopupChanged(bool visible) OVERRIDE { is_candidate_popup_open_ = visible; + if (!text_input_client_) + return; + // TODO(kochi): Support 'update' case, in addition to show/hide. + // http://crbug.com/238585 + if (visible) + text_input_client_->OnCandidateWindowShown(); + else + text_input_client_->OnCandidateWindowHidden(); } virtual void OnInputSourceChanged(LANGID langid, bool /*is_ime*/) OVERRIDE { diff --git a/ui/base/ime/remote_input_method_win_unittest.cc b/ui/base/ime/remote_input_method_win_unittest.cc index bbc3a90e..084819e 100644 --- a/ui/base/ime/remote_input_method_win_unittest.cc +++ b/ui/base/ime/remote_input_method_win_unittest.cc @@ -31,7 +31,9 @@ class MockTextInputClient : public DummyTextInputClient { call_count_set_composition_text_(0), call_count_insert_char_(0), call_count_insert_text_(0), - emulate_pepper_flash_(false) { + emulate_pepper_flash_(false), + is_candidate_window_shown_called_(false), + is_candidate_window_hidden_called_(false) { } size_t call_count_set_composition_text() const { @@ -46,6 +48,12 @@ class MockTextInputClient : public DummyTextInputClient { size_t call_count_insert_text() const { return call_count_insert_text_; } + bool is_candidate_window_shown_called() const { + return is_candidate_window_shown_called_; + } + bool is_candidate_window_hidden_called() const { + return is_candidate_window_hidden_called_; + } void Reset() { text_input_type_ = TEXT_INPUT_TYPE_NONE; text_input_mode_ = TEXT_INPUT_MODE_DEFAULT; @@ -56,6 +64,8 @@ class MockTextInputClient : public DummyTextInputClient { caret_bounds_ = gfx::Rect(); composition_character_bounds_.clear(); emulate_pepper_flash_ = false; + is_candidate_window_shown_called_ = false; + is_candidate_window_hidden_called_ = false; } void set_text_input_type(ui::TextInputType type) { text_input_type_ = type; @@ -116,6 +126,12 @@ class MockTextInputClient : public DummyTextInputClient { *range = gfx::Range(0, composition_character_bounds_.size()); return true; } + virtual void OnCandidateWindowShown() OVERRIDE { + is_candidate_window_shown_called_ = true; + } + virtual void OnCandidateWindowHidden() OVERRIDE { + is_candidate_window_hidden_called_ = true; + } ui::TextInputType text_input_type_; ui::TextInputMode text_input_mode_; @@ -126,6 +142,8 @@ class MockTextInputClient : public DummyTextInputClient { size_t call_count_insert_char_; size_t call_count_insert_text_; bool emulate_pepper_flash_; + bool is_candidate_window_shown_called_; + bool is_candidate_window_hidden_called_; DISALLOW_COPY_AND_ASSIGN(MockTextInputClient); }; @@ -295,11 +313,28 @@ TEST(RemoteInputMethodWinTest, OnCandidatePopupChanged) { // Initial value EXPECT_FALSE(input_method->IsCandidatePopupOpen()); + // RemoteInputMethodWin::OnCandidatePopupChanged can be called even when the + // focused text input client is NULL. + ASSERT_TRUE(input_method->GetTextInputClient() == NULL); + private_ptr->OnCandidatePopupChanged(false); + private_ptr->OnCandidatePopupChanged(true); + + MockTextInputClient mock_text_input_client; + input_method->SetFocusedTextInputClient(&mock_text_input_client); + + ASSERT_FALSE(mock_text_input_client.is_candidate_window_shown_called()); + ASSERT_FALSE(mock_text_input_client.is_candidate_window_hidden_called()); + mock_text_input_client.Reset(); + private_ptr->OnCandidatePopupChanged(true); EXPECT_TRUE(input_method->IsCandidatePopupOpen()); + EXPECT_TRUE(mock_text_input_client.is_candidate_window_shown_called()); + EXPECT_FALSE(mock_text_input_client.is_candidate_window_hidden_called()); private_ptr->OnCandidatePopupChanged(false); EXPECT_FALSE(input_method->IsCandidatePopupOpen()); + EXPECT_TRUE(mock_text_input_client.is_candidate_window_shown_called()); + EXPECT_TRUE(mock_text_input_client.is_candidate_window_hidden_called()); } TEST(RemoteInputMethodWinTest, CancelComposition) { |