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