15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h" 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/stringprintf.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/login/login_manager_test.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/user_adding_screen.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/pref_names.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/settings/cros_settings_names.h" 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/web_contents.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/test/test_utils.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace chromeos { 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char* kTestOwner = "test-owner@example.com"; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char* kTestNonOwner = "test-user1@example.com"; 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char* kKnownSettings[] = { 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kDeviceOwner, 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kAccountsPrefAllowGuest, 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kAccountsPrefAllowNewUser, 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kAccountsPrefDeviceLocalAccounts, 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kAccountsPrefShowUserNamesOnSignIn, 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kAccountsPrefSupervisedUsersEnabled, 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Stub settings provider that only handles the settings we need to control. 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// StubCrosSettingsProvider handles more settings but leaves many of them unset 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// which the Settings page doesn't expect. 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class StubAccountSettingsProvider : public StubCrosSettingsProvider { 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) StubAccountSettingsProvider() { 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~StubAccountSettingsProvider() { 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // StubCrosSettingsProvider implementation. 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual bool HandlesSetting(const std::string& path) const OVERRIDE { 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char** end = kKnownSettings + arraysize(kKnownSettings); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return std::find(kKnownSettings, end, path) != end; 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct PrefTest { 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* pref_name; 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool owner_only; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool indicator; 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const PrefTest kPrefTests[] = { 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kSystemTimezone, false, false }, 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { prefs::kUse24HourClock, false, false }, 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kAttestationForContentProtectionEnabled, true, true }, 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kAccountsPrefAllowGuest, true, false }, 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kAccountsPrefAllowNewUser, true, false }, 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kAccountsPrefShowUserNamesOnSignIn, true, false }, 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kAccountsPrefSupervisedUsersEnabled, true, false }, 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { kStatsReportingPref, true, true }, 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { prefs::kSpellCheckUseSpellingService, false, false }, 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class SharedOptionsTest : public LoginManagerTest { 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SharedOptionsTest() 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : LoginManagerTest(false), 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) device_settings_provider_(NULL) { 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) stub_settings_provider_.Set(kDeviceOwner, base::StringValue(kTestOwner)); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~SharedOptionsTest() { 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LoginManagerTest::SetUpOnMainThread(); 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrosSettings* settings = CrosSettings::Get(); 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Add the stub settings provider, moving the device settings provider 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // behind it so our stub takes precedence. 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) device_settings_provider_ = settings->GetProvider(kDeviceOwner); 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings->RemoveSettingsProvider(device_settings_provider_); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings->AddSettingsProvider(&stub_settings_provider_); 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->AddSettingsProvider(device_settings_provider_); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrosSettings* settings = CrosSettings::Get(); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) settings->RemoveSettingsProvider(&stub_settings_provider_); 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoginManagerTest::TearDownOnMainThread(); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void CheckOptionsUI(const user_manager::User* user, 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool is_owner, 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool is_primary) { 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Browser* browser = CreateBrowserForUser(user); 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* contents = 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < sizeof(kPrefTests) / sizeof(kPrefTests[0]); i++) { 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckPreference(contents, 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kPrefTests[i].pref_name, 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !is_owner && kPrefTests[i].owner_only, 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !is_owner && kPrefTests[i].indicator ? "owner" : 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string()); 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckBanner(contents, is_primary); 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckSharedSections(contents, is_primary); 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckAccountsOverlay(contents, is_owner); 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Creates a browser and navigates to the Settings page. 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Browser* CreateBrowserForUser(const user_manager::User* user) { 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Profile* profile = ProfileHelper::Get()->GetProfileByUserUnsafe(user); 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername, 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) user->email()); 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui_test_utils::BrowserAddedObserver observer; 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Browser* browser = CreateBrowser(profile); 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) observer.WaitForSingleNewBrowser(); 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui_test_utils::NavigateToURL(browser, 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL("chrome://settings-frame")); 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return browser; 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verifies a preference's disabled state and controlled-by indicator. 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckPreference(content::WebContents* contents, 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string pref_name, 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool disabled, 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string controlled_by) { 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool success; 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string js_expression = base::StringPrintf( 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var prefSelector = '[pref=\"%s\"]';" 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var controlledBy = '%s';" 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var input = document.querySelector(" 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " 'input' + prefSelector + ', select' + prefSelector);" 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var success = false;" 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "if (input) {" 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " success = input.disabled == %d;" 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " var indicator = input.parentNode.parentNode.querySelector(" 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " '.controlled-setting-indicator');" 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " if (controlledBy) {" 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " success = success && indicator &&" 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " indicator.getAttribute('controlled-by') == controlledBy;" 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " } else {" 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " success = success && (!indicator ||" 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " !indicator.hasAttribute('controlled-by') ||" 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " indicator.getAttribute('controlled-by') == '')" 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " }" 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "}" 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "window.domAutomationController.send(!!success);", 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pref_name.c_str(), controlled_by.c_str(), disabled); 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents, js_expression, &success)); 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(success); 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verifies a checkbox's disabled state, controlled-by indicator and value. 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckBooleanPreference(content::WebContents* contents, 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string pref_name, 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool disabled, 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string controlled_by, 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool expected_value) { 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckPreference(contents, pref_name, disabled, controlled_by); 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool actual_value; 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string js_expression = base::StringPrintf( 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "window.domAutomationController.send(document.querySelector('" 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " input[type=\"checkbox\"][pref=\"%s\"]').checked);", 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pref_name.c_str()); 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents, js_expression, &actual_value)); 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(expected_value, actual_value); 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verifies that the shared settings banner is visible only for 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // secondary users. 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckBanner(content::WebContents* contents, 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool is_primary) { 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool banner_visible; 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) contents, 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var e = $('secondary-user-banner');" 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "window.domAutomationController.send(e && !e.hidden);", 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &banner_visible)); 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(!is_primary, banner_visible); 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verifies that sections of shared settings have the appropriate indicator. 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckSharedSections(content::WebContents* contents, 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool is_primary) { 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This only applies to the Internet options section. 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string controlled_by; 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents, 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var e = document.querySelector(" 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " '#network-section-header span.controlled-setting-indicator');" 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "if (!e || !e.getAttribute('controlled-by')) {" 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " window.domAutomationController.send('');" 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "} else {" 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " window.domAutomationController.send(" 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " e.getAttribute('controlled-by'));" 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "}", 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &controlled_by)); 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(!is_primary ? "shared" : std::string(), controlled_by); 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Checks the Accounts header and non-checkbox inputs. 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CheckAccountsOverlay(content::WebContents* contents, bool is_owner) { 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Set cros.accounts.allowGuest to false so we can test the accounts list. 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This has to be done after the PRE_* test or we can't add the owner. 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) stub_settings_provider_.Set( 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kAccountsPrefAllowNewUser, base::FundamentalValue(false)); 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool success; 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string js_expression = base::StringPrintf( 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var controlled = %d;" 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var warning = $('ownerOnlyWarning');" 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var userList = $('userList');" 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var input = $('userNameEdit');" 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "var success;" 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "if (controlled)" 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " success = warning && !warning.hidden && userList.disabled &&" 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " input.disabled;" 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "else" 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " success = (!warning || warning.hidden) && !userList.disabled &&" 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) " !input.disabled;" 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "window.domAutomationController.send(!!success);", 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !is_owner); 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents, js_expression, &success)); 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(success) << "Accounts overlay incorrect for " << 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (is_owner ? "owner." : "non-owner."); 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) StubAccountSettingsProvider stub_settings_provider_; 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrosSettingsProvider* device_settings_provider_; 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SharedOptionsTest); 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SharedOptionsTest, PRE_SharedOptions) { 264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RegisterUser(kTestOwner); 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RegisterUser(kTestNonOwner); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartupUtils::MarkOobeCompleted(); 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SharedOptionsTest, SharedOptions) { 270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Log in the owner first, then add a secondary user. 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoginUser(kTestOwner); 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UserAddingScreen::Get()->Start(); 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AddUser(kTestNonOwner); 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager* manager = user_manager::UserManager::Get(); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(2u, manager->GetLoggedInUsers().size()); 278f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SCOPED_TRACE("Checking settings for owner, primary user."); 280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckOptionsUI(manager->FindUser(manager->GetOwnerEmail()), true, true); 281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SCOPED_TRACE("Checking settings for non-owner, secondary user."); 284f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CheckOptionsUI(manager->FindUser(kTestNonOwner), false, false); 285f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(michaelpg): Add tests for non-primary owner and primary non-owner 287f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // when the owner-only multiprofile restriction is removed, probably M38. 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 290116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SharedOptionsTest, PRE_ScreenLockPreferencePrimary) { 291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RegisterUser(kTestOwner); 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RegisterUser(kTestNonOwner); 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) StartupUtils::MarkOobeCompleted(); 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Tests the shared setting indicator for the primary user's auto-lock setting 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// when the secondary user has enabled or disabled their preference. 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// (The checkbox is unset if the current user's preference is false, but if any 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// other signed-in user has enabled this preference, the shared setting 300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// indicator explains this.) 301116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SharedOptionsTest, ScreenLockPreferencePrimary) { 302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LoginUser(kTestOwner); 303f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UserAddingScreen::Get()->Start(); 304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AddUser(kTestNonOwner); 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager* manager = user_manager::UserManager::Get(); 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user1 = manager->FindUser(kTestOwner); 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user2 = manager->FindUser(kTestNonOwner); 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PrefService* prefs1 = 3126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProfileHelper::Get()->GetProfileByUserUnsafe(user1)->GetPrefs(); 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PrefService* prefs2 = 3146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProfileHelper::Get()->GetProfileByUserUnsafe(user2)->GetPrefs(); 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set both users' preference to false, then change the secondary user's to 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // true. We'll do the opposite in the next test. Doesn't provide 100% coverage 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // but reloading the settings page is super slow on debug builds. 319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs1->SetBoolean(prefs::kEnableAutoScreenLock, false); 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs2->SetBoolean(prefs::kEnableAutoScreenLock, false); 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Browser* browser = CreateBrowserForUser(user1); 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents* contents = 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser->tab_strip_model()->GetActiveWebContents(); 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool disabled = false; 327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool expected_value; 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string empty_controlled; 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string shared_controlled("shared"); 330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SCOPED_TRACE("Screen lock false for both users"); 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_value = false; 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckBooleanPreference(contents, prefs::kEnableAutoScreenLock, disabled, 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) empty_controlled, expected_value); 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set the secondary user's preference to true, and reload the primary user's 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // browser to see the updated controlled-by indicator. 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs2->SetBoolean(prefs::kEnableAutoScreenLock, true); 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::Reload(browser, CURRENT_TAB); 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WaitForLoadStop(contents); 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SCOPED_TRACE("Screen lock false for primary user"); 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_value = false; 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckBooleanPreference(contents, prefs::kEnableAutoScreenLock, disabled, 347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) shared_controlled, expected_value); 348f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set the preference to true for the primary user and check that the 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // indicator disappears. 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs1->SetBoolean(prefs::kEnableAutoScreenLock, true); 353f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SCOPED_TRACE("Screen lock true for both users"); 355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_value = true; 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckBooleanPreference(contents, prefs::kEnableAutoScreenLock, disabled, 357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) empty_controlled, expected_value); 358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 361116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SharedOptionsTest, PRE_ScreenLockPreferenceSecondary) { 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RegisterUser(kTestOwner); 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RegisterUser(kTestNonOwner); 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StartupUtils::MarkOobeCompleted(); 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Tests the shared setting indicator for the secondary user's auto-lock setting 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// when the primary user has enabled or disabled their preference. 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// (The checkbox is unset if the current user's preference is false, but if any 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// other signed-in user has enabled this preference, the shared setting 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// indicator explains this.) 372116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(SharedOptionsTest, ScreenLockPreferenceSecondary) { 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LoginUser(kTestOwner); 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserAddingScreen::Get()->Start(); 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllPendingInMessageLoop(); 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddUser(kTestNonOwner); 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager* manager = user_manager::UserManager::Get(); 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user1 = manager->FindUser(kTestOwner); 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user2 = manager->FindUser(kTestNonOwner); 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PrefService* prefs1 = 3836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProfileHelper::Get()->GetProfileByUserUnsafe(user1)->GetPrefs(); 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PrefService* prefs2 = 3856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProfileHelper::Get()->GetProfileByUserUnsafe(user2)->GetPrefs(); 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set both users' preference to true, then change the secondary user's to 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // false. 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs1->SetBoolean(prefs::kEnableAutoScreenLock, true); 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs2->SetBoolean(prefs::kEnableAutoScreenLock, true); 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Browser* browser = CreateBrowserForUser(user2); 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents* contents = 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser->tab_strip_model()->GetActiveWebContents(); 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool disabled = false; 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool expected_value; 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string empty_controlled; 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string shared_controlled("shared"); 400f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 401f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SCOPED_TRACE("Screen lock true for both users"); 403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_value = true; 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckBooleanPreference(contents, prefs::kEnableAutoScreenLock, disabled, 405f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) empty_controlled, expected_value); 406f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set the secondary user's preference to false and check that the 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // controlled-by indicator is shown. 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs2->SetBoolean(prefs::kEnableAutoScreenLock, false); 411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SCOPED_TRACE("Screen lock false for secondary user"); 413f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_value = false; 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckBooleanPreference(contents, prefs::kEnableAutoScreenLock, disabled, 415f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) shared_controlled, expected_value); 416f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Set the preference to false for the primary user and check that the 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // indicator disappears. 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs1->SetBoolean(prefs::kEnableAutoScreenLock, false); 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::Reload(browser, CURRENT_TAB); 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WaitForLoadStop(contents); 423f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SCOPED_TRACE("Screen lock false for both users"); 425f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_value = false; 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckBooleanPreference(contents, prefs::kEnableAutoScreenLock, disabled, 427f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) empty_controlled, expected_value); 428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace chromeos 432