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