Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1055)

Side by Side Diff: chrome/browser/chromeos/policy/device_local_account_browsertest.cc

Issue 1412813003: This CL replaces user_manager::UserID with AccountId. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@468875--Chrome-OS-handles-deletion-of-Gmail-account-poorly--Create-AccountID-structure-part2--user_names
Patch Set: Fix Win GN build. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <set> 6 #include <set>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/shell.h" 10 #include "ash/shell.h"
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 } 412 }
413 413
414 } // namespace 414 } // namespace
415 415
416 class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest, 416 class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest,
417 public user_manager::UserManager::Observer, 417 public user_manager::UserManager::Observer,
418 public chrome::BrowserListObserver, 418 public chrome::BrowserListObserver,
419 public extensions::AppWindowRegistry::Observer { 419 public extensions::AppWindowRegistry::Observer {
420 protected: 420 protected:
421 DeviceLocalAccountTest() 421 DeviceLocalAccountTest()
422 : user_id_1_(GenerateDeviceLocalAccountUserId( 422 : public_session_input_method_id_(
423 kAccountId1, DeviceLocalAccount::TYPE_PUBLIC_SESSION)), 423 base::StringPrintf(kPublicSessionInputMethodIDTemplate,
424 user_id_2_(GenerateDeviceLocalAccountUserId( 424 chromeos::extension_ime_util::kXkbExtensionId)),
425 kAccountId2, DeviceLocalAccount::TYPE_PUBLIC_SESSION)),
426 public_session_input_method_id_(base::StringPrintf(
427 kPublicSessionInputMethodIDTemplate,
428 chromeos::extension_ime_util::kXkbExtensionId)),
429 contents_(NULL) { 425 contents_(NULL) {
430 set_exit_when_last_browser_closes(false); 426 set_exit_when_last_browser_closes(false);
431 } 427 }
432 428
433 ~DeviceLocalAccountTest() override {} 429 ~DeviceLocalAccountTest() override {}
434 430
435 void SetUp() override { 431 void SetUp() override {
436 // Configure and start the test server. 432 // Configure and start the test server.
437 scoped_ptr<crypto::RSAPrivateKey> signing_key( 433 scoped_ptr<crypto::RSAPrivateKey> signing_key(
438 PolicyBuilder::CreateTestSigningKey()); 434 PolicyBuilder::CreateTestSigningKey());
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 em::DeviceLocalAccountsProto* device_local_accounts = 623 em::DeviceLocalAccountsProto* device_local_accounts =
628 proto.mutable_device_local_accounts(); 624 proto.mutable_device_local_accounts();
629 device_local_accounts->set_auto_login_id(kAccountId1); 625 device_local_accounts->set_auto_login_id(kAccountId1);
630 device_local_accounts->set_auto_login_delay(0); 626 device_local_accounts->set_auto_login_delay(0);
631 RefreshDevicePolicy(); 627 RefreshDevicePolicy();
632 ASSERT_TRUE(test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType, 628 ASSERT_TRUE(test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType,
633 std::string(), 629 std::string(),
634 proto.SerializeAsString())); 630 proto.SerializeAsString()));
635 } 631 }
636 632
637 void CheckPublicSessionPresent(const std::string& id) { 633 void CheckPublicSessionPresent(const AccountId& account_id) {
638 const user_manager::User* user = 634 const user_manager::User* user =
639 user_manager::UserManager::Get()->FindUser(id); 635 user_manager::UserManager::Get()->FindUser(account_id);
640 ASSERT_TRUE(user); 636 ASSERT_TRUE(user);
641 EXPECT_EQ(id, user->email()); 637 EXPECT_EQ(account_id, user->GetAccountId());
642 EXPECT_EQ(user_manager::USER_TYPE_PUBLIC_ACCOUNT, user->GetType()); 638 EXPECT_EQ(user_manager::USER_TYPE_PUBLIC_ACCOUNT, user->GetType());
643 } 639 }
644 640
645 base::FilePath GetExtensionCacheDirectoryForAccountID( 641 base::FilePath GetExtensionCacheDirectoryForAccountID(
646 const std::string& account_id) { 642 const std::string& account_id) {
647 base::FilePath extension_cache_root_dir; 643 base::FilePath extension_cache_root_dir;
648 if (!PathService::Get(chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS, 644 if (!PathService::Get(chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS,
649 &extension_cache_root_dir)) { 645 &extension_cache_root_dir)) {
650 ADD_FAILURE(); 646 ADD_FAILURE();
651 } 647 }
(...skipping 25 matching lines...) Expand all
677 const std::string& expected_display_name) { 673 const std::string& expected_display_name) {
678 DictionaryPrefValueWaiter("UserDisplayName", 674 DictionaryPrefValueWaiter("UserDisplayName",
679 user_id, 675 user_id,
680 expected_display_name).Wait(); 676 expected_display_name).Wait();
681 } 677 }
682 678
683 void WaitForPolicy() { 679 void WaitForPolicy() {
684 // Wait for the display name becoming available as that indicates 680 // Wait for the display name becoming available as that indicates
685 // device-local account policy is fully loaded, which is a prerequisite for 681 // device-local account policy is fully loaded, which is a prerequisite for
686 // successful login. 682 // successful login.
687 WaitForDisplayName(user_id_1_, kDisplayName1); 683 WaitForDisplayName(account_id_1_.GetUserEmail(), kDisplayName1);
688 } 684 }
689 685
690 void ExpandPublicSessionPod(bool expect_advanced) { 686 void ExpandPublicSessionPod(bool expect_advanced) {
691 bool advanced = false; 687 bool advanced = false;
692 // Click on the pod to expand it. 688 // Click on the pod to expand it.
693 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 689 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
694 contents_, 690 contents_,
695 base::StringPrintf( 691 base::StringPrintf(
696 "var pod =" 692 "var pod ="
697 " document.getElementById('pod-row').getPodWithUsername_('%s');" 693 " document.getElementById('pod-row').getPodWithUsername_('%s');"
698 "pod.click();" 694 "pod.click();"
699 "domAutomationController.send(pod.classList.contains('advanced'));", 695 "domAutomationController.send(pod.classList.contains('advanced'));",
700 user_id_1_.c_str()), 696 account_id_1_.GetUserEmail().c_str()),
701 &advanced)); 697 &advanced));
702 // Verify that the pod expanded to its basic/advanced form, as expected. 698 // Verify that the pod expanded to its basic/advanced form, as expected.
703 EXPECT_EQ(expect_advanced, advanced); 699 EXPECT_EQ(expect_advanced, advanced);
704 700
705 // Verify that the construction of the pod's language list did not affect 701 // Verify that the construction of the pod's language list did not affect
706 // the current ICU locale. 702 // the current ICU locale.
707 EXPECT_EQ(initial_language_, icu::Locale::getDefault().getLanguage()); 703 EXPECT_EQ(initial_language_, icu::Locale::getDefault().getLanguage());
708 } 704 }
709 705
710 // GetKeyboardLayoutsForLocale() posts a task to a background task runner. 706 // GetKeyboardLayoutsForLocale() posts a task to a background task runner.
(...skipping 23 matching lines...) Expand all
734 chromeos::LoginDisplayHostImpl* host = 730 chromeos::LoginDisplayHostImpl* host =
735 reinterpret_cast<chromeos::LoginDisplayHostImpl*>( 731 reinterpret_cast<chromeos::LoginDisplayHostImpl*>(
736 chromeos::LoginDisplayHostImpl::default_host()); 732 chromeos::LoginDisplayHostImpl::default_host());
737 ASSERT_TRUE(host); 733 ASSERT_TRUE(host);
738 host->StartSignInScreen(LoginScreenContext()); 734 host->StartSignInScreen(LoginScreenContext());
739 chromeos::ExistingUserController* controller = 735 chromeos::ExistingUserController* controller =
740 chromeos::ExistingUserController::current_controller(); 736 chromeos::ExistingUserController::current_controller();
741 ASSERT_TRUE(controller); 737 ASSERT_TRUE(controller);
742 738
743 chromeos::UserContext user_context(user_manager::USER_TYPE_PUBLIC_ACCOUNT, 739 chromeos::UserContext user_context(user_manager::USER_TYPE_PUBLIC_ACCOUNT,
744 user_id_1_); 740 account_id_1_.GetUserEmail());
745 user_context.SetPublicSessionLocale(locale); 741 user_context.SetPublicSessionLocale(locale);
746 user_context.SetPublicSessionInputMethod(input_method); 742 user_context.SetPublicSessionInputMethod(input_method);
747 controller->Login(user_context, chromeos::SigninSpecifics()); 743 controller->Login(user_context, chromeos::SigninSpecifics());
748 } 744 }
749 745
750 void WaitForSessionStart() { 746 void WaitForSessionStart() {
751 if (IsSessionStarted()) 747 if (IsSessionStarted())
752 return; 748 return;
753 content::WindowedNotificationObserver(chrome::NOTIFICATION_SESSION_STARTED, 749 content::WindowedNotificationObserver(chrome::NOTIFICATION_SESSION_STARTED,
754 base::Bind(IsSessionStarted)).Wait(); 750 base::Bind(IsSessionStarted)).Wait();
(...skipping 25 matching lines...) Expand all
780 WaitForPolicy(); 776 WaitForPolicy();
781 777
782 WaitForSessionStart(); 778 WaitForSessionStart();
783 779
784 EXPECT_EQ(locales[0], g_browser_process->GetApplicationLocale()); 780 EXPECT_EQ(locales[0], g_browser_process->GetApplicationLocale());
785 EXPECT_EQ(l10n_util::GetLanguage(locales[0]), 781 EXPECT_EQ(l10n_util::GetLanguage(locales[0]),
786 icu::Locale::getDefault().getLanguage()); 782 icu::Locale::getDefault().getLanguage());
787 VerifyKeyboardLayoutMatchesLocale(); 783 VerifyKeyboardLayoutMatchesLocale();
788 } 784 }
789 785
790 const std::string user_id_1_; 786 const AccountId account_id_1_ =
791 const std::string user_id_2_; 787 AccountId::FromUserEmail(GenerateDeviceLocalAccountUserId(
788 kAccountId1,
789 DeviceLocalAccount::TYPE_PUBLIC_SESSION));
790 const AccountId account_id_2_ =
791 AccountId::FromUserEmail(GenerateDeviceLocalAccountUserId(
792 kAccountId2,
793 DeviceLocalAccount::TYPE_PUBLIC_SESSION));
792 const std::string public_session_input_method_id_; 794 const std::string public_session_input_method_id_;
793 795
794 std::string initial_locale_; 796 std::string initial_locale_;
795 std::string initial_language_; 797 std::string initial_language_;
796 798
797 scoped_ptr<base::RunLoop> run_loop_; 799 scoped_ptr<base::RunLoop> run_loop_;
798 800
799 UserPolicyBuilder device_local_account_policy_; 801 UserPolicyBuilder device_local_account_policy_;
800 LocalPolicyTestServer test_server_; 802 LocalPolicyTestServer test_server_;
801 803
802 content::WebContents* contents_; 804 content::WebContents* contents_;
803 805
804 private: 806 private:
805 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountTest); 807 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountTest);
806 }; 808 };
807 809
808 static bool IsKnownUser(const std::string& account_id) { 810 static bool IsKnownUser(const AccountId& account_id) {
809 return user_manager::UserManager::Get()->IsKnownUser(account_id); 811 return user_manager::UserManager::Get()->IsKnownUser(account_id);
810 } 812 }
811 813
812 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, LoginScreen) { 814 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, LoginScreen) {
813 AddPublicSessionToDevicePolicy(kAccountId1); 815 AddPublicSessionToDevicePolicy(kAccountId1);
814 AddPublicSessionToDevicePolicy(kAccountId2); 816 AddPublicSessionToDevicePolicy(kAccountId2);
815 817
816 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 818 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED,
817 base::Bind(&IsKnownUser, user_id_1_)) 819 base::Bind(&IsKnownUser, account_id_1_))
818 .Wait(); 820 .Wait();
819 EXPECT_TRUE(IsKnownUser(user_id_2_)); 821 EXPECT_TRUE(IsKnownUser(account_id_2_));
820 822
821 CheckPublicSessionPresent(user_id_1_); 823 CheckPublicSessionPresent(account_id_1_);
822 CheckPublicSessionPresent(user_id_2_); 824 CheckPublicSessionPresent(account_id_2_);
823 } 825 }
824 826
825 // Flaky: http://crbug.com/512670. 827 // Flaky: http://crbug.com/512670.
826 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DISABLED_DisplayName) { 828 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DISABLED_DisplayName) {
827 UploadAndInstallDeviceLocalAccountPolicy(); 829 UploadAndInstallDeviceLocalAccountPolicy();
828 AddPublicSessionToDevicePolicy(kAccountId1); 830 AddPublicSessionToDevicePolicy(kAccountId1);
829 831
830 WaitForPolicy(); 832 WaitForPolicy();
831 833
832 // Verify that the display name is shown in the UI. 834 // Verify that the display name is shown in the UI.
833 const std::string get_compact_pod_display_name = base::StringPrintf( 835 const std::string get_compact_pod_display_name = base::StringPrintf(
834 "domAutomationController.send(document.getElementById('pod-row')" 836 "domAutomationController.send(document.getElementById('pod-row')"
835 " .getPodWithUsername_('%s').nameElement.textContent);", 837 " .getPodWithUsername_('%s').nameElement.textContent);",
836 user_id_1_.c_str()); 838 account_id_1_.GetUserEmail().c_str());
837 std::string display_name; 839 std::string display_name;
838 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 840 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
839 contents_, 841 contents_,
840 get_compact_pod_display_name, 842 get_compact_pod_display_name,
841 &display_name)); 843 &display_name));
842 EXPECT_EQ(kDisplayName1, display_name); 844 EXPECT_EQ(kDisplayName1, display_name);
843 const std::string get_expanded_pod_display_name = base::StringPrintf( 845 const std::string get_expanded_pod_display_name = base::StringPrintf(
844 "domAutomationController.send(document.getElementById('pod-row')" 846 "domAutomationController.send(document.getElementById('pod-row')"
845 " .getPodWithUsername_('%s').querySelector('.expanded-pane-name')" 847 " .getPodWithUsername_('%s').querySelector('.expanded-pane-name')"
846 " .textContent);", 848 " .textContent);",
847 user_id_1_.c_str()); 849 account_id_1_.GetUserEmail().c_str());
848 display_name.clear(); 850 display_name.clear();
849 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 851 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
850 contents_, 852 contents_,
851 get_expanded_pod_display_name, 853 get_expanded_pod_display_name,
852 &display_name)); 854 &display_name));
853 EXPECT_EQ(kDisplayName1, display_name); 855 EXPECT_EQ(kDisplayName1, display_name);
854 856
855 // Click on the pod to expand it. 857 // Click on the pod to expand it.
856 ASSERT_TRUE(content::ExecuteScript( 858 ASSERT_TRUE(content::ExecuteScript(
857 contents_, 859 contents_,
858 base::StringPrintf( 860 base::StringPrintf(
859 "document.getElementById('pod-row').getPodWithUsername_('%s')" 861 "document.getElementById('pod-row').getPodWithUsername_('%s')"
860 " .click();", 862 " .click();",
861 user_id_1_.c_str()))); 863 account_id_1_.GetUserEmail().c_str())));
862 864
863 // Change the display name. 865 // Change the display name.
864 device_local_account_policy_.payload().mutable_userdisplayname()->set_value( 866 device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
865 kDisplayName2); 867 kDisplayName2);
866 UploadAndInstallDeviceLocalAccountPolicy(); 868 UploadAndInstallDeviceLocalAccountPolicy();
867 policy::BrowserPolicyConnectorChromeOS* connector = 869 policy::BrowserPolicyConnectorChromeOS* connector =
868 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 870 g_browser_process->platform_part()->browser_policy_connector_chromeos();
869 DeviceLocalAccountPolicyBroker* broker = 871 DeviceLocalAccountPolicyBroker* broker =
870 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser( 872 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser(
871 user_id_1_); 873 account_id_1_.GetUserEmail());
872 ASSERT_TRUE(broker); 874 ASSERT_TRUE(broker);
873 broker->core()->store()->Load(); 875 broker->core()->store()->Load();
874 WaitForDisplayName(user_id_1_, kDisplayName2); 876 WaitForDisplayName(account_id_1_.GetUserEmail(), kDisplayName2);
875 877
876 // Verify that the new display name is shown in the UI. 878 // Verify that the new display name is shown in the UI.
877 display_name.clear(); 879 display_name.clear();
878 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 880 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
879 contents_, 881 contents_,
880 get_compact_pod_display_name, 882 get_compact_pod_display_name,
881 &display_name)); 883 &display_name));
882 EXPECT_EQ(kDisplayName2, display_name); 884 EXPECT_EQ(kDisplayName2, display_name);
883 display_name.clear(); 885 display_name.clear();
884 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 886 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
885 contents_, 887 contents_,
886 get_expanded_pod_display_name, 888 get_expanded_pod_display_name,
887 &display_name)); 889 &display_name));
888 EXPECT_EQ(kDisplayName2, display_name); 890 EXPECT_EQ(kDisplayName2, display_name);
889 891
890 // Verify that the pod is still expanded. This indicates that the UI updated 892 // Verify that the pod is still expanded. This indicates that the UI updated
891 // without reloading and losing state. 893 // without reloading and losing state.
892 bool expanded = false; 894 bool expanded = false;
893 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 895 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
894 contents_, 896 contents_,
895 base::StringPrintf( 897 base::StringPrintf(
896 "domAutomationController.send(document.getElementById('pod-row')" 898 "domAutomationController.send(document.getElementById('pod-row')"
897 " .getPodWithUsername_('%s').expanded);", 899 " .getPodWithUsername_('%s').expanded);",
898 user_id_1_.c_str()), 900 account_id_1_.GetUserEmail().c_str()),
899 &expanded)); 901 &expanded));
900 EXPECT_TRUE(expanded); 902 EXPECT_TRUE(expanded);
901 } 903 }
902 904
903 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, PolicyDownload) { 905 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, PolicyDownload) {
904 UploadDeviceLocalAccountPolicy(); 906 UploadDeviceLocalAccountPolicy();
905 AddPublicSessionToDevicePolicy(kAccountId1); 907 AddPublicSessionToDevicePolicy(kAccountId1);
906 908
907 WaitForPolicy(); 909 WaitForPolicy();
908 910
909 // Sanity check: The policy should be present now. 911 // Sanity check: The policy should be present now.
910 ASSERT_FALSE(session_manager_client()->device_local_account_policy( 912 ASSERT_FALSE(session_manager_client()->device_local_account_policy(
911 kAccountId1).empty()); 913 kAccountId1).empty());
912 } 914 }
913 915
914 static bool IsNotKnownUser(const std::string& account_id) { 916 static bool IsNotKnownUser(const AccountId& account_id) {
915 return !IsKnownUser(account_id); 917 return !IsKnownUser(account_id);
916 } 918 }
917 919
918 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, AccountListChange) { 920 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, AccountListChange) {
919 AddPublicSessionToDevicePolicy(kAccountId1); 921 AddPublicSessionToDevicePolicy(kAccountId1);
920 AddPublicSessionToDevicePolicy(kAccountId2); 922 AddPublicSessionToDevicePolicy(kAccountId2);
921 923
922 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 924 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED,
923 base::Bind(&IsKnownUser, user_id_1_)) 925 base::Bind(&IsKnownUser, account_id_1_))
924 .Wait(); 926 .Wait();
925 EXPECT_TRUE(IsKnownUser(user_id_2_)); 927 EXPECT_TRUE(IsKnownUser(account_id_2_));
926 928
927 // Update policy to remove kAccountId2. 929 // Update policy to remove kAccountId2.
928 em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); 930 em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
929 proto.mutable_device_local_accounts()->clear_account(); 931 proto.mutable_device_local_accounts()->clear_account();
930 AddPublicSessionToDevicePolicy(kAccountId1); 932 AddPublicSessionToDevicePolicy(kAccountId1);
931 933
932 em::ChromeDeviceSettingsProto policy; 934 em::ChromeDeviceSettingsProto policy;
933 policy.mutable_show_user_names()->set_show_user_names(true); 935 policy.mutable_show_user_names()->set_show_user_names(true);
934 em::DeviceLocalAccountInfoProto* account1 = 936 em::DeviceLocalAccountInfoProto* account1 =
935 policy.mutable_device_local_accounts()->add_account(); 937 policy.mutable_device_local_accounts()->add_account();
936 account1->set_account_id(kAccountId1); 938 account1->set_account_id(kAccountId1);
937 account1->set_type( 939 account1->set_type(
938 em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); 940 em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION);
939 941
940 test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType, std::string(), 942 test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType, std::string(),
941 policy.SerializeAsString()); 943 policy.SerializeAsString());
942 g_browser_process->policy_service()->RefreshPolicies(base::Closure()); 944 g_browser_process->policy_service()->RefreshPolicies(base::Closure());
943 945
944 // Make sure the second device-local account disappears. 946 // Make sure the second device-local account disappears.
945 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 947 content::WindowedNotificationObserver(
946 base::Bind(&IsNotKnownUser, user_id_2_)) 948 chrome::NOTIFICATION_USER_LIST_CHANGED,
949 base::Bind(&IsNotKnownUser, account_id_2_))
947 .Wait(); 950 .Wait();
948 } 951 }
949 952
950 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, StartSession) { 953 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, StartSession) {
951 // Specify startup pages. 954 // Specify startup pages.
952 device_local_account_policy_.payload().mutable_restoreonstartup()->set_value( 955 device_local_account_policy_.payload().mutable_restoreonstartup()->set_value(
953 SessionStartupPref::kPrefValueURLs); 956 SessionStartupPref::kPrefValueURLs);
954 em::StringListPolicyProto* startup_urls_proto = 957 em::StringListPolicyProto* startup_urls_proto =
955 device_local_account_policy_.payload().mutable_restoreonstartupurls(); 958 device_local_account_policy_.payload().mutable_restoreonstartupurls();
956 for (size_t i = 0; i < arraysize(kStartupURLs); ++i) 959 for (size_t i = 0; i < arraysize(kStartupURLs); ++i)
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 // Verify that the app was downloaded to the account's extension cache. 1074 // Verify that the app was downloaded to the account's extension cache.
1072 base::FilePath test_dir; 1075 base::FilePath test_dir;
1073 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); 1076 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir));
1074 EXPECT_TRUE(ContentsEqual( 1077 EXPECT_TRUE(ContentsEqual(
1075 GetCacheCRXFile(kAccountId1, kHostedAppID, kHostedAppVersion), 1078 GetCacheCRXFile(kAccountId1, kHostedAppID, kHostedAppVersion),
1076 test_dir.Append(kHostedAppCRXPath))); 1079 test_dir.Append(kHostedAppCRXPath)));
1077 1080
1078 // Verify that the extension was removed from the account's extension cache 1081 // Verify that the extension was removed from the account's extension cache
1079 // after the installation failure. 1082 // after the installation failure.
1080 DeviceLocalAccountPolicyBroker* broker = 1083 DeviceLocalAccountPolicyBroker* broker =
1081 g_browser_process->platform_part()->browser_policy_connector_chromeos()-> 1084 g_browser_process->platform_part()
1082 GetDeviceLocalAccountPolicyService()->GetBrokerForUser(user_id_1_); 1085 ->browser_policy_connector_chromeos()
1086 ->GetDeviceLocalAccountPolicyService()
1087 ->GetBrokerForUser(account_id_1_.GetUserEmail());
1083 ASSERT_TRUE(broker); 1088 ASSERT_TRUE(broker);
1084 chromeos::ExternalCache* cache = 1089 chromeos::ExternalCache* cache =
1085 broker->extension_loader()->GetExternalCacheForTesting(); 1090 broker->extension_loader()->GetExternalCacheForTesting();
1086 ASSERT_TRUE(cache); 1091 ASSERT_TRUE(cache);
1087 EXPECT_FALSE(cache->GetExtension(kGoodExtensionID, NULL, NULL)); 1092 EXPECT_FALSE(cache->GetExtension(kGoodExtensionID, NULL, NULL));
1088 } 1093 }
1089 1094
1090 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, ExtensionsCached) { 1095 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, ExtensionsCached) {
1091 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 1096 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
1092 1097
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 EXPECT_TRUE(extension_service->GetExtensionById(kHostedAppID, true)); 1149 EXPECT_TRUE(extension_service->GetExtensionById(kHostedAppID, true));
1145 1150
1146 // Verify that the extension was not installed. 1151 // Verify that the extension was not installed.
1147 EXPECT_FALSE(extension_service->GetExtensionById(kGoodExtensionID, true)); 1152 EXPECT_FALSE(extension_service->GetExtensionById(kGoodExtensionID, true));
1148 1153
1149 // Verify that the app is still in the account's extension cache. 1154 // Verify that the app is still in the account's extension cache.
1150 EXPECT_TRUE(PathExists(cached_hosted_app)); 1155 EXPECT_TRUE(PathExists(cached_hosted_app));
1151 1156
1152 // Verify that the extension was removed from the account's extension cache. 1157 // Verify that the extension was removed from the account's extension cache.
1153 DeviceLocalAccountPolicyBroker* broker = 1158 DeviceLocalAccountPolicyBroker* broker =
1154 g_browser_process->platform_part()->browser_policy_connector_chromeos()-> 1159 g_browser_process->platform_part()
1155 GetDeviceLocalAccountPolicyService()->GetBrokerForUser(user_id_1_); 1160 ->browser_policy_connector_chromeos()
1161 ->GetDeviceLocalAccountPolicyService()
1162 ->GetBrokerForUser(account_id_1_.GetUserEmail());
1156 ASSERT_TRUE(broker); 1163 ASSERT_TRUE(broker);
1157 chromeos::ExternalCache* cache = 1164 chromeos::ExternalCache* cache =
1158 broker->extension_loader()->GetExternalCacheForTesting(); 1165 broker->extension_loader()->GetExternalCacheForTesting();
1159 ASSERT_TRUE(cache); 1166 ASSERT_TRUE(cache);
1160 EXPECT_FALSE(cache->GetExtension(kGoodExtensionID, NULL, NULL)); 1167 EXPECT_FALSE(cache->GetExtension(kGoodExtensionID, NULL, NULL));
1161 } 1168 }
1162 1169
1163 static void OnPutExtension(scoped_ptr<base::RunLoop>* run_loop, 1170 static void OnPutExtension(scoped_ptr<base::RunLoop>* run_loop,
1164 const base::FilePath& file_path, 1171 const base::FilePath& file_path,
1165 bool file_ownership_passed) { 1172 bool file_ownership_passed) {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 test::ConstructExternalDataReference(kExternalDataURL, kExternalData); 1311 test::ConstructExternalDataReference(kExternalDataURL, kExternalData);
1305 std::string policy; 1312 std::string policy;
1306 base::JSONWriter::Write(*metadata, &policy); 1313 base::JSONWriter::Write(*metadata, &policy);
1307 device_local_account_policy_.payload().mutable_useravatarimage()->set_value( 1314 device_local_account_policy_.payload().mutable_useravatarimage()->set_value(
1308 policy); 1315 policy);
1309 UploadAndInstallDeviceLocalAccountPolicy(); 1316 UploadAndInstallDeviceLocalAccountPolicy();
1310 policy::BrowserPolicyConnectorChromeOS* connector = 1317 policy::BrowserPolicyConnectorChromeOS* connector =
1311 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1318 g_browser_process->platform_part()->browser_policy_connector_chromeos();
1312 DeviceLocalAccountPolicyBroker* broker = 1319 DeviceLocalAccountPolicyBroker* broker =
1313 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser( 1320 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser(
1314 user_id_1_); 1321 account_id_1_.GetUserEmail());
1315 ASSERT_TRUE(broker); 1322 ASSERT_TRUE(broker);
1316 broker->core()->store()->Load(); 1323 broker->core()->store()->Load();
1317 1324
1318 // The external data should be fetched and cached automatically. Wait for this 1325 // The external data should be fetched and cached automatically. Wait for this
1319 // fetch. 1326 // fetch.
1320 run_loop->Run(); 1327 run_loop->Run();
1321 1328
1322 // Stop serving external data at |kExternalDataURL|. 1329 // Stop serving external data at |kExternalDataURL|.
1323 fetcher_factory.reset(); 1330 fetcher_factory.reset();
1324 1331
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1394 .spec(), 1401 .spec(),
1395 image_data), 1402 image_data),
1396 &policy); 1403 &policy);
1397 device_local_account_policy_.payload().mutable_useravatarimage()->set_value( 1404 device_local_account_policy_.payload().mutable_useravatarimage()->set_value(
1398 policy); 1405 policy);
1399 UploadAndInstallDeviceLocalAccountPolicy(); 1406 UploadAndInstallDeviceLocalAccountPolicy();
1400 policy::BrowserPolicyConnectorChromeOS* connector = 1407 policy::BrowserPolicyConnectorChromeOS* connector =
1401 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1408 g_browser_process->platform_part()->browser_policy_connector_chromeos();
1402 DeviceLocalAccountPolicyBroker* broker = 1409 DeviceLocalAccountPolicyBroker* broker =
1403 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser( 1410 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser(
1404 user_id_1_); 1411 account_id_1_.GetUserEmail());
1405 ASSERT_TRUE(broker); 1412 ASSERT_TRUE(broker);
1406 1413
1407 run_loop_.reset(new base::RunLoop); 1414 run_loop_.reset(new base::RunLoop);
1408 user_manager::UserManager::Get()->AddObserver(this); 1415 user_manager::UserManager::Get()->AddObserver(this);
1409 broker->core()->store()->Load(); 1416 broker->core()->store()->Load();
1410 run_loop_->Run(); 1417 run_loop_->Run();
1411 user_manager::UserManager::Get()->RemoveObserver(this); 1418 user_manager::UserManager::Get()->RemoveObserver(this);
1412 1419
1413 scoped_ptr<gfx::ImageSkia> policy_image = chromeos::test::ImageLoader( 1420 scoped_ptr<gfx::ImageSkia> policy_image = chromeos::test::ImageLoader(
1414 test_dir.Append(chromeos::test::kUserAvatarImage1RelativePath)).Load(); 1421 test_dir.Append(chromeos::test::kUserAvatarImage1RelativePath)).Load();
1415 ASSERT_TRUE(policy_image); 1422 ASSERT_TRUE(policy_image);
1416 1423
1417 const user_manager::User* user = 1424 const user_manager::User* user =
1418 user_manager::UserManager::Get()->FindUser(user_id_1_); 1425 user_manager::UserManager::Get()->FindUser(account_id_1_);
1419 ASSERT_TRUE(user); 1426 ASSERT_TRUE(user);
1420 1427
1421 base::FilePath user_data_dir; 1428 base::FilePath user_data_dir;
1422 ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)); 1429 ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir));
1423 const base::FilePath saved_image_path = 1430 const base::FilePath saved_image_path =
1424 user_data_dir.Append(user_id_1_).AddExtension("jpg"); 1431 user_data_dir.Append(account_id_1_.GetUserEmail()).AddExtension("jpg");
1425 1432
1426 EXPECT_FALSE(user->HasDefaultImage()); 1433 EXPECT_FALSE(user->HasDefaultImage());
1427 EXPECT_EQ(user_manager::User::USER_IMAGE_EXTERNAL, user->image_index()); 1434 EXPECT_EQ(user_manager::User::USER_IMAGE_EXTERNAL, user->image_index());
1428 EXPECT_TRUE(chromeos::test::AreImagesEqual(*policy_image, user->GetImage())); 1435 EXPECT_TRUE(chromeos::test::AreImagesEqual(*policy_image, user->GetImage()));
1429 const base::DictionaryValue* images_pref = 1436 const base::DictionaryValue* images_pref =
1430 g_browser_process->local_state()->GetDictionary("user_image_info"); 1437 g_browser_process->local_state()->GetDictionary("user_image_info");
1431 ASSERT_TRUE(images_pref); 1438 ASSERT_TRUE(images_pref);
1432 const base::DictionaryValue* image_properties; 1439 const base::DictionaryValue* image_properties;
1433 ASSERT_TRUE(images_pref->GetDictionaryWithoutPathExpansion( 1440 ASSERT_TRUE(images_pref->GetDictionaryWithoutPathExpansion(
1434 user_id_1_, 1441 account_id_1_.GetUserEmail(), &image_properties));
1435 &image_properties));
1436 int image_index; 1442 int image_index;
1437 std::string image_path; 1443 std::string image_path;
1438 ASSERT_TRUE(image_properties->GetInteger("index", &image_index)); 1444 ASSERT_TRUE(image_properties->GetInteger("index", &image_index));
1439 ASSERT_TRUE(image_properties->GetString("path", &image_path)); 1445 ASSERT_TRUE(image_properties->GetString("path", &image_path));
1440 EXPECT_EQ(user_manager::User::USER_IMAGE_EXTERNAL, image_index); 1446 EXPECT_EQ(user_manager::User::USER_IMAGE_EXTERNAL, image_index);
1441 EXPECT_EQ(saved_image_path.value(), image_path); 1447 EXPECT_EQ(saved_image_path.value(), image_path);
1442 1448
1443 scoped_ptr<gfx::ImageSkia> saved_image = 1449 scoped_ptr<gfx::ImageSkia> saved_image =
1444 chromeos::test::ImageLoader(saved_image_path).Load(); 1450 chromeos::test::ImageLoader(saved_image_path).Load();
1445 ASSERT_TRUE(saved_image); 1451 ASSERT_TRUE(saved_image);
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 WaitForPolicy(); 1617 WaitForPolicy();
1612 1618
1613 ExpandPublicSessionPod(false); 1619 ExpandPublicSessionPod(false);
1614 1620
1615 // Click the enter button to start the session. 1621 // Click the enter button to start the session.
1616 ASSERT_TRUE(content::ExecuteScript( 1622 ASSERT_TRUE(content::ExecuteScript(
1617 contents_, 1623 contents_,
1618 base::StringPrintf( 1624 base::StringPrintf(
1619 "document.getElementById('pod-row').getPodWithUsername_('%s')" 1625 "document.getElementById('pod-row').getPodWithUsername_('%s')"
1620 " .querySelector('.enter-button').click();", 1626 " .querySelector('.enter-button').click();",
1621 user_id_1_.c_str()))); 1627 account_id_1_.GetUserEmail().c_str())));
1622 1628
1623 WaitForSessionStart(); 1629 WaitForSessionStart();
1624 1630
1625 // Verify that the locale has not changed and the first keyboard layout 1631 // Verify that the locale has not changed and the first keyboard layout
1626 // applicable to the locale was chosen. 1632 // applicable to the locale was chosen.
1627 EXPECT_EQ(initial_locale_, g_browser_process->GetApplicationLocale()); 1633 EXPECT_EQ(initial_locale_, g_browser_process->GetApplicationLocale());
1628 EXPECT_EQ(initial_language_, icu::Locale::getDefault().getLanguage()); 1634 EXPECT_EQ(initial_language_, icu::Locale::getDefault().getLanguage());
1629 VerifyKeyboardLayoutMatchesLocale(); 1635 VerifyKeyboardLayoutMatchesLocale();
1630 } 1636 }
1631 1637
1632 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, NoRecommendedLocaleSwitch) { 1638 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, NoRecommendedLocaleSwitch) {
1633 UploadAndInstallDeviceLocalAccountPolicy(); 1639 UploadAndInstallDeviceLocalAccountPolicy();
1634 AddPublicSessionToDevicePolicy(kAccountId1); 1640 AddPublicSessionToDevicePolicy(kAccountId1);
1635 1641
1636 WaitForPolicy(); 1642 WaitForPolicy();
1637 1643
1638 ExpandPublicSessionPod(false); 1644 ExpandPublicSessionPod(false);
1639 1645
1640 // Click the link that switches the pod to its advanced form. Verify that the 1646 // Click the link that switches the pod to its advanced form. Verify that the
1641 // pod switches from basic to advanced. 1647 // pod switches from basic to advanced.
1642 bool advanced = false; 1648 bool advanced = false;
1643 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1649 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1644 contents_, 1650 contents_,
1645 base::StringPrintf( 1651 base::StringPrintf(
1646 "var pod =" 1652 "var pod ="
1647 " document.getElementById('pod-row').getPodWithUsername_('%s');" 1653 " document.getElementById('pod-row').getPodWithUsername_('%s');"
1648 "pod.querySelector('.language-and-input').click();" 1654 "pod.querySelector('.language-and-input').click();"
1649 "domAutomationController.send(pod.classList.contains('advanced'));", 1655 "domAutomationController.send(pod.classList.contains('advanced'));",
1650 user_id_1_.c_str()), 1656 account_id_1_.GetUserEmail().c_str()),
1651 &advanced)); 1657 &advanced));
1652 EXPECT_FALSE(advanced); 1658 EXPECT_FALSE(advanced);
1653 1659
1654 // Manually select a different locale. 1660 // Manually select a different locale.
1655 ASSERT_TRUE(content::ExecuteScript( 1661 ASSERT_TRUE(content::ExecuteScript(
1656 contents_, 1662 contents_,
1657 base::StringPrintf( 1663 base::StringPrintf(
1658 "var languageSelect = document.getElementById('pod-row')" 1664 "var languageSelect = document.getElementById('pod-row')"
1659 " .getPodWithUsername_('%s').querySelector('.language-select');" 1665 " .getPodWithUsername_('%s').querySelector('.language-select');"
1660 "languageSelect.value = '%s';" 1666 "languageSelect.value = '%s';"
1661 "var event = document.createEvent('HTMLEvents');" 1667 "var event = document.createEvent('HTMLEvents');"
1662 "event.initEvent('change', false, true);" 1668 "event.initEvent('change', false, true);"
1663 "languageSelect.dispatchEvent(event);", 1669 "languageSelect.dispatchEvent(event);",
1664 user_id_1_.c_str(), 1670 account_id_1_.GetUserEmail().c_str(), kPublicSessionLocale)));
1665 kPublicSessionLocale)));
1666 1671
1667 // The UI will have requested an updated list of keyboard layouts at this 1672 // The UI will have requested an updated list of keyboard layouts at this
1668 // point. Wait for the constructions of this list to finish. 1673 // point. Wait for the constructions of this list to finish.
1669 WaitForGetKeyboardLayoutsForLocaleToFinish(); 1674 WaitForGetKeyboardLayoutsForLocaleToFinish();
1670 1675
1671 // Manually select a different keyboard layout and click the enter button to 1676 // Manually select a different keyboard layout and click the enter button to
1672 // start the session. 1677 // start the session.
1673 ASSERT_TRUE(content::ExecuteScript( 1678 ASSERT_TRUE(content::ExecuteScript(
1674 contents_, 1679 contents_,
1675 base::StringPrintf( 1680 base::StringPrintf(
1676 "var pod =" 1681 "var pod ="
1677 " document.getElementById('pod-row').getPodWithUsername_('%s');" 1682 " document.getElementById('pod-row').getPodWithUsername_('%s');"
1678 "pod.querySelector('.keyboard-select').value = '%s';" 1683 "pod.querySelector('.keyboard-select').value = '%s';"
1679 "pod.querySelector('.enter-button').click();", 1684 "pod.querySelector('.enter-button').click();",
1680 user_id_1_.c_str(), 1685 account_id_1_.GetUserEmail().c_str(),
1681 public_session_input_method_id_.c_str()))); 1686 public_session_input_method_id_.c_str())));
1682 1687
1683 WaitForSessionStart(); 1688 WaitForSessionStart();
1684 1689
1685 // Verify that the locale and keyboard layout have been applied. 1690 // Verify that the locale and keyboard layout have been applied.
1686 EXPECT_EQ(kPublicSessionLocale, g_browser_process->GetApplicationLocale()); 1691 EXPECT_EQ(kPublicSessionLocale, g_browser_process->GetApplicationLocale());
1687 EXPECT_EQ(l10n_util::GetLanguage(kPublicSessionLocale), 1692 EXPECT_EQ(l10n_util::GetLanguage(kPublicSessionLocale),
1688 icu::Locale::getDefault().getLanguage()); 1693 icu::Locale::getDefault().getLanguage());
1689 EXPECT_EQ(public_session_input_method_id_, 1694 EXPECT_EQ(public_session_input_method_id_,
1690 chromeos::input_method::InputMethodManager::Get() 1695 chromeos::input_method::InputMethodManager::Get()
(...skipping 12 matching lines...) Expand all
1703 WaitForPolicy(); 1708 WaitForPolicy();
1704 1709
1705 ExpandPublicSessionPod(false); 1710 ExpandPublicSessionPod(false);
1706 1711
1707 // Click the enter button to start the session. 1712 // Click the enter button to start the session.
1708 ASSERT_TRUE(content::ExecuteScript( 1713 ASSERT_TRUE(content::ExecuteScript(
1709 contents_, 1714 contents_,
1710 base::StringPrintf( 1715 base::StringPrintf(
1711 "document.getElementById('pod-row').getPodWithUsername_('%s')" 1716 "document.getElementById('pod-row').getPodWithUsername_('%s')"
1712 " .querySelector('.enter-button').click();", 1717 " .querySelector('.enter-button').click();",
1713 user_id_1_.c_str()))); 1718 account_id_1_.GetUserEmail().c_str())));
1714 1719
1715 WaitForSessionStart(); 1720 WaitForSessionStart();
1716 1721
1717 // Verify that the recommended locale has been applied and the first keyboard 1722 // Verify that the recommended locale has been applied and the first keyboard
1718 // layout applicable to the locale was chosen. 1723 // layout applicable to the locale was chosen.
1719 EXPECT_EQ(kSingleRecommendedLocale[0], 1724 EXPECT_EQ(kSingleRecommendedLocale[0],
1720 g_browser_process->GetApplicationLocale()); 1725 g_browser_process->GetApplicationLocale());
1721 EXPECT_EQ(l10n_util::GetLanguage(kSingleRecommendedLocale[0]), 1726 EXPECT_EQ(l10n_util::GetLanguage(kSingleRecommendedLocale[0]),
1722 icu::Locale::getDefault().getLanguage()); 1727 icu::Locale::getDefault().getLanguage());
1723 VerifyKeyboardLayoutMatchesLocale(); 1728 VerifyKeyboardLayoutMatchesLocale();
(...skipping 12 matching lines...) Expand all
1736 1741
1737 // Verify that the pod shows a list of locales beginning with the recommended 1742 // Verify that the pod shows a list of locales beginning with the recommended
1738 // ones, followed by others. 1743 // ones, followed by others.
1739 const std::string get_locale_list = base::StringPrintf( 1744 const std::string get_locale_list = base::StringPrintf(
1740 "var languageSelect = document.getElementById('pod-row')" 1745 "var languageSelect = document.getElementById('pod-row')"
1741 " .getPodWithUsername_('%s').querySelector('.language-select');" 1746 " .getPodWithUsername_('%s').querySelector('.language-select');"
1742 "var locales = [];" 1747 "var locales = [];"
1743 "for (var i = 0; i < languageSelect.length; ++i)" 1748 "for (var i = 0; i < languageSelect.length; ++i)"
1744 " locales.push(languageSelect.options[i].value);" 1749 " locales.push(languageSelect.options[i].value);"
1745 "domAutomationController.send(JSON.stringify(locales));", 1750 "domAutomationController.send(JSON.stringify(locales));",
1746 user_id_1_.c_str()); 1751 account_id_1_.GetUserEmail().c_str());
1747 std::string json; 1752 std::string json;
1748 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_, 1753 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
1749 get_locale_list, 1754 get_locale_list,
1750 &json)); 1755 &json));
1751 scoped_ptr<base::Value> value_ptr = base::JSONReader::Read(json); 1756 scoped_ptr<base::Value> value_ptr = base::JSONReader::Read(json);
1752 const base::ListValue* locales = NULL; 1757 const base::ListValue* locales = NULL;
1753 ASSERT_TRUE(value_ptr); 1758 ASSERT_TRUE(value_ptr);
1754 ASSERT_TRUE(value_ptr->GetAsList(&locales)); 1759 ASSERT_TRUE(value_ptr->GetAsList(&locales));
1755 EXPECT_LT(arraysize(kRecommendedLocales1), locales->GetSize()); 1760 EXPECT_LT(arraysize(kRecommendedLocales1), locales->GetSize());
1756 1761
(...skipping 10 matching lines...) Expand all
1767 for (size_t i = 0; i < arraysize(kRecommendedLocales1); ++i) 1772 for (size_t i = 0; i < arraysize(kRecommendedLocales1); ++i)
1768 recommended_locales.insert(kRecommendedLocales1[i]); 1773 recommended_locales.insert(kRecommendedLocales1[i]);
1769 for (size_t i = arraysize(kRecommendedLocales1); i < locales->GetSize(); 1774 for (size_t i = arraysize(kRecommendedLocales1); i < locales->GetSize();
1770 ++i) { 1775 ++i) {
1771 std::string locale; 1776 std::string locale;
1772 EXPECT_TRUE(locales->GetString(i, &locale)); 1777 EXPECT_TRUE(locales->GetString(i, &locale));
1773 EXPECT_EQ(recommended_locales.end(), recommended_locales.find(locale)); 1778 EXPECT_EQ(recommended_locales.end(), recommended_locales.find(locale));
1774 } 1779 }
1775 1780
1776 // Verify that the first recommended locale is selected. 1781 // Verify that the first recommended locale is selected.
1777 const std::string get_selected_locale = 1782 const std::string get_selected_locale = base::StringPrintf(
1778 base::StringPrintf( 1783 "domAutomationController.send(document.getElementById('pod-row')"
1779 "domAutomationController.send(document.getElementById('pod-row')" 1784 " .getPodWithUsername_('%s').querySelector('.language-select')"
1780 " .getPodWithUsername_('%s').querySelector('.language-select')" 1785 " .value);",
1781 " .value);", 1786 account_id_1_.GetUserEmail().c_str());
1782 user_id_1_.c_str());
1783 std::string selected_locale; 1787 std::string selected_locale;
1784 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_, 1788 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
1785 get_selected_locale, 1789 get_selected_locale,
1786 &selected_locale)); 1790 &selected_locale));
1787 EXPECT_EQ(kRecommendedLocales1[0], selected_locale); 1791 EXPECT_EQ(kRecommendedLocales1[0], selected_locale);
1788 1792
1789 // Change the list of recommended locales. 1793 // Change the list of recommended locales.
1790 SetRecommendedLocales(kRecommendedLocales2, arraysize(kRecommendedLocales2)); 1794 SetRecommendedLocales(kRecommendedLocales2, arraysize(kRecommendedLocales2));
1791 1795
1792 // Also change the display name as it is easy to ensure that policy has been 1796 // Also change the display name as it is easy to ensure that policy has been
1793 // updated by waiting for a display name change. 1797 // updated by waiting for a display name change.
1794 device_local_account_policy_.payload().mutable_userdisplayname()->set_value( 1798 device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
1795 kDisplayName2); 1799 kDisplayName2);
1796 UploadAndInstallDeviceLocalAccountPolicy(); 1800 UploadAndInstallDeviceLocalAccountPolicy();
1797 policy::BrowserPolicyConnectorChromeOS* connector = 1801 policy::BrowserPolicyConnectorChromeOS* connector =
1798 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1802 g_browser_process->platform_part()->browser_policy_connector_chromeos();
1799 DeviceLocalAccountPolicyBroker* broker = 1803 DeviceLocalAccountPolicyBroker* broker =
1800 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser( 1804 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser(
1801 user_id_1_); 1805 account_id_1_.GetUserEmail());
1802 ASSERT_TRUE(broker); 1806 ASSERT_TRUE(broker);
1803 broker->core()->store()->Load(); 1807 broker->core()->store()->Load();
1804 WaitForDisplayName(user_id_1_, kDisplayName2); 1808 WaitForDisplayName(account_id_1_.GetUserEmail(), kDisplayName2);
1805 1809
1806 // Verify that the new list of locales is shown in the UI. 1810 // Verify that the new list of locales is shown in the UI.
1807 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_, 1811 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
1808 get_locale_list, 1812 get_locale_list,
1809 &json)); 1813 &json));
1810 value_ptr = base::JSONReader::Read(json); 1814 value_ptr = base::JSONReader::Read(json);
1811 locales = NULL; 1815 locales = NULL;
1812 ASSERT_TRUE(value_ptr); 1816 ASSERT_TRUE(value_ptr);
1813 ASSERT_TRUE(value_ptr->GetAsList(&locales)); 1817 ASSERT_TRUE(value_ptr->GetAsList(&locales));
1814 EXPECT_LT(arraysize(kRecommendedLocales2), locales->GetSize()); 1818 EXPECT_LT(arraysize(kRecommendedLocales2), locales->GetSize());
(...skipping 12 matching lines...) Expand all
1827 // Manually select a different locale. 1831 // Manually select a different locale.
1828 ASSERT_TRUE(content::ExecuteScript( 1832 ASSERT_TRUE(content::ExecuteScript(
1829 contents_, 1833 contents_,
1830 base::StringPrintf( 1834 base::StringPrintf(
1831 "var languageSelect = document.getElementById('pod-row')" 1835 "var languageSelect = document.getElementById('pod-row')"
1832 " .getPodWithUsername_('%s').querySelector('.language-select');" 1836 " .getPodWithUsername_('%s').querySelector('.language-select');"
1833 "languageSelect.value = '%s';" 1837 "languageSelect.value = '%s';"
1834 "var event = document.createEvent('HTMLEvents');" 1838 "var event = document.createEvent('HTMLEvents');"
1835 "event.initEvent('change', false, true);" 1839 "event.initEvent('change', false, true);"
1836 "languageSelect.dispatchEvent(event);", 1840 "languageSelect.dispatchEvent(event);",
1837 user_id_1_.c_str(), 1841 account_id_1_.GetUserEmail().c_str(), kPublicSessionLocale)));
1838 kPublicSessionLocale)));
1839 1842
1840 // Change the list of recommended locales. 1843 // Change the list of recommended locales.
1841 SetRecommendedLocales(kRecommendedLocales2, arraysize(kRecommendedLocales2)); 1844 SetRecommendedLocales(kRecommendedLocales2, arraysize(kRecommendedLocales2));
1842 device_local_account_policy_.payload().mutable_userdisplayname()->set_value( 1845 device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
1843 kDisplayName1); 1846 kDisplayName1);
1844 UploadAndInstallDeviceLocalAccountPolicy(); 1847 UploadAndInstallDeviceLocalAccountPolicy();
1845 broker->core()->store()->Load(); 1848 broker->core()->store()->Load();
1846 WaitForDisplayName(user_id_1_, kDisplayName1); 1849 WaitForDisplayName(account_id_1_.GetUserEmail(), kDisplayName1);
1847 1850
1848 // Verify that the manually selected locale is still selected. 1851 // Verify that the manually selected locale is still selected.
1849 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_, 1852 ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
1850 get_selected_locale, 1853 get_selected_locale,
1851 &selected_locale)); 1854 &selected_locale));
1852 EXPECT_EQ(kPublicSessionLocale, selected_locale); 1855 EXPECT_EQ(kPublicSessionLocale, selected_locale);
1853 1856
1854 // The UI will request an updated list of keyboard layouts at this point. Wait 1857 // The UI will request an updated list of keyboard layouts at this point. Wait
1855 // for the constructions of this list to finish. 1858 // for the constructions of this list to finish.
1856 WaitForGetKeyboardLayoutsForLocaleToFinish(); 1859 WaitForGetKeyboardLayoutsForLocaleToFinish();
1857 1860
1858 // Manually select a different keyboard layout. 1861 // Manually select a different keyboard layout.
1859 ASSERT_TRUE(content::ExecuteScript( 1862 ASSERT_TRUE(content::ExecuteScript(
1860 contents_, 1863 contents_,
1861 base::StringPrintf( 1864 base::StringPrintf(
1862 "document.getElementById('pod-row').getPodWithUsername_('%s')" 1865 "document.getElementById('pod-row').getPodWithUsername_('%s')"
1863 " .querySelector('.keyboard-select').value = '%s';", 1866 " .querySelector('.keyboard-select').value = '%s';",
1864 user_id_1_.c_str(), 1867 account_id_1_.GetUserEmail().c_str(),
1865 public_session_input_method_id_.c_str()))); 1868 public_session_input_method_id_.c_str())));
1866 1869
1867 // Click on a different pod, causing focus to shift away and the pod to 1870 // Click on a different pod, causing focus to shift away and the pod to
1868 // contract. 1871 // contract.
1869 ASSERT_TRUE(content::ExecuteScript( 1872 ASSERT_TRUE(content::ExecuteScript(
1870 contents_, 1873 contents_,
1871 base::StringPrintf( 1874 base::StringPrintf(
1872 "document.getElementById('pod-row').getPodWithUsername_('%s')" 1875 "document.getElementById('pod-row').getPodWithUsername_('%s')"
1873 " .click();", 1876 " .click();",
1874 user_id_2_.c_str()))); 1877 account_id_2_.GetUserEmail().c_str())));
1875 1878
1876 // Click on the pod again, causing it to expand again. Verify that the pod has 1879 // Click on the pod again, causing it to expand again. Verify that the pod has
1877 // kept all its state (the advanced form is being shown, the manually selected 1880 // kept all its state (the advanced form is being shown, the manually selected
1878 // locale and keyboard layout are selected). 1881 // locale and keyboard layout are selected).
1879 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 1882 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
1880 contents_, 1883 contents_,
1881 base::StringPrintf( 1884 base::StringPrintf(
1882 "var pod =" 1885 "var pod ="
1883 " document.getElementById('pod-row').getPodWithUsername_('%s');" 1886 " document.getElementById('pod-row').getPodWithUsername_('%s');"
1884 "pod.click();" 1887 "pod.click();"
1885 "var state = {};" 1888 "var state = {};"
1886 "state.advanced = pod.classList.contains('advanced');" 1889 "state.advanced = pod.classList.contains('advanced');"
1887 "state.locale = pod.querySelector('.language-select').value;" 1890 "state.locale = pod.querySelector('.language-select').value;"
1888 "state.keyboardLayout = pod.querySelector('.keyboard-select').value;" 1891 "state.keyboardLayout = pod.querySelector('.keyboard-select').value;"
1889 "console.log(JSON.stringify(state));" 1892 "console.log(JSON.stringify(state));"
1890 "domAutomationController.send(JSON.stringify(state));", 1893 "domAutomationController.send(JSON.stringify(state));",
1891 user_id_1_.c_str()), 1894 account_id_1_.GetUserEmail().c_str()),
1892 &json)); 1895 &json));
1893 LOG(ERROR) << json; 1896 LOG(ERROR) << json;
1894 value_ptr = base::JSONReader::Read(json); 1897 value_ptr = base::JSONReader::Read(json);
1895 const base::DictionaryValue* state = NULL; 1898 const base::DictionaryValue* state = NULL;
1896 ASSERT_TRUE(value_ptr); 1899 ASSERT_TRUE(value_ptr);
1897 ASSERT_TRUE(value_ptr->GetAsDictionary(&state)); 1900 ASSERT_TRUE(value_ptr->GetAsDictionary(&state));
1898 bool advanced = false; 1901 bool advanced = false;
1899 EXPECT_TRUE(state->GetBoolean("advanced", &advanced)); 1902 EXPECT_TRUE(state->GetBoolean("advanced", &advanced));
1900 EXPECT_TRUE(advanced); 1903 EXPECT_TRUE(advanced);
1901 EXPECT_TRUE(state->GetString("locale", &selected_locale)); 1904 EXPECT_TRUE(state->GetString("locale", &selected_locale));
1902 EXPECT_EQ(kPublicSessionLocale, selected_locale); 1905 EXPECT_EQ(kPublicSessionLocale, selected_locale);
1903 std::string selected_keyboard_layout; 1906 std::string selected_keyboard_layout;
1904 EXPECT_TRUE(state->GetString("keyboardLayout", &selected_keyboard_layout)); 1907 EXPECT_TRUE(state->GetString("keyboardLayout", &selected_keyboard_layout));
1905 EXPECT_EQ(public_session_input_method_id_, selected_keyboard_layout); 1908 EXPECT_EQ(public_session_input_method_id_, selected_keyboard_layout);
1906 1909
1907 // Click the enter button to start the session. 1910 // Click the enter button to start the session.
1908 ASSERT_TRUE(content::ExecuteScript( 1911 ASSERT_TRUE(content::ExecuteScript(
1909 contents_, 1912 contents_,
1910 base::StringPrintf( 1913 base::StringPrintf(
1911 "document.getElementById('pod-row').getPodWithUsername_('%s')" 1914 "document.getElementById('pod-row').getPodWithUsername_('%s')"
1912 " .querySelector('.enter-button').click();", 1915 " .querySelector('.enter-button').click();",
1913 user_id_1_.c_str()))); 1916 account_id_1_.GetUserEmail().c_str())));
1914 1917
1915 WaitForSessionStart(); 1918 WaitForSessionStart();
1916 1919
1917 // Verify that the locale and keyboard layout have been applied. 1920 // Verify that the locale and keyboard layout have been applied.
1918 EXPECT_EQ(kPublicSessionLocale, g_browser_process->GetApplicationLocale()); 1921 EXPECT_EQ(kPublicSessionLocale, g_browser_process->GetApplicationLocale());
1919 EXPECT_EQ(l10n_util::GetLanguage(kPublicSessionLocale), 1922 EXPECT_EQ(l10n_util::GetLanguage(kPublicSessionLocale),
1920 icu::Locale::getDefault().getLanguage()); 1923 icu::Locale::getDefault().getLanguage());
1921 EXPECT_EQ(public_session_input_method_id_, 1924 EXPECT_EQ(public_session_input_method_id_,
1922 chromeos::input_method::InputMethodManager::Get() 1925 chromeos::input_method::InputMethodManager::Get()
1923 ->GetActiveIMEState() 1926 ->GetActiveIMEState()
(...skipping 13 matching lines...) Expand all
1937 // Click on the pod to expand it. Verify that the pod expands to its basic 1940 // Click on the pod to expand it. Verify that the pod expands to its basic
1938 // form as there is only one recommended locale. 1941 // form as there is only one recommended locale.
1939 bool advanced = false; 1942 bool advanced = false;
1940 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1943 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
1941 contents_, 1944 contents_,
1942 base::StringPrintf( 1945 base::StringPrintf(
1943 "var pod =" 1946 "var pod ="
1944 " document.getElementById('pod-row').getPodWithUsername_('%s');" 1947 " document.getElementById('pod-row').getPodWithUsername_('%s');"
1945 "pod.click();" 1948 "pod.click();"
1946 "domAutomationController.send(pod.classList.contains('advanced'));", 1949 "domAutomationController.send(pod.classList.contains('advanced'));",
1947 user_id_1_.c_str()), 1950 account_id_1_.GetUserEmail().c_str()),
1948 &advanced)); 1951 &advanced));
1949 EXPECT_FALSE(advanced); 1952 EXPECT_FALSE(advanced);
1950 EXPECT_EQ(l10n_util::GetLanguage(initial_locale_), 1953 EXPECT_EQ(l10n_util::GetLanguage(initial_locale_),
1951 icu::Locale::getDefault().getLanguage()); 1954 icu::Locale::getDefault().getLanguage());
1952 1955
1953 // Click the enter button to start the session. 1956 // Click the enter button to start the session.
1954 ASSERT_TRUE(content::ExecuteScript( 1957 ASSERT_TRUE(content::ExecuteScript(
1955 contents_, 1958 contents_,
1956 base::StringPrintf( 1959 base::StringPrintf(
1957 "document.getElementById('pod-row').getPodWithUsername_('%s')" 1960 "document.getElementById('pod-row').getPodWithUsername_('%s')"
1958 " .querySelector('.enter-button').click();", 1961 " .querySelector('.enter-button').click();",
1959 user_id_1_.c_str()))); 1962 account_id_1_.GetUserEmail().c_str())));
1960 1963
1961 WaitForSessionStart(); 1964 WaitForSessionStart();
1962 1965
1963 // Verify that since the recommended locale was invalid, the locale has not 1966 // Verify that since the recommended locale was invalid, the locale has not
1964 // changed and the first keyboard layout applicable to the locale was chosen. 1967 // changed and the first keyboard layout applicable to the locale was chosen.
1965 EXPECT_EQ(initial_locale_, g_browser_process->GetApplicationLocale()); 1968 EXPECT_EQ(initial_locale_, g_browser_process->GetApplicationLocale());
1966 EXPECT_EQ(l10n_util::GetLanguage(initial_locale_), 1969 EXPECT_EQ(l10n_util::GetLanguage(initial_locale_),
1967 icu::Locale::getDefault().getLanguage()); 1970 icu::Locale::getDefault().getLanguage());
1968 VerifyKeyboardLayoutMatchesLocale(); 1971 VerifyKeyboardLayoutMatchesLocale();
1969 } 1972 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
2042 // Select a different locale. 2045 // Select a different locale.
2043 ASSERT_TRUE(content::ExecuteScript( 2046 ASSERT_TRUE(content::ExecuteScript(
2044 contents_, 2047 contents_,
2045 base::StringPrintf( 2048 base::StringPrintf(
2046 "var languageSelect = document.getElementById('pod-row')" 2049 "var languageSelect = document.getElementById('pod-row')"
2047 " .getPodWithUsername_('%s').querySelector('.language-select');" 2050 " .getPodWithUsername_('%s').querySelector('.language-select');"
2048 "languageSelect.value = '%s';" 2051 "languageSelect.value = '%s';"
2049 "var event = document.createEvent('HTMLEvents');" 2052 "var event = document.createEvent('HTMLEvents');"
2050 "event.initEvent('change', false, true);" 2053 "event.initEvent('change', false, true);"
2051 "languageSelect.dispatchEvent(event);", 2054 "languageSelect.dispatchEvent(event);",
2052 user_id_1_.c_str(), 2055 account_id_1_.GetUserEmail().c_str(), kPublicSessionLocale)));
2053 kPublicSessionLocale)));
2054 2056
2055 // The UI will have requested an updated list of keyboard layouts at this 2057 // The UI will have requested an updated list of keyboard layouts at this
2056 // point. Wait for the constructions of this list to finish. 2058 // point. Wait for the constructions of this list to finish.
2057 WaitForGetKeyboardLayoutsForLocaleToFinish(); 2059 WaitForGetKeyboardLayoutsForLocaleToFinish();
2058 2060
2059 // Set up an observer that will quit the message loop when login has succeeded 2061 // Set up an observer that will quit the message loop when login has succeeded
2060 // and the first wizard screen, if any, is being shown. 2062 // and the first wizard screen, if any, is being shown.
2061 base::RunLoop login_wait_run_loop; 2063 base::RunLoop login_wait_run_loop;
2062 chromeos::MockAuthStatusConsumer login_status_consumer; 2064 chromeos::MockAuthStatusConsumer login_status_consumer;
2063 EXPECT_CALL(login_status_consumer, OnAuthSuccess(_)).Times(1).WillOnce( 2065 EXPECT_CALL(login_status_consumer, OnAuthSuccess(_)).Times(1).WillOnce(
2064 InvokeWithoutArgs(&login_wait_run_loop, &base::RunLoop::Quit)); 2066 InvokeWithoutArgs(&login_wait_run_loop, &base::RunLoop::Quit));
2065 chromeos::ExistingUserController* controller = 2067 chromeos::ExistingUserController* controller =
2066 chromeos::ExistingUserController::current_controller(); 2068 chromeos::ExistingUserController::current_controller();
2067 ASSERT_TRUE(controller); 2069 ASSERT_TRUE(controller);
2068 controller->set_login_status_consumer(&login_status_consumer); 2070 controller->set_login_status_consumer(&login_status_consumer);
2069 2071
2070 // Manually select a different keyboard layout and click the enter button to 2072 // Manually select a different keyboard layout and click the enter button to
2071 // start the session. 2073 // start the session.
2072 ASSERT_TRUE(content::ExecuteScript( 2074 ASSERT_TRUE(content::ExecuteScript(
2073 contents_, 2075 contents_,
2074 base::StringPrintf( 2076 base::StringPrintf(
2075 "var pod =" 2077 "var pod ="
2076 " document.getElementById('pod-row').getPodWithUsername_('%s');" 2078 " document.getElementById('pod-row').getPodWithUsername_('%s');"
2077 "pod.querySelector('.keyboard-select').value = '%s';" 2079 "pod.querySelector('.keyboard-select').value = '%s';"
2078 "pod.querySelector('.enter-button').click();", 2080 "pod.querySelector('.enter-button').click();",
2079 user_id_1_.c_str(), 2081 account_id_1_.GetUserEmail().c_str(),
2080 public_session_input_method_id_.c_str()))); 2082 public_session_input_method_id_.c_str())));
2081 2083
2082 // Spin the loop until the login observer fires. Then, unregister the 2084 // Spin the loop until the login observer fires. Then, unregister the
2083 // observer. 2085 // observer.
2084 login_wait_run_loop.Run(); 2086 login_wait_run_loop.Run();
2085 controller->set_login_status_consumer(NULL); 2087 controller->set_login_status_consumer(NULL);
2086 2088
2087 // Verify that the Terms of Service screen is being shown. 2089 // Verify that the Terms of Service screen is being shown.
2088 chromeos::WizardController* wizard_controller = 2090 chromeos::WizardController* wizard_controller =
2089 chromeos::WizardController::default_controller(); 2091 chromeos::WizardController::default_controller();
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
2383 ASSERT_TRUE(content::ExecuteScript(contents_, 2385 ASSERT_TRUE(content::ExecuteScript(contents_,
2384 "$('tos-accept-button').click();")); 2386 "$('tos-accept-button').click();"));
2385 2387
2386 WaitForSessionStart(); 2388 WaitForSessionStart();
2387 } 2389 }
2388 2390
2389 INSTANTIATE_TEST_CASE_P(TermsOfServiceDownloadTestInstance, 2391 INSTANTIATE_TEST_CASE_P(TermsOfServiceDownloadTestInstance,
2390 TermsOfServiceDownloadTest, testing::Bool()); 2392 TermsOfServiceDownloadTest, testing::Bool());
2391 2393
2392 } // namespace policy 2394 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698