Home | History | Annotate | Download | only in settings
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
      6 
      7 #include "base/message_loop/message_loop.h"
      8 #include "base/run_loop.h"
      9 #include "base/threading/sequenced_worker_pool.h"
     10 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
     11 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
     12 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
     13 #include "chrome/browser/chromeos/profiles/profile_helper.h"
     14 #include "chrome/browser/chromeos/settings/device_settings_service.h"
     15 #include "chrome/test/base/testing_browser_process.h"
     16 #include "chrome/test/base/testing_profile.h"
     17 #include "chromeos/dbus/dbus_thread_manager.h"
     18 #include "components/ownership/mock_owner_key_util.h"
     19 #include "content/public/browser/browser_thread.h"
     20 #include "content/public/test/test_utils.h"
     21 
     22 namespace chromeos {
     23 
     24 DeviceSettingsTestHelper::DeviceSettingsTestHelper() {}
     25 
     26 DeviceSettingsTestHelper::~DeviceSettingsTestHelper() {}
     27 
     28 void DeviceSettingsTestHelper::FlushStore() {
     29   std::vector<StorePolicyCallback> callbacks;
     30   callbacks.swap(device_policy_.store_callbacks_);
     31   for (std::vector<StorePolicyCallback>::iterator cb(callbacks.begin());
     32        cb != callbacks.end(); ++cb) {
     33     cb->Run(device_policy_.store_result_);
     34   }
     35 
     36   std::map<std::string, PolicyState>::iterator device_local_account_state;
     37   for (device_local_account_state = device_local_account_policy_.begin();
     38        device_local_account_state != device_local_account_policy_.end();
     39        ++device_local_account_state) {
     40     callbacks.swap(device_local_account_state->second.store_callbacks_);
     41     for (std::vector<StorePolicyCallback>::iterator cb(callbacks.begin());
     42          cb != callbacks.end(); ++cb) {
     43       cb->Run(device_local_account_state->second.store_result_);
     44     }
     45   }
     46 }
     47 
     48 void DeviceSettingsTestHelper::FlushRetrieve() {
     49   std::vector<RetrievePolicyCallback> callbacks;
     50   callbacks.swap(device_policy_.retrieve_callbacks_);
     51   for (std::vector<RetrievePolicyCallback>::iterator cb(callbacks.begin());
     52        cb != callbacks.end(); ++cb) {
     53     cb->Run(device_policy_.policy_blob_);
     54   }
     55 
     56   std::map<std::string, PolicyState>::iterator device_local_account_state;
     57   for (device_local_account_state = device_local_account_policy_.begin();
     58        device_local_account_state != device_local_account_policy_.end();
     59        ++device_local_account_state) {
     60     std::vector<RetrievePolicyCallback> callbacks;
     61     callbacks.swap(device_local_account_state->second.retrieve_callbacks_);
     62     for (std::vector<RetrievePolicyCallback>::iterator cb(callbacks.begin());
     63          cb != callbacks.end(); ++cb) {
     64       cb->Run(device_local_account_state->second.policy_blob_);
     65     }
     66   }
     67 }
     68 
     69 void DeviceSettingsTestHelper::Flush() {
     70   do {
     71     content::RunAllBlockingPoolTasksUntilIdle();
     72     FlushStore();
     73     content::RunAllBlockingPoolTasksUntilIdle();
     74     FlushRetrieve();
     75     content::RunAllBlockingPoolTasksUntilIdle();
     76   } while (HasPendingOperations());
     77 }
     78 
     79 bool DeviceSettingsTestHelper::HasPendingOperations() const {
     80   if (device_policy_.HasPendingOperations())
     81     return true;
     82 
     83   std::map<std::string, PolicyState>::const_iterator device_local_account_state;
     84   for (device_local_account_state = device_local_account_policy_.begin();
     85        device_local_account_state != device_local_account_policy_.end();
     86        ++device_local_account_state) {
     87     if (device_local_account_state->second.HasPendingOperations())
     88       return true;
     89   }
     90 
     91   return false;
     92 }
     93 
     94 void DeviceSettingsTestHelper::Init(dbus::Bus* bus) {}
     95 
     96 void DeviceSettingsTestHelper::SetStubDelegate(
     97     SessionManagerClient::StubDelegate* delegate) {}
     98 
     99 void DeviceSettingsTestHelper::AddObserver(Observer* observer) {}
    100 
    101 void DeviceSettingsTestHelper::RemoveObserver(Observer* observer) {}
    102 
    103 bool DeviceSettingsTestHelper::HasObserver(Observer* observer) {
    104   return false;
    105 }
    106 
    107 void DeviceSettingsTestHelper::EmitLoginPromptVisible() {}
    108 
    109 void DeviceSettingsTestHelper::RestartJob(int pid,
    110                                           const std::string& command_line) {}
    111 
    112 void DeviceSettingsTestHelper::StartSession(const std::string& user_email) {}
    113 
    114 void DeviceSettingsTestHelper::StopSession() {}
    115 
    116 void DeviceSettingsTestHelper::StartDeviceWipe() {}
    117 
    118 void DeviceSettingsTestHelper::RequestLockScreen() {}
    119 
    120 void DeviceSettingsTestHelper::NotifyLockScreenShown() {}
    121 
    122 void DeviceSettingsTestHelper::NotifyLockScreenDismissed() {}
    123 
    124 void DeviceSettingsTestHelper::RetrieveActiveSessions(
    125       const ActiveSessionsCallback& callback) {}
    126 
    127 void DeviceSettingsTestHelper::RetrieveDevicePolicy(
    128     const RetrievePolicyCallback& callback) {
    129   device_policy_.retrieve_callbacks_.push_back(callback);
    130 }
    131 
    132 void DeviceSettingsTestHelper::RetrievePolicyForUser(
    133     const std::string& username,
    134     const RetrievePolicyCallback& callback) {
    135 }
    136 
    137 std::string DeviceSettingsTestHelper::BlockingRetrievePolicyForUser(
    138     const std::string& username) {
    139   return "";
    140 }
    141 
    142 void DeviceSettingsTestHelper::RetrieveDeviceLocalAccountPolicy(
    143     const std::string& account_id,
    144     const RetrievePolicyCallback& callback) {
    145   device_local_account_policy_[account_id].retrieve_callbacks_.push_back(
    146       callback);
    147 }
    148 
    149 void DeviceSettingsTestHelper::StoreDevicePolicy(
    150     const std::string& policy_blob,
    151     const StorePolicyCallback& callback) {
    152   device_policy_.policy_blob_ = policy_blob;
    153   device_policy_.store_callbacks_.push_back(callback);
    154 }
    155 
    156 void DeviceSettingsTestHelper::StorePolicyForUser(
    157     const std::string& username,
    158     const std::string& policy_blob,
    159     const StorePolicyCallback& callback) {
    160 }
    161 
    162 void DeviceSettingsTestHelper::StoreDeviceLocalAccountPolicy(
    163     const std::string& account_id,
    164     const std::string& policy_blob,
    165     const StorePolicyCallback& callback) {
    166   device_local_account_policy_[account_id].policy_blob_ = policy_blob;
    167   device_local_account_policy_[account_id].store_callbacks_.push_back(callback);
    168 }
    169 
    170 void DeviceSettingsTestHelper::SetFlagsForUser(
    171     const std::string& account_id,
    172     const std::vector<std::string>& flags) {}
    173 
    174 void DeviceSettingsTestHelper::GetServerBackedStateKeys(
    175     const StateKeysCallback& callback) {}
    176 
    177 DeviceSettingsTestHelper::PolicyState::PolicyState()
    178     : store_result_(true) {}
    179 
    180 DeviceSettingsTestHelper::PolicyState::~PolicyState() {}
    181 
    182 ScopedDeviceSettingsTestHelper::ScopedDeviceSettingsTestHelper() {
    183   DeviceSettingsService::Initialize();
    184   DeviceSettingsService::Get()->SetSessionManager(
    185       this, new ownership::MockOwnerKeyUtil());
    186   DeviceSettingsService::Get()->Load();
    187   Flush();
    188 }
    189 
    190 ScopedDeviceSettingsTestHelper::~ScopedDeviceSettingsTestHelper() {
    191   Flush();
    192   DeviceSettingsService::Get()->UnsetSessionManager();
    193   DeviceSettingsService::Shutdown();
    194 }
    195 
    196 DeviceSettingsTestBase::DeviceSettingsTestBase()
    197     : user_manager_(new FakeUserManager()),
    198       user_manager_enabler_(user_manager_),
    199       owner_key_util_(new ownership::MockOwnerKeyUtil()) {
    200   OwnerSettingsServiceChromeOSFactory::GetInstance()->SetOwnerKeyUtilForTesting(
    201       owner_key_util_);
    202 }
    203 
    204 DeviceSettingsTestBase::~DeviceSettingsTestBase() {
    205   base::RunLoop().RunUntilIdle();
    206 }
    207 
    208 void DeviceSettingsTestBase::SetUp() {
    209   // Initialize DBusThreadManager with a stub implementation.
    210   dbus_setter_ = chromeos::DBusThreadManager::GetSetterForTesting();
    211 
    212   base::RunLoop().RunUntilIdle();
    213 
    214   device_policy_.payload().mutable_metrics_enabled()->set_metrics_enabled(
    215       false);
    216   owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey());
    217   device_policy_.Build();
    218   device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob());
    219   device_settings_service_.SetSessionManager(&device_settings_test_helper_,
    220                                              owner_key_util_);
    221   OwnerSettingsServiceChromeOS::SetDeviceSettingsServiceForTesting(
    222       &device_settings_service_);
    223   profile_.reset(new TestingProfile());
    224 }
    225 
    226 void DeviceSettingsTestBase::TearDown() {
    227   OwnerSettingsServiceChromeOS::SetDeviceSettingsServiceForTesting(NULL);
    228   FlushDeviceSettings();
    229   device_settings_service_.UnsetSessionManager();
    230   DBusThreadManager::Shutdown();
    231 }
    232 
    233 void DeviceSettingsTestBase::FlushDeviceSettings() {
    234   device_settings_test_helper_.Flush();
    235 }
    236 
    237 void DeviceSettingsTestBase::ReloadDeviceSettings() {
    238   device_settings_service_.OwnerKeySet(true);
    239   FlushDeviceSettings();
    240 }
    241 
    242 void DeviceSettingsTestBase::InitOwner(const std::string& user_id,
    243                                        bool tpm_is_ready) {
    244   const user_manager::User* user = user_manager_->FindUser(user_id);
    245   if (!user) {
    246     user = user_manager_->AddUser(user_id);
    247     profile_->set_profile_name(user_id);
    248 
    249     ProfileHelper::Get()->SetUserToProfileMappingForTesting(user,
    250                                                             profile_.get());
    251   }
    252   OwnerSettingsServiceChromeOS* service =
    253       OwnerSettingsServiceChromeOSFactory::GetForProfile(profile_.get());
    254   CHECK(service);
    255   if (tpm_is_ready)
    256     service->OnTPMTokenReady(true /* token is enabled */);
    257 }
    258 
    259 }  // namespace chromeos
    260