168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)/*
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * Copyright 2013 The Chromium Authors. All rights reserved.
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * found in the LICENSE file.
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) */
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/chromeos/extensions/virtual_keyboard_browsertest.h"
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <vector>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shell.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/command_line.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/render_widget_host_iterator.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/site_instance.h"
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/web_contents.h"
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/test/browser_test_utils.h"
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/extension.h"
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/client/aura_constants.h"
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ime/input_method.h"
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/keyboard/keyboard_controller.h"
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/keyboard/keyboard_switches.h"
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace {
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const base::FilePath::CharType kWebuiTestDir[] = FILE_PATH_LITERAL("webui");
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const base::FilePath::CharType kMockController[] =
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    FILE_PATH_LITERAL("mock_controller.js");
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const base::FilePath::CharType kMockTimer[] =
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    FILE_PATH_LITERAL("mock_timer.js");
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kVirtualKeyboardTestDir[] = "chromeos/virtual_keyboard";
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kBaseKeyboardTestFramework[] = "virtual_keyboard_test_base.js";
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kExtensionId[] = "mppnpdlheglhdfmldimlhpnegondlapf";
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const char kVirtualKeyboardURL[] = "chrome://keyboard";
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)VirtualKeyboardBrowserTestConfig::VirtualKeyboardBrowserTestConfig()
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : base_framework_(kBaseKeyboardTestFramework),
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      extension_id_(kExtensionId),
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      test_dir_(kVirtualKeyboardTestDir),
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      url_(kVirtualKeyboardURL) {
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)VirtualKeyboardBrowserTestConfig::~VirtualKeyboardBrowserTestConfig() {};
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void VirtualKeyboardBrowserTest::SetUpCommandLine(CommandLine* command_line) {
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  command_line->AppendSwitch(keyboard::switches::kEnableVirtualKeyboard);
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void VirtualKeyboardBrowserTest::RunTest(
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const base::FilePath& file,
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const VirtualKeyboardBrowserTestConfig& config) {
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), GURL(config.url_));
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  content::WebContents* web_contents =
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  content::WaitForLoadStop(web_contents);
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(web_contents);
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Inject testing scripts.
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  InjectJavascript(base::FilePath(kWebuiTestDir),
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                   base::FilePath(kMockController));
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  InjectJavascript(base::FilePath(kWebuiTestDir), base::FilePath(kMockTimer));
72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  InjectJavascript(base::FilePath(FILE_PATH_LITERAL(config.test_dir_)),
73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                   base::FilePath(FILE_PATH_LITERAL(config.base_framework_)));
74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  InjectJavascript(base::FilePath(FILE_PATH_LITERAL(config.test_dir_)), file);
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScript(web_contents, utf8_content_));
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Inject DOM-automation test harness and run tests.
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::vector<int> resource_ids;
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(ExecuteWebUIResourceTest(web_contents, resource_ids));
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void VirtualKeyboardBrowserTest::ShowVirtualKeyboard() {
84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  aura::Window* window = ash::Shell::GetPrimaryRootWindow();
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ui::InputMethod* input_method =
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      window->GetProperty(aura::client::kRootWindowInputMethodKey);
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(input_method);
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  input_method->ShowImeIfNeeded();
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)content::RenderViewHost* VirtualKeyboardBrowserTest::GetKeyboardRenderViewHost(
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const std::string& id) {
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ShowVirtualKeyboard();
94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  GURL url = extensions::Extension::GetBaseURLFromExtensionId(id);
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<content::RenderWidgetHostIterator> widgets(
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      content::RenderWidgetHost::GetRenderWidgetHosts());
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (widget->IsRenderView()) {
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      content::RenderViewHost* view = content::RenderViewHost::From(widget);
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      if (url == view->GetSiteInstance()->GetSiteURL()) {
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        content::WebContents* wc =
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            content::WebContents::FromRenderViewHost(view);
103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        // Waits for Polymer to load.
104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        content::WaitForLoadStop(wc);
105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        return view;
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      }
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  LOG(ERROR) << "Extension not found:" << url;
110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return NULL;
111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void VirtualKeyboardBrowserTest::InjectJavascript(const base::FilePath& dir,
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                                  const base::FilePath& file) {
115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::FilePath path = ui_test_utils::GetTestFilePath(dir, file);
116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::string library_content;
117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(base::ReadFileToString(path, &library_content)) << path.value();
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  utf8_content_.append(library_content);
119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  utf8_content_.append(";\n");
120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// crbug.com/367817. Either this feature or just the test are depending
1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// on the presense of Object.observe which is presently disabled by default.
1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuIN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, DISABLED_AttributesTest) {
125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RunTest(base::FilePath(FILE_PATH_LITERAL("attributes_test.js")),
126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          VirtualKeyboardBrowserTestConfig());
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// crbug.com/387372. This test started failing at Blink r176582.
130116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, DISABLED_TypingTest) {
131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RunTest(base::FilePath(FILE_PATH_LITERAL("typing_test.js")),
132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          VirtualKeyboardBrowserTestConfig());
13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// crbug.com/387372. This test started failing at Blink r176582.
136116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, DISABLED_ControlKeysTest) {
137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RunTest(base::FilePath(FILE_PATH_LITERAL("control_keys_test.js")),
138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          VirtualKeyboardBrowserTestConfig());
1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
141e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, HideKeyboardKeyTest) {
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RunTest(base::FilePath(FILE_PATH_LITERAL("hide_keyboard_key_test.js")),
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          VirtualKeyboardBrowserTestConfig());
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// http://crbug.com/396326
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest,
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       DISABLED_KeysetTransitionTest) {
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RunTest(base::FilePath(FILE_PATH_LITERAL("keyset_transition_test.js")),
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          VirtualKeyboardBrowserTestConfig());
1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Fails when enabling Object.observe. See http://crbug.com/370004
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_CHROMEOS)
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define MAYBE_IsKeyboardLoaded DISABLED_IsKeyboardLoaded
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define MAYBE_IsKeyboardLoaded IsKeyboardLoaded
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, MAYBE_IsKeyboardLoaded) {
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  content::RenderViewHost* keyboard_rvh =
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      GetKeyboardRenderViewHost(kExtensionId);
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(keyboard_rvh);
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool loaded = false;
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string script = "!!chrome.virtualKeyboardPrivate";
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      keyboard_rvh,
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "window.domAutomationController.send(" + script + ");",
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      &loaded));
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Catches the regression in crbug.com/308653.
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(loaded);
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, DISABLED_EndToEndTest) {
174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Get the virtual keyboard's render view host.
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  content::RenderViewHost* keyboard_rvh =
176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      GetKeyboardRenderViewHost(kExtensionId);
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(keyboard_rvh);
178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Get the test page's render view host.
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  content::RenderViewHost* browser_rvh = browser()->tab_strip_model()->
181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      GetActiveWebContents()->GetRenderViewHost();
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(browser_rvh);
183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up the test page.
185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  GURL url = ui_test_utils::GetTestUrl(
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::FilePath(),
187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL(
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          "chromeos/virtual_keyboard/end_to_end_test.html")));
189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Press 'a' on keyboard.
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::FilePath path = ui_test_utils::GetTestFilePath(
193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL(kVirtualKeyboardTestDir)),
194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("end_to_end_test.js")));
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string script;
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(base::ReadFileToString(path, &script));
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(content::ExecuteScript(keyboard_rvh, script));
198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Verify 'a' appeared on test page.
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool success = false;
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      browser_rvh,
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      "success ? verifyInput('a') : waitForInput('a');",
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      &success));
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(success);
205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
20768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// TODO(kevers|rsadam|bshe):  Add UI tests for remaining virtual keyboard
20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// functionality.
209