15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/test/base/testing_browser_process.h"
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/ownership/mock_owner_key_util.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_utils.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DeviceSettingsTestHelper::DeviceSettingsTestHelper() {}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DeviceSettingsTestHelper::~DeviceSettingsTestHelper() {}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::FlushStore() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<StorePolicyCallback> callbacks;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  callbacks.swap(device_policy_.store_callbacks_);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::vector<StorePolicyCallback>::iterator cb(callbacks.begin());
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       cb != callbacks.end(); ++cb) {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cb->Run(device_policy_.store_result_);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::map<std::string, PolicyState>::iterator device_local_account_state;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (device_local_account_state = device_local_account_policy_.begin();
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       device_local_account_state != device_local_account_policy_.end();
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       ++device_local_account_state) {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    callbacks.swap(device_local_account_state->second.store_callbacks_);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (std::vector<StorePolicyCallback>::iterator cb(callbacks.begin());
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)         cb != callbacks.end(); ++cb) {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      cb->Run(device_local_account_state->second.store_result_);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::FlushRetrieve() {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<RetrievePolicyCallback> callbacks;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  callbacks.swap(device_policy_.retrieve_callbacks_);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::vector<RetrievePolicyCallback>::iterator cb(callbacks.begin());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       cb != callbacks.end(); ++cb) {
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cb->Run(device_policy_.policy_blob_);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::map<std::string, PolicyState>::iterator device_local_account_state;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (device_local_account_state = device_local_account_policy_.begin();
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       device_local_account_state != device_local_account_policy_.end();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       ++device_local_account_state) {
608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    std::vector<RetrievePolicyCallback> callbacks;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    callbacks.swap(device_local_account_state->second.retrieve_callbacks_);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    for (std::vector<RetrievePolicyCallback>::iterator cb(callbacks.begin());
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)         cb != callbacks.end(); ++cb) {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      cb->Run(device_local_account_state->second.policy_blob_);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::Flush() {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  do {
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content::RunAllBlockingPoolTasksUntilIdle();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FlushStore();
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content::RunAllBlockingPoolTasksUntilIdle();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FlushRetrieve();
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content::RunAllBlockingPoolTasksUntilIdle();
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } while (HasPendingOperations());
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool DeviceSettingsTestHelper::HasPendingOperations() const {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (device_policy_.HasPendingOperations())
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return true;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::map<std::string, PolicyState>::const_iterator device_local_account_state;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (device_local_account_state = device_local_account_policy_.begin();
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       device_local_account_state != device_local_account_policy_.end();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       ++device_local_account_state) {
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (device_local_account_state->second.HasPendingOperations())
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void DeviceSettingsTestHelper::Init(dbus::Bus* bus) {}
95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void DeviceSettingsTestHelper::SetStubDelegate(
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    SessionManagerClient::StubDelegate* delegate) {}
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::AddObserver(Observer* observer) {}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::RemoveObserver(Observer* observer) {}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DeviceSettingsTestHelper::HasObserver(Observer* observer) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::EmitLoginPromptVisible() {}
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::RestartJob(int pid,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const std::string& command_line) {}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void DeviceSettingsTestHelper::StartSession(const std::string& user_email) {}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::StopSession() {}
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::StartDeviceWipe() {}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::RequestLockScreen() {}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::NotifyLockScreenShown() {}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::NotifyLockScreenDismissed() {}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void DeviceSettingsTestHelper::RetrieveActiveSessions(
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const ActiveSessionsCallback& callback) {}
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::RetrieveDevicePolicy(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const RetrievePolicyCallback& callback) {
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_policy_.retrieve_callbacks_.push_back(callback);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void DeviceSettingsTestHelper::RetrievePolicyForUser(
133a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    const std::string& username,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const RetrievePolicyCallback& callback) {
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochstd::string DeviceSettingsTestHelper::BlockingRetrievePolicyForUser(
138bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    const std::string& username) {
139bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  return "";
140bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch}
141bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DeviceSettingsTestHelper::RetrieveDeviceLocalAccountPolicy(
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& account_id,
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const RetrievePolicyCallback& callback) {
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_local_account_policy_[account_id].retrieve_callbacks_.push_back(
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      callback);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceSettingsTestHelper::StoreDevicePolicy(
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& policy_blob,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const StorePolicyCallback& callback) {
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_policy_.policy_blob_ = policy_blob;
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_policy_.store_callbacks_.push_back(callback);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
156a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void DeviceSettingsTestHelper::StorePolicyForUser(
157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    const std::string& username,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& policy_blob,
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const StorePolicyCallback& callback) {
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DeviceSettingsTestHelper::StoreDeviceLocalAccountPolicy(
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& account_id,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& policy_blob,
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const StorePolicyCallback& callback) {
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_local_account_policy_[account_id].policy_blob_ = policy_blob;
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_local_account_policy_[account_id].store_callbacks_.push_back(callback);
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void DeviceSettingsTestHelper::SetFlagsForUser(
1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const std::string& account_id,
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const std::vector<std::string>& flags) {}
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void DeviceSettingsTestHelper::GetServerBackedStateKeys(
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const StateKeysCallback& callback) {}
176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DeviceSettingsTestHelper::PolicyState::PolicyState()
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : store_result_(true) {}
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DeviceSettingsTestHelper::PolicyState::~PolicyState() {}
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedDeviceSettingsTestHelper::ScopedDeviceSettingsTestHelper() {
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DeviceSettingsService::Initialize();
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DeviceSettingsService::Get()->SetSessionManager(
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      this, new ownership::MockOwnerKeyUtil());
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DeviceSettingsService::Get()->Load();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Flush();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedDeviceSettingsTestHelper::~ScopedDeviceSettingsTestHelper() {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Flush();
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DeviceSettingsService::Get()->UnsetSessionManager();
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DeviceSettingsService::Shutdown();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DeviceSettingsTestBase::DeviceSettingsTestBase()
1976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    : user_manager_(new FakeUserManager()),
198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      user_manager_enabler_(user_manager_),
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      owner_key_util_(new ownership::MockOwnerKeyUtil()) {
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  OwnerSettingsServiceChromeOSFactory::GetInstance()->SetOwnerKeyUtilForTesting(
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      owner_key_util_);
202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DeviceSettingsTestBase::~DeviceSettingsTestBase() {
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::RunLoop().RunUntilIdle();
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DeviceSettingsTestBase::SetUp() {
209a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Initialize DBusThreadManager with a stub implementation.
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  dbus_setter_ = chromeos::DBusThreadManager::GetSetterForTesting();
211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
2126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
213a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_policy_.payload().mutable_metrics_enabled()->set_metrics_enabled(
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      false);
2162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_policy_.Build();
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  device_settings_service_.SetSessionManager(&device_settings_test_helper_,
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                             owner_key_util_);
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  OwnerSettingsServiceChromeOS::SetDeviceSettingsServiceForTesting(
222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      &device_settings_service_);
223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  profile_.reset(new TestingProfile());
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DeviceSettingsTestBase::TearDown() {
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  OwnerSettingsServiceChromeOS::SetDeviceSettingsServiceForTesting(NULL);
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FlushDeviceSettings();
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  device_settings_service_.UnsetSessionManager();
230a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  DBusThreadManager::Shutdown();
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DeviceSettingsTestBase::FlushDeviceSettings() {
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_settings_test_helper_.Flush();
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DeviceSettingsTestBase::ReloadDeviceSettings() {
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  device_settings_service_.OwnerKeySet(true);
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FlushDeviceSettings();
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void DeviceSettingsTestBase::InitOwner(const std::string& user_id,
243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                       bool tpm_is_ready) {
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const user_manager::User* user = user_manager_->FindUser(user_id);
245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (!user) {
246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    user = user_manager_->AddUser(user_id);
247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    profile_->set_profile_name(user_id);
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ProfileHelper::Get()->SetUserToProfileMappingForTesting(user,
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                            profile_.get());
251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  OwnerSettingsServiceChromeOS* service =
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      OwnerSettingsServiceChromeOSFactory::GetForProfile(profile_.get());
254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  CHECK(service);
255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (tpm_is_ready)
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    service->OnTPMTokenReady(true /* token is enabled */);
257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
260