power_policy_browsertest.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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 7#include "base/compiler_specific.h" 8#include "base/run_loop.h" 9#include "base/values.h" 10#include "chrome/browser/extensions/api/power/power_api_manager.h" 11#include "chrome/browser/policy/browser_policy_connector.h" 12#include "chrome/browser/policy/mock_configuration_policy_provider.h" 13#include "chrome/browser/policy/policy_map.h" 14#include "chrome/browser/policy/policy_types.h" 15#include "chrome/common/extensions/api/power.h" 16#include "chrome/test/base/in_process_browser_test.h" 17#include "chromeos/dbus/dbus_thread_manager.h" 18#include "chromeos/dbus/fake_power_manager_client.h" 19#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" 20#include "chromeos/dbus/power_manager/policy.pb.h" 21#include "chromeos/dbus/power_policy_controller.h" 22#include "policy/policy_constants.h" 23#include "testing/gmock/include/gmock/gmock.h" 24 25namespace policy { 26 27namespace { 28 29using ::testing::AnyNumber; 30using ::testing::Return; 31using ::testing::_; 32 33namespace pm = power_manager; 34 35} // namespace 36 37class PowerPolicyBrowserTest : public InProcessBrowserTest { 38 protected: 39 // InProcessBrowserTest: 40 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 41 42 // Sets |user_policy_name| to |user_policy_value|. 43 void SetUserPolicy(const std::string& user_policy_name, 44 base::Value* user_policy_value); 45 46 // Returns a string describing |policy|. 47 std::string GetDebugString(const pm::PowerManagementPolicy& policy); 48 49 chromeos::FakePowerManagerClient* power_manager_client_; 50 51 private: 52 MockConfigurationPolicyProvider provider_; 53}; 54 55void PowerPolicyBrowserTest::SetUpInProcessBrowserTestFixture() { 56 chromeos::MockDBusThreadManagerWithoutGMock* dbus_thread_manager = 57 new chromeos::MockDBusThreadManagerWithoutGMock; 58 power_manager_client_ = dbus_thread_manager->fake_power_manager_client(); 59 chromeos::DBusThreadManager::InitializeForTesting(dbus_thread_manager); 60 EXPECT_CALL(provider_, IsInitializationComplete(_)) 61 .WillRepeatedly(Return(true)); 62 EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber()); 63 BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); 64} 65 66void PowerPolicyBrowserTest::SetUserPolicy( 67 const std::string& user_policy_name, 68 base::Value* user_policy_value) { 69 PolicyMap policy_map; 70 policy_map.Set(user_policy_name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 71 user_policy_value); 72 provider_.UpdateChromePolicy(policy_map); 73 base::RunLoop().RunUntilIdle(); 74} 75 76std::string PowerPolicyBrowserTest::GetDebugString( 77 const pm::PowerManagementPolicy& policy) { 78 return chromeos::PowerPolicyController::GetPolicyDebugString(policy); 79} 80 81IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, SetPowerPolicy) { 82 pm::PowerManagementPolicy original_power_management_policy = 83 power_manager_client_->get_policy(); 84 85 pm::PowerManagementPolicy power_management_policy = 86 original_power_management_policy; 87 power_management_policy.set_idle_action( 88 pm::PowerManagementPolicy::STOP_SESSION); 89 SetUserPolicy( 90 key::kIdleAction, 91 base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION)); 92 EXPECT_EQ(GetDebugString(power_management_policy), 93 GetDebugString(power_manager_client_->get_policy())); 94 95 power_management_policy = original_power_management_policy; 96 power_management_policy.set_lid_closed_action( 97 pm::PowerManagementPolicy::STOP_SESSION); 98 SetUserPolicy( 99 key::kLidCloseAction, 100 base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION)); 101 EXPECT_EQ(GetDebugString(power_management_policy), 102 GetDebugString(power_manager_client_->get_policy())); 103 104 power_management_policy = original_power_management_policy; 105 power_management_policy.mutable_ac_delays()->set_idle_ms(9000); 106 SetUserPolicy(key::kIdleDelayAC, base::Value::CreateIntegerValue(9000)); 107 EXPECT_EQ(GetDebugString(power_management_policy), 108 GetDebugString(power_manager_client_->get_policy())); 109 110 power_management_policy = original_power_management_policy; 111 power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000); 112 SetUserPolicy(key::kIdleWarningDelayAC, 113 base::Value::CreateIntegerValue(8000)); 114 EXPECT_EQ(GetDebugString(power_management_policy), 115 GetDebugString(power_manager_client_->get_policy())); 116 117 power_management_policy = original_power_management_policy; 118 power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000); 119 SetUserPolicy(key::kScreenOffDelayAC, base::Value::CreateIntegerValue(7000)); 120 EXPECT_EQ(GetDebugString(power_management_policy), 121 GetDebugString(power_manager_client_->get_policy())); 122 123 power_management_policy = original_power_management_policy; 124 power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000); 125 SetUserPolicy(key::kScreenDimDelayAC, base::Value::CreateIntegerValue(5000)); 126 EXPECT_EQ(GetDebugString(power_management_policy), 127 GetDebugString(power_manager_client_->get_policy())); 128 129 power_management_policy = original_power_management_policy; 130 power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000); 131 SetUserPolicy(key::kScreenLockDelayAC, base::Value::CreateIntegerValue(6000)); 132 EXPECT_EQ(GetDebugString(power_management_policy), 133 GetDebugString(power_manager_client_->get_policy())); 134 135 power_management_policy = original_power_management_policy; 136 power_management_policy.mutable_battery_delays()->set_idle_ms(5000); 137 SetUserPolicy(key::kIdleDelayBattery, base::Value::CreateIntegerValue(5000)); 138 EXPECT_EQ(GetDebugString(power_management_policy), 139 GetDebugString(power_manager_client_->get_policy())); 140 141 power_management_policy = original_power_management_policy; 142 power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000); 143 SetUserPolicy(key::kIdleWarningDelayBattery, 144 base::Value::CreateIntegerValue(4000)); 145 EXPECT_EQ(GetDebugString(power_management_policy), 146 GetDebugString(power_manager_client_->get_policy())); 147 148 power_management_policy = original_power_management_policy; 149 power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000); 150 SetUserPolicy(key::kScreenOffDelayBattery, 151 base::Value::CreateIntegerValue(3000)); 152 EXPECT_EQ(GetDebugString(power_management_policy), 153 GetDebugString(power_manager_client_->get_policy())); 154 155 power_management_policy = original_power_management_policy; 156 power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000); 157 SetUserPolicy(key::kScreenDimDelayBattery, 158 base::Value::CreateIntegerValue(1000)); 159 EXPECT_EQ(GetDebugString(power_management_policy), 160 GetDebugString(power_manager_client_->get_policy())); 161 162 power_management_policy = original_power_management_policy; 163 power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000); 164 SetUserPolicy(key::kScreenLockDelayBattery, 165 base::Value::CreateIntegerValue(2000)); 166 EXPECT_EQ(GetDebugString(power_management_policy), 167 GetDebugString(power_manager_client_->get_policy())); 168 169 power_management_policy = original_power_management_policy; 170 power_management_policy.set_use_audio_activity(false); 171 SetUserPolicy(key::kPowerManagementUsesAudioActivity, 172 base::Value::CreateBooleanValue(false)); 173 EXPECT_EQ(GetDebugString(power_management_policy), 174 GetDebugString(power_manager_client_->get_policy())); 175 176 power_management_policy = original_power_management_policy; 177 power_management_policy.set_use_video_activity(false); 178 SetUserPolicy(key::kPowerManagementUsesVideoActivity, 179 base::Value::CreateBooleanValue(false)); 180 EXPECT_EQ(GetDebugString(power_management_policy), 181 GetDebugString(power_manager_client_->get_policy())); 182 183 power_management_policy = original_power_management_policy; 184 power_management_policy.set_presentation_idle_delay_factor(3.0); 185 SetUserPolicy(key::kPresentationIdleDelayScale, 186 base::Value::CreateIntegerValue(300)); 187 EXPECT_EQ(GetDebugString(power_management_policy), 188 GetDebugString(power_manager_client_->get_policy())); 189} 190 191IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, AllowScreenWakeLocks) { 192 pm::PowerManagementPolicy baseline_policy = 193 power_manager_client_->get_policy(); 194 195 // Default settings should have delays. 196 pm::PowerManagementPolicy power_management_policy = baseline_policy; 197 EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms()); 198 EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms()); 199 EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms()); 200 EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms()); 201 202 // Pretend an extension grabs a screen wake lock. 203 const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop"; 204 extensions::PowerApiManager::GetInstance()->AddRequest( 205 kExtensionId, extensions::api::power::LEVEL_DISPLAY); 206 base::RunLoop().RunUntilIdle(); 207 208 // Check that the lock is in effect (ignoring idle_action and reason). 209 pm::PowerManagementPolicy policy = baseline_policy; 210 policy.mutable_ac_delays()->set_screen_dim_ms(0); 211 policy.mutable_ac_delays()->set_screen_off_ms(0); 212 policy.mutable_battery_delays()->set_screen_dim_ms(0); 213 policy.mutable_battery_delays()->set_screen_off_ms(0); 214 policy.set_idle_action(power_manager_client_->get_policy().idle_action()); 215 policy.set_reason(power_manager_client_->get_policy().reason()); 216 EXPECT_EQ(GetDebugString(policy), 217 GetDebugString(power_manager_client_->get_policy())); 218 219 // Engage the policy and verify that the defaults take effect again. 220 SetUserPolicy(key::kAllowScreenWakeLocks, 221 base::Value::CreateBooleanValue(false)); 222 policy = baseline_policy; 223 policy.set_idle_action(power_manager_client_->get_policy().idle_action()); 224 policy.set_reason(power_manager_client_->get_policy().reason()); 225 EXPECT_EQ(GetDebugString(policy), 226 GetDebugString(power_manager_client_->get_policy())); 227} 228 229} // namespace policy 230