Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: chrome/browser/chromeos/policy/power_policy_browsertest.cc

Issue 18153007: Add policies to control power management on the Chrome OS login screen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nit addressed. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6 #include <vector>
7
8 #include "base/basictypes.h"
9 #include "base/bind.h"
10 #include "base/command_line.h"
7 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/file_util.h"
13 #include "base/files/file_path.h"
14 #include "base/location.h"
15 #include "base/message_loop/message_loop.h"
16 #include "base/path_service.h"
8 #include "base/run_loop.h" 17 #include "base/run_loop.h"
9 #include "base/values.h" 18 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/chromeos/login/user_manager.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/user_cloud_policy_manager_chromeos.h"
23 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chrom eos.h"
24 #include "chrome/browser/chromeos/profiles/profile_helper.h"
25 #include "chrome/browser/chromeos/settings/device_settings_service.h"
10 #include "chrome/browser/extensions/api/power/power_api_manager.h" 26 #include "chrome/browser/extensions/api/power/power_api_manager.h"
11 #include "chrome/browser/policy/browser_policy_connector.h" 27 #include "chrome/browser/lifetime/application_lifetime.h"
12 #include "chrome/browser/policy/mock_configuration_policy_provider.h" 28 #include "chrome/browser/policy/cloud/cloud_policy_core.h"
29 #include "chrome/browser/policy/cloud/cloud_policy_store.h"
30 #include "chrome/browser/policy/cloud/policy_builder.h"
13 #include "chrome/browser/policy/policy_map.h" 31 #include "chrome/browser/policy/policy_map.h"
14 #include "chrome/browser/policy/policy_types.h" 32 #include "chrome/browser/policy/policy_service.h"
33 #include "chrome/browser/policy/profile_policy_connector.h"
34 #include "chrome/browser/policy/profile_policy_connector_factory.h"
35 #include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h"
36 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h"
37 #include "chrome/browser/profiles/profile.h"
38 #include "chrome/browser/profiles/profile_manager.h"
39 #include "chrome/common/chrome_notification_types.h"
15 #include "chrome/common/extensions/api/power.h" 40 #include "chrome/common/extensions/api/power.h"
16 #include "chrome/test/base/in_process_browser_test.h" 41 #include "chrome/test/base/testing_profile.h"
17 #include "chromeos/dbus/dbus_thread_manager.h" 42 #include "chromeos/chromeos_paths.h"
43 #include "chromeos/chromeos_switches.h"
18 #include "chromeos/dbus/fake_power_manager_client.h" 44 #include "chromeos/dbus/fake_power_manager_client.h"
45 #include "chromeos/dbus/fake_session_manager_client.h"
19 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" 46 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h"
20 #include "chromeos/dbus/power_manager/policy.pb.h" 47 #include "chromeos/dbus/power_manager/policy.pb.h"
21 #include "chromeos/dbus/power_policy_controller.h" 48 #include "chromeos/dbus/power_policy_controller.h"
22 #include "policy/policy_constants.h" 49 #include "content/public/browser/notification_details.h"
50 #include "content/public/browser/notification_service.h"
51 #include "content/public/browser/notification_source.h"
52 #include "content/public/test/test_utils.h"
53 #include "crypto/rsa_private_key.h"
23 #include "testing/gmock/include/gmock/gmock.h" 54 #include "testing/gmock/include/gmock/gmock.h"
55 #include "testing/gtest/include/gtest/gtest.h"
56
57 namespace em = enterprise_management;
58 namespace pm = power_manager;
59
60 using ::testing::AnyNumber;
61 using ::testing::InvokeWithoutArgs;
62 using ::testing::_;
24 63
25 namespace policy { 64 namespace policy {
26 65
27 namespace { 66 class MockPolicyServiceObserver : public PolicyService::Observer {
Mattias Nissler (ping if slow) 2013/07/03 16:52:18 There's a copy of this in policy_service_impl_unit
bartfab (slow) 2013/07/03 19:11:04 Done.
28 67 public:
29 using ::testing::AnyNumber; 68 MockPolicyServiceObserver();
30 using ::testing::Return; 69 virtual ~MockPolicyServiceObserver();
31 using ::testing::_; 70
32 71 MOCK_METHOD3(OnPolicyUpdated, void(const PolicyNamespace&,
33 namespace pm = power_manager; 72 const PolicyMap& previous,
34 73 const PolicyMap& current));
35 } // namespace 74 MOCK_METHOD1(OnPolicyServiceInitialized, void(PolicyDomain));
36 75 };
37 class PowerPolicyBrowserTest : public InProcessBrowserTest { 76
77 class PowerPolicyBrowserTestBase : public DevicePolicyCrosBrowserTest {
38 protected: 78 protected:
39 // InProcessBrowserTest: 79 PowerPolicyBrowserTestBase();
80
81 // DevicePolicyCrosBrowserTest:
40 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 82 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
41 83 virtual void SetUpOnMainThread() OVERRIDE;
42 // Sets |user_policy_name| to |user_policy_value|. 84
43 void SetUserPolicy(const std::string& user_policy_name, 85 void InstallUserKey();
44 base::Value* user_policy_value); 86 void RefreshUserPolicy();
87
88 void RefreshDevicePolicyAndWaitForLoginProfileChanges();
45 89
46 // Returns a string describing |policy|. 90 // Returns a string describing |policy|.
47 std::string GetDebugString(const pm::PowerManagementPolicy& policy); 91 std::string GetDebugString(const pm::PowerManagementPolicy& policy);
48 92
93 UserPolicyBuilder user_policy_;
94
49 chromeos::FakePowerManagerClient* power_manager_client_; 95 chromeos::FakePowerManagerClient* power_manager_client_;
50 96
51 private: 97 DISALLOW_COPY_AND_ASSIGN(PowerPolicyBrowserTestBase);
52 MockConfigurationPolicyProvider provider_;
53 }; 98 };
54 99
55 void PowerPolicyBrowserTest::SetUpInProcessBrowserTestFixture() { 100 class PowerPolicyLoginScreenBrowserTest : public PowerPolicyBrowserTestBase {
56 chromeos::MockDBusThreadManagerWithoutGMock* dbus_thread_manager = 101 protected:
57 new chromeos::MockDBusThreadManagerWithoutGMock; 102 PowerPolicyLoginScreenBrowserTest();
58 power_manager_client_ = dbus_thread_manager->fake_power_manager_client(); 103
59 chromeos::DBusThreadManager::InitializeForTesting(dbus_thread_manager); 104 // PowerPolicyBrowserTestBase:
60 EXPECT_CALL(provider_, IsInitializationComplete(_)) 105 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
61 .WillRepeatedly(Return(true)); 106 virtual void SetUpOnMainThread() OVERRIDE;
62 EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber()); 107 virtual void CleanUpOnMainThread() OVERRIDE;
63 BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); 108
64 } 109 DISALLOW_COPY_AND_ASSIGN(PowerPolicyLoginScreenBrowserTest);
65 110 };
66 void PowerPolicyBrowserTest::SetUserPolicy( 111
67 const std::string& user_policy_name, 112 class PowerPolicyInSessionBrowserTest : public PowerPolicyBrowserTestBase {
68 base::Value* user_policy_value) { 113 protected:
69 PolicyMap policy_map; 114 PowerPolicyInSessionBrowserTest();
70 policy_map.Set(user_policy_name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 115
71 user_policy_value); 116 // PowerPolicyBrowserTestBase:
72 provider_.UpdateChromePolicy(policy_map); 117 virtual void SetUpOnMainThread() OVERRIDE;
118
119 DISALLOW_COPY_AND_ASSIGN(PowerPolicyInSessionBrowserTest);
120 };
121
122 MockPolicyServiceObserver::MockPolicyServiceObserver() {
123 }
124
125 MockPolicyServiceObserver::~MockPolicyServiceObserver() {
126 }
127
128 PowerPolicyBrowserTestBase::PowerPolicyBrowserTestBase()
129 : power_manager_client_(NULL) {
130 }
131
132 void PowerPolicyBrowserTestBase::SetUpInProcessBrowserTestFixture() {
133 DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
134
135 // Initialize device policy.
136 InstallOwnerKey();
137 MarkAsEnterpriseOwned();
138
139 power_manager_client_ =
140 mock_dbus_thread_manager()->fake_power_manager_client();
141 }
142
143 void PowerPolicyBrowserTestBase::SetUpOnMainThread() {
144 DevicePolicyCrosBrowserTest::SetUpOnMainThread();
145
146 // Initialize user policy.
147 InstallUserKey();
148 user_policy_.policy_data().set_username(chromeos::UserManager::kStubUser);
149 }
150
151 void PowerPolicyBrowserTestBase::InstallUserKey() {
152 base::FilePath user_keys_dir;
153 ASSERT_TRUE(PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &user_keys_dir));
154 base::FilePath user_key_file =
155 user_keys_dir.AppendASCII(chromeos::UserManager::kStubUser)
156 .AppendASCII("policy.pub");
157 std::vector<uint8> user_key_bits;
158 ASSERT_TRUE(user_policy_.signing_key()->ExportPublicKey(&user_key_bits));
159 ASSERT_TRUE(file_util::CreateDirectory(user_key_file.DirName()));
160 ASSERT_EQ(file_util::WriteFile(
161 user_key_file,
162 reinterpret_cast<const char*>(user_key_bits.data()),
163 user_key_bits.size()),
164 static_cast<int>(user_key_bits.size()));
165 }
166
167 void PowerPolicyBrowserTestBase::RefreshUserPolicy() {
168 ProfileManager* profile_manager = g_browser_process->profile_manager();
169 Profile* profile = profile_manager->GetProfileByPath(
170 profile_manager->user_data_dir().Append(
171 TestingProfile::kTestUserProfileDir));
172 ASSERT_TRUE(profile);
173
174 // Install the new user policy blob in session manager client.
175 user_policy_.Build();
176 session_manager_client()->set_user_policy(
177 user_policy_.policy_data().username(),
178 user_policy_.GetBlob());
179
180 // Reload user policy from session manager client.
181 base::RunLoop run_loop;
182 MockPolicyServiceObserver observer;
Mattias Nissler (ping if slow) 2013/07/03 16:52:18 Why do we need this observer? The callbacks are ce
bartfab (slow) 2013/07/03 19:11:04 We call policy_manager->core()->store()->Load() an
Mattias Nissler (ping if slow) 2013/07/04 11:53:04 Ah, I had missed the waiting part. I guess a bette
bartfab (slow) 2013/07/05 13:52:57 As discussed offline, I kept this implementation t
183 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _))
184 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
185 EXPECT_CALL(observer, OnPolicyServiceInitialized(_)).Times(AnyNumber());
186 PolicyService* policy_service =
187 ProfilePolicyConnectorFactory::GetForProfile(profile)->policy_service();
188 ASSERT_TRUE(policy_service);
189 policy_service->AddObserver(POLICY_DOMAIN_CHROME, &observer);
190 UserCloudPolicyManagerChromeOS* policy_manager =
191 UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile);
192 ASSERT_TRUE(policy_manager);
193 policy_manager->core()->store()->Load();
194 run_loop.Run();
195 policy_service->RemoveObserver(POLICY_DOMAIN_CHROME, &observer);
196 }
197
198 void PowerPolicyBrowserTestBase::
199 RefreshDevicePolicyAndWaitForLoginProfileChanges() {
200 Profile* profile = chromeos::ProfileHelper::GetSigninProfile();
201 ASSERT_TRUE(profile);
202
203 // Install the new device policy blob in session manager client, reload device
204 // policy from session manager client and wait for a change in the login
205 // profile's policy to be observed.
206 base::RunLoop run_loop;
207 MockPolicyServiceObserver observer;
Mattias Nissler (ping if slow) 2013/07/03 16:52:18 Same thing here: Why would we need this observer?
bartfab (slow) 2013/07/03 19:11:04 As above.
208 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _))
209 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
210 EXPECT_CALL(observer, OnPolicyServiceInitialized(_)).Times(AnyNumber());
211 PolicyService* policy_service =
212 ProfilePolicyConnectorFactory::GetForProfile(profile)->policy_service();
213 ASSERT_TRUE(policy_service);
214 policy_service->AddObserver(POLICY_DOMAIN_CHROME, &observer);
215 RefreshDevicePolicy();
216 run_loop.Run();
217 policy_service->RemoveObserver(POLICY_DOMAIN_CHROME, &observer);
218
219 // Spin the loop until idle because more changes to the login profile's policy
220 // may be pending.
73 base::RunLoop().RunUntilIdle(); 221 base::RunLoop().RunUntilIdle();
74 } 222 }
75 223
76 std::string PowerPolicyBrowserTest::GetDebugString( 224 std::string PowerPolicyBrowserTestBase::GetDebugString(
77 const pm::PowerManagementPolicy& policy) { 225 const pm::PowerManagementPolicy& policy) {
78 return chromeos::PowerPolicyController::GetPolicyDebugString(policy); 226 return chromeos::PowerPolicyController::GetPolicyDebugString(policy);
79 } 227 }
80 228
81 IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, SetPowerPolicy) { 229 PowerPolicyLoginScreenBrowserTest::PowerPolicyLoginScreenBrowserTest() {
82 pm::PowerManagementPolicy original_power_management_policy = 230 }
231
232 void PowerPolicyLoginScreenBrowserTest::SetUpCommandLine(
233 CommandLine* command_line) {
234 PowerPolicyBrowserTestBase::SetUpCommandLine(command_line);
235 command_line->AppendSwitch(chromeos::switches::kLoginManager);
236 command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
237 }
238
239 void PowerPolicyLoginScreenBrowserTest::SetUpOnMainThread() {
240 PowerPolicyBrowserTestBase::SetUpOnMainThread();
241
242 // Wait for the login screen to be shown.
243 content::WindowedNotificationObserver(
244 chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE,
245 content::NotificationService::AllSources()).Wait();
246 }
247
248 void PowerPolicyLoginScreenBrowserTest::CleanUpOnMainThread() {
249 base::MessageLoop::current()->PostTask(FROM_HERE,
250 base::Bind(&chrome::AttemptExit));
251 base::RunLoop().RunUntilIdle();
252 PowerPolicyBrowserTestBase::CleanUpOnMainThread();
253 }
254
255 PowerPolicyInSessionBrowserTest::PowerPolicyInSessionBrowserTest() {
256 }
257
258 void PowerPolicyInSessionBrowserTest::SetUpOnMainThread() {
259 PowerPolicyBrowserTestBase::SetUpOnMainThread();
260
261 // Tell the DeviceSettingsService that there is no local owner.
262 chromeos::DeviceSettingsService::Get()->SetUsername(std::string());
263 }
264
265 // Verifies that device policy is applied on the login screen.
266 IN_PROC_BROWSER_TEST_F(PowerPolicyLoginScreenBrowserTest, SetDevicePolicy) {
267 pm::PowerManagementPolicy power_management_policy =
83 power_manager_client_->get_policy(); 268 power_manager_client_->get_policy();
84 269 em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
270
271 power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
272 proto.mutable_power_management()->set_login_screen_screen_dim_delay_ac(5000);
273 RefreshDevicePolicyAndWaitForLoginProfileChanges();
274 EXPECT_EQ(GetDebugString(power_management_policy),
275 GetDebugString(power_manager_client_->get_policy()));
Mattias Nissler (ping if slow) 2013/07/03 16:52:18 Hm, maybe it's simpler to just change all values a
bartfab (slow) 2013/07/03 19:11:04 Done.
276
277 power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
278 proto.mutable_power_management()->set_login_screen_screen_off_delay_ac(7000);
279 RefreshDevicePolicyAndWaitForLoginProfileChanges();
280 EXPECT_EQ(GetDebugString(power_management_policy),
281 GetDebugString(power_manager_client_->get_policy()));
282
283 power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
284 proto.mutable_power_management()->set_login_screen_idle_delay_ac(9000);
285 RefreshDevicePolicyAndWaitForLoginProfileChanges();
286 EXPECT_EQ(GetDebugString(power_management_policy),
287 GetDebugString(power_manager_client_->get_policy()));
288
289 power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000);
290 proto.mutable_power_management()->set_login_screen_screen_dim_delay_battery(
291 1000);
292 RefreshDevicePolicyAndWaitForLoginProfileChanges();
293 EXPECT_EQ(GetDebugString(power_management_policy),
294 GetDebugString(power_manager_client_->get_policy()));
295
296 power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000);
297 proto.mutable_power_management()->set_login_screen_screen_off_delay_battery(
298 3000);
299 RefreshDevicePolicyAndWaitForLoginProfileChanges();
300 EXPECT_EQ(GetDebugString(power_management_policy),
301 GetDebugString(power_manager_client_->get_policy()));
302
303 power_management_policy.mutable_battery_delays()->set_idle_ms(4000);
304 proto.mutable_power_management()->set_login_screen_idle_delay_battery(
305 4000);
306 RefreshDevicePolicyAndWaitForLoginProfileChanges();
307 EXPECT_EQ(GetDebugString(power_management_policy),
308 GetDebugString(power_manager_client_->get_policy()));
309
310 power_management_policy.set_ac_idle_action(
311 pm::PowerManagementPolicy::DO_NOTHING);
312 proto.mutable_power_management()->set_login_screen_idle_action_ac(
313 em::PowerManagementProto_PowerManagementAction_ACTION_DO_NOTHING);
314 RefreshDevicePolicyAndWaitForLoginProfileChanges();
315 EXPECT_EQ(GetDebugString(power_management_policy),
316 GetDebugString(power_manager_client_->get_policy()));
317
318 power_management_policy.set_battery_idle_action(
319 pm::PowerManagementPolicy::DO_NOTHING);
320 proto.mutable_power_management()->set_login_screen_idle_action_battery(
321 em::PowerManagementProto_PowerManagementAction_ACTION_DO_NOTHING);
322 RefreshDevicePolicyAndWaitForLoginProfileChanges();
323 EXPECT_EQ(GetDebugString(power_management_policy),
324 GetDebugString(power_manager_client_->get_policy()));
325
326 power_management_policy.set_lid_closed_action(
327 pm::PowerManagementPolicy::DO_NOTHING);
328 proto.mutable_power_management()->set_login_screen_lid_close_action(
329 em::PowerManagementProto_PowerManagementAction_ACTION_DO_NOTHING);
330 RefreshDevicePolicyAndWaitForLoginProfileChanges();
331 EXPECT_EQ(GetDebugString(power_management_policy),
332 GetDebugString(power_manager_client_->get_policy()));
333
334 power_management_policy.set_user_activity_screen_dim_delay_factor(3.0);
335 proto.mutable_power_management()->
336 set_login_screen_user_activity_screen_dim_delay_scale(300);
337 RefreshDevicePolicyAndWaitForLoginProfileChanges();
338 EXPECT_EQ(GetDebugString(power_management_policy),
339 GetDebugString(power_manager_client_->get_policy()));
340 }
341
342 // Verifies that device policy is ignored during a session.
343 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetDevicePolicy) {
85 pm::PowerManagementPolicy power_management_policy = 344 pm::PowerManagementPolicy power_management_policy =
86 original_power_management_policy; 345 power_manager_client_->get_policy();
346 em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
347
348 proto.mutable_power_management()->set_login_screen_screen_dim_delay_ac(5000);
349 proto.mutable_power_management()->set_login_screen_screen_off_delay_ac(7000);
350 proto.mutable_power_management()->set_login_screen_idle_delay_ac(9000);
351 proto.mutable_power_management()->set_login_screen_screen_dim_delay_battery(
352 1000);
353 proto.mutable_power_management()->set_login_screen_screen_off_delay_battery(
354 3000);
355 proto.mutable_power_management()->set_login_screen_idle_delay_battery(
356 4000);
357 proto.mutable_power_management()->set_login_screen_idle_action_ac(
358 em::PowerManagementProto_PowerManagementAction_ACTION_DO_NOTHING);
359 proto.mutable_power_management()->set_login_screen_idle_action_battery(
360 em::PowerManagementProto_PowerManagementAction_ACTION_DO_NOTHING);
361 proto.mutable_power_management()->set_login_screen_lid_close_action(
362 em::PowerManagementProto_PowerManagementAction_ACTION_DO_NOTHING);
363 proto.mutable_power_management()->
364 set_login_screen_user_activity_screen_dim_delay_scale(300);
365 RefreshDevicePolicyAndWaitForLoginProfileChanges();
366 EXPECT_EQ(GetDebugString(power_management_policy),
367 GetDebugString(power_manager_client_->get_policy()));
368 }
369
370 // Verifies that user policy is applied during a session.
371 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetUserPolicy) {
372 pm::PowerManagementPolicy power_management_policy =
373 power_manager_client_->get_policy();
374
87 power_management_policy.set_ac_idle_action( 375 power_management_policy.set_ac_idle_action(
88 pm::PowerManagementPolicy::STOP_SESSION); 376 pm::PowerManagementPolicy::STOP_SESSION);
89 SetUserPolicy( 377 user_policy_.payload().mutable_idleactionac()->set_value(
90 key::kIdleActionAC, 378 chromeos::PowerPolicyController::ACTION_STOP_SESSION);
91 base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION)); 379 RefreshUserPolicy();
92 EXPECT_EQ(GetDebugString(power_management_policy), 380 EXPECT_EQ(GetDebugString(power_management_policy),
93 GetDebugString(power_manager_client_->get_policy())); 381 GetDebugString(power_manager_client_->get_policy()));
Mattias Nissler (ping if slow) 2013/07/03 16:52:18 Ditto regarding just doing this once and not all p
bartfab (slow) 2013/07/03 19:11:04 Done.
94 382
95 power_management_policy = original_power_management_policy;
96 power_management_policy.set_battery_idle_action( 383 power_management_policy.set_battery_idle_action(
97 pm::PowerManagementPolicy::STOP_SESSION); 384 pm::PowerManagementPolicy::STOP_SESSION);
98 SetUserPolicy( 385 user_policy_.payload().mutable_idleactionbattery()->set_value(
99 key::kIdleActionBattery, 386 chromeos::PowerPolicyController::ACTION_STOP_SESSION);
100 base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION)); 387 RefreshUserPolicy();
101 EXPECT_EQ(GetDebugString(power_management_policy), 388 EXPECT_EQ(GetDebugString(power_management_policy),
102 GetDebugString(power_manager_client_->get_policy())); 389 GetDebugString(power_manager_client_->get_policy()));
103 390
104 power_management_policy = original_power_management_policy;
105 power_management_policy.set_lid_closed_action( 391 power_management_policy.set_lid_closed_action(
106 pm::PowerManagementPolicy::STOP_SESSION); 392 pm::PowerManagementPolicy::STOP_SESSION);
107 SetUserPolicy( 393 user_policy_.payload().mutable_lidcloseaction()->set_value(
108 key::kLidCloseAction, 394 chromeos::PowerPolicyController::ACTION_STOP_SESSION);
109 base::Value::CreateIntegerValue(pm::PowerManagementPolicy::STOP_SESSION)); 395 RefreshUserPolicy();
110 EXPECT_EQ(GetDebugString(power_management_policy), 396 EXPECT_EQ(GetDebugString(power_management_policy),
111 GetDebugString(power_manager_client_->get_policy())); 397 GetDebugString(power_manager_client_->get_policy()));
112 398
113 power_management_policy = original_power_management_policy;
114 power_management_policy.mutable_ac_delays()->set_idle_ms(9000); 399 power_management_policy.mutable_ac_delays()->set_idle_ms(9000);
115 SetUserPolicy(key::kIdleDelayAC, base::Value::CreateIntegerValue(9000)); 400 user_policy_.payload().mutable_idledelayac()->set_value(9000);
116 EXPECT_EQ(GetDebugString(power_management_policy), 401 RefreshUserPolicy();
117 GetDebugString(power_manager_client_->get_policy())); 402 EXPECT_EQ(GetDebugString(power_management_policy),
118 403 GetDebugString(power_manager_client_->get_policy()));
119 power_management_policy = original_power_management_policy; 404
120 power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000); 405 power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000);
121 SetUserPolicy(key::kIdleWarningDelayAC, 406 user_policy_.payload().mutable_idlewarningdelayac()->set_value(8000);
122 base::Value::CreateIntegerValue(8000)); 407 RefreshUserPolicy();
123 EXPECT_EQ(GetDebugString(power_management_policy), 408 EXPECT_EQ(GetDebugString(power_management_policy),
124 GetDebugString(power_manager_client_->get_policy())); 409 GetDebugString(power_manager_client_->get_policy()));
125 410
126 power_management_policy = original_power_management_policy;
127 power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000); 411 power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000);
128 SetUserPolicy(key::kScreenOffDelayAC, base::Value::CreateIntegerValue(7000)); 412 user_policy_.payload().mutable_screenoffdelayac()->set_value(7000);
129 EXPECT_EQ(GetDebugString(power_management_policy), 413 RefreshUserPolicy();
130 GetDebugString(power_manager_client_->get_policy())); 414 EXPECT_EQ(GetDebugString(power_management_policy),
131 415 GetDebugString(power_manager_client_->get_policy()));
132 power_management_policy = original_power_management_policy; 416
133 power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000); 417 power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000);
134 SetUserPolicy(key::kScreenDimDelayAC, base::Value::CreateIntegerValue(5000)); 418 user_policy_.payload().mutable_screendimdelayac()->set_value(5000);
135 EXPECT_EQ(GetDebugString(power_management_policy), 419 RefreshUserPolicy();
136 GetDebugString(power_manager_client_->get_policy())); 420 EXPECT_EQ(GetDebugString(power_management_policy),
137 421 GetDebugString(power_manager_client_->get_policy()));
138 power_management_policy = original_power_management_policy; 422
139 power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000); 423 power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000);
140 SetUserPolicy(key::kScreenLockDelayAC, base::Value::CreateIntegerValue(6000)); 424 user_policy_.payload().mutable_screenlockdelayac()->set_value(6000);
141 EXPECT_EQ(GetDebugString(power_management_policy), 425 RefreshUserPolicy();
142 GetDebugString(power_manager_client_->get_policy())); 426 EXPECT_EQ(GetDebugString(power_management_policy),
143 427 GetDebugString(power_manager_client_->get_policy()));
144 power_management_policy = original_power_management_policy; 428
145 power_management_policy.mutable_battery_delays()->set_idle_ms(5000); 429 power_management_policy.mutable_battery_delays()->set_idle_ms(5000);
146 SetUserPolicy(key::kIdleDelayBattery, base::Value::CreateIntegerValue(5000)); 430 user_policy_.payload().mutable_idledelaybattery()->set_value(5000);
147 EXPECT_EQ(GetDebugString(power_management_policy), 431 RefreshUserPolicy();
148 GetDebugString(power_manager_client_->get_policy())); 432 EXPECT_EQ(GetDebugString(power_management_policy),
149 433 GetDebugString(power_manager_client_->get_policy()));
150 power_management_policy = original_power_management_policy; 434
151 power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000); 435 power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000);
152 SetUserPolicy(key::kIdleWarningDelayBattery, 436 user_policy_.payload().mutable_idlewarningdelaybattery()->set_value(4000);
153 base::Value::CreateIntegerValue(4000)); 437 RefreshUserPolicy();
154 EXPECT_EQ(GetDebugString(power_management_policy), 438 EXPECT_EQ(GetDebugString(power_management_policy),
155 GetDebugString(power_manager_client_->get_policy())); 439 GetDebugString(power_manager_client_->get_policy()));
156 440
157 power_management_policy = original_power_management_policy;
158 power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000); 441 power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000);
159 SetUserPolicy(key::kScreenOffDelayBattery, 442 user_policy_.payload().mutable_screenoffdelaybattery()->set_value(3000);
160 base::Value::CreateIntegerValue(3000)); 443 RefreshUserPolicy();
161 EXPECT_EQ(GetDebugString(power_management_policy), 444 EXPECT_EQ(GetDebugString(power_management_policy),
162 GetDebugString(power_manager_client_->get_policy())); 445 GetDebugString(power_manager_client_->get_policy()));
163 446
164 power_management_policy = original_power_management_policy;
165 power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000); 447 power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000);
166 SetUserPolicy(key::kScreenDimDelayBattery, 448 user_policy_.payload().mutable_screendimdelaybattery()->set_value(1000);
167 base::Value::CreateIntegerValue(1000)); 449 RefreshUserPolicy();
168 EXPECT_EQ(GetDebugString(power_management_policy), 450 EXPECT_EQ(GetDebugString(power_management_policy),
169 GetDebugString(power_manager_client_->get_policy())); 451 GetDebugString(power_manager_client_->get_policy()));
170 452
171 power_management_policy = original_power_management_policy;
172 power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000); 453 power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000);
173 SetUserPolicy(key::kScreenLockDelayBattery, 454 user_policy_.payload().mutable_screenlockdelaybattery()->set_value(2000);
174 base::Value::CreateIntegerValue(2000)); 455 RefreshUserPolicy();
175 EXPECT_EQ(GetDebugString(power_management_policy), 456 EXPECT_EQ(GetDebugString(power_management_policy),
176 GetDebugString(power_manager_client_->get_policy())); 457 GetDebugString(power_manager_client_->get_policy()));
177 458
178 power_management_policy = original_power_management_policy;
179 power_management_policy.set_use_audio_activity(false); 459 power_management_policy.set_use_audio_activity(false);
180 SetUserPolicy(key::kPowerManagementUsesAudioActivity, 460 user_policy_.payload().mutable_powermanagementusesaudioactivity()->set_value(
181 base::Value::CreateBooleanValue(false)); 461 false);
182 EXPECT_EQ(GetDebugString(power_management_policy), 462 RefreshUserPolicy();
183 GetDebugString(power_manager_client_->get_policy())); 463 EXPECT_EQ(GetDebugString(power_management_policy),
184 464 GetDebugString(power_manager_client_->get_policy()));
185 power_management_policy = original_power_management_policy; 465
186 power_management_policy.set_use_video_activity(false); 466 power_management_policy.set_use_video_activity(false);
187 SetUserPolicy(key::kPowerManagementUsesVideoActivity, 467 user_policy_.payload().mutable_powermanagementusesvideoactivity()->set_value(
188 base::Value::CreateBooleanValue(false)); 468 false);
189 EXPECT_EQ(GetDebugString(power_management_policy), 469 RefreshUserPolicy();
190 GetDebugString(power_manager_client_->get_policy())); 470 EXPECT_EQ(GetDebugString(power_management_policy),
191 471 GetDebugString(power_manager_client_->get_policy()));
192 power_management_policy = original_power_management_policy; 472
193 power_management_policy.set_presentation_screen_dim_delay_factor(3.0); 473 power_management_policy.set_presentation_screen_dim_delay_factor(3.0);
194 SetUserPolicy(key::kPresentationScreenDimDelayScale, 474 user_policy_.payload().mutable_presentationscreendimdelayscale()->set_value(
195 base::Value::CreateIntegerValue(300)); 475 300);
196 EXPECT_EQ(GetDebugString(power_management_policy), 476 RefreshUserPolicy();
197 GetDebugString(power_manager_client_->get_policy())); 477 EXPECT_EQ(GetDebugString(power_management_policy),
198 } 478 GetDebugString(power_manager_client_->get_policy()));
199 479
200 IN_PROC_BROWSER_TEST_F(PowerPolicyBrowserTest, AllowScreenWakeLocks) { 480 power_management_policy.set_user_activity_screen_dim_delay_factor(3.0);
481 user_policy_.payload().mutable_useractivityscreendimdelayscale()->set_value(
482 300);
483 RefreshUserPolicy();
484 EXPECT_EQ(GetDebugString(power_management_policy),
485 GetDebugString(power_manager_client_->get_policy()));
486 }
487
488 // Verifies that screen wake locks can be enabled and disabled by extensions and
489 // user policy during a session.
490 IN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, AllowScreenWakeLocks) {
201 pm::PowerManagementPolicy baseline_policy = 491 pm::PowerManagementPolicy baseline_policy =
202 power_manager_client_->get_policy(); 492 power_manager_client_->get_policy();
203 493
204 // Default settings should have delays. 494 // Default settings should have delays.
205 pm::PowerManagementPolicy power_management_policy = baseline_policy; 495 pm::PowerManagementPolicy power_management_policy = baseline_policy;
206 EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms()); 496 EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms());
207 EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms()); 497 EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms());
208 EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms()); 498 EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms());
209 EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms()); 499 EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms());
210 500
211 // Pretend an extension grabs a screen wake lock. 501 // Pretend an extension grabs a screen wake lock.
212 const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop"; 502 const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop";
213 extensions::PowerApiManager::GetInstance()->AddRequest( 503 extensions::PowerApiManager::GetInstance()->AddRequest(
214 kExtensionId, extensions::api::power::LEVEL_DISPLAY); 504 kExtensionId, extensions::api::power::LEVEL_DISPLAY);
215 base::RunLoop().RunUntilIdle(); 505 base::RunLoop().RunUntilIdle();
216 506
217 // Check that the lock is in effect (ignoring idle_action and reason). 507 // Check that the lock is in effect (ignoring ac_idle_action,
508 // battery_idle_action and reason).
218 pm::PowerManagementPolicy policy = baseline_policy; 509 pm::PowerManagementPolicy policy = baseline_policy;
219 policy.mutable_ac_delays()->set_screen_dim_ms(0); 510 policy.mutable_ac_delays()->set_screen_dim_ms(0);
220 policy.mutable_ac_delays()->set_screen_off_ms(0); 511 policy.mutable_ac_delays()->set_screen_off_ms(0);
221 policy.mutable_battery_delays()->set_screen_dim_ms(0); 512 policy.mutable_battery_delays()->set_screen_dim_ms(0);
222 policy.mutable_battery_delays()->set_screen_off_ms(0); 513 policy.mutable_battery_delays()->set_screen_off_ms(0);
223 policy.set_ac_idle_action( 514 policy.set_ac_idle_action(
224 power_manager_client_->get_policy().ac_idle_action()); 515 power_manager_client_->get_policy().ac_idle_action());
225 policy.set_battery_idle_action( 516 policy.set_battery_idle_action(
226 power_manager_client_->get_policy().battery_idle_action()); 517 power_manager_client_->get_policy().battery_idle_action());
227 policy.set_reason(power_manager_client_->get_policy().reason()); 518 policy.set_reason(power_manager_client_->get_policy().reason());
228 EXPECT_EQ(GetDebugString(policy), 519 EXPECT_EQ(GetDebugString(policy),
229 GetDebugString(power_manager_client_->get_policy())); 520 GetDebugString(power_manager_client_->get_policy()));
230 521
231 // Engage the policy and verify that the defaults take effect again. 522 // Engage the user policy and verify that the defaults take effect again.
232 SetUserPolicy(key::kAllowScreenWakeLocks, 523 user_policy_.payload().mutable_allowscreenwakelocks()->set_value(false);
233 base::Value::CreateBooleanValue(false)); 524 RefreshUserPolicy();
234 policy = baseline_policy; 525 policy = baseline_policy;
235 policy.set_ac_idle_action( 526 policy.set_ac_idle_action(
236 power_manager_client_->get_policy().ac_idle_action()); 527 power_manager_client_->get_policy().ac_idle_action());
237 policy.set_battery_idle_action( 528 policy.set_battery_idle_action(
238 power_manager_client_->get_policy().battery_idle_action()); 529 power_manager_client_->get_policy().battery_idle_action());
239 policy.set_reason(power_manager_client_->get_policy().reason()); 530 policy.set_reason(power_manager_client_->get_policy().reason());
240 EXPECT_EQ(GetDebugString(policy), 531 EXPECT_EQ(GetDebugString(policy),
241 GetDebugString(power_manager_client_->get_policy())); 532 GetDebugString(power_manager_client_->get_policy()));
242 } 533 }
243 534
244 } // namespace policy 535 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698