19ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
29ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
39ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// found in the LICENSE file.
49ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/power/power_prefs.h"
69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include <string>
89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/command_line.h"
109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/files/file_path.h"
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/memory/ref_counted.h"
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/prefs/pref_service.h"
139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/users/fake_user_manager.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/profiles/profile_helper.h"
179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/extensions/extension_special_storage_policy.h"
189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/prefs/browser_prefs.h"
199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/prefs/pref_service_syncable.h"
209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile.h"
219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile_manager.h"
229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/common/chrome_constants.h"
239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/common/pref_names.h"
249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/test/base/testing_browser_process.h"
259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/test/base/testing_pref_service_syncable.h"
269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/test/base/testing_profile.h"
279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/test/base/testing_profile_manager.h"
289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/chromeos_switches.h"
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/dbus_thread_manager.h"
309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/dbus/fake_power_manager_client.h"
319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/dbus/power_manager/policy.pb.h"
329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/dbus/power_policy_controller.h"
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/notification_details.h"
359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/notification_service.h"
369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/notification_source.h"
379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace chromeos {
409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass PowerPrefsTest : public testing::Test {
429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch protected:
439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  PowerPrefsTest();
449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // testing::Test:
469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual void SetUp() OVERRIDE;
479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual void TearDown() OVERRIDE;
489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  const Profile* GetProfile() const;
509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  std::string GetExpectedPowerPolicyForProfile(Profile* profile) const;
529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  std::string GetCurrentPowerPolicy() const;
539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  bool GetExpectedAllowScreenWakeLocksForProfile(Profile* profile) const;
549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  bool GetCurrentAllowScreenWakeLocks() const;
559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  TestingProfileManager profile_manager_;
579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  PowerPolicyController* power_policy_controller_;     // Not owned.
589ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  FakePowerManagerClient* fake_power_manager_client_;  // Not owned.
599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  scoped_ptr<PowerPrefs> power_prefs_;
619ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(PowerPrefsTest);
639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch};
649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochPowerPrefsTest::PowerPrefsTest()
669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    : profile_manager_(TestingBrowserProcess::GetGlobal()),
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      power_policy_controller_(NULL),
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      fake_power_manager_client_(new FakePowerManagerClient) {
699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPrefsTest::SetUp() {
729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  testing::Test::SetUp();
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<DBusThreadManagerSetter> dbus_setter =
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      chromeos::DBusThreadManager::GetSetterForTesting();
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  dbus_setter->SetPowerManagerClient(
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scoped_ptr<PowerManagerClient>(fake_power_manager_client_));
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Power policy controller is recreated with SetPowerManagerClient().
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  power_policy_controller_ =
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      chromeos::DBusThreadManager::Get()->GetPowerPolicyController();
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  ASSERT_TRUE(profile_manager_.SetUp());
839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_.reset(new PowerPrefs(power_policy_controller_));
859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_FALSE(GetProfile());
869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(PowerPolicyController::GetPolicyDebugString(
879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                power_manager::PowerManagementPolicy()),
889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPrefsTest::TearDown() {
929ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_.reset();
939ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  testing::Test::TearDown();
949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
959ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochconst Profile* PowerPrefsTest::GetProfile() const {
979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  return power_prefs_->profile_;
989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochstd::string PowerPrefsTest::GetExpectedPowerPolicyForProfile(
1019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    Profile* profile) const {
1029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  const PrefService* prefs = profile->GetPrefs();
1039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_manager::PowerManagementPolicy expected_policy;
1049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_ac_delays()->set_screen_dim_ms(
1059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerAcScreenDimDelayMs));
1069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_ac_delays()->set_screen_off_ms(
1079ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerAcScreenOffDelayMs));
1089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_ac_delays()->set_screen_lock_ms(
1099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerAcScreenLockDelayMs));
1109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_ac_delays()->set_idle_warning_ms(
1119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerAcIdleWarningDelayMs));
1129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_ac_delays()->set_idle_ms(
1139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerAcIdleDelayMs));
1149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_battery_delays()->set_screen_dim_ms(
1159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerBatteryScreenDimDelayMs));
1169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_battery_delays()->set_screen_off_ms(
1179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerBatteryScreenOffDelayMs));
1189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_battery_delays()->set_screen_lock_ms(
1199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerBatteryScreenLockDelayMs));
1209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_battery_delays()->set_idle_warning_ms(
1219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerBatteryIdleWarningDelayMs));
1229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.mutable_battery_delays()->set_idle_ms(
1239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetInteger(prefs::kPowerBatteryIdleDelayMs));
1249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_ac_idle_action(
1259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      static_cast<power_manager::PowerManagementPolicy_Action>(
1269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            prefs->GetInteger(prefs::kPowerAcIdleAction)));
1279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_battery_idle_action(
1289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      static_cast<power_manager::PowerManagementPolicy_Action>(
1299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            prefs->GetInteger(prefs::kPowerBatteryIdleAction)));
1309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_lid_closed_action(
1319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      static_cast<power_manager::PowerManagementPolicy_Action>(
1329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            prefs->GetInteger(prefs::kPowerLidClosedAction)));
1339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_use_audio_activity(
1349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetBoolean(prefs::kPowerUseAudioActivity));
1359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_use_video_activity(
1369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetBoolean(prefs::kPowerUseVideoActivity));
1379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_presentation_screen_dim_delay_factor(
1389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetDouble(prefs::kPowerPresentationScreenDimDelayFactor));
1399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_user_activity_screen_dim_delay_factor(
1409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      prefs->GetDouble(prefs::kPowerUserActivityScreenDimDelayFactor));
1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  expected_policy.set_wait_for_initial_user_activity(
1421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      prefs->GetBoolean(prefs::kPowerWaitForInitialUserActivity));
1439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  expected_policy.set_reason("Prefs");
1449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  return PowerPolicyController::GetPolicyDebugString(expected_policy);
1459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
1469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochstd::string PowerPrefsTest::GetCurrentPowerPolicy() const {
1489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  return PowerPolicyController::GetPolicyDebugString(
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      fake_power_manager_client_->policy());
1509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
1519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochbool PowerPrefsTest::GetCurrentAllowScreenWakeLocks() const {
1539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  return power_policy_controller_->honor_screen_wake_locks_;
1549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
1559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochbool PowerPrefsTest::GetExpectedAllowScreenWakeLocksForProfile(
1579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    Profile* profile) const {
1589ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  return profile->GetPrefs()->GetBoolean(prefs::kPowerAllowScreenWakeLocks);
1599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
1609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1619ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochTEST_F(PowerPrefsTest, LoginScreen) {
1629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Set up login profile.
1639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  scoped_ptr<TestingPrefServiceSyncable> login_profile_prefs(
1649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      new TestingPrefServiceSyncable);
1659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  chrome::RegisterLoginProfilePrefs(login_profile_prefs->registry());
1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  TestingProfile::Builder builder;
1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  builder.SetPath(
1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      profile_manager_.profiles_dir().AppendASCII(chrome::kInitialProfile));
1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  builder.SetPrefService(login_profile_prefs.PassAs<PrefServiceSyncable>());
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestingProfile* login_profile = builder.BuildIncognito(
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      profile_manager_.CreateTestingProfile(chrome::kInitialProfile));
1729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Inform power_prefs_ that the login screen is being shown.
174a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
1759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::Source<PowerPrefsTest>(this),
1769ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::NotificationService::NoDetails());
1779ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(login_profile, GetProfile());
1799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedPowerPolicyForProfile(login_profile),
1809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
1819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedAllowScreenWakeLocksForProfile(login_profile),
1829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentAllowScreenWakeLocks());
1839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  TestingProfile* other_profile =
1859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      profile_manager_.CreateTestingProfile("other");
1869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Inform power_prefs_ that an unrelated profile has been destroyed.
1889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_PROFILE_DESTROYED,
1899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::Source<Profile>(other_profile),
1909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::NotificationService::NoDetails());
1919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1929ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Verify that the login profile's power prefs are still being used.
1939ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(login_profile, GetProfile());
1949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedPowerPolicyForProfile(login_profile),
1959ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
1969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedAllowScreenWakeLocksForProfile(login_profile),
1979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentAllowScreenWakeLocks());
1989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Inform power_prefs_ that the login profile has been destroyed.
2009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_PROFILE_DESTROYED,
2019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::Source<Profile>(login_profile),
2029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::NotificationService::NoDetails());
2039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The login profile's prefs should still be used.
2059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_FALSE(GetProfile());
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(GetExpectedPowerPolicyForProfile(login_profile),
2079ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
2089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
2099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochTEST_F(PowerPrefsTest, UserSession) {
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FakeUserManager* user_manager = new FakeUserManager();
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScopedUserManagerEnabler user_manager_enabler(user_manager);
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Set up user profile.
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const char test_user1[] = "test-user1@example.com";
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  user_manager->AddUser(test_user1);
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  user_manager->LoginUser(test_user1);
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestingProfile* user_profile =
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      profile_manager_.CreateTestingProfile(test_user1);
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  profile_manager_.SetLoggedIn(true);
2229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Inform power_prefs_ that a session has started.
2249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_SESSION_STARTED,
2259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::Source<PowerPrefsTest>(this),
2269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::NotificationService::NoDetails());
2279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(user_profile, GetProfile());
2299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedPowerPolicyForProfile(user_profile),
2309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
2319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedAllowScreenWakeLocksForProfile(user_profile),
2329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentAllowScreenWakeLocks());
2339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const char test_user2[] = "test-user2@example.com";
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  user_manager->AddUser(test_user2);
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  user_manager->LoginUser(test_user2);
2379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  TestingProfile* other_profile =
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      profile_manager_.CreateTestingProfile(test_user2);
2399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Inform power_prefs_ that an unrelated profile has been destroyed.
2419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_PROFILE_DESTROYED,
2429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::Source<Profile>(other_profile),
2439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::NotificationService::NoDetails());
2449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Verify that the user profile's power prefs are still being used.
2469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(user_profile, GetProfile());
2479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedPowerPolicyForProfile(user_profile),
2489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
2499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_EQ(GetExpectedAllowScreenWakeLocksForProfile(user_profile),
2509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentAllowScreenWakeLocks());
2519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
252ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Simulate the login screen coming up as part of screen locking.
253a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
254ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                        content::Source<PowerPrefsTest>(this),
255ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                        content::NotificationService::NoDetails());
256ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
257ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Verify that power policy didn't revert to login screen settings.
258ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(user_profile, GetProfile());
259ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(GetExpectedPowerPolicyForProfile(user_profile),
260ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch            GetCurrentPowerPolicy());
261ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(GetExpectedAllowScreenWakeLocksForProfile(user_profile),
262ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch            GetCurrentAllowScreenWakeLocks());
263ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
2649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Inform power_prefs_ that the session has ended and the user profile has
2659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // been destroyed.
2669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  power_prefs_->Observe(chrome::NOTIFICATION_PROFILE_DESTROYED,
2679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::Source<Profile>(user_profile),
2689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                        content::NotificationService::NoDetails());
2699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The user profile's prefs should still be used.
2719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  EXPECT_FALSE(GetProfile());
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(GetExpectedPowerPolicyForProfile(user_profile),
2739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch            GetCurrentPowerPolicy());
2749ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
2759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2769ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}  // namespace chromeos
277