Home | History | Annotate | Download | only in chromeos
      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