diff options
-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) { |