power_policy_browsertest.cc revision a93a17c8d99d686bd4a1511e5504e5e6cc9fcadf
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/power/power_api_manager.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/browser_policy_connector.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/mock_configuration_policy_provider.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/policy_map.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/policy_types.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/api/power.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/fake_power_manager_client.h"
19a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h"
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/power_manager/policy.pb.h"
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/power_policy_controller.h"
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "policy/policy_constants.h"
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::AnyNumber;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pm = power_manager;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PowerPolicyBrowserTest : public InProcessBrowserTest {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InProcessBrowserTest:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets |user_policy_name| to |user_policy_value|.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetUserPolicy(const std::string& user_policy_name,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     base::Value* user_policy_value);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a string describing |policy|.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetDebugString(const pm::PowerManagementPolicy& policy);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::FakePowerManagerClient* power_manager_client_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockConfigurationPolicyProvider provider_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PowerPolicyBrowserTest::SetUpInProcessBrowserTestFixture() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::MockDBusThreadManagerWithoutGMock* dbus_thread_manager =
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new chromeos::MockDBusThreadManagerWithoutGMock;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_manager_client_ = dbus_thread_manager->fake_power_manager_client();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::DBusThreadManager::InitializeForTesting(dbus_thread_manager);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(provider_, IsInitializationComplete(_))
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillRepeatedly(Return(true));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(provider_, RegisterPolicyDomain(_, _)).Times(AnyNumber());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PowerPolicyBrowserTest::SetUserPolicy(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& user_policy_name,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Value* user_policy_value) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyMap policy_map;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_map.Set(user_policy_name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 user_policy_value);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_.UpdateChromePolicy(policy_map);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string PowerPolicyBrowserTest::GetDebugString(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const pm::PowerManagementPolicy& policy) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return chromeos::PowerPolicyController::GetPolicyDebugString(policy);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, SetPowerPolicy) {
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  pm::PowerManagementPolicy original_power_management_policy =
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      power_manager_client_->get_policy();
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  pm::PowerManagementPolicy power_management_policy =
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      original_power_management_policy;
87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  power_management_policy.set_idle_action(
88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      pm::PowerManagementPolicy::STOP_SESSION);
89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SetUserPolicy(
90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      key::kIdleAction,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.set_lid_closed_action(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pm::PowerManagementPolicy::STOP_SESSION);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      key::kLidCloseAction,
1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kIdleDelayAC, base::Value::CreateIntegerValue(9000));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kIdleWarningDelayAC,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateIntegerValue(8000));
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kScreenOffDelayAC, base::Value::CreateIntegerValue(7000));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kScreenDimDelayAC, base::Value::CreateIntegerValue(5000));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kScreenLockDelayAC, base::Value::CreateIntegerValue(6000));
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  power_management_policy.mutable_battery_delays()->set_idle_ms(5000);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kIdleDelayBattery, base::Value::CreateIntegerValue(5000));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kIdleWarningDelayBattery,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateIntegerValue(4000));
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kScreenOffDelayBattery,
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                base::Value::CreateIntegerValue(3000));
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kScreenDimDelayBattery,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateIntegerValue(1000));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kScreenLockDelayBattery,
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateIntegerValue(2000));
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.set_use_audio_activity(false);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kPowerManagementUsesAudioActivity,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateBooleanValue(false));
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy = original_power_management_policy;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  power_management_policy.set_use_video_activity(false);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kPowerManagementUsesVideoActivity,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateBooleanValue(false));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  power_management_policy = original_power_management_policy;
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  power_management_policy.set_presentation_idle_delay_factor(3.0);
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetUserPolicy(key::kPresentationIdleDelayScale,
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                base::Value::CreateIntegerValue(300));
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(power_management_policy),
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, AllowScreenWakeLocks) {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pm::PowerManagementPolicy baseline_policy =
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      power_manager_client_->get_policy();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default settings should have delays.
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pm::PowerManagementPolicy power_management_policy = baseline_policy;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms());
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms());
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms());
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms());
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pretend an extension grabs a screen wake lock.
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop";
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extensions::PowerApiManager::GetInstance()->AddRequest(
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kExtensionId, extensions::api::power::LEVEL_DISPLAY);
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::RunLoop().RunUntilIdle();
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that the lock is in effect (ignoring idle_action and reason).
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pm::PowerManagementPolicy policy = baseline_policy;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.mutable_ac_delays()->set_screen_dim_ms(0);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.mutable_ac_delays()->set_screen_off_ms(0);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.mutable_battery_delays()->set_screen_dim_ms(0);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.mutable_battery_delays()->set_screen_off_ms(0);
2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  policy.set_idle_action(power_manager_client_->get_policy().idle_action());
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.set_reason(power_manager_client_->get_policy().reason());
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(policy),
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Engage the policy and verify that the defaults take effect again.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetUserPolicy(key::kAllowScreenWakeLocks,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                base::Value::CreateBooleanValue(false));
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy = baseline_policy;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.set_idle_action(power_manager_client_->get_policy().idle_action());
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy.set_reason(power_manager_client_->get_policy().reason());
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GetDebugString(policy),
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            GetDebugString(power_manager_client_->get_policy()));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)