11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/command_line.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/pref_service.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/browser_process.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/input_method/input_method_persistence.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/language_preferences.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/login_manager_test.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/startup_utils.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/pref_names.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/chromeos_switches.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_utils.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromeos { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTestUser1[] = "test-user1@gmail.com"; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTestUser2[] = "test-user2@gmail.com"; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTestUser3[] = "test-user3@gmail.com"; 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid Append_en_US_InputMethods(std::vector<std::string>* out) { 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci out->push_back("xkb:us::eng"); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci out->push_back("xkb:us:intl:eng"); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci out->push_back("xkb:us:altgr-intl:eng"); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci out->push_back("xkb:us:dvorak:eng"); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci out->push_back("xkb:us:colemak:eng"); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::input_method::InputMethodManager::Get()->MigrateInputMethods(out); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FocusPODWaiter { 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FocusPODWaiter() : focused_(false), runner_(new content::MessageLoopRunner) { 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetOobeUI() 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->signin_screen_handler_for_test() 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->SetFocusPODCallbackForTesting( 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&FocusPODWaiter::OnFocusPOD, base::Unretained(this))); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~FocusPODWaiter() { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetOobeUI() 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->signin_screen_handler_for_test() 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->SetFocusPODCallbackForTesting(base::Closure()); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnFocusPOD() { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci focused_ = true; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (runner_.get()) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopForUI::current()->PostTask( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FROM_HERE, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&FocusPODWaiter::ExitMessageLoop, base::Unretained(this))); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ExitMessageLoop() { runner_->Quit(); } 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Wait() { 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (focused_) 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci runner_->Run(); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetOobeUI() 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->signin_screen_handler_for_test() 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->SetFocusPODCallbackForTesting(base::Closure()); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci runner_ = NULL; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeUI* GetOobeUI() { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeUI* oobe_ui = 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<chromeos::LoginDisplayHostImpl*>( 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::LoginDisplayHostImpl::default_host())->GetOobeUI(); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(oobe_ui); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return oobe_ui; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool focused_; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<content::MessageLoopRunner> runner_; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // anonymous namespace 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass LoginUIKeyboardTest : public chromeos::LoginManagerTest { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginUIKeyboardTest() : LoginManagerTest(false) {} 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~LoginUIKeyboardTest() {} 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUpOnMainThread() OVERRIDE { 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_methods.push_back("xkb:fr::fra"); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_methods.push_back("xkb:de::ger"); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::input_method::InputMethodManager::Get()->MigrateInputMethods( 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &user_input_methods); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginManagerTest::SetUpOnMainThread(); 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Should be called from PRE_ test so that local_state is saved to disk, and 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // reloaded in the main test. 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitUserLRUInputMethod() { 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* local_state = g_browser_process->local_state(); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::SetUserLRUInputMethodPreferenceForTesting( 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTestUser1, user_input_methods[0], local_state); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::SetUserLRUInputMethodPreferenceForTesting( 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTestUser2, user_input_methods[1], local_state); 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> user_input_methods; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(LoginUIKeyboardTest, PRE_CheckPODScreenDefault) { 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser1); 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser2); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartupUtils::MarkOobeCompleted(); 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Check default IME initialization, when there is no IME configuration in 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// local_state. 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(LoginUIKeyboardTest, CheckPODScreenDefault) { 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci js_checker().ExpectEQ("$('pod-row').pods.length", 2); 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> expected_input_methods; 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Append_en_US_InputMethods(&expected_input_methods); 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_input_methods, 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveInputMethodIds()); 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(LoginUIKeyboardTest, PRE_CheckPODScreenWithUsers) { 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser1); 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser2); 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitUserLRUInputMethod(); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartupUtils::MarkOobeCompleted(); 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(LoginUIKeyboardTest, CheckPODScreenWithUsers) { 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci js_checker().ExpectEQ("$('pod-row').pods.length", 2); 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(user_input_methods[0], 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetCurrentInputMethod() 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .id()); 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> expected_input_methods; 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Append_en_US_InputMethods(&expected_input_methods); 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Active IM for the first user (active user POD). 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_input_methods.push_back(user_input_methods[0]); 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_input_methods, 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveInputMethodIds()); 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FocusPODWaiter waiter; 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci js_checker().Evaluate("$('pod-row').focusPod($('pod-row').pods[1])"); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci waiter.Wait(); 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(user_input_methods[1], 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetCurrentInputMethod() 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .id()); 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass LoginUIKeyboardTestWithUsersAndOwner : public chromeos::LoginManagerTest { 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginUIKeyboardTestWithUsersAndOwner() : LoginManagerTest(false) {} 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~LoginUIKeyboardTestWithUsersAndOwner() {} 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginManagerTest::SetUpCommandLine(command_line); 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci command_line->AppendSwitch(switches::kStubCrosSettings); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginManagerTest::SetUpCommandLine(command_line); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUpOnMainThread() OVERRIDE { 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_methods.push_back("xkb:fr::fra"); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_methods.push_back("xkb:de::ger"); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_methods.push_back("xkb:pl::pol"); 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::input_method::InputMethodManager::Get()->MigrateInputMethods( 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &user_input_methods); 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CrosSettings::Get()->SetString(kDeviceOwner, kTestUser3); 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginManagerTest::SetUpOnMainThread(); 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Should be called from PRE_ test so that local_state is saved to disk, and 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // reloaded in the main test. 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitUserLRUInputMethod() { 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* local_state = g_browser_process->local_state(); 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::SetUserLRUInputMethodPreferenceForTesting( 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTestUser1, user_input_methods[0], local_state); 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::SetUserLRUInputMethodPreferenceForTesting( 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTestUser2, user_input_methods[1], local_state); 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::SetUserLRUInputMethodPreferenceForTesting( 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTestUser3, user_input_methods[2], local_state); 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci local_state->SetString(language_prefs::kPreferredKeyboardLayout, 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_input_methods[2]); 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CheckGaiaKeyboard(); 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> user_input_methods; 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid LoginUIKeyboardTestWithUsersAndOwner::CheckGaiaKeyboard() { 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> expected_input_methods; 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // kPreferredKeyboardLayout is now set to last focused POD. 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_input_methods.push_back(user_input_methods[0]); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Locale default input methods (the first one also is hardware IM). 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Append_en_US_InputMethods(&expected_input_methods); 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_input_methods, 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveInputMethodIds()); 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(LoginUIKeyboardTestWithUsersAndOwner, 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PRE_CheckPODScreenKeyboard) { 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser1); 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser2); 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RegisterUser(kTestUser3); 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitUserLRUInputMethod(); 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StartupUtils::MarkOobeCompleted(); 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(LoginUIKeyboardTestWithUsersAndOwner, 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckPODScreenKeyboard) { 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci js_checker().ExpectEQ("$('pod-row').pods.length", 3); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> expected_input_methods; 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Owner input method. 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_input_methods.push_back(user_input_methods[2]); 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Locale default input methods (the first one also is hardware IM). 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Append_en_US_InputMethods(&expected_input_methods); 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Active IM for the first user (active user POD). 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_input_methods.push_back(user_input_methods[0]); 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_input_methods, 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveInputMethodIds()); 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Switch to Gaia. 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci js_checker().Evaluate("$('add-user-button').click()"); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeScreenWaiter(OobeDisplay::SCREEN_GAIA_SIGNIN).Wait(); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckGaiaKeyboard(); 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Switch back. 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci js_checker().Evaluate("$('cancel-add-user-button').click()"); 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OobeScreenWaiter(OobeDisplay::SCREEN_ACCOUNT_PICKER).Wait(); 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_input_methods, 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci input_method::InputMethodManager::Get() 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveIMEState() 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetActiveInputMethodIds()); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace chromeos 279