1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/basictypes.h" 6 #include "base/compiler_specific.h" 7 #include "base/prefs/pref_service.h" 8 #include "chrome/browser/chromeos/login/login_manager_test.h" 9 #include "chrome/browser/chromeos/login/startup_utils.h" 10 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" 11 #include "chrome/browser/chromeos/profiles/profile_helper.h" 12 #include "chrome/browser/chromeos/settings/cros_settings.h" 13 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" 14 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/tabs/tab_strip_model.h" 16 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/pref_names.h" 18 #include "chrome/test/base/ui_test_utils.h" 19 #include "chromeos/settings/cros_settings_names.h" 20 #include "components/user_manager/user_manager.h" 21 #include "content/public/browser/web_contents.h" 22 #include "content/public/test/browser_test_utils.h" 23 #include "content/public/test/test_utils.h" 24 25 namespace chromeos { 26 27 namespace { 28 29 const char* kTestUsers[] = { "test-user1 (at) gmail.com", "test-user2 (at) gmail.com" }; 30 31 } // namespace 32 33 class AccountsOptionsTest : public LoginManagerTest { 34 public: 35 AccountsOptionsTest() 36 : LoginManagerTest(false), 37 device_settings_provider_(NULL) { 38 stub_settings_provider_.Set(kDeviceOwner, base::StringValue(kTestUsers[0])); 39 } 40 41 virtual ~AccountsOptionsTest() { 42 } 43 44 virtual void SetUpOnMainThread() OVERRIDE { 45 LoginManagerTest::SetUpOnMainThread(); 46 CrosSettings* settings = CrosSettings::Get(); 47 device_settings_provider_ = settings->GetProvider(kDeviceOwner); 48 settings->RemoveSettingsProvider(device_settings_provider_); 49 settings->AddSettingsProvider(&stub_settings_provider_); 50 } 51 52 virtual void TearDownOnMainThread() OVERRIDE { 53 CrosSettings* settings = CrosSettings::Get(); 54 settings->RemoveSettingsProvider(&stub_settings_provider_); 55 settings->AddSettingsProvider(device_settings_provider_); 56 LoginManagerTest::TearDownOnMainThread(); 57 } 58 59 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 60 LoginManagerTest::SetUpCommandLine(command_line); 61 } 62 63 protected: 64 void CheckAccountsUI(const user_manager::User* user, bool is_owner) { 65 Profile* profile = ProfileHelper::Get()->GetProfileByUserUnsafe(user); 66 profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 67 user->email()); 68 69 ui_test_utils::BrowserAddedObserver observer; 70 Browser* browser = CreateBrowser(profile); 71 observer.WaitForSingleNewBrowser(); 72 73 ui_test_utils::NavigateToURL(browser, 74 GURL("chrome://settings-frame/accounts")); 75 content::WebContents* contents = 76 browser->tab_strip_model()->GetActiveWebContents(); 77 78 bool warning_visible; 79 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 80 contents, 81 "var e = document.getElementById('ownerOnlyWarning');" 82 "var visible = e.offsetWidth > 0 && e.offsetHeight > 0;" 83 "window.domAutomationController.send(visible);", 84 &warning_visible)); 85 EXPECT_EQ(is_owner, !warning_visible); 86 87 bool guest_option_enabled; 88 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 89 contents, 90 "var e = document.getElementById('allowBwsiCheck');" 91 "window.domAutomationController.send(!e.disabled);", 92 &guest_option_enabled)); 93 EXPECT_EQ(is_owner, guest_option_enabled); 94 95 bool supervised_users_enabled; 96 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 97 contents, 98 "var e = document.getElementById('allowSupervisedCheck');" 99 "window.domAutomationController.send(!e.disabled);", 100 &supervised_users_enabled)); 101 ASSERT_EQ(is_owner, supervised_users_enabled); 102 103 bool user_pods_enabled; 104 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 105 contents, 106 "var e = document.getElementById('showUserNamesCheck');" 107 "window.domAutomationController.send(!e.disabled);", 108 &user_pods_enabled)); 109 EXPECT_EQ(is_owner, user_pods_enabled); 110 111 bool whitelist_enabled; 112 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 113 contents, 114 "var e = document.getElementById('useWhitelistCheck');" 115 "window.domAutomationController.send(!e.disabled);", 116 &whitelist_enabled)); 117 EXPECT_EQ(is_owner, whitelist_enabled); 118 } 119 120 StubCrosSettingsProvider stub_settings_provider_; 121 CrosSettingsProvider* device_settings_provider_; 122 123 private: 124 DISALLOW_COPY_AND_ASSIGN(AccountsOptionsTest); 125 }; 126 127 IN_PROC_BROWSER_TEST_F(AccountsOptionsTest, PRE_MultiProfilesAccountsOptions) { 128 RegisterUser(kTestUsers[0]); 129 RegisterUser(kTestUsers[1]); 130 StartupUtils::MarkOobeCompleted(); 131 } 132 133 IN_PROC_BROWSER_TEST_F(AccountsOptionsTest, MultiProfilesAccountsOptions) { 134 LoginUser(kTestUsers[0]); 135 UserAddingScreen::Get()->Start(); 136 content::RunAllPendingInMessageLoop(); 137 AddUser(kTestUsers[1]); 138 139 user_manager::UserManager* manager = user_manager::UserManager::Get(); 140 ASSERT_EQ(2u, manager->GetLoggedInUsers().size()); 141 142 CheckAccountsUI(manager->FindUser(kTestUsers[0]), true /* is_owner */); 143 CheckAccountsUI(manager->FindUser(kTestUsers[1]), false /* is_owner */); 144 } 145 146 } // namespace chromeos 147