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 "components/sync_preferences/pref_service_syncable.h" | 5 #include "components/sync_preferences/pref_service_syncable.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 prefs_.SetString(kStringPrefName, kExampleUrl0); | 266 prefs_.SetString(kStringPrefName, kExampleUrl0); |
267 { | 267 { |
268 ListPrefUpdate update(GetPrefs(), kListPrefName); | 268 ListPrefUpdate update(GetPrefs(), kListPrefName); |
269 base::ListValue* url_list = update.Get(); | 269 base::ListValue* url_list = update.Get(); |
270 url_list->AppendString(kExampleUrl0); | 270 url_list->AppendString(kExampleUrl0); |
271 url_list->AppendString(kExampleUrl1); | 271 url_list->AppendString(kExampleUrl1); |
272 } | 272 } |
273 | 273 |
274 syncer::SyncDataList in; | 274 syncer::SyncDataList in; |
275 syncer::SyncChangeList out; | 275 syncer::SyncChangeList out; |
276 AddToRemoteDataList(kStringPrefName, base::StringValue(kExampleUrl1), &in); | 276 AddToRemoteDataList(kStringPrefName, base::Value(kExampleUrl1), &in); |
277 base::ListValue urls_to_restore; | 277 base::ListValue urls_to_restore; |
278 urls_to_restore.AppendString(kExampleUrl1); | 278 urls_to_restore.AppendString(kExampleUrl1); |
279 urls_to_restore.AppendString(kExampleUrl2); | 279 urls_to_restore.AppendString(kExampleUrl2); |
280 AddToRemoteDataList(kListPrefName, urls_to_restore, &in); | 280 AddToRemoteDataList(kListPrefName, urls_to_restore, &in); |
281 AddToRemoteDataList(kDefaultCharsetPrefName, | 281 AddToRemoteDataList(kDefaultCharsetPrefName, |
282 base::StringValue(kNonDefaultCharsetValue), &in); | 282 base::Value(kNonDefaultCharsetValue), &in); |
283 InitWithSyncDataTakeOutput(in, &out); | 283 InitWithSyncDataTakeOutput(in, &out); |
284 | 284 |
285 ASSERT_FALSE(FindValue(kStringPrefName, out).get()); | 285 ASSERT_FALSE(FindValue(kStringPrefName, out).get()); |
286 ASSERT_FALSE(FindValue(kDefaultCharsetPrefName, out).get()); | 286 ASSERT_FALSE(FindValue(kDefaultCharsetPrefName, out).get()); |
287 | 287 |
288 EXPECT_EQ(kExampleUrl1, prefs_.GetString(kStringPrefName)); | 288 EXPECT_EQ(kExampleUrl1, prefs_.GetString(kStringPrefName)); |
289 | 289 |
290 std::unique_ptr<base::ListValue> expected_urls(new base::ListValue); | 290 std::unique_ptr<base::ListValue> expected_urls(new base::ListValue); |
291 expected_urls->AppendString(kExampleUrl1); | 291 expected_urls->AppendString(kExampleUrl1); |
292 expected_urls->AppendString(kExampleUrl2); | 292 expected_urls->AppendString(kExampleUrl2); |
(...skipping 16 matching lines...) Expand all Loading... |
309 } | 309 } |
310 | 310 |
311 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) { | 311 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) { |
312 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); | 312 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); |
313 EXPECT_TRUE(pref->IsDefaultValue()); | 313 EXPECT_TRUE(pref->IsDefaultValue()); |
314 | 314 |
315 syncer::SyncChangeList out; | 315 syncer::SyncChangeList out; |
316 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 316 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
317 out.clear(); | 317 out.clear(); |
318 | 318 |
319 base::StringValue expected(kExampleUrl0); | 319 base::Value expected(kExampleUrl0); |
320 GetPrefs()->Set(kStringPrefName, expected); | 320 GetPrefs()->Set(kStringPrefName, expected); |
321 | 321 |
322 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 322 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
323 ASSERT_TRUE(actual.get()); | 323 ASSERT_TRUE(actual.get()); |
324 EXPECT_TRUE(expected.Equals(actual.get())); | 324 EXPECT_TRUE(expected.Equals(actual.get())); |
325 } | 325 } |
326 | 326 |
327 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) { | 327 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) { |
328 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); | 328 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); |
329 syncer::SyncChangeList out; | 329 syncer::SyncChangeList out; |
330 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 330 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
331 out.clear(); | 331 out.clear(); |
332 | 332 |
333 base::StringValue expected(kExampleUrl1); | 333 base::Value expected(kExampleUrl1); |
334 GetPrefs()->Set(kStringPrefName, expected); | 334 GetPrefs()->Set(kStringPrefName, expected); |
335 | 335 |
336 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 336 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
337 ASSERT_TRUE(actual.get()); | 337 ASSERT_TRUE(actual.get()); |
338 EXPECT_TRUE(expected.Equals(actual.get())); | 338 EXPECT_TRUE(expected.Equals(actual.get())); |
339 } | 339 } |
340 | 340 |
341 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) { | 341 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) { |
342 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); | 342 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); |
343 InitWithNoSyncData(); | 343 InitWithNoSyncData(); |
344 | 344 |
345 base::StringValue expected(kExampleUrl1); | 345 base::Value expected(kExampleUrl1); |
346 syncer::SyncChangeList list; | 346 syncer::SyncChangeList list; |
347 list.push_back(MakeRemoteChange(1, kStringPrefName, expected, | 347 list.push_back(MakeRemoteChange(1, kStringPrefName, expected, |
348 SyncChange::ACTION_UPDATE)); | 348 SyncChange::ACTION_UPDATE)); |
349 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 349 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
350 | 350 |
351 const base::Value& actual = GetPreferenceValue(kStringPrefName); | 351 const base::Value& actual = GetPreferenceValue(kStringPrefName); |
352 EXPECT_TRUE(expected.Equals(&actual)); | 352 EXPECT_TRUE(expected.Equals(&actual)); |
353 } | 353 } |
354 | 354 |
355 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) { | 355 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) { |
356 InitWithNoSyncData(); | 356 InitWithNoSyncData(); |
357 | 357 |
358 base::StringValue expected(kExampleUrl0); | 358 base::Value expected(kExampleUrl0); |
359 syncer::SyncChangeList list; | 359 syncer::SyncChangeList list; |
360 list.push_back( | 360 list.push_back( |
361 MakeRemoteChange(1, kStringPrefName, expected, SyncChange::ACTION_ADD)); | 361 MakeRemoteChange(1, kStringPrefName, expected, SyncChange::ACTION_ADD)); |
362 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 362 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
363 | 363 |
364 const base::Value& actual = GetPreferenceValue(kStringPrefName); | 364 const base::Value& actual = GetPreferenceValue(kStringPrefName); |
365 EXPECT_TRUE(expected.Equals(&actual)); | 365 EXPECT_TRUE(expected.Equals(&actual)); |
366 EXPECT_EQ( | 366 EXPECT_EQ( |
367 1U, pref_sync_service_->registered_preferences().count(kStringPrefName)); | 367 1U, pref_sync_service_->registered_preferences().count(kStringPrefName)); |
368 } | 368 } |
369 | 369 |
370 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) { | 370 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) { |
371 InitWithNoSyncData(); | 371 InitWithNoSyncData(); |
372 syncer::SyncChangeList list; | 372 syncer::SyncChangeList list; |
373 base::StringValue expected(kExampleUrl0); | 373 base::Value expected(kExampleUrl0); |
374 list.push_back(MakeRemoteChange(1, "unknown preference", expected, | 374 list.push_back(MakeRemoteChange(1, "unknown preference", expected, |
375 SyncChange::ACTION_UPDATE)); | 375 SyncChange::ACTION_UPDATE)); |
376 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 376 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
377 // Nothing interesting happens on the client when it gets an update | 377 // Nothing interesting happens on the client when it gets an update |
378 // of an unknown preference. We just should not crash. | 378 // of an unknown preference. We just should not crash. |
379 } | 379 } |
380 | 380 |
381 TEST_F(PrefServiceSyncableTest, ManagedPreferences) { | 381 TEST_F(PrefServiceSyncableTest, ManagedPreferences) { |
382 // Make the homepage preference managed. | 382 // Make the homepage preference managed. |
383 base::StringValue managed_value("http://example.com"); | 383 base::Value managed_value("http://example.com"); |
384 prefs_.SetManagedPref(kStringPrefName, managed_value.DeepCopy()); | 384 prefs_.SetManagedPref(kStringPrefName, managed_value.DeepCopy()); |
385 | 385 |
386 syncer::SyncChangeList out; | 386 syncer::SyncChangeList out; |
387 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 387 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
388 out.clear(); | 388 out.clear(); |
389 | 389 |
390 // Changing the homepage preference should not sync anything. | 390 // Changing the homepage preference should not sync anything. |
391 base::StringValue user_value("http://chromium..com"); | 391 base::Value user_value("http://chromium..com"); |
392 prefs_.SetUserPref(kStringPrefName, user_value.DeepCopy()); | 392 prefs_.SetUserPref(kStringPrefName, user_value.DeepCopy()); |
393 EXPECT_TRUE(out.empty()); | 393 EXPECT_TRUE(out.empty()); |
394 | 394 |
395 // An incoming sync transaction should change the user value, not the managed | 395 // An incoming sync transaction should change the user value, not the managed |
396 // value. | 396 // value. |
397 base::StringValue sync_value("http://crbug.com"); | 397 base::Value sync_value("http://crbug.com"); |
398 syncer::SyncChangeList list; | 398 syncer::SyncChangeList list; |
399 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, | 399 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, |
400 SyncChange::ACTION_UPDATE)); | 400 SyncChange::ACTION_UPDATE)); |
401 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 401 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
402 | 402 |
403 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kStringPrefName))); | 403 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kStringPrefName))); |
404 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kStringPrefName))); | 404 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kStringPrefName))); |
405 } | 405 } |
406 | 406 |
407 // List preferences have special handling at association time due to our ability | 407 // List preferences have special handling at association time due to our ability |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 444 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
445 | 445 |
446 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kListPrefName))); | 446 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kListPrefName))); |
447 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kListPrefName))); | 447 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kListPrefName))); |
448 } | 448 } |
449 | 449 |
450 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) { | 450 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) { |
451 syncer::SyncChangeList out; | 451 syncer::SyncChangeList out; |
452 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 452 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
453 out.clear(); | 453 out.clear(); |
454 base::StringValue initial_value("http://example.com/initial"); | 454 base::Value initial_value("http://example.com/initial"); |
455 GetPrefs()->Set(kStringPrefName, initial_value); | 455 GetPrefs()->Set(kStringPrefName, initial_value); |
456 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 456 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
457 ASSERT_TRUE(actual.get()); | 457 ASSERT_TRUE(actual.get()); |
458 EXPECT_TRUE(initial_value.Equals(actual.get())); | 458 EXPECT_TRUE(initial_value.Equals(actual.get())); |
459 | 459 |
460 // Switch kHomePage to managed and set a different value. | 460 // Switch kHomePage to managed and set a different value. |
461 base::StringValue managed_value("http://example.com/managed"); | 461 base::Value managed_value("http://example.com/managed"); |
462 GetTestingPrefService()->SetManagedPref(kStringPrefName, | 462 GetTestingPrefService()->SetManagedPref(kStringPrefName, |
463 managed_value.DeepCopy()); | 463 managed_value.DeepCopy()); |
464 | 464 |
465 // The pref value should be the one dictated by policy. | 465 // The pref value should be the one dictated by policy. |
466 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); | 466 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); |
467 | 467 |
468 // Switch kHomePage back to unmanaged. | 468 // Switch kHomePage back to unmanaged. |
469 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); | 469 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); |
470 | 470 |
471 // The original value should be picked up. | 471 // The original value should be picked up. |
472 EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(kStringPrefName))); | 472 EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(kStringPrefName))); |
473 } | 473 } |
474 | 474 |
475 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) { | 475 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) { |
476 syncer::SyncChangeList out; | 476 syncer::SyncChangeList out; |
477 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 477 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
478 out.clear(); | 478 out.clear(); |
479 | 479 |
480 base::StringValue initial_value("http://example.com/initial"); | 480 base::Value initial_value("http://example.com/initial"); |
481 GetPrefs()->Set(kStringPrefName, initial_value); | 481 GetPrefs()->Set(kStringPrefName, initial_value); |
482 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 482 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
483 EXPECT_TRUE(initial_value.Equals(actual.get())); | 483 EXPECT_TRUE(initial_value.Equals(actual.get())); |
484 | 484 |
485 // Switch kHomePage to managed and set a different value. | 485 // Switch kHomePage to managed and set a different value. |
486 base::StringValue managed_value("http://example.com/managed"); | 486 base::Value managed_value("http://example.com/managed"); |
487 GetTestingPrefService()->SetManagedPref(kStringPrefName, | 487 GetTestingPrefService()->SetManagedPref(kStringPrefName, |
488 managed_value.DeepCopy()); | 488 managed_value.DeepCopy()); |
489 | 489 |
490 // Change the sync value. | 490 // Change the sync value. |
491 base::StringValue sync_value("http://example.com/sync"); | 491 base::Value sync_value("http://example.com/sync"); |
492 syncer::SyncChangeList list; | 492 syncer::SyncChangeList list; |
493 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, | 493 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, |
494 SyncChange::ACTION_UPDATE)); | 494 SyncChange::ACTION_UPDATE)); |
495 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 495 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
496 | 496 |
497 // The pref value should still be the one dictated by policy. | 497 // The pref value should still be the one dictated by policy. |
498 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); | 498 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); |
499 | 499 |
500 // Switch kHomePage back to unmanaged. | 500 // Switch kHomePage back to unmanaged. |
501 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); | 501 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); |
502 | 502 |
503 // Sync value should be picked up. | 503 // Sync value should be picked up. |
504 EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(kStringPrefName))); | 504 EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(kStringPrefName))); |
505 } | 505 } |
506 | 506 |
507 TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) { | 507 TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) { |
508 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); | 508 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); |
509 EXPECT_TRUE(pref->IsDefaultValue()); | 509 EXPECT_TRUE(pref->IsDefaultValue()); |
510 syncer::SyncChangeList out; | 510 syncer::SyncChangeList out; |
511 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 511 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
512 | 512 |
513 EXPECT_TRUE(IsSynced(kStringPrefName)); | 513 EXPECT_TRUE(IsSynced(kStringPrefName)); |
514 EXPECT_TRUE(pref->IsDefaultValue()); | 514 EXPECT_TRUE(pref->IsDefaultValue()); |
515 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); | 515 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); |
516 out.clear(); | 516 out.clear(); |
517 | 517 |
518 // Switch kHomePage to managed and set a different value. | 518 // Switch kHomePage to managed and set a different value. |
519 base::StringValue managed_value("http://example.com/managed"); | 519 base::Value managed_value("http://example.com/managed"); |
520 GetTestingPrefService()->SetManagedPref(kStringPrefName, | 520 GetTestingPrefService()->SetManagedPref(kStringPrefName, |
521 managed_value.DeepCopy()); | 521 managed_value.DeepCopy()); |
522 // The pref value should be the one dictated by policy. | 522 // The pref value should be the one dictated by policy. |
523 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); | 523 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); |
524 EXPECT_FALSE(pref->IsDefaultValue()); | 524 EXPECT_FALSE(pref->IsDefaultValue()); |
525 // There should be no synced value. | 525 // There should be no synced value. |
526 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); | 526 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); |
527 // Switch kHomePage back to unmanaged. | 527 // Switch kHomePage back to unmanaged. |
528 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); | 528 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); |
529 // The original value should be picked up. | 529 // The original value should be picked up. |
(...skipping 24 matching lines...) Expand all Loading... |
554 base::Bind(&Increment, &num_callbacks)); | 554 base::Bind(&Increment, &num_callbacks)); |
555 EXPECT_EQ(0, num_callbacks); | 555 EXPECT_EQ(0, num_callbacks); |
556 | 556 |
557 InitWithNoSyncData(); | 557 InitWithNoSyncData(); |
558 EXPECT_EQ(1, num_callbacks); | 558 EXPECT_EQ(1, num_callbacks); |
559 } | 559 } |
560 | 560 |
561 } // namespace | 561 } // namespace |
562 | 562 |
563 } // namespace sync_preferences | 563 } // namespace sync_preferences |
OLD | NEW |