| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/policy/user_policy_cache.h" | 5 #include "chrome/browser/policy/user_policy_cache.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 string_list.add_entries("ponies"); | 200 string_list.add_entries("ponies"); |
| 201 string_list.add_entries("more ponies"); | 201 string_list.add_entries("more ponies"); |
| 202 scoped_ptr<ListValue> decoded(DecodeStringList(string_list)); | 202 scoped_ptr<ListValue> decoded(DecodeStringList(string_list)); |
| 203 ListValue expected; | 203 ListValue expected; |
| 204 expected.Append(Value::CreateStringValue("ponies")); | 204 expected.Append(Value::CreateStringValue("ponies")); |
| 205 expected.Append(Value::CreateStringValue("more ponies")); | 205 expected.Append(Value::CreateStringValue("more ponies")); |
| 206 EXPECT_TRUE(decoded->Equals(&expected)); | 206 EXPECT_TRUE(decoded->Equals(&expected)); |
| 207 } | 207 } |
| 208 | 208 |
| 209 TEST_F(UserPolicyCacheTest, Empty) { | 209 TEST_F(UserPolicyCacheTest, Empty) { |
| 210 UserPolicyCache cache(test_file()); | 210 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 211 PolicyMap empty; | 211 PolicyMap empty; |
| 212 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 212 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 213 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); | 213 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); |
| 214 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 214 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 215 } | 215 } |
| 216 | 216 |
| 217 TEST_F(UserPolicyCacheTest, LoadNoFile) { | 217 TEST_F(UserPolicyCacheTest, LoadNoFile) { |
| 218 UserPolicyCache cache(test_file()); | 218 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 219 cache.Load(); | 219 cache.Load(); |
| 220 loop_.RunAllPending(); | 220 loop_.RunAllPending(); |
| 221 PolicyMap empty; | 221 PolicyMap empty; |
| 222 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 222 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 223 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 223 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 224 } | 224 } |
| 225 | 225 |
| 226 TEST_F(UserPolicyCacheTest, RejectFuture) { | 226 TEST_F(UserPolicyCacheTest, RejectFuture) { |
| 227 scoped_ptr<em::PolicyFetchResponse> policy_response( | 227 scoped_ptr<em::PolicyFetchResponse> policy_response( |
| 228 CreateHomepagePolicy("", base::Time::NowFromSystemTime() + | 228 CreateHomepagePolicy("", base::Time::NowFromSystemTime() + |
| 229 base::TimeDelta::FromMinutes(5), | 229 base::TimeDelta::FromMinutes(5), |
| 230 em::PolicyOptions::MANDATORY)); | 230 em::PolicyOptions::MANDATORY)); |
| 231 WritePolicy(*policy_response); | 231 WritePolicy(*policy_response); |
| 232 UserPolicyCache cache(test_file()); | 232 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 233 cache.Load(); | 233 cache.Load(); |
| 234 loop_.RunAllPending(); | 234 loop_.RunAllPending(); |
| 235 PolicyMap empty; | 235 PolicyMap empty; |
| 236 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 236 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 237 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 237 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 238 } | 238 } |
| 239 | 239 |
| 240 TEST_F(UserPolicyCacheTest, LoadWithFile) { | 240 TEST_F(UserPolicyCacheTest, LoadWithFile) { |
| 241 scoped_ptr<em::PolicyFetchResponse> policy_response( | 241 scoped_ptr<em::PolicyFetchResponse> policy_response( |
| 242 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), | 242 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
| 243 em::PolicyOptions::MANDATORY)); | 243 em::PolicyOptions::MANDATORY)); |
| 244 WritePolicy(*policy_response); | 244 WritePolicy(*policy_response); |
| 245 UserPolicyCache cache(test_file()); | 245 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 246 cache.Load(); | 246 cache.Load(); |
| 247 loop_.RunAllPending(); | 247 loop_.RunAllPending(); |
| 248 PolicyMap empty; | 248 PolicyMap empty; |
| 249 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 249 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 250 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); | 250 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); |
| 251 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); | 251 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); |
| 252 } | 252 } |
| 253 | 253 |
| 254 TEST_F(UserPolicyCacheTest, LoadWithData) { | 254 TEST_F(UserPolicyCacheTest, LoadWithData) { |
| 255 scoped_ptr<em::PolicyFetchResponse> policy( | 255 scoped_ptr<em::PolicyFetchResponse> policy( |
| 256 CreateHomepagePolicy("http://www.example.com", | 256 CreateHomepagePolicy("http://www.example.com", |
| 257 base::Time::NowFromSystemTime(), | 257 base::Time::NowFromSystemTime(), |
| 258 em::PolicyOptions::MANDATORY)); | 258 em::PolicyOptions::MANDATORY)); |
| 259 WritePolicy(*policy); | 259 WritePolicy(*policy); |
| 260 UserPolicyCache cache(test_file()); | 260 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 261 cache.Load(); | 261 cache.Load(); |
| 262 loop_.RunAllPending(); | 262 loop_.RunAllPending(); |
| 263 PolicyMap expected; | 263 PolicyMap expected; |
| 264 expected.Set(kPolicyHomepageLocation, | 264 expected.Set(kPolicyHomepageLocation, |
| 265 Value::CreateStringValue("http://www.example.com")); | 265 Value::CreateStringValue("http://www.example.com")); |
| 266 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 266 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 267 } | 267 } |
| 268 | 268 |
| 269 TEST_F(UserPolicyCacheTest, SetPolicy) { | 269 TEST_F(UserPolicyCacheTest, SetPolicy) { |
| 270 UserPolicyCache cache(test_file()); | 270 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 271 em::PolicyFetchResponse* policy = | 271 em::PolicyFetchResponse* policy = |
| 272 CreateHomepagePolicy("http://www.example.com", | 272 CreateHomepagePolicy("http://www.example.com", |
| 273 base::Time::NowFromSystemTime(), | 273 base::Time::NowFromSystemTime(), |
| 274 em::PolicyOptions::MANDATORY); | 274 em::PolicyOptions::MANDATORY); |
| 275 SetPolicy(&cache, policy); | 275 SetPolicy(&cache, policy); |
| 276 em::PolicyFetchResponse* policy2 = | 276 em::PolicyFetchResponse* policy2 = |
| 277 CreateHomepagePolicy("http://www.example.com", | 277 CreateHomepagePolicy("http://www.example.com", |
| 278 base::Time::NowFromSystemTime(), | 278 base::Time::NowFromSystemTime(), |
| 279 em::PolicyOptions::MANDATORY); | 279 em::PolicyOptions::MANDATORY); |
| 280 SetPolicy(&cache, policy2); | 280 SetPolicy(&cache, policy2); |
| 281 PolicyMap expected; | 281 PolicyMap expected; |
| 282 expected.Set(kPolicyHomepageLocation, | 282 expected.Set(kPolicyHomepageLocation, |
| 283 Value::CreateStringValue("http://www.example.com")); | 283 Value::CreateStringValue("http://www.example.com")); |
| 284 PolicyMap empty; | 284 PolicyMap empty; |
| 285 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 285 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 286 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); | 286 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); |
| 287 policy = CreateHomepagePolicy("http://www.example.com", | 287 policy = CreateHomepagePolicy("http://www.example.com", |
| 288 base::Time::NowFromSystemTime(), | 288 base::Time::NowFromSystemTime(), |
| 289 em::PolicyOptions::RECOMMENDED); | 289 em::PolicyOptions::RECOMMENDED); |
| 290 SetPolicy(&cache, policy); | 290 SetPolicy(&cache, policy); |
| 291 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); | 291 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); |
| 292 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 292 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 293 } | 293 } |
| 294 | 294 |
| 295 TEST_F(UserPolicyCacheTest, ResetPolicy) { | 295 TEST_F(UserPolicyCacheTest, ResetPolicy) { |
| 296 UserPolicyCache cache(test_file()); | 296 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 297 | 297 |
| 298 em::PolicyFetchResponse* policy = | 298 em::PolicyFetchResponse* policy = |
| 299 CreateHomepagePolicy("http://www.example.com", | 299 CreateHomepagePolicy("http://www.example.com", |
| 300 base::Time::NowFromSystemTime(), | 300 base::Time::NowFromSystemTime(), |
| 301 em::PolicyOptions::MANDATORY); | 301 em::PolicyOptions::MANDATORY); |
| 302 SetPolicy(&cache, policy); | 302 SetPolicy(&cache, policy); |
| 303 PolicyMap expected; | 303 PolicyMap expected; |
| 304 expected.Set(kPolicyHomepageLocation, | 304 expected.Set(kPolicyHomepageLocation, |
| 305 Value::CreateStringValue("http://www.example.com")); | 305 Value::CreateStringValue("http://www.example.com")); |
| 306 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 306 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 307 | 307 |
| 308 em::PolicyFetchResponse* empty_policy = | 308 em::PolicyFetchResponse* empty_policy = |
| 309 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), | 309 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
| 310 em::PolicyOptions::MANDATORY); | 310 em::PolicyOptions::MANDATORY); |
| 311 SetPolicy(&cache, empty_policy); | 311 SetPolicy(&cache, empty_policy); |
| 312 PolicyMap empty; | 312 PolicyMap empty; |
| 313 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 313 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 314 } | 314 } |
| 315 | 315 |
| 316 TEST_F(UserPolicyCacheTest, PersistPolicy) { | 316 TEST_F(UserPolicyCacheTest, PersistPolicy) { |
| 317 { | 317 { |
| 318 UserPolicyCache cache(test_file()); | 318 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 319 scoped_ptr<em::PolicyFetchResponse> policy( | 319 scoped_ptr<em::PolicyFetchResponse> policy( |
| 320 CreateHomepagePolicy("http://www.example.com", | 320 CreateHomepagePolicy("http://www.example.com", |
| 321 base::Time::NowFromSystemTime(), | 321 base::Time::NowFromSystemTime(), |
| 322 em::PolicyOptions::MANDATORY)); | 322 em::PolicyOptions::MANDATORY)); |
| 323 cache.SetPolicy(*policy); | 323 cache.SetPolicy(*policy); |
| 324 } | 324 } |
| 325 | 325 |
| 326 loop_.RunAllPending(); | 326 loop_.RunAllPending(); |
| 327 | 327 |
| 328 EXPECT_TRUE(file_util::PathExists(test_file())); | 328 EXPECT_TRUE(file_util::PathExists(test_file())); |
| 329 UserPolicyCache cache(test_file()); | 329 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 330 cache.Load(); | 330 cache.Load(); |
| 331 loop_.RunAllPending(); | 331 loop_.RunAllPending(); |
| 332 PolicyMap expected; | 332 PolicyMap expected; |
| 333 expected.Set(kPolicyHomepageLocation, | 333 expected.Set(kPolicyHomepageLocation, |
| 334 Value::CreateStringValue("http://www.example.com")); | 334 Value::CreateStringValue("http://www.example.com")); |
| 335 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 335 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 336 } | 336 } |
| 337 | 337 |
| 338 TEST_F(UserPolicyCacheTest, FreshPolicyOverride) { | 338 TEST_F(UserPolicyCacheTest, FreshPolicyOverride) { |
| 339 scoped_ptr<em::PolicyFetchResponse> policy( | 339 scoped_ptr<em::PolicyFetchResponse> policy( |
| 340 CreateHomepagePolicy("http://www.example.com", | 340 CreateHomepagePolicy("http://www.example.com", |
| 341 base::Time::NowFromSystemTime(), | 341 base::Time::NowFromSystemTime(), |
| 342 em::PolicyOptions::MANDATORY)); | 342 em::PolicyOptions::MANDATORY)); |
| 343 WritePolicy(*policy); | 343 WritePolicy(*policy); |
| 344 | 344 |
| 345 UserPolicyCache cache(test_file()); | 345 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 346 em::PolicyFetchResponse* updated_policy = | 346 em::PolicyFetchResponse* updated_policy = |
| 347 CreateHomepagePolicy("http://www.chromium.org", | 347 CreateHomepagePolicy("http://www.chromium.org", |
| 348 base::Time::NowFromSystemTime(), | 348 base::Time::NowFromSystemTime(), |
| 349 em::PolicyOptions::MANDATORY); | 349 em::PolicyOptions::MANDATORY); |
| 350 SetPolicy(&cache, updated_policy); | 350 SetPolicy(&cache, updated_policy); |
| 351 | 351 |
| 352 cache.Load(); | 352 cache.Load(); |
| 353 loop_.RunAllPending(); | 353 loop_.RunAllPending(); |
| 354 PolicyMap expected; | 354 PolicyMap expected; |
| 355 expected.Set(kPolicyHomepageLocation, | 355 expected.Set(kPolicyHomepageLocation, |
| 356 Value::CreateStringValue("http://www.chromium.org")); | 356 Value::CreateStringValue("http://www.chromium.org")); |
| 357 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 357 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 358 } | 358 } |
| 359 | 359 |
| 360 TEST_F(UserPolicyCacheTest, SetReady) { | 360 TEST_F(UserPolicyCacheTest, SetReady) { |
| 361 UserPolicyCache cache(test_file()); | 361 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 362 cache.AddObserver(&observer); | 362 cache.AddObserver(&observer); |
| 363 scoped_ptr<em::PolicyFetchResponse> policy( | 363 scoped_ptr<em::PolicyFetchResponse> policy( |
| 364 CreateHomepagePolicy("http://www.example.com", | 364 CreateHomepagePolicy("http://www.example.com", |
| 365 base::Time::NowFromSystemTime(), | 365 base::Time::NowFromSystemTime(), |
| 366 em::PolicyOptions::MANDATORY)); | 366 em::PolicyOptions::MANDATORY)); |
| 367 EXPECT_CALL(observer, OnCacheUpdate(_)).Times(0); | 367 EXPECT_CALL(observer, OnCacheUpdate(_)).Times(0); |
| 368 cache.SetPolicy(*policy); | 368 cache.SetPolicy(*policy); |
| 369 testing::Mock::VerifyAndClearExpectations(&observer); | 369 testing::Mock::VerifyAndClearExpectations(&observer); |
| 370 | 370 |
| 371 // Switching the cache to ready should send a notification. | 371 // Switching the cache to ready should send a notification. |
| 372 EXPECT_CALL(observer, OnCacheUpdate(_)).Times(1); | 372 EXPECT_CALL(observer, OnCacheUpdate(_)).Times(1); |
| 373 SetReady(&cache); | 373 SetReady(&cache); |
| 374 cache.RemoveObserver(&observer); | 374 cache.RemoveObserver(&observer); |
| 375 } | 375 } |
| 376 | 376 |
| 377 // Test case for the temporary support for GenericNamedValues in the | 377 // Test case for the temporary support for GenericNamedValues in the |
| 378 // CloudPolicySettings protobuf. Can be removed when this support is no longer | 378 // CloudPolicySettings protobuf. Can be removed when this support is no longer |
| 379 // required. | 379 // required. |
| 380 TEST_F(UserPolicyCacheTest, OldStylePolicy) { | 380 TEST_F(UserPolicyCacheTest, OldStylePolicy) { |
| 381 UserPolicyCache cache(test_file()); | 381 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 382 em::PolicyFetchResponse* policy = new em::PolicyFetchResponse(); | 382 em::PolicyFetchResponse* policy = new em::PolicyFetchResponse(); |
| 383 em::PolicyData signed_response; | 383 em::PolicyData signed_response; |
| 384 em::LegacyChromeSettingsProto settings; | 384 em::LegacyChromeSettingsProto settings; |
| 385 em::GenericNamedValue* named_value = settings.add_named_value(); | 385 em::GenericNamedValue* named_value = settings.add_named_value(); |
| 386 named_value->set_name("HomepageLocation"); | 386 named_value->set_name("HomepageLocation"); |
| 387 em::GenericValue* value_container = named_value->mutable_value(); | 387 em::GenericValue* value_container = named_value->mutable_value(); |
| 388 value_container->set_value_type(em::GenericValue::VALUE_TYPE_STRING); | 388 value_container->set_value_type(em::GenericValue::VALUE_TYPE_STRING); |
| 389 value_container->set_string_value("http://www.example.com"); | 389 value_container->set_string_value("http://www.example.com"); |
| 390 EXPECT_TRUE( | 390 EXPECT_TRUE( |
| 391 settings.SerializeToString(signed_response.mutable_policy_value())); | 391 settings.SerializeToString(signed_response.mutable_policy_value())); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 404 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); | 404 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); |
| 405 // If new-style policy comes in, it should override old-style policy. | 405 // If new-style policy comes in, it should override old-style policy. |
| 406 policy = CreateHomepagePolicy("http://www.example.com", | 406 policy = CreateHomepagePolicy("http://www.example.com", |
| 407 base::Time::NowFromSystemTime(), | 407 base::Time::NowFromSystemTime(), |
| 408 em::PolicyOptions::RECOMMENDED); | 408 em::PolicyOptions::RECOMMENDED); |
| 409 SetPolicy(&cache, policy); | 409 SetPolicy(&cache, policy); |
| 410 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); | 410 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); |
| 411 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 411 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 412 } | 412 } |
| 413 | 413 |
| 414 TEST_F(UserPolicyCacheTest, CheckReadyNoWaiting) { |
| 415 UserPolicyCache cache(test_file(), false /* wait_for_policy_fetch */); |
| 416 EXPECT_FALSE(cache.IsReady()); |
| 417 cache.Load(); |
| 418 loop_.RunAllPending(); |
| 419 EXPECT_TRUE(cache.IsReady()); |
| 420 } |
| 421 |
| 422 TEST_F(UserPolicyCacheTest, CheckReadyWaitForFetch) { |
| 423 UserPolicyCache cache(test_file(), true /* wait_for_policy_fetch */); |
| 424 EXPECT_FALSE(cache.IsReady()); |
| 425 cache.Load(); |
| 426 loop_.RunAllPending(); |
| 427 EXPECT_FALSE(cache.IsReady()); |
| 428 cache.SetFetchingDone(); |
| 429 EXPECT_TRUE(cache.IsReady()); |
| 430 } |
| 431 |
| 432 TEST_F(UserPolicyCacheTest, CheckReadyWaitForDisk) { |
| 433 UserPolicyCache cache(test_file(), true /* wait_for_policy_fetch */); |
| 434 EXPECT_FALSE(cache.IsReady()); |
| 435 cache.SetFetchingDone(); |
| 436 EXPECT_FALSE(cache.IsReady()); |
| 437 cache.Load(); |
| 438 loop_.RunAllPending(); |
| 439 EXPECT_TRUE(cache.IsReady()); |
| 440 } |
| 441 |
| 414 } // namespace policy | 442 } // namespace policy |
| OLD | NEW |