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