Home | History | Annotate | Download | only in policy
      1 // Copyright (c) 2013 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 <string>
      6 #include <vector>
      7 
      8 #include "base/basictypes.h"
      9 #include "base/bind.h"
     10 #include "base/callback.h"
     11 #include "base/command_line.h"
     12 #include "base/compiler_specific.h"
     13 #include "base/files/file_path.h"
     14 #include "base/files/file_util.h"
     15 #include "base/location.h"
     16 #include "base/message_loop/message_loop.h"
     17 #include "base/path_service.h"
     18 #include "base/run_loop.h"
     19 #include "chrome/browser/chrome_notification_types.h"
     20 #include "chrome/browser/chromeos/policy/device_policy_builder.h"
     21 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
     22 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
     23 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
     24 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
     25 #include "chrome/browser/chromeos/profiles/profile_helper.h"
     26 #include "chrome/browser/lifetime/application_lifetime.h"
     27 #include "chrome/browser/policy/profile_policy_connector.h"
     28 #include "chrome/browser/policy/profile_policy_connector_factory.h"
     29 #include "chrome/browser/profiles/profile.h"
     30 #include "chrome/browser/profiles/profile_manager.h"
     31 #include "chrome/browser/ui/browser.h"
     32 #include "chrome/test/base/testing_profile.h"
     33 #include "chromeos/chromeos_paths.h"
     34 #include "chromeos/chromeos_switches.h"
     35 #include "chromeos/dbus/cryptohome_client.h"
     36 #include "chromeos/dbus/dbus_thread_manager.h"
     37 #include "chromeos/dbus/fake_power_manager_client.h"
     38 #include "chromeos/dbus/fake_session_manager_client.h"
     39 #include "chromeos/dbus/power_manager/policy.pb.h"
     40 #include "chromeos/dbus/power_policy_controller.h"
     41 #include "chromeos/login/user_names.h"
     42 #include "components/policy/core/common/cloud/cloud_policy_core.h"
     43 #include "components/policy/core/common/cloud/cloud_policy_store.h"
     44 #include "components/policy/core/common/cloud/policy_builder.h"
     45 #include "components/policy/core/common/external_data_fetcher.h"
     46 #include "components/policy/core/common/mock_policy_service.h"
     47 #include "components/policy/core/common/policy_service.h"
     48 #include "content/public/browser/notification_details.h"
     49 #include "content/public/browser/notification_service.h"
     50 #include "content/public/browser/notification_source.h"
     51 #include "content/public/test/test_utils.h"
     52 #include "extensions/browser/api/power/power_api_manager.h"
     53 #include "extensions/common/api/power.h"
     54 #include "policy/proto/device_management_backend.pb.h"
     55 #include "testing/gmock/include/gmock/gmock.h"
     56 #include "testing/gtest/include/gtest/gtest.h"
     57 
     58 namespace em = enterprise_management;
     59 namespace pm = power_manager;
     60 
     61 using ::testing::AnyNumber;
     62 using ::testing::InvokeWithoutArgs;
     63 using ::testing::_;
     64 
     65 namespace policy {
     66 
     67 namespace {
     68 
     69 const char kLoginScreenPowerManagementPolicy[] =
     70     "{"
     71     "  \"AC\": {"
     72     "    \"Delays\": {"
     73     "      \"ScreenDim\": 5000,"
     74     "      \"ScreenOff\": 7000,"
     75     "      \"Idle\": 9000"
     76     "    },"
     77     "    \"IdleAction\": \"DoNothing\""
     78     "  },"
     79     "  \"Battery\": {"
     80     "    \"Delays\": {"
     81     "      \"ScreenDim\": 1000,"
     82     "      \"ScreenOff\": 3000,"
     83     "      \"Idle\": 4000"
     84     "    },"
     85     "    \"IdleAction\": \"DoNothing\""
     86     "  },"
     87     "  \"LidCloseAction\": \"DoNothing\","
     88     "  \"UserActivityScreenDimDelayScale\": 300"
     89     "}";
     90 
     91 const char kPowerManagementIdleSettingsPolicy[] =
     92     "{"
     93     "  \"AC\": {"
     94     "    \"Delays\": {"
     95     "      \"ScreenDim\": 5000,"
     96     "      \"ScreenOff\": 7000,"
     97     "      \"IdleWarning\": 8000,"
     98     "      \"Idle\": 9000"
     99     "    },"
    100     "    \"IdleAction\": \"Logout\""
    101     "  },"
    102     "  \"Battery\": {"
    103     "    \"Delays\": {"
    104     "      \"ScreenDim\": 1000,"
    105     "      \"ScreenOff\": 3000,"
    106     "      \"IdleWarning\": 4000,"
    107     "      \"Idle\": 5000"
    108     "    },"
    109     "    \"IdleAction\": \"Logout\""
    110     "  }"
    111     "}";
    112 
    113 const char kScreenLockDelayPolicy[] =
    114     "{"
    115     "  \"AC\": 6000,"
    116     "  \"Battery\": 2000"
    117     "}";
    118 
    119 }  // namespace
    120 
    121 class PowerPolicyBrowserTestBase : public DevicePolicyCrosBrowserTest {
    122  protected:
    123   PowerPolicyBrowserTestBase();
    124 
    125   // DevicePolicyCrosBrowserTest:
    126   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
    127   virtual void SetUpOnMainThread() OVERRIDE;
    128 
    129   void InstallUserKey();
    130   void StoreAndReloadUserPolicy();
    131 
    132   void StoreAndReloadDevicePolicyAndWaitForLoginProfileChange();
    133 
    134   // Returns a string describing |policy|.
    135   std::string GetDebugString(const pm::PowerManagementPolicy& policy);
    136 
    137   UserPolicyBuilder user_policy_;
    138 
    139   chromeos::FakePowerManagerClient* power_manager_client_;
    140 
    141  private:
    142   // Runs |closure| and waits for |profile|'s user policy to be updated as a
    143   // result.
    144   void RunClosureAndWaitForUserPolicyUpdate(const base::Closure& closure,
    145                                             Profile* profile);
    146 
    147   // Reloads user policy for |profile| from session manager client.
    148   void ReloadUserPolicy(Profile* profile);
    149 
    150   DISALLOW_COPY_AND_ASSIGN(PowerPolicyBrowserTestBase);
    151 };
    152 
    153 class PowerPolicyLoginScreenBrowserTest : public PowerPolicyBrowserTestBase {
    154  protected:
    155   PowerPolicyLoginScreenBrowserTest();
    156 
    157   // PowerPolicyBrowserTestBase:
    158   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
    159   virtual void SetUpOnMainThread() OVERRIDE;
    160   virtual void TearDownOnMainThread() OVERRIDE;
    161 
    162   DISALLOW_COPY_AND_ASSIGN(PowerPolicyLoginScreenBrowserTest);
    163 };
    164 
    165 class PowerPolicyInSessionBrowserTest : public PowerPolicyBrowserTestBase {
    166  protected:
    167   PowerPolicyInSessionBrowserTest();
    168 
    169   // PowerPolicyBrowserTestBase:
    170   virtual void SetUpOnMainThread() OVERRIDE;
    171 
    172   DISALLOW_COPY_AND_ASSIGN(PowerPolicyInSessionBrowserTest);
    173 };
    174 
    175 PowerPolicyBrowserTestBase::PowerPolicyBrowserTestBase()
    176     : power_manager_client_(NULL) {
    177 }
    178 
    179 void PowerPolicyBrowserTestBase::SetUpInProcessBrowserTestFixture() {
    180   DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
    181   power_manager_client_ = new chromeos::FakePowerManagerClient;
    182   dbus_setter()->SetPowerManagerClient(
    183       scoped_ptr<chromeos::PowerManagerClient>(power_manager_client_));
    184 
    185   // Initialize device policy.
    186   InstallOwnerKey();
    187   MarkAsEnterpriseOwned();
    188 }
    189 
    190 void PowerPolicyBrowserTestBase::SetUpOnMainThread() {
    191   DevicePolicyCrosBrowserTest::SetUpOnMainThread();
    192 
    193   // Initialize user policy.
    194   InstallUserKey();
    195   user_policy_.policy_data().set_username(chromeos::login::kStubUser);
    196 }
    197 
    198 void PowerPolicyBrowserTestBase::InstallUserKey() {
    199   base::FilePath user_keys_dir;
    200   ASSERT_TRUE(PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &user_keys_dir));
    201   std::string sanitized_username =
    202       chromeos::CryptohomeClient::GetStubSanitizedUsername(
    203           chromeos::login::kStubUser);
    204   base::FilePath user_key_file =
    205       user_keys_dir.AppendASCII(sanitized_username)
    206                    .AppendASCII("policy.pub");
    207   std::vector<uint8> user_key_bits;
    208   ASSERT_TRUE(user_policy_.GetSigningKey()->ExportPublicKey(&user_key_bits));
    209   ASSERT_TRUE(base::CreateDirectory(user_key_file.DirName()));
    210   ASSERT_EQ(base::WriteFile(
    211                 user_key_file,
    212                 reinterpret_cast<const char*>(user_key_bits.data()),
    213                 user_key_bits.size()),
    214             static_cast<int>(user_key_bits.size()));
    215 }
    216 
    217 void PowerPolicyBrowserTestBase::StoreAndReloadUserPolicy() {
    218   // Install the new user policy blob in session manager client.
    219   user_policy_.Build();
    220   session_manager_client()->set_user_policy(
    221       user_policy_.policy_data().username(),
    222       user_policy_.GetBlob());
    223 
    224   // Reload user policy from session manager client and wait for the update to
    225   // take effect.
    226   RunClosureAndWaitForUserPolicyUpdate(
    227       base::Bind(&PowerPolicyBrowserTestBase::ReloadUserPolicy, this,
    228                  browser()->profile()),
    229       browser()->profile());
    230 }
    231 
    232 void PowerPolicyBrowserTestBase::
    233     StoreAndReloadDevicePolicyAndWaitForLoginProfileChange() {
    234   Profile* profile = chromeos::ProfileHelper::GetSigninProfile();
    235   ASSERT_TRUE(profile);
    236 
    237   // Install the new device policy blob in session manager client, reload device
    238   // policy from session manager client and wait for a change in the login
    239   // profile's policy to be observed.
    240   RunClosureAndWaitForUserPolicyUpdate(
    241       base::Bind(&PowerPolicyBrowserTestBase::RefreshDevicePolicy, this),
    242       profile);
    243 }
    244 
    245 std::string PowerPolicyBrowserTestBase::GetDebugString(
    246     const pm::PowerManagementPolicy& policy) {
    247   return chromeos::PowerPolicyController::GetPolicyDebugString(policy);
    248 }
    249 
    250 void PowerPolicyBrowserTestBase::RunClosureAndWaitForUserPolicyUpdate(
    251     const base::Closure& closure,
    252     Profile* profile) {
    253   base::RunLoop run_loop;
    254   MockPolicyServiceObserver observer;
    255   EXPECT_CALL(observer, OnPolicyUpdated(_, _, _))
    256       .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
    257   EXPECT_CALL(observer, OnPolicyServiceInitialized(_)).Times(AnyNumber());
    258   PolicyService* policy_service =
    259       ProfilePolicyConnectorFactory::GetForProfile(profile)->policy_service();
    260   ASSERT_TRUE(policy_service);
    261   policy_service->AddObserver(POLICY_DOMAIN_CHROME, &observer);
    262   closure.Run();
    263   run_loop.Run();
    264   policy_service->RemoveObserver(POLICY_DOMAIN_CHROME, &observer);
    265 }
    266 
    267 void PowerPolicyBrowserTestBase::ReloadUserPolicy(Profile* profile) {
    268   UserCloudPolicyManagerChromeOS* policy_manager =
    269       UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile);
    270   ASSERT_TRUE(policy_manager);
    271   policy_manager->core()->store()->Load();
    272 }
    273 
    274 PowerPolicyLoginScreenBrowserTest::PowerPolicyLoginScreenBrowserTest() {
    275 }
    276 
    277 void PowerPolicyLoginScreenBrowserTest::SetUpCommandLine(
    278     CommandLine* command_line) {
    279   PowerPolicyBrowserTestBase::SetUpCommandLine(command_line);
    280   command_line->AppendSwitch(chromeos::switches::kLoginManager);
    281   command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
    282 }
    283 
    284 void PowerPolicyLoginScreenBrowserTest::SetUpOnMainThread() {
    285   PowerPolicyBrowserTestBase::SetUpOnMainThread();
    286 
    287   // Wait for the login screen to be shown.
    288   content::WindowedNotificationObserver(
    289       chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
    290       content::NotificationService::AllSources()).Wait();
    291 }
    292 
    293 void PowerPolicyLoginScreenBrowserTest::TearDownOnMainThread() {
    294   base::MessageLoop::current()->PostTask(FROM_HERE,
    295                                          base::Bind(&chrome::AttemptExit));
    296   base::RunLoop().RunUntilIdle();
    297   PowerPolicyBrowserTestBase::TearDownOnMainThread();
    298 }
    299 
    300 PowerPolicyInSessionBrowserTest::PowerPolicyInSessionBrowserTest() {
    301 }
    302 
    303 void PowerPolicyInSessionBrowserTest::SetUpOnMainThread() {
    304   PowerPolicyBrowserTestBase::SetUpOnMainThread();
    305 }
    306 
    307 // Verifies that device policy is applied on the login screen.
    308 IN_PROC_BROWSER_TEST_F(PowerPolicyLoginScreenBrowserTest, SetDevicePolicy) {
    309   pm::PowerManagementPolicy power_management_policy =
    310       power_manager_client_->policy();
    311   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
    312   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
    313   power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
    314   power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000);
    315   power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000);
    316   power_management_policy.mutable_battery_delays()->set_idle_ms(4000);
    317   power_management_policy.set_ac_idle_action(
    318       pm::PowerManagementPolicy::DO_NOTHING);
    319   power_management_policy.set_battery_idle_action(
    320       pm::PowerManagementPolicy::DO_NOTHING);
    321   power_management_policy.set_lid_closed_action(
    322       pm::PowerManagementPolicy::DO_NOTHING);
    323   power_management_policy.set_user_activity_screen_dim_delay_factor(3.0);
    324 
    325   em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
    326   proto.mutable_login_screen_power_management()->
    327       set_login_screen_power_management(kLoginScreenPowerManagementPolicy);
    328   StoreAndReloadDevicePolicyAndWaitForLoginProfileChange();
    329   EXPECT_EQ(GetDebugString(power_management_policy),
    330             GetDebugString(power_manager_client_->policy()));
    331 }
    332 
    333 // Verifies that device policy is ignored during a session.
    334 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetDevicePolicy) {
    335   pm::PowerManagementPolicy power_management_policy =
    336       power_manager_client_->policy();
    337 
    338   em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
    339   proto.mutable_login_screen_power_management()->
    340       set_login_screen_power_management(kLoginScreenPowerManagementPolicy);
    341   StoreAndReloadDevicePolicyAndWaitForLoginProfileChange();
    342   EXPECT_EQ(GetDebugString(power_management_policy),
    343             GetDebugString(power_manager_client_->policy()));
    344 }
    345 
    346 // Verifies that legacy user policy is applied during a session.
    347 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetLegacyUserPolicy) {
    348   pm::PowerManagementPolicy power_management_policy =
    349       power_manager_client_->policy();
    350   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
    351   power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
    352   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
    353   power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000);
    354   power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
    355   power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000);
    356   power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000);
    357   power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000);
    358   power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000);
    359   power_management_policy.mutable_battery_delays()->set_idle_ms(5000);
    360   power_management_policy.set_use_audio_activity(false);
    361   power_management_policy.set_use_video_activity(false);
    362   power_management_policy.set_ac_idle_action(
    363       pm::PowerManagementPolicy::STOP_SESSION);
    364   power_management_policy.set_battery_idle_action(
    365       pm::PowerManagementPolicy::STOP_SESSION);
    366   power_management_policy.set_lid_closed_action(
    367       pm::PowerManagementPolicy::STOP_SESSION);
    368   power_management_policy.set_presentation_screen_dim_delay_factor(3.0);
    369   power_management_policy.set_user_activity_screen_dim_delay_factor(3.0);
    370   power_management_policy.set_wait_for_initial_user_activity(true);
    371 
    372   user_policy_.payload().mutable_screendimdelayac()->set_value(5000);
    373   user_policy_.payload().mutable_screenlockdelayac()->set_value(6000);
    374   user_policy_.payload().mutable_screenoffdelayac()->set_value(7000);
    375   user_policy_.payload().mutable_idlewarningdelayac()->set_value(8000);
    376   user_policy_.payload().mutable_idledelayac()->set_value(9000);
    377   user_policy_.payload().mutable_screendimdelaybattery()->set_value(1000);
    378   user_policy_.payload().mutable_screenlockdelaybattery()->set_value(2000);
    379   user_policy_.payload().mutable_screenoffdelaybattery()->set_value(3000);
    380   user_policy_.payload().mutable_idlewarningdelaybattery()->set_value(4000);
    381   user_policy_.payload().mutable_idledelaybattery()->set_value(5000);
    382   user_policy_.payload().mutable_powermanagementusesaudioactivity()->set_value(
    383       false);
    384   user_policy_.payload().mutable_powermanagementusesvideoactivity()->set_value(
    385       false);
    386   user_policy_.payload().mutable_idleactionac()->set_value(
    387       chromeos::PowerPolicyController::ACTION_STOP_SESSION);
    388   user_policy_.payload().mutable_idleactionbattery()->set_value(
    389       chromeos::PowerPolicyController::ACTION_STOP_SESSION);
    390   user_policy_.payload().mutable_lidcloseaction()->set_value(
    391       chromeos::PowerPolicyController::ACTION_STOP_SESSION);
    392   user_policy_.payload().mutable_presentationscreendimdelayscale()->set_value(
    393       300);
    394   user_policy_.payload().mutable_useractivityscreendimdelayscale()->set_value(
    395       300);
    396   user_policy_.payload().mutable_waitforinitialuseractivity()->set_value(true);
    397   StoreAndReloadUserPolicy();
    398   EXPECT_EQ(GetDebugString(power_management_policy),
    399             GetDebugString(power_manager_client_->policy()));
    400 }
    401 
    402 // Verifies that user policy is applied during a session.
    403 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetUserPolicy) {
    404   pm::PowerManagementPolicy power_management_policy =
    405       power_manager_client_->policy();
    406   power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
    407   power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
    408   power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
    409   power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000);
    410   power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
    411   power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000);
    412   power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000);
    413   power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000);
    414   power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000);
    415   power_management_policy.mutable_battery_delays()->set_idle_ms(5000);
    416   power_management_policy.set_use_audio_activity(false);
    417   power_management_policy.set_use_video_activity(false);
    418   power_management_policy.set_ac_idle_action(
    419       pm::PowerManagementPolicy::STOP_SESSION);
    420   power_management_policy.set_battery_idle_action(
    421       pm::PowerManagementPolicy::STOP_SESSION);
    422   power_management_policy.set_lid_closed_action(
    423       pm::PowerManagementPolicy::STOP_SESSION);
    424   power_management_policy.set_presentation_screen_dim_delay_factor(3.0);
    425   power_management_policy.set_user_activity_screen_dim_delay_factor(3.0);
    426   power_management_policy.set_wait_for_initial_user_activity(true);
    427 
    428   // Set legacy policies which are expected to be ignored.
    429   user_policy_.payload().mutable_screendimdelayac()->set_value(5555);
    430   user_policy_.payload().mutable_screenlockdelayac()->set_value(6666);
    431   user_policy_.payload().mutable_screenoffdelayac()->set_value(7777);
    432   user_policy_.payload().mutable_idlewarningdelayac()->set_value(8888);
    433   user_policy_.payload().mutable_idledelayac()->set_value(9999);
    434   user_policy_.payload().mutable_screendimdelaybattery()->set_value(1111);
    435   user_policy_.payload().mutable_screenlockdelaybattery()->set_value(2222);
    436   user_policy_.payload().mutable_screenoffdelaybattery()->set_value(3333);
    437   user_policy_.payload().mutable_idlewarningdelaybattery()->set_value(4444);
    438   user_policy_.payload().mutable_idledelaybattery()->set_value(5555);
    439   user_policy_.payload().mutable_idleactionac()->set_value(
    440       chromeos::PowerPolicyController::ACTION_SHUT_DOWN);
    441   user_policy_.payload().mutable_idleactionbattery()->set_value(
    442       chromeos::PowerPolicyController::ACTION_DO_NOTHING);
    443 
    444   // Set current policies which are expected to be honored.
    445   user_policy_.payload().mutable_powermanagementusesaudioactivity()->set_value(
    446       false);
    447   user_policy_.payload().mutable_powermanagementusesvideoactivity()->set_value(
    448       false);
    449   user_policy_.payload().mutable_lidcloseaction()->set_value(
    450       chromeos::PowerPolicyController::ACTION_STOP_SESSION);
    451   user_policy_.payload().mutable_presentationscreendimdelayscale()->set_value(
    452       300);
    453   user_policy_.payload().mutable_useractivityscreendimdelayscale()->set_value(
    454       300);
    455   user_policy_.payload().mutable_waitforinitialuseractivity()->set_value(true);
    456 
    457   user_policy_.payload().mutable_powermanagementidlesettings()->set_value(
    458       kPowerManagementIdleSettingsPolicy);
    459   user_policy_.payload().mutable_screenlockdelays()->set_value(
    460       kScreenLockDelayPolicy);
    461 
    462   StoreAndReloadUserPolicy();
    463   EXPECT_EQ(GetDebugString(power_management_policy),
    464             GetDebugString(power_manager_client_->policy()));
    465 }
    466 
    467 // Verifies that screen wake locks can be enabled and disabled by extensions and
    468 // user policy during a session.
    469 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, AllowScreenWakeLocks) {
    470   pm::PowerManagementPolicy baseline_policy =
    471       power_manager_client_->policy();
    472 
    473   // Default settings should have delays.
    474   pm::PowerManagementPolicy power_management_policy = baseline_policy;
    475   EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms());
    476   EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms());
    477   EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms());
    478   EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms());
    479 
    480   // Pretend an extension grabs a screen wake lock.
    481   const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop";
    482   extensions::PowerApiManager::Get(browser()->profile())->AddRequest(
    483       kExtensionId, extensions::core_api::power::LEVEL_DISPLAY);
    484   base::RunLoop().RunUntilIdle();
    485 
    486   // Check that the lock is in effect (ignoring ac_idle_action,
    487   // battery_idle_action and reason).
    488   pm::PowerManagementPolicy policy = baseline_policy;
    489   policy.mutable_ac_delays()->set_screen_dim_ms(0);
    490   policy.mutable_ac_delays()->set_screen_off_ms(0);
    491   policy.mutable_battery_delays()->set_screen_dim_ms(0);
    492   policy.mutable_battery_delays()->set_screen_off_ms(0);
    493   policy.set_ac_idle_action(
    494       power_manager_client_->policy().ac_idle_action());
    495   policy.set_battery_idle_action(
    496       power_manager_client_->policy().battery_idle_action());
    497   policy.set_reason(power_manager_client_->policy().reason());
    498   EXPECT_EQ(GetDebugString(policy),
    499             GetDebugString(power_manager_client_->policy()));
    500 
    501   // Engage the user policy and verify that the defaults take effect again.
    502   user_policy_.payload().mutable_allowscreenwakelocks()->set_value(false);
    503   StoreAndReloadUserPolicy();
    504   policy = baseline_policy;
    505   policy.set_ac_idle_action(power_manager_client_->policy().ac_idle_action());
    506   policy.set_battery_idle_action(
    507       power_manager_client_->policy().battery_idle_action());
    508   policy.set_reason(power_manager_client_->policy().reason());
    509   EXPECT_EQ(GetDebugString(policy),
    510             GetDebugString(power_manager_client_->policy()));
    511 }
    512 
    513 }  // namespace policy
    514