summaryrefslogtreecommitdiffstats
path: root/ui/base
diff options
context:
space:
mode:
authorkochi@chromium.org <kochi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-17 08:23:58 +0000
committerkochi@chromium.org <kochi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-17 08:23:58 +0000
commit0b3ff5177a0ea7c29aa9a93f940175af0adacf59 (patch)
treea293fc8b602e706d5628e6326796477a55405f24 /ui/base
parentc2d18f1b43fd9bee6fde1cf37891a4c9ec42e78f (diff)
downloadchromium_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.cc8
-rw-r--r--ui/base/ime/remote_input_method_win_unittest.cc37
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) {