1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/ime/input_method_menu_item.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/ime/input_method_menu_manager.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind_helpers.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/strings/stringprintf.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/ime/component_extension_ime_manager.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/ime/composition_text.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_descriptor.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/browser_test_utils.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/process_manager.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/background_info.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ime/chromeos/ime_bridge.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/ime/chromeos/mock_ime_candidate_window_handler.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/ime/chromeos/mock_ime_input_context_handler.h" 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/events/event.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace input_method { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kIdentityIMEID[] = 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpIdentityIME"; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kToUpperIMEID[] = 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpToUpperIME"; 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kAPIArgumentIMEID[] = 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "_ext_ime_iafoklpfplgfnoimmaejoeondnjnlcfpAPIArgumentIME"; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kExtensionID[] = "iafoklpfplgfnoimmaejoeondnjnlcfp"; 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// InputMethod extension should work on 1)normal extension, 2)normal extension 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// in incognito mode 3)component extension. 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum TestType { 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kTestTypeNormal = 0, 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kTestTypeIncognito = 1, 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kTestTypeComponent = 2, 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class InputMethodEngineBrowserTest 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public ExtensionBrowserTest, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public ::testing::WithParamInterface<TestType> { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodEngineBrowserTest() 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : ExtensionBrowserTest() {} 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~InputMethodEngineBrowserTest() {} 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionBrowserTest::SetUpInProcessBrowserTestFixture(); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch extension_ = NULL; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void LoadTestInputMethod() { 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // This will load "chrome/test/data/extensions/input_ime" 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener ime_ready_listener("ReadyToUseImeEvent", 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false); 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch extension_ = LoadExtensionWithType("input_ime", GetParam()); 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(extension_); 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(ime_ready_listener.WaitUntilSatisfied()); 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Extension IMEs are not enabled by default. 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::vector<std::string> extension_ime_ids; 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_ime_ids.push_back(kIdentityIMEID); 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_ime_ids.push_back(kToUpperIMEID); 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extension_ime_ids.push_back(kAPIArgumentIMEID); 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InputMethodManager::Get()->GetActiveIMEState()->SetEnabledExtensionImes( 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) &extension_ime_ids); 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InputMethodDescriptors extension_imes; 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InputMethodManager::Get()->GetActiveIMEState()->GetInputMethodExtensions( 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) &extension_imes); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Test IME has two input methods, thus InputMethodManager should have two 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // extension IME. 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Note: Even extension is loaded by LoadExtensionAsComponent as above, the 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // IME does not managed by ComponentExtensionIMEManager or it's id won't 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // start with __comp__. The component extension IME is whitelisted and 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // managed by ComponentExtensionIMEManager, but its framework is same as 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // normal extension IME. 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(3U, extension_imes.size()); 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const extensions::Extension* LoadExtensionWithType( 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& extension_name, TestType type) { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switch (type) { 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kTestTypeNormal: 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return LoadExtension(test_data_dir_.AppendASCII(extension_name)); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kTestTypeIncognito: 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return LoadExtensionIncognito( 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_data_dir_.AppendASCII(extension_name)); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kTestTypeComponent: 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return LoadExtensionAsComponent( 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_data_dir_.AppendASCII(extension_name)); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return NULL; 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const extensions::Extension* extension_; 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class KeyEventDoneCallback { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit KeyEventDoneCallback(bool expected_argument) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : expected_argument_(expected_argument), 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_called_(false) {} 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ~KeyEventDoneCallback() {} 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Run(bool consumed) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (consumed == expected_argument_) { 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_called_ = true; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void WaitUntilCalled() { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) while (!is_called_) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunMessageLoop(); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool expected_argument_; 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_called_; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(KeyEventDoneCallback); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(InputMethodEngineBrowserTest, 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodEngineBrowserTest, 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::testing::Values(kTestTypeNormal)); 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(InputMethodEngineIncognitoBrowserTest, 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodEngineBrowserTest, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::testing::Values(kTestTypeIncognito)); 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(InputMethodEngineComponentExtensionBrowserTest, 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodEngineBrowserTest, 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::testing::Values(kTestTypeComponent)); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BasicScenarioTest) { 14990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LoadTestInputMethod(); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InputMethodManager::Get()->GetActiveIMEState()->ChangeInputMethod( 15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kIdentityIMEID, false /* show_message */); 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<MockIMEInputContextHandler> mock_input_context( 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new MockIMEInputContextHandler()); 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<MockIMECandidateWindowHandler> mock_candidate_window( 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new MockIMECandidateWindowHandler()); 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetInputContextHandler(mock_input_context.get()); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetCandidateWindowHandler(mock_candidate_window.get()); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface* engine_handler = 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->GetCurrentEngineHandler(); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(engine_handler); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onActivate event should be fired if Enable function is called. 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionTestMessageListener activated_listener("onActivate", false); 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) engine_handler->Enable("IdentityIME"); 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(activated_listener.WaitUntilSatisfied()); 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(activated_listener.was_satisfied()); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onFocus event should be fired if FocusIn function is called. 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:text", false); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context(ui::TEXT_INPUT_TYPE_TEXT, 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::TEXT_INPUT_MODE_DEFAULT); 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onKeyEvent should be fired if ProcessKeyEvent is called. 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) KeyEventDoneCallback callback(false); // EchoBackIME doesn't consume keys. 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener("onKeyEvent", false); 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); 184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Unretained(&callback))); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 18890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.was_satisfied()); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) callback.WaitUntilCalled(); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onSurroundingTextChange should be fired if SetSurroundingText is called. 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionTestMessageListener surrounding_text_listener( 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "onSurroundingTextChanged", false); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) engine_handler->SetSurroundingText("text", // Surrounding text. 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, // focused position. 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1); // anchor position. 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(surrounding_text_listener.WaitUntilSatisfied()); 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(surrounding_text_listener.was_satisfied()); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onMenuItemActivated should be fired if PropertyActivate is called. 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionTestMessageListener property_listener("onMenuItemActivated", false); 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) engine_handler->PropertyActivate("property_name"); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(property_listener.WaitUntilSatisfied()); 20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(property_listener.was_satisfied()); 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // onReset should be fired if Reset is called. 20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener reset_listener("onReset", false); 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) engine_handler->Reset(); 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(reset_listener.WaitUntilSatisfied()); 21090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(reset_listener.was_satisfied()); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onBlur should be fired if FocusOut is called. 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionTestMessageListener blur_listener("onBlur", false); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) engine_handler->FocusOut(); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(blur_listener.WaitUntilSatisfied()); 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(blur_listener.was_satisfied()); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // onDeactivated should be fired if Disable is called. 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionTestMessageListener disabled_listener("onDeactivated", false); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) engine_handler->Disable(); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(disabled_listener.WaitUntilSatisfied()); 22290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(disabled_listener.was_satisfied()); 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetInputContextHandler(NULL); 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetCandidateWindowHandler(NULL); 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(InputMethodEngineBrowserTest, 22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) APIArgumentTest) { 23090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LoadTestInputMethod(); 23190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 23203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InputMethodManager::Get()->GetActiveIMEState()->ChangeInputMethod( 23303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kAPIArgumentIMEID, false /* show_message */); 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<MockIMEInputContextHandler> mock_input_context( 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new MockIMEInputContextHandler()); 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<MockIMECandidateWindowHandler> mock_candidate_window( 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new MockIMECandidateWindowHandler()); 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetInputContextHandler(mock_input_context.get()); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetCandidateWindowHandler(mock_candidate_window.get()); 24290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface* engine_handler = 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->GetCurrentEngineHandler(); 24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(engine_handler); 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionHost* host = 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionSystem::Get(profile()) 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->process_manager() 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->GetBackgroundHostForExtension(extension_->id()); 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(host); 252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) engine_handler->Enable("APIArgumentIME"); 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context(ui::TEXT_INPUT_TYPE_TEXT, 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::TEXT_INPUT_MODE_DEFAULT); 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:No"); 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "onKeyEvent::keydown:a:KeyA:false:false:false:false"; 26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 26490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event( 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::ET_KEY_PRESSED, ui::VKEY_A, "KeyA", ui::EF_NONE); 267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 26890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 26990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 27090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 27190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 27290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 27390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 27490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 27590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:Yes, alt:No, Shift:No, Caps:No"); 27690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 27790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "onKeyEvent::keydown:a:KeyA:true:false:false:false"; 27990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 28090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::VKEY_A, 283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "KeyA", 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::EF_CONTROL_DOWN); 285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 28690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 28790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 28990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 29090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 29190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 29290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 29390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:No, alt:Yes, Shift:No, Caps:No"); 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "onKeyEvent::keydown:a:KeyA:false:true:false:false"; 29790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 29890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 300a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::VKEY_A, 301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "KeyA", 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::EF_ALT_DOWN); 303a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 30490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 30690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:Yes, Caps:No"); 31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 31390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "onKeyEvent::keydown:A:KeyA:false:false:true:false"; 31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 317a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 318a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::VKEY_A, 319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "KeyA", 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::EF_SHIFT_DOWN); 321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 32290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 32790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 32890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 32990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:Yes"); 33090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "onKeyEvent::keydown:A:KeyA:false:false:false:true"; 33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 335a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::VKEY_A, 337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "KeyA", 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::EF_CAPS_LOCK_DOWN); 339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:Yes, alt:Yes, Shift:No, Caps:No"); 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "onKeyEvent::keydown:a:KeyA:true:true:false:false"; 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 353a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::VKEY_A, 355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "KeyA", 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN); 357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 35890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 35990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 36190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 36290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 36390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 36490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 36590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:Yes, Caps:Yes"); 36690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) KeyEventDoneCallback callback(false); 36790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string expected_value = 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "onKeyEvent::keydown:a:KeyA:false:false:true:true"; 36990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 37090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::VKEY_A, 373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "KeyA", 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN); 375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 37690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 37790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 37890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 37990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 38090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.WaitUntilCalled(); 38190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 38203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Media keys cases. 38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const struct { 38403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ui::KeyboardCode keycode; 38503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* code; 38603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* key; 38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } kMediaKeyCases[] = { 38803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_BROWSER_BACK, "BrowserBack", "HistoryBack" }, 38903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_BROWSER_FORWARD, "BrowserForward", "HistoryForward" }, 39003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_BROWSER_REFRESH, "BrowserRefresh", "BrowserRefresh" }, 39103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_MEDIA_LAUNCH_APP2, "ChromeOSFullscreen", "ChromeOSFullscreen" }, 39203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_MEDIA_LAUNCH_APP1, 39303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "ChromeOSSwitchWindow", "ChromeOSSwitchWindow" }, 39403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_BRIGHTNESS_DOWN, "BrightnessDown", "BrightnessDown" }, 39503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_BRIGHTNESS_UP, "BrightnessUp", "BrightnessUp" }, 39603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_VOLUME_MUTE, "VolumeMute", "AudioVolumeMute" }, 39703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_VOLUME_DOWN, "VolumeDown", "AudioVolumeDown" }, 39803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_VOLUME_UP, "VolumeUp", "AudioVolumeUp" }, 39903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F1, "F1", "HistoryBack" }, 40003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F2, "F2", "HistoryForward" }, 40103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F3, "F3", "BrowserRefresh" }, 40203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F4, "F4", "ChromeOSFullscreen" }, 40303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F5, "F5", "ChromeOSSwitchWindow" }, 40403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F6, "F6", "BrightnessDown" }, 40503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F7, "F7", "BrightnessUp" }, 40603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F8, "F8", "AudioVolumeMute" }, 40703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F9, "F9", "AudioVolumeDown" }, 40803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) { ui::VKEY_F10, "F10", "AudioVolumeUp" }, 40903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }; 41003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (size_t i = 0; i < arraysize(kMediaKeyCases); ++i) { 41103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SCOPED_TRACE(std::string("KeyDown, ") + kMediaKeyCases[i].code); 41203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) KeyEventDoneCallback callback(false); 41303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::string expected_value = 41403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::StringPrintf("onKeyEvent::keydown:%s:%s:false:false:false:false", 41503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kMediaKeyCases[i].key, kMediaKeyCases[i].code); 41603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ExtensionTestMessageListener keyevent_listener(expected_value, false); 41703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 41803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, 41903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kMediaKeyCases[i].keycode, 42003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) kMediaKeyCases[i].code, 42103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ui::EF_NONE); 42203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) engine_handler->ProcessKeyEvent(key_event, 42303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Bind(&KeyEventDoneCallback::Run, 42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Unretained(&callback))); 42503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(keyevent_listener.WaitUntilSatisfied()); 42603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(keyevent_listener.was_satisfied()); 42703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) callback.WaitUntilCalled(); 42803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 42990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TODO(nona): Add browser tests for other API as well. 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("commitText test"); 43258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 43358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 43458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char commit_text_test_script[] = 436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.commitText({" 437eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " contextID: engineBridge.getFocusedContextID().contextID," 438eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " text:'COMMIT_TEXT'" 439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript(host->host_contents(), 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch commit_text_test_script)); 44358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_input_context->commit_text_call_count()); 44458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("COMMIT_TEXT", mock_input_context->last_commit_text()); 445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SCOPED_TRACE("sendKeyEvents test"); 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_input_context->Reset(); 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_candidate_window->Reset(); 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const char send_key_events_test_script[] = 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "chrome.input.ime.sendKeyEvents({" 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " contextID: engineBridge.getFocusedContextID().contextID," 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " keyData : [{" 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " type : 'keydown'," 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " requestId : '0'," 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " key : 'z'," 4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " code : 'KeyZ'," 4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " },{" 4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " type : 'keyup'," 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " requestId : '1'," 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " key : 'z'," 4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " code : 'KeyZ'," 4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " }]" 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "});"; 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener keyevent_listener_down( 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string("onKeyEvent:") + kExtensionID + 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ":keydown:z:KeyZ:false:false:false:false", 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false); 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener keyevent_listener_up( 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string("onKeyEvent:") + kExtensionID + 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ":keyup:z:KeyZ:false:false:false:false", 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false); 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScript(host->host_contents(), 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) send_key_events_test_script)); 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(keyevent_listener_down.WaitUntilSatisfied()); 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(keyevent_listener_down.was_satisfied()); 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(keyevent_listener_up.WaitUntilSatisfied()); 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(keyevent_listener_up.was_satisfied()); 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 4856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SCOPED_TRACE("sendKeyEvents test with keyCode"); 4866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mock_input_context->Reset(); 4876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mock_candidate_window->Reset(); 4886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const char send_key_events_test_script[] = 4906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "chrome.input.ime.sendKeyEvents({" 4916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " contextID: engineBridge.getFocusedContextID().contextID," 4926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " keyData : [{" 4936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " type : 'keydown'," 4946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " requestId : '2'," 4956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " key : 'a'," 4966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " code : 'KeyQ'," 4976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " keyCode : 0x41," 4986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " },{" 4996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " type : 'keyup'," 5006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " requestId : '3'," 5016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " key : 'a'," 5026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " code : 'KeyQ'," 5036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " keyCode : 0x41," 5046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) " }]" 5056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "});"; 5066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ExtensionTestMessageListener keyevent_listener_down( 5086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::string("onKeyEvent:") + kExtensionID + 5096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ":keydown:a:KeyQ:false:false:false:false", 5106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) false); 5116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ExtensionTestMessageListener keyevent_listener_up( 5126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::string("onKeyEvent:") + kExtensionID + 5136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ":keyup:a:KeyQ:false:false:false:false", 5146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) false); 5156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScript(host->host_contents(), 5176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) send_key_events_test_script)); 5186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(keyevent_listener_down.WaitUntilSatisfied()); 5206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(keyevent_listener_down.was_satisfied()); 5216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(keyevent_listener_up.WaitUntilSatisfied()); 5226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(keyevent_listener_up.was_satisfied()); 5236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 5246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) { 525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setComposition test"); 52658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 52758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 52858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 529eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_composition_test_script[] = 530eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setComposition({" 531eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " contextID: engineBridge.getFocusedContextID().contextID," 532eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " text:'COMPOSITION_TEXT'," 533eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " cursor:4," 534eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " segments : [{" 535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " start: 0," 536eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " end: 5," 537eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " style: 'underline'" 538eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 539eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " start: 6," 540eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " end: 10," 541eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " style: 'doubleUnderline'" 542eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }]" 543eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 544eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 545eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript(host->host_contents(), 546eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_composition_test_script)); 54758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_input_context->update_preedit_text_call_count()); 548eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(4U, 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_input_context->last_update_composition_arg().cursor_pos); 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(mock_input_context->last_update_composition_arg().is_visible); 552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const CompositionText& composition_text = 5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_input_context->last_update_composition_arg().composition_text; 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("COMPOSITION_TEXT"), composition_text.text()); 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<CompositionText::UnderlineAttribute>& underlines = 5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) composition_text.underline_attributes(); 558eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 559eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(2U, underlines.size()); 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(CompositionText::COMPOSITION_TEXT_UNDERLINE_SINGLE, 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) underlines[0].type); 562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(0U, underlines[0].start_index); 563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(5U, underlines[0].end_index); 564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(CompositionText::COMPOSITION_TEXT_UNDERLINE_DOUBLE, 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) underlines[1].type); 567eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(6U, underlines[1].start_index); 568eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(10U, underlines[1].end_index); 569eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 570eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 571eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("clearComposition test"); 57258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 57358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 57458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 575eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char commite_text_test_script[] = 576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.clearComposition({" 577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " contextID: engineBridge.getFocusedContextID().contextID," 578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript(host->host_contents(), 581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch commite_text_test_script)); 58258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_input_context->update_preedit_text_call_count()); 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 5845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_input_context->last_update_composition_arg().is_visible); 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const CompositionText& composition_text = 5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_input_context->last_update_composition_arg().composition_text; 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(composition_text.text().empty()); 588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidateWindowProperties:visibility test"); 59158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 59258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 59358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidate_window_properties_test_script[] = 595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidateWindowProperties({" 596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " properties: {" 598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " visible: true," 599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), 603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidate_window_properties_test_script)); 60458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 60558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE( 60658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().is_visible); 607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidateWindowProperties:cursor_visibility test"); 61058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 61158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 61258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidate_window_properties_test_script[] = 614eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidateWindowProperties({" 615eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 616eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " properties: {" 617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " cursorVisible: true," 618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 619eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), 622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidate_window_properties_test_script)); 62358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // window visibility is kept as before. 62658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE( 62758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().is_visible); 628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 63058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(table.is_cursor_visible()); 632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidateWindowProperties:vertical test"); 63558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 63658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 63758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 638eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidate_window_properties_test_script[] = 639eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidateWindowProperties({" 640eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 641eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " properties: {" 642eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " vertical: true," 643eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 644eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 645eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 646eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), 647eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidate_window_properties_test_script)); 64858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 649eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 650eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // window visibility is kept as before. 65158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE( 65258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().is_visible); 653eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 65558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 656eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // cursor visibility is kept as before. 658eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(table.is_cursor_visible()); 659eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ui::CandidateWindow::VERTICAL, table.orientation()); 661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 662eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 663eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidateWindowProperties:pageSize test"); 66458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 66558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 66658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 667eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidate_window_properties_test_script[] = 668eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidateWindowProperties({" 669eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " properties: {" 671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " pageSize: 7," 672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), 676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidate_window_properties_test_script)); 67758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 679eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // window visibility is kept as before. 68058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE( 68158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().is_visible); 682eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 68458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 685eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 686eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // cursor visibility is kept as before. 687eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(table.is_cursor_visible()); 688eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 689eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // oritantation is kept as before. 6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ui::CandidateWindow::VERTICAL, table.orientation()); 691eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 692eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(7U, table.page_size()); 693eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 694eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 695eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidateWindowProperties:auxTextVisibility test"); 69658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 69758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 69858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 699eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidate_window_properties_test_script[] = 700eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidateWindowProperties({" 701eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 702eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " properties: {" 703eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " auxiliaryTextVisible: true" 704eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 705eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 706eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 707eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), 708eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidate_window_properties_test_script)); 7095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 7125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(table.is_auxiliary_text_visible()); 714eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 715eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 716eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidateWindowProperties:auxText test"); 71758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 71858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 71958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 720eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidate_window_properties_test_script[] = 721eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidateWindowProperties({" 722eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 723eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " properties: {" 724eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " auxiliaryText: 'AUXILIARY_TEXT'" 725eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 726eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 727eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 728eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), 729eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidate_window_properties_test_script)); 7305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 731eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // aux text visibility is kept as before. 7335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(table.is_auxiliary_text_visible()); 7365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("AUXILIARY_TEXT", table.auxiliary_text()); 737eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 738eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 739eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCandidates test"); 74058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 74158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 74258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_candidates_test_script[] = 744eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCandidates({" 745eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " contextID: engineBridge.getFocusedContextID().contextID," 746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " candidates: [{" 747eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " candidate: 'CANDIDATE_1'," 748eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 1," 749eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 750eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " candidate: 'CANDIDATE_2'," 751eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 2," 752eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL_2'," 753eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 754eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " candidate: 'CANDIDATE_3'," 755eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 3," 756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL_3'," 757eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " annotation: 'ANNOTACTION_3'" 758eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 759eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " candidate: 'CANDIDATE_4'," 760eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 4," 761eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL_4'," 762eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " annotation: 'ANNOTACTION_4'," 763eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " usage: {" 764eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " title: 'TITLE_4'," 765eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " body: 'BODY_4'" 766eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }" 767eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }]" 768eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 769eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript(host->host_contents(), 770eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set_candidates_test_script)); 771eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 772eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // window visibility is kept as before. 77358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE( 77458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().is_visible); 775eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 77758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // cursor visibility is kept as before. 780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(table.is_cursor_visible()); 781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // oritantation is kept as before. 7835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ui::CandidateWindow::VERTICAL, table.orientation()); 784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 785eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // page size is kept as before. 786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(7U, table.page_size()); 787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(4U, table.candidates().size()); 789eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("CANDIDATE_1"), 7915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(0).value); 7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("CANDIDATE_2"), 7945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(1).value); 7955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("LABEL_2"), table.candidates().at(1).label); 7965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("CANDIDATE_3"), 7985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(2).value); 7995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("LABEL_3"), table.candidates().at(2).label); 8005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("ANNOTACTION_3"), 8015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(2).annotation); 8025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("CANDIDATE_4"), 8045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(3).value); 8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("LABEL_4"), table.candidates().at(3).label); 8065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("ANNOTACTION_4"), 8075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(3).annotation); 8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("TITLE_4"), 8095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(3).description_title); 8105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("BODY_4"), 8115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.candidates().at(3).description_body); 812eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 813eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 814eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setCursorPosition test"); 81558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 81658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 81758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 818eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_cursor_position_test_script[] = 819eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setCursorPosition({" 820eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " contextID: engineBridge.getFocusedContextID().contextID," 821eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " candidateID: 2" 822eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 823eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 824eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), set_cursor_position_test_script)); 82558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_candidate_window->update_lookup_table_call_count()); 826eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 827eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // window visibility is kept as before. 82858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE( 82958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().is_visible); 830eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::CandidateWindow& table = 83258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->last_update_lookup_table_arg().lookup_table; 833eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 834eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // cursor visibility is kept as before. 835eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(table.is_cursor_visible()); 836eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 837eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // oritantation is kept as before. 8385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ui::CandidateWindow::VERTICAL, table.orientation()); 839eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 840eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // page size is kept as before. 841eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(7U, table.page_size()); 842eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 843eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // candidates are same as before. 844eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(4U, table.candidates().size()); 845eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 846eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Candidate ID == 2 is 1 in index. 847eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(1U, table.cursor_position()); 848eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 849eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 850eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("setMenuItem test"); 85158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 85258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 85358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 854eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char set_menu_item_test_script[] = 855eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.setMenuItems({" 856eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 857eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " items: [{" 858eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 'ID0'," 859eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 860eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 'ID1'," 861eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL1'," 862eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 863eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 'ID2'," 864eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL2'," 865eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " style: 'radio'," 866eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 867eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 'ID3'," 868eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL3'," 869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " style: 'check'," 870eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " visible: true," 871eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " },{" 872eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " id: 'ID4'," 873eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " label: 'LABEL4'," 874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " style: 'separator'," 875eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " visible: true," 876eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " checked: true" 877eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " }]" 878eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 879eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 880eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), set_menu_item_test_script)); 881eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 882a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ash::ime::InputMethodMenuItemList& props = 883a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::ime::InputMethodMenuManager::GetInstance()-> 884a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetCurrentInputMethodMenuItemList(); 885eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(5U, props.size()); 886eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("ID0", props[0].key); 88868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("ID1", props[1].key); 88968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("ID2", props[2].key); 89068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("ID3", props[3].key); 89168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("ID4", props[4].key); 892eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 89368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("LABEL1", props[1].label); 89468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("LABEL2", props[2].label); 89568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("LABEL3", props[3].label); 89668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("LABEL4", props[4].label); 897eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 89868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(props[2].is_selection_item); 89968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // TODO(nona): Add tests for style: ["toggle" and "separator"] 90068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // and visible:, when implement them. 901eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(props[4].is_selection_item_checked); 903eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 904eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 905eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SCOPED_TRACE("deleteSurroundingText test"); 90658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->Reset(); 90758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_candidate_window->Reset(); 90858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 909eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char delete_surrounding_text_test_script[] = 910eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "chrome.input.ime.deleteSurroundingText({" 911eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " engineID: engineBridge.getActiveEngineID()," 912eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " contextID: engineBridge.getFocusedContextID().contextID," 913eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " offset: 5," 914eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch " length: 3" 915eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "});"; 916eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(content::ExecuteScript( 917eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->host_contents(), delete_surrounding_text_test_script)); 918eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 91958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1, mock_input_context->delete_surrounding_text_call_count()); 92058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(5, mock_input_context->last_delete_surrounding_text_arg().offset); 92158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(3U, 92258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mock_input_context->last_delete_surrounding_text_arg().length); 923eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SCOPED_TRACE("onFocus test"); 926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_input_context->Reset(); 927f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mock_candidate_window->Reset(); 928f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 930f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:text", false); 9315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context( 932f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TEXT_INPUT_TYPE_TEXT, ui::TEXT_INPUT_MODE_DEFAULT); 933f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 934f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 935f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 936f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 937f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 938f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:search", false); 9395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context( 940f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TEXT_INPUT_TYPE_SEARCH, ui::TEXT_INPUT_MODE_DEFAULT); 941f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 942f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 943f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 944f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 945f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 946f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:tel", false); 9475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context( 948f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TEXT_INPUT_TYPE_TELEPHONE, ui::TEXT_INPUT_MODE_DEFAULT); 949f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 950f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 951f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 952f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 953f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 954f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:url", false); 9555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context( 956f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TEXT_INPUT_TYPE_URL, ui::TEXT_INPUT_MODE_DEFAULT); 957f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 958f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 959f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 960f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 961f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 962f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:email", false); 9635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context( 964f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TEXT_INPUT_TYPE_EMAIL, ui::TEXT_INPUT_MODE_DEFAULT); 965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 967f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 970f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ExtensionTestMessageListener focus_listener("onFocus:number", false); 9715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEEngineHandlerInterface::InputContext context( 972f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TEXT_INPUT_TYPE_NUMBER, ui::TEXT_INPUT_MODE_DEFAULT); 973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) engine_handler->FocusIn(context); 974f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.WaitUntilSatisfied()); 975f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(focus_listener.was_satisfied()); 976f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 977f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 978f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetInputContextHandler(NULL); 9805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Get()->SetCandidateWindowHandler(NULL); 981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace input_method 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 986