power_policy_browsertest.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// Use of this source code is governed by a BSD-style license that can be 3dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// found in the LICENSE file. 4dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 5dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include <string> 6dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 7dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "base/compiler_specific.h" 8dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "base/run_loop.h" 9dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "base/values.h" 10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/browser/extensions/api/power/power_api_manager.h" 11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/browser/policy/browser_policy_connector.h" 12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/browser/policy/mock_configuration_policy_provider.h" 13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/browser/policy/policy_map.h" 14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/browser/policy/policy_types.h" 15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/common/extensions/api/power.h" 16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chrome/test/base/in_process_browser_test.h" 17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chromeos/dbus/dbus_thread_manager.h" 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chromeos/dbus/fake_power_manager_client.h" 19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" 20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chromeos/dbus/power_manager/policy.pb.h" 21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "chromeos/dbus/power_policy_controller.h" 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "policy/policy_constants.h" 23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "testing/gmock/include/gmock/gmock.h" 24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace policy { 26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace { 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesusing ::testing::AnyNumber; 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesusing ::testing::Return; 31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesusing ::testing::_; 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace pm = power_manager; 34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // namespace 36cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass PowerPolicyBrowserTest : public InProcessBrowserTest { 38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines protected: 39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // InProcessBrowserTest: 40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines // Sets |user_policy_name| to |user_policy_value|. 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void SetUserPolicy(const std::string& user_policy_name, 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines base::Value* user_policy_value); 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines // Returns a string describing |policy|. 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines std::string GetDebugString(const pm::PowerManagementPolicy& policy); 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines chromeos::FakePowerManagerClient* power_manager_client_; 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines private: 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MockConfigurationPolicyProvider provider_; 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}; 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_ac_idle_action( 88 pm::PowerManagementPolicy::STOP_SESSION); 89 SetUserPolicy( 90 key::kIdleActionAC, 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_battery_idle_action( 97 pm::PowerManagementPolicy::STOP_SESSION); 98 SetUserPolicy( 99 key::kIdleActionBattery, 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.set_lid_closed_action( 106 pm::PowerManagementPolicy::STOP_SESSION); 107 SetUserPolicy( 108 key::kLidCloseAction, 109 base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION)); 110 EXPECT_EQ(GetDebugString(power_management_policy), 111 GetDebugString(power_manager_client_->get_policy())); 112 113 power_management_policy = original_power_management_policy; 114 power_management_policy.mutable_ac_delays()->set_idle_ms(9000); 115 SetUserPolicy(key::kIdleDelayAC, base::Value::CreateIntegerValue(9000)); 116 EXPECT_EQ(GetDebugString(power_management_policy), 117 GetDebugString(power_manager_client_->get_policy())); 118 119 power_management_policy = original_power_management_policy; 120 power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000); 121 SetUserPolicy(key::kIdleWarningDelayAC, 122 base::Value::CreateIntegerValue(8000)); 123 EXPECT_EQ(GetDebugString(power_management_policy), 124 GetDebugString(power_manager_client_->get_policy())); 125 126 power_management_policy = original_power_management_policy; 127 power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000); 128 SetUserPolicy(key::kScreenOffDelayAC, base::Value::CreateIntegerValue(7000)); 129 EXPECT_EQ(GetDebugString(power_management_policy), 130 GetDebugString(power_manager_client_->get_policy())); 131 132 power_management_policy = original_power_management_policy; 133 power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000); 134 SetUserPolicy(key::kScreenDimDelayAC, base::Value::CreateIntegerValue(5000)); 135 EXPECT_EQ(GetDebugString(power_management_policy), 136 GetDebugString(power_manager_client_->get_policy())); 137 138 power_management_policy = original_power_management_policy; 139 power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000); 140 SetUserPolicy(key::kScreenLockDelayAC, base::Value::CreateIntegerValue(6000)); 141 EXPECT_EQ(GetDebugString(power_management_policy), 142 GetDebugString(power_manager_client_->get_policy())); 143 144 power_management_policy = original_power_management_policy; 145 power_management_policy.mutable_battery_delays()->set_idle_ms(5000); 146 SetUserPolicy(key::kIdleDelayBattery, base::Value::CreateIntegerValue(5000)); 147 EXPECT_EQ(GetDebugString(power_management_policy), 148 GetDebugString(power_manager_client_->get_policy())); 149 150 power_management_policy = original_power_management_policy; 151 power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000); 152 SetUserPolicy(key::kIdleWarningDelayBattery, 153 base::Value::CreateIntegerValue(4000)); 154 EXPECT_EQ(GetDebugString(power_management_policy), 155 GetDebugString(power_manager_client_->get_policy())); 156 157 power_management_policy = original_power_management_policy; 158 power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000); 159 SetUserPolicy(key::kScreenOffDelayBattery, 160 base::Value::CreateIntegerValue(3000)); 161 EXPECT_EQ(GetDebugString(power_management_policy), 162 GetDebugString(power_manager_client_->get_policy())); 163 164 power_management_policy = original_power_management_policy; 165 power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000); 166 SetUserPolicy(key::kScreenDimDelayBattery, 167 base::Value::CreateIntegerValue(1000)); 168 EXPECT_EQ(GetDebugString(power_management_policy), 169 GetDebugString(power_manager_client_->get_policy())); 170 171 power_management_policy = original_power_management_policy; 172 power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000); 173 SetUserPolicy(key::kScreenLockDelayBattery, 174 base::Value::CreateIntegerValue(2000)); 175 EXPECT_EQ(GetDebugString(power_management_policy), 176 GetDebugString(power_manager_client_->get_policy())); 177 178 power_management_policy = original_power_management_policy; 179 power_management_policy.set_use_audio_activity(false); 180 SetUserPolicy(key::kPowerManagementUsesAudioActivity, 181 base::Value::CreateBooleanValue(false)); 182 EXPECT_EQ(GetDebugString(power_management_policy), 183 GetDebugString(power_manager_client_->get_policy())); 184 185 power_management_policy = original_power_management_policy; 186 power_management_policy.set_use_video_activity(false); 187 SetUserPolicy(key::kPowerManagementUsesVideoActivity, 188 base::Value::CreateBooleanValue(false)); 189 EXPECT_EQ(GetDebugString(power_management_policy), 190 GetDebugString(power_manager_client_->get_policy())); 191 192 power_management_policy = original_power_management_policy; 193 power_management_policy.set_presentation_screen_dim_delay_factor(3.0); 194 SetUserPolicy(key::kPresentationScreenDimDelayScale, 195 base::Value::CreateIntegerValue(300)); 196 EXPECT_EQ(GetDebugString(power_management_policy), 197 GetDebugString(power_manager_client_->get_policy())); 198} 199 200IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, AllowScreenWakeLocks) { 201 pm::PowerManagementPolicy baseline_policy = 202 power_manager_client_->get_policy(); 203 204 // Default settings should have delays. 205 pm::PowerManagementPolicy power_management_policy = baseline_policy; 206 EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms()); 207 EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms()); 208 EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms()); 209 EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms()); 210 211 // Pretend an extension grabs a screen wake lock. 212 const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop"; 213 extensions::PowerApiManager::GetInstance()->AddRequest( 214 kExtensionId, extensions::api::power::LEVEL_DISPLAY); 215 base::RunLoop().RunUntilIdle(); 216 217 // Check that the lock is in effect (ignoring idle_action and reason). 218 pm::PowerManagementPolicy policy = baseline_policy; 219 policy.mutable_ac_delays()->set_screen_dim_ms(0); 220 policy.mutable_ac_delays()->set_screen_off_ms(0); 221 policy.mutable_battery_delays()->set_screen_dim_ms(0); 222 policy.mutable_battery_delays()->set_screen_off_ms(0); 223 policy.set_ac_idle_action( 224 power_manager_client_->get_policy().ac_idle_action()); 225 policy.set_battery_idle_action( 226 power_manager_client_->get_policy().battery_idle_action()); 227 policy.set_reason(power_manager_client_->get_policy().reason()); 228 EXPECT_EQ(GetDebugString(policy), 229 GetDebugString(power_manager_client_->get_policy())); 230 231 // Engage the policy and verify that the defaults take effect again. 232 SetUserPolicy(key::kAllowScreenWakeLocks, 233 base::Value::CreateBooleanValue(false)); 234 policy = baseline_policy; 235 policy.set_ac_idle_action( 236 power_manager_client_->get_policy().ac_idle_action()); 237 policy.set_battery_idle_action( 238 power_manager_client_->get_policy().battery_idle_action()); 239 policy.set_reason(power_manager_client_->get_policy().reason()); 240 EXPECT_EQ(GetDebugString(policy), 241 GetDebugString(power_manager_client_->get_policy())); 242} 243 244} // namespace policy 245