Index: chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
diff --git a/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc b/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
index 55eadfcb04b16911613f2e486468ddf23fa097d5..88bc20a154a83e91778503180b7780a41c31494c 100644 |
--- a/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
+++ b/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
@@ -6,6 +6,7 @@ |
#include "chrome/browser/extensions/extension_apitest.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/test/base/ui_test_utils.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_tree_host.h" |
#include "ui/base/ime/dummy_text_input_client.h" |
@@ -23,6 +24,16 @@ class InputImeApiTest : public ExtensionApiTest { |
command_line->AppendSwitch(switches::kEnableInputImeAPI); |
} |
+ // Sets the private flag of |track_key_events_for_testing_| in InputMethod. |
+ void SetTrackKeyEvents(ui::InputMethod* input_method, bool track) { |
+ input_method->track_key_events_for_testing_ = track; |
+ } |
+ |
+ // Returns the tracked key events of using input.ime.sendKeyEvents API. |
+ std::vector<ui::KeyEvent*> GetKeyEvents(ui::InputMethod* input_method) { |
+ return input_method->GetKeyEventsForTesting(); |
+ } |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(InputImeApiTest); |
}; |
@@ -38,14 +49,42 @@ IN_PROC_BROWSER_TEST_F(InputImeApiTest, CreateWindowTest) { |
input_method->SetFocusedTextInputClient(client.get()); |
ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture; |
InputImeActivateFunction::disable_bubble_for_testing_ = true; |
+ SetTrackKeyEvents(input_method, true); |
ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_; |
// Test the input.ime.sendKeyEvents API. |
- ASSERT_EQ(client->insert_char_count(), 1); |
- ASSERT_EQ(client->last_insert_char(), L'a'); |
+ ASSERT_EQ(1, client->insert_char_count()); |
+ ASSERT_EQ(L'a', client->last_insert_char()); |
+ |
+ std::vector<ui::KeyEvent*> key_events = GetKeyEvents(input_method); |
+ ASSERT_EQ(5U, key_events.size()); |
+ ASSERT_EQ(ui::VKEY_A, key_events[0]->key_code()); |
+ ASSERT_EQ(ui::VKEY_A, key_events[2]->key_code()); |
Devlin
2016/06/23 18:43:22
out of curiosity, what about key_events[1] and [3]
Azure Wei
2016/06/24 06:38:19
Added check for all events.
|
+ ASSERT_EQ(ui::VKEY_TAB, key_events[4]->key_code()); |
input_method->DetachTextInputClient(client.get()); |
} |
+IN_PROC_BROWSER_TEST_F(InputImeApiTest, SendKeyEventsOnSpecialPages) { |
+ // Navigates to special page that sendKeyEvents API has limition with. |
+ ui_test_utils::NavigateToURL(browser(), GURL("chrome://flags")); |
+ |
+ BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
Devlin
2016/06/23 18:43:22
I don't think you actually need BrowserView here -
Azure Wei
2016/06/24 06:38:19
Done.
|
+ ui::InputMethod* input_method = |
+ browser_view->GetNativeWindow()->GetHost()->GetInputMethod(); |
+ std::unique_ptr<ui::DummyTextInputClient> client( |
+ new ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT)); |
+ input_method->SetFocusedTextInputClient(client.get()); |
+ ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture; |
+ InputImeActivateFunction::disable_bubble_for_testing_ = true; |
Devlin
2016/06/23 18:43:22
use a base::AutoReset here.
Azure Wei
2016/06/24 06:38:19
Done.
|
+ SetTrackKeyEvents(input_method, true); |
+ |
+ ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_; |
+ |
+ std::vector<ui::KeyEvent*> key_events = GetKeyEvents(input_method); |
+ ASSERT_EQ(2U, key_events.size()); |
+ ASSERT_EQ(ui::VKEY_A, key_events[0]->key_code()); |
Devlin
2016/06/23 18:43:22
what about key_events[1]? Also some of these ASSE
Azure Wei
2016/06/24 06:38:19
Done.
|
+} |
+ |
} // namespace extensions |