12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include <vector> 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/basictypes.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/bind.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/command_line.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/file_util.h" 149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/files/file_path.h" 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/location.h" 169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/path_service.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h" 199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/browser_process.h" 209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/login/user_manager.h" 229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/policy/device_policy_builder.h" 239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" 249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/settings/device_settings_service.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/api/power/power_api_manager.h" 299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/lifetime/application_lifetime.h" 309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/cloud/cloud_policy_core.h" 319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/cloud/cloud_policy_store.h" 329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/cloud/policy_builder.h" 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/external_data_fetcher.h" 349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/mock_policy_service.h" 359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/policy_service.h" 369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/profile_policy_connector.h" 379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/profile_policy_connector_factory.h" 389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h" 399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" 409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile.h" 419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile_manager.h" 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/extensions/api/power.h" 439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/test/base/testing_profile.h" 449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/chromeos_paths.h" 459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/chromeos_switches.h" 46a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/dbus/fake_power_manager_client.h" 479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chromeos/dbus/fake_session_manager_client.h" 48a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/power_manager/policy.pb.h" 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/power_policy_controller.h" 519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/notification_details.h" 529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/notification_service.h" 539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/notification_source.h" 549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/test/test_utils.h" 559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "crypto/rsa_private_key.h" 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace em = enterprise_management; 609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace pm = power_manager; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AnyNumber; 639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochusing ::testing::InvokeWithoutArgs; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::_; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace policy { 679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace { 699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochconst char kLoginScreenPowerManagementPolicy[] = 719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch "{" 729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"AC\": {" 739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"Delays\": {" 749ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"ScreenDim\": 5000," 759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"ScreenOff\": 7000," 769ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"Idle\": 9000" 779ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " }," 789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"IdleAction\": \"DoNothing\"" 799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " }," 809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"Battery\": {" 819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"Delays\": {" 829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"ScreenDim\": 1000," 839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"ScreenOff\": 3000," 849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"Idle\": 4000" 859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " }," 869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"IdleAction\": \"DoNothing\"" 879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " }," 889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"LidCloseAction\": \"DoNothing\"," 899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch " \"UserActivityScreenDimDelayScale\": 300" 909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch "}"; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass PowerPolicyBrowserTestBase : public DevicePolicyCrosBrowserTest { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyBrowserTestBase(); 979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // DevicePolicyCrosBrowserTest: 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 1009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void InstallUserKey(); 1039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void StoreAndReloadUserPolicy(); 1049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void StoreAndReloadDevicePolicyAndWaitForLoginProfileChange(); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns a string describing |policy|. 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string GetDebugString(const pm::PowerManagementPolicy& policy); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch UserPolicyBuilder user_policy_; 1119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 112a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) chromeos::FakePowerManagerClient* power_manager_client_; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Runs |closure| and waits for |profile|'s user policy to be updated as a 1169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // result. 1179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void RunClosureAndWaitForUserPolicyUpdate(const base::Closure& closure, 1189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Profile* profile); 1199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Reloads user policy for |profile| from session manager client. 1219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void ReloadUserPolicy(Profile* profile); 1229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PowerPolicyBrowserTestBase); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass PowerPolicyLoginScreenBrowserTest : public PowerPolicyBrowserTestBase { 1279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch protected: 1289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyLoginScreenBrowserTest(); 1299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // PowerPolicyBrowserTestBase: 1319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; 1329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE; 1339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual void CleanUpOnMainThread() OVERRIDE; 1349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PowerPolicyLoginScreenBrowserTest); 1369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}; 1379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass PowerPolicyInSessionBrowserTest : public PowerPolicyBrowserTestBase { 1399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch protected: 1409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyInSessionBrowserTest(); 1419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // PowerPolicyBrowserTestBase: 1439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE; 1449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PowerPolicyInSessionBrowserTest); 1469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}; 1479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochPowerPolicyBrowserTestBase::PowerPolicyBrowserTestBase() 1499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch : power_manager_client_(NULL) { 1509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 1519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase::SetUpInProcessBrowserTestFixture() { 1539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture(); 1549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Initialize device policy. 1569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch InstallOwnerKey(); 1579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch MarkAsEnterpriseOwned(); 1589ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_manager_client_ = 1609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch mock_dbus_thread_manager()->fake_power_manager_client(); 1619ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 1629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase::SetUpOnMainThread() { 1649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DevicePolicyCrosBrowserTest::SetUpOnMainThread(); 1659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Initialize user policy. 1679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch InstallUserKey(); 1689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.policy_data().set_username(chromeos::UserManager::kStubUser); 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase::InstallUserKey() { 1729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::FilePath user_keys_dir; 1739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_TRUE(PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &user_keys_dir)); 1749ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::FilePath user_key_file = 1759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_keys_dir.AppendASCII(chromeos::UserManager::kStubUser) 1769ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch .AppendASCII("policy.pub"); 1779ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch std::vector<uint8> user_key_bits; 1782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch ASSERT_TRUE(user_policy_.GetSigningKey()->ExportPublicKey(&user_key_bits)); 1799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_TRUE(file_util::CreateDirectory(user_key_file.DirName())); 1809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_EQ(file_util::WriteFile( 1819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_key_file, 1829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch reinterpret_cast<const char*>(user_key_bits.data()), 1839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_key_bits.size()), 1849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch static_cast<int>(user_key_bits.size())); 1859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 1869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase::StoreAndReloadUserPolicy() { 1889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ProfileManager* profile_manager = g_browser_process->profile_manager(); 1899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Profile* profile = profile_manager->GetProfileByPath( 1909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch profile_manager->user_data_dir().Append( 1919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch TestingProfile::kTestUserProfileDir)); 1929ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_TRUE(profile); 1939ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Install the new user policy blob in session manager client. 1959ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.Build(); 1969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch session_manager_client()->set_user_policy( 1979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.policy_data().username(), 1989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.GetBlob()); 1999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Reload user policy from session manager client and wait for the update to 2019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // take effect. 2029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch RunClosureAndWaitForUserPolicyUpdate( 2039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::Bind(&PowerPolicyBrowserTestBase::ReloadUserPolicy, this, profile), 2049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch profile); 2059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 2069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2079ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase:: 2089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch StoreAndReloadDevicePolicyAndWaitForLoginProfileChange() { 2099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Profile* profile = chromeos::ProfileHelper::GetSigninProfile(); 2109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_TRUE(profile); 2119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Install the new device policy blob in session manager client, reload device 2139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // policy from session manager client and wait for a change in the login 2149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // profile's policy to be observed. 2159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch RunClosureAndWaitForUserPolicyUpdate( 2169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::Bind(&PowerPolicyBrowserTestBase::RefreshDevicePolicy, this), 2179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch profile); 2189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 2199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochstd::string PowerPolicyBrowserTestBase::GetDebugString( 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const pm::PowerManagementPolicy& policy) { 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return chromeos::PowerPolicyController::GetPolicyDebugString(policy); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase::RunClosureAndWaitForUserPolicyUpdate( 2269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const base::Closure& closure, 2279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Profile* profile) { 2289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::RunLoop run_loop; 2299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch MockPolicyServiceObserver observer; 2309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)) 2319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 2329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch EXPECT_CALL(observer, OnPolicyServiceInitialized(_)).Times(AnyNumber()); 2339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PolicyService* policy_service = 2349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ProfilePolicyConnectorFactory::GetForProfile(profile)->policy_service(); 2359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_TRUE(policy_service); 2369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch policy_service->AddObserver(POLICY_DOMAIN_CHROME, &observer); 2379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch closure.Run(); 2389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch run_loop.Run(); 2399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch policy_service->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); 2409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyBrowserTestBase::ReloadUserPolicy(Profile* profile) { 2439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch UserCloudPolicyManagerChromeOS* policy_manager = 2449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile); 2459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ASSERT_TRUE(policy_manager); 2469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch policy_manager->core()->store()->Load(); 2479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochPowerPolicyLoginScreenBrowserTest::PowerPolicyLoginScreenBrowserTest() { 2509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyLoginScreenBrowserTest::SetUpCommandLine( 2539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch CommandLine* command_line) { 2549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyBrowserTestBase::SetUpCommandLine(command_line); 2559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch command_line->AppendSwitch(chromeos::switches::kLoginManager); 2569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests); 2579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyLoginScreenBrowserTest::SetUpOnMainThread() { 2609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyBrowserTestBase::SetUpOnMainThread(); 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Wait for the login screen to be shown. 2639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch content::WindowedNotificationObserver( 264a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, 2659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch content::NotificationService::AllSources()).Wait(); 2669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyLoginScreenBrowserTest::CleanUpOnMainThread() { 2699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::MessageLoop::current()->PostTask(FROM_HERE, 2709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::Bind(&chrome::AttemptExit)); 2719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch base::RunLoop().RunUntilIdle(); 2729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyBrowserTestBase::CleanUpOnMainThread(); 2739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochPowerPolicyInSessionBrowserTest::PowerPolicyInSessionBrowserTest() { 2769ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid PowerPolicyInSessionBrowserTest::SetUpOnMainThread() { 2799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PowerPolicyBrowserTestBase::SetUpOnMainThread(); 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2819ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Tell the DeviceSettingsService that there is no local owner. 2829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chromeos::DeviceSettingsService::Get()->SetUsername(std::string()); 2839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Verifies that device policy is applied on the login screen. 2869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochIN_PROC_BROWSER_TEST_F(PowerPolicyLoginScreenBrowserTest, SetDevicePolicy) { 2879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy power_management_policy = 2889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_manager_client_->get_policy(); 2899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000); 2909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000); 2919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_idle_ms(9000); 2929ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000); 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000); 2949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_idle_ms(4000); 2959ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_ac_idle_action( 2969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy::DO_NOTHING); 2979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_battery_idle_action( 2989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy::DO_NOTHING); 2999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_lid_closed_action( 3009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy::DO_NOTHING); 3019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_user_activity_screen_dim_delay_factor(3.0); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); 3049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch proto.mutable_login_screen_power_management()-> 3059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch set_login_screen_power_management(kLoginScreenPowerManagementPolicy); 3069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch StoreAndReloadDevicePolicyAndWaitForLoginProfileChange(); 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetDebugString(power_management_policy), 308a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetDebugString(power_manager_client_->get_policy())); 3099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Verifies that device policy is ignored during a session. 3129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochIN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetDevicePolicy) { 3139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy power_management_policy = 3149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_manager_client_->get_policy(); 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); 3179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch proto.mutable_login_screen_power_management()-> 3189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch set_login_screen_power_management(kLoginScreenPowerManagementPolicy); 3199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch StoreAndReloadDevicePolicyAndWaitForLoginProfileChange(); 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetDebugString(power_management_policy), 321a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetDebugString(power_manager_client_->get_policy())); 3229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Verifies that user policy is applied during a session. 3259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochIN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, SetUserPolicy) { 3269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy power_management_policy = 3279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_manager_client_->get_policy(); 3289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_screen_dim_ms(5000); 3299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_screen_lock_ms(6000); 3309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_screen_off_ms(7000); 3319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_idle_warning_ms(8000); 3329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_ac_delays()->set_idle_ms(9000); 3339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_screen_dim_ms(1000); 3349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_screen_lock_ms(2000); 3359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_screen_off_ms(3000); 3369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_idle_warning_ms(4000); 3379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.mutable_battery_delays()->set_idle_ms(5000); 3389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_use_audio_activity(false); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) power_management_policy.set_use_video_activity(false); 3409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_ac_idle_action( 3419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy::STOP_SESSION); 3429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_battery_idle_action( 3439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy::STOP_SESSION); 3449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_lid_closed_action( 3459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch pm::PowerManagementPolicy::STOP_SESSION); 346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch power_management_policy.set_presentation_screen_dim_delay_factor(3.0); 3479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch power_management_policy.set_user_activity_screen_dim_delay_factor(3.0); 3489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 3499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_screendimdelayac()->set_value(5000); 3509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_screenlockdelayac()->set_value(6000); 3519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_screenoffdelayac()->set_value(7000); 3529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_idlewarningdelayac()->set_value(8000); 3539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_idledelayac()->set_value(9000); 3549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_screendimdelaybattery()->set_value(1000); 3559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_screenlockdelaybattery()->set_value(2000); 3569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_screenoffdelaybattery()->set_value(3000); 3579ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_idlewarningdelaybattery()->set_value(4000); 3589ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_idledelaybattery()->set_value(5000); 3599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_powermanagementusesaudioactivity()->set_value( 3609ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch false); 3619ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_powermanagementusesvideoactivity()->set_value( 3629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch false); 3639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_idleactionac()->set_value( 3649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chromeos::PowerPolicyController::ACTION_STOP_SESSION); 3659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_idleactionbattery()->set_value( 3669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chromeos::PowerPolicyController::ACTION_STOP_SESSION); 3679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_lidcloseaction()->set_value( 3689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chromeos::PowerPolicyController::ACTION_STOP_SESSION); 3699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_presentationscreendimdelayscale()->set_value( 3709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 300); 3719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_useractivityscreendimdelayscale()->set_value( 3729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 300); 3739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch StoreAndReloadUserPolicy(); 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetDebugString(power_management_policy), 375a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetDebugString(power_manager_client_->get_policy())); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Verifies that screen wake locks can be enabled and disabled by extensions and 3799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// user policy during a session. 3809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochIN_PROC_BROWSER_TEST_F(PowerPolicyInSessionBrowserTest, AllowScreenWakeLocks) { 381a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) pm::PowerManagementPolicy baseline_policy = 382a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) power_manager_client_->get_policy(); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Default settings should have delays. 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pm::PowerManagementPolicy power_management_policy = baseline_policy; 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(0, baseline_policy.ac_delays().screen_dim_ms()); 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(0, baseline_policy.ac_delays().screen_off_ms()); 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(0, baseline_policy.battery_delays().screen_dim_ms()); 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(0, baseline_policy.battery_delays().screen_off_ms()); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Pretend an extension grabs a screen wake lock. 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char kExtensionId[] = "abcdefghijklmnopabcdefghijlkmnop"; 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::PowerApiManager::GetInstance()->AddRequest( 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kExtensionId, extensions::api::power::LEVEL_DISPLAY); 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Check that the lock is in effect (ignoring ac_idle_action, 3989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // battery_idle_action and reason). 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pm::PowerManagementPolicy policy = baseline_policy; 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy.mutable_ac_delays()->set_screen_dim_ms(0); 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy.mutable_ac_delays()->set_screen_off_ms(0); 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy.mutable_battery_delays()->set_screen_dim_ms(0); 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy.mutable_battery_delays()->set_screen_off_ms(0); 404eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policy.set_ac_idle_action( 405eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch power_manager_client_->get_policy().ac_idle_action()); 406eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policy.set_battery_idle_action( 407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch power_manager_client_->get_policy().battery_idle_action()); 408a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) policy.set_reason(power_manager_client_->get_policy().reason()); 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetDebugString(policy), 410a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetDebugString(power_manager_client_->get_policy())); 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Engage the user policy and verify that the defaults take effect again. 4139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch user_policy_.payload().mutable_allowscreenwakelocks()->set_value(false); 4149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch StoreAndReloadUserPolicy(); 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy = baseline_policy; 416eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policy.set_ac_idle_action( 417eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch power_manager_client_->get_policy().ac_idle_action()); 418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policy.set_battery_idle_action( 419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch power_manager_client_->get_policy().battery_idle_action()); 420a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) policy.set_reason(power_manager_client_->get_policy().reason()); 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetDebugString(policy), 422a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetDebugString(power_manager_client_->get_policy())); 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 426