| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <queue> | 5 #include <queue> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/linked_ptr.h" | 9 #include "base/memory/linked_ptr.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "base/test/scoped_path_override.h" | 12 #include "base/test/scoped_path_override.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" | 14 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" |
| 15 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact
ory.h" | 15 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact
ory.h" |
| 16 #include "chrome/browser/chromeos/settings/device_settings_provider.h" | 16 #include "chrome/browser/chromeos/settings/device_settings_provider.h" |
| 17 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" | 17 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" |
| 18 #include "chrome/common/chrome_paths.h" | 18 #include "chrome/common/chrome_paths.h" |
| 19 #include "chrome/test/base/scoped_testing_local_state.h" | 19 #include "chrome/test/base/scoped_testing_local_state.h" |
| 20 #include "chrome/test/base/testing_browser_process.h" | 20 #include "chrome/test/base/testing_browser_process.h" |
| 21 #include "chrome/test/base/testing_profile.h" | 21 #include "chrome/test/base/testing_profile.h" |
| 22 #include "chromeos/settings/cros_settings_names.h" | 22 #include "chromeos/settings/cros_settings_names.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 24 |
| 25 namespace em = enterprise_management; |
| 26 |
| 25 namespace chromeos { | 27 namespace chromeos { |
| 26 | 28 |
| 27 namespace { | 29 namespace { |
| 28 | 30 |
| 29 void OnPrefChanged(const std::string& /* setting */) { | 31 void OnPrefChanged(const std::string& /* setting */) { |
| 30 } | 32 } |
| 31 | 33 |
| 32 class PrefsChecker : public ownership::OwnerSettingsService::Observer { | 34 class PrefsChecker : public ownership::OwnerSettingsService::Observer { |
| 33 public: | 35 public: |
| 34 PrefsChecker(OwnerSettingsServiceChromeOS* service, | 36 PrefsChecker(OwnerSettingsServiceChromeOS* service, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 DISALLOW_COPY_AND_ASSIGN(PrefsChecker); | 78 DISALLOW_COPY_AND_ASSIGN(PrefsChecker); |
| 77 }; | 79 }; |
| 78 | 80 |
| 79 } // namespace | 81 } // namespace |
| 80 | 82 |
| 81 class OwnerSettingsServiceChromeOSTest : public DeviceSettingsTestBase { | 83 class OwnerSettingsServiceChromeOSTest : public DeviceSettingsTestBase { |
| 82 public: | 84 public: |
| 83 OwnerSettingsServiceChromeOSTest() | 85 OwnerSettingsServiceChromeOSTest() |
| 84 : service_(nullptr), | 86 : service_(nullptr), |
| 85 local_state_(TestingBrowserProcess::GetGlobal()), | 87 local_state_(TestingBrowserProcess::GetGlobal()), |
| 86 user_data_dir_override_(chrome::DIR_USER_DATA) {} | 88 user_data_dir_override_(chrome::DIR_USER_DATA), |
| 89 management_settings_set_(false) {} |
| 87 | 90 |
| 88 virtual void SetUp() override { | 91 virtual void SetUp() override { |
| 89 DeviceSettingsTestBase::SetUp(); | 92 DeviceSettingsTestBase::SetUp(); |
| 90 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), | 93 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), |
| 91 &device_settings_service_)); | 94 &device_settings_service_)); |
| 92 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); | 95 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
| 93 InitOwner(device_policy_.policy_data().username(), true); | 96 InitOwner(device_policy_.policy_data().username(), true); |
| 94 FlushDeviceSettings(); | 97 FlushDeviceSettings(); |
| 95 | 98 |
| 96 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( | 99 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( |
| 97 profile_.get()); | 100 profile_.get()); |
| 98 ASSERT_TRUE(service_); | 101 ASSERT_TRUE(service_); |
| 99 ASSERT_TRUE(service_->IsOwner()); | 102 ASSERT_TRUE(service_->IsOwner()); |
| 103 |
| 104 device_policy_.policy_data().set_management_mode( |
| 105 em::PolicyData::LOCAL_OWNER); |
| 106 device_policy_.Build(); |
| 107 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
| 108 ReloadDeviceSettings(); |
| 100 } | 109 } |
| 101 | 110 |
| 102 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } | 111 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } |
| 103 | 112 |
| 104 void TestSingleSet(OwnerSettingsServiceChromeOS* service, | 113 void TestSingleSet(OwnerSettingsServiceChromeOS* service, |
| 105 const std::string& setting, | 114 const std::string& setting, |
| 106 const base::Value& in_value) { | 115 const base::Value& in_value) { |
| 107 PrefsChecker checker(service, provider_.get()); | 116 PrefsChecker checker(service, provider_.get()); |
| 108 checker.Set(setting, in_value); | 117 checker.Set(setting, in_value); |
| 109 FlushDeviceSettings(); | 118 FlushDeviceSettings(); |
| 110 checker.Wait(); | 119 checker.Wait(); |
| 111 } | 120 } |
| 112 | 121 |
| 122 void OnManagementSettingsSet(bool success) { |
| 123 management_settings_set_ = success; |
| 124 } |
| 125 |
| 113 OwnerSettingsServiceChromeOS* service_; | 126 OwnerSettingsServiceChromeOS* service_; |
| 114 ScopedTestingLocalState local_state_; | 127 ScopedTestingLocalState local_state_; |
| 115 scoped_ptr<DeviceSettingsProvider> provider_; | 128 scoped_ptr<DeviceSettingsProvider> provider_; |
| 116 base::ScopedPathOverride user_data_dir_override_; | 129 base::ScopedPathOverride user_data_dir_override_; |
| 130 bool management_settings_set_; |
| 117 | 131 |
| 118 private: | 132 private: |
| 119 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSTest); | 133 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSTest); |
| 120 }; | 134 }; |
| 121 | 135 |
| 122 TEST_F(OwnerSettingsServiceChromeOSTest, SingleSetTest) { | 136 TEST_F(OwnerSettingsServiceChromeOSTest, SingleSetTest) { |
| 123 TestSingleSet(service_, kReleaseChannel, base::StringValue("dev-channel")); | 137 TestSingleSet(service_, kReleaseChannel, base::StringValue("dev-channel")); |
| 124 TestSingleSet(service_, kReleaseChannel, base::StringValue("beta-channel")); | 138 TestSingleSet(service_, kReleaseChannel, base::StringValue("beta-channel")); |
| 125 TestSingleSet(service_, kReleaseChannel, base::StringValue("stable-channel")); | 139 TestSingleSet(service_, kReleaseChannel, base::StringValue("stable-channel")); |
| 126 } | 140 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 151 checker.Set(kReleaseChannel, base::StringValue("stable-channel")); | 165 checker.Set(kReleaseChannel, base::StringValue("stable-channel")); |
| 152 FlushDeviceSettings(); | 166 FlushDeviceSettings(); |
| 153 checker.Wait(); | 167 checker.Wait(); |
| 154 | 168 |
| 155 // Check that DeviceSettingsService's policy isn't updated. | 169 // Check that DeviceSettingsService's policy isn't updated. |
| 156 ASSERT_EQ(current_channel, device_settings_service_.device_settings() | 170 ASSERT_EQ(current_channel, device_settings_service_.device_settings() |
| 157 ->release_channel() | 171 ->release_channel() |
| 158 .release_channel()); | 172 .release_channel()); |
| 159 } | 173 } |
| 160 | 174 |
| 175 TEST_F(OwnerSettingsServiceChromeOSTest, SetManagementSettingsModeTransition) { |
| 176 ReloadDeviceSettings(); |
| 177 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, |
| 178 device_settings_service_.status()); |
| 179 |
| 180 // The initial management mode should be LOCAL_OWNER. |
| 181 EXPECT_TRUE(device_settings_service_.policy_data()->has_management_mode()); |
| 182 EXPECT_EQ(em::PolicyData::LOCAL_OWNER, |
| 183 device_settings_service_.policy_data()->management_mode()); |
| 184 |
| 185 OwnerSettingsServiceChromeOS::ManagementSettings management_settings; |
| 186 management_settings.management_mode = |
| 187 policy::MANAGEMENT_MODE_CONSUMER_MANAGED; |
| 188 management_settings.request_token = "fake_request_token"; |
| 189 management_settings.device_id = "fake_device_id"; |
| 190 OwnerSettingsServiceChromeOS::OnManagementSettingsSetCallback |
| 191 on_management_settings_set_callback = |
| 192 base::Bind(&OwnerSettingsServiceChromeOSTest::OnManagementSettingsSet, |
| 193 base::Unretained(this)); |
| 194 |
| 195 // LOCAL_OWNER -> CONSUMER_MANAGED: Okay. |
| 196 service_->SetManagementSettings(management_settings, |
| 197 on_management_settings_set_callback); |
| 198 FlushDeviceSettings(); |
| 199 |
| 200 EXPECT_TRUE(management_settings_set_); |
| 201 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, |
| 202 device_settings_service_.policy_data()->management_mode()); |
| 203 |
| 204 // CONSUMER_MANAGED -> ENTERPRISE_MANAGED: Invalid. |
| 205 management_settings.management_mode = |
| 206 policy::MANAGEMENT_MODE_ENTERPRISE_MANAGED; |
| 207 service_->SetManagementSettings(management_settings, |
| 208 on_management_settings_set_callback); |
| 209 FlushDeviceSettings(); |
| 210 |
| 211 EXPECT_FALSE(management_settings_set_); |
| 212 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, |
| 213 device_settings_service_.policy_data()->management_mode()); |
| 214 |
| 215 // CONSUMER_MANAGED -> LOCAL_OWNER: Okay. |
| 216 management_settings.management_mode = policy::MANAGEMENT_MODE_LOCAL_OWNER; |
| 217 service_->SetManagementSettings(management_settings, |
| 218 on_management_settings_set_callback); |
| 219 FlushDeviceSettings(); |
| 220 |
| 221 EXPECT_TRUE(management_settings_set_); |
| 222 EXPECT_EQ(em::PolicyData::LOCAL_OWNER, |
| 223 device_settings_service_.policy_data()->management_mode()); |
| 224 |
| 225 // LOCAL_OWNER -> ENTERPRISE_MANAGED: Invalid. |
| 226 management_settings.management_mode = |
| 227 policy::MANAGEMENT_MODE_ENTERPRISE_MANAGED; |
| 228 service_->SetManagementSettings(management_settings, |
| 229 on_management_settings_set_callback); |
| 230 FlushDeviceSettings(); |
| 231 |
| 232 EXPECT_FALSE(management_settings_set_); |
| 233 EXPECT_EQ(em::PolicyData::LOCAL_OWNER, |
| 234 device_settings_service_.policy_data()->management_mode()); |
| 235 |
| 236 // Inject a policy data with management mode set to ENTERPRISE_MANAGED. |
| 237 device_policy_.policy_data().set_management_mode( |
| 238 em::PolicyData::ENTERPRISE_MANAGED); |
| 239 device_policy_.Build(); |
| 240 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
| 241 ReloadDeviceSettings(); |
| 242 EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED, |
| 243 device_settings_service_.policy_data()->management_mode()); |
| 244 |
| 245 // ENTERPRISE_MANAGED -> LOCAL_OWNER: Invalid. |
| 246 management_settings.management_mode = policy::MANAGEMENT_MODE_LOCAL_OWNER; |
| 247 service_->SetManagementSettings(management_settings, |
| 248 on_management_settings_set_callback); |
| 249 FlushDeviceSettings(); |
| 250 |
| 251 EXPECT_FALSE(management_settings_set_); |
| 252 EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED, |
| 253 device_settings_service_.policy_data()->management_mode()); |
| 254 |
| 255 // ENTERPRISE_MANAGED -> CONSUMER_MANAGED: Invalid. |
| 256 management_settings.management_mode = |
| 257 policy::MANAGEMENT_MODE_CONSUMER_MANAGED; |
| 258 service_->SetManagementSettings(management_settings, |
| 259 on_management_settings_set_callback); |
| 260 FlushDeviceSettings(); |
| 261 |
| 262 EXPECT_FALSE(management_settings_set_); |
| 263 EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED, |
| 264 device_settings_service_.policy_data()->management_mode()); |
| 265 } |
| 266 |
| 267 TEST_F(OwnerSettingsServiceChromeOSTest, SetManagementSettingsSuccess) { |
| 268 ReloadDeviceSettings(); |
| 269 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, |
| 270 device_settings_service_.status()); |
| 271 |
| 272 OwnerSettingsServiceChromeOS::ManagementSettings management_settings; |
| 273 management_settings.management_mode = |
| 274 policy::MANAGEMENT_MODE_CONSUMER_MANAGED; |
| 275 management_settings.request_token = "fake_request_token"; |
| 276 management_settings.device_id = "fake_device_id"; |
| 277 service_->SetManagementSettings( |
| 278 management_settings, |
| 279 base::Bind(&OwnerSettingsServiceChromeOSTest::OnManagementSettingsSet, |
| 280 base::Unretained(this))); |
| 281 FlushDeviceSettings(); |
| 282 |
| 283 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, |
| 284 device_settings_service_.status()); |
| 285 ASSERT_TRUE(device_settings_service_.device_settings()); |
| 286 |
| 287 // Check that the loaded policy_data contains the expected values. |
| 288 const em::PolicyData* policy_data = device_settings_service_.policy_data(); |
| 289 EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType, |
| 290 policy_data->policy_type()); |
| 291 EXPECT_EQ(device_settings_service_.GetUsername(), policy_data->username()); |
| 292 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, policy_data->management_mode()); |
| 293 EXPECT_EQ("fake_request_token", policy_data->request_token()); |
| 294 EXPECT_EQ("fake_device_id", policy_data->device_id()); |
| 295 } |
| 296 |
| 161 class OwnerSettingsServiceChromeOSNoOwnerTest | 297 class OwnerSettingsServiceChromeOSNoOwnerTest |
| 162 : public OwnerSettingsServiceChromeOSTest { | 298 : public OwnerSettingsServiceChromeOSTest { |
| 163 public: | 299 public: |
| 164 OwnerSettingsServiceChromeOSNoOwnerTest() {} | 300 OwnerSettingsServiceChromeOSNoOwnerTest() {} |
| 165 virtual ~OwnerSettingsServiceChromeOSNoOwnerTest() {} | 301 virtual ~OwnerSettingsServiceChromeOSNoOwnerTest() {} |
| 166 | 302 |
| 167 virtual void SetUp() override { | 303 virtual void SetUp() override { |
| 168 DeviceSettingsTestBase::SetUp(); | 304 DeviceSettingsTestBase::SetUp(); |
| 169 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), | 305 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), |
| 170 &device_settings_service_)); | 306 &device_settings_service_)); |
| 171 FlushDeviceSettings(); | 307 FlushDeviceSettings(); |
| 172 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( | 308 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( |
| 173 profile_.get()); | 309 profile_.get()); |
| 174 ASSERT_TRUE(service_); | 310 ASSERT_TRUE(service_); |
| 175 ASSERT_FALSE(service_->IsOwner()); | 311 ASSERT_FALSE(service_->IsOwner()); |
| 176 } | 312 } |
| 177 | 313 |
| 178 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } | 314 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } |
| 179 | 315 |
| 180 private: | 316 private: |
| 181 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSNoOwnerTest); | 317 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSNoOwnerTest); |
| 182 }; | 318 }; |
| 183 | 319 |
| 184 TEST_F(OwnerSettingsServiceChromeOSNoOwnerTest, SingleSetTest) { | 320 TEST_F(OwnerSettingsServiceChromeOSNoOwnerTest, SingleSetTest) { |
| 185 ASSERT_FALSE(service_->SetBoolean(kAccountsPrefAllowGuest, false)); | 321 ASSERT_FALSE(service_->SetBoolean(kAccountsPrefAllowGuest, false)); |
| 186 } | 322 } |
| 187 | 323 |
| 188 } // namespace chromeos | 324 } // namespace chromeos |
| OLD | NEW |