| 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 "chrome/browser/prefs/pref_service_syncable.h" | 5 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 6 | 6 |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/json/json_string_value_serializer.h" | 8 #include "base/json/json_string_value_serializer.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 void SetUp() override { | 78 void SetUp() override { |
| 79 prefs_.registry()->RegisterStringPref(kUnsyncedPreferenceName, | 79 prefs_.registry()->RegisterStringPref(kUnsyncedPreferenceName, |
| 80 kUnsyncedPreferenceDefaultValue); | 80 kUnsyncedPreferenceDefaultValue); |
| 81 prefs_.registry()->RegisterStringPref( | 81 prefs_.registry()->RegisterStringPref( |
| 82 prefs::kHomePage, | 82 prefs::kHomePage, |
| 83 std::string(), | 83 std::string(), |
| 84 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 84 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 85 prefs_.registry()->RegisterListPref( | 85 prefs_.registry()->RegisterListPref( |
| 86 prefs::kURLsToRestoreOnStartup, | 86 prefs::kURLsToRestoreOnStartup, |
| 87 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 87 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 88 prefs_.registry()->RegisterListPref(prefs::kURLsToRestoreOnStartupOld); | |
| 89 prefs_.registry()->RegisterStringPref( | 88 prefs_.registry()->RegisterStringPref( |
| 90 prefs::kDefaultCharset, | 89 prefs::kDefaultCharset, |
| 91 l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING), | 90 l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING), |
| 92 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 91 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 93 | 92 |
| 94 pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>( | 93 pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>( |
| 95 prefs_.GetSyncableService(syncer::PREFERENCES)); | 94 prefs_.GetSyncableService(syncer::PREFERENCES)); |
| 96 ASSERT_TRUE(pref_sync_service_); | 95 ASSERT_TRUE(pref_sync_service_); |
| 97 next_pref_remote_sync_node_id_ = 0; | 96 next_pref_remote_sync_node_id_ = 0; |
| 98 } | 97 } |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 scoped_ptr<base::Value> value( | 286 scoped_ptr<base::Value> value( |
| 288 FindValue(prefs::kURLsToRestoreOnStartup, out)); | 287 FindValue(prefs::kURLsToRestoreOnStartup, out)); |
| 289 ASSERT_TRUE(value.get()); | 288 ASSERT_TRUE(value.get()); |
| 290 EXPECT_TRUE(value->Equals(expected_urls.get())); | 289 EXPECT_TRUE(value->Equals(expected_urls.get())); |
| 291 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). | 290 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). |
| 292 Equals(expected_urls.get())); | 291 Equals(expected_urls.get())); |
| 293 EXPECT_EQ(kNonDefaultCharsetValue, | 292 EXPECT_EQ(kNonDefaultCharsetValue, |
| 294 prefs_.GetString(prefs::kDefaultCharset)); | 293 prefs_.GetString(prefs::kDefaultCharset)); |
| 295 } | 294 } |
| 296 | 295 |
| 297 TEST_F(PrefServiceSyncableTest, ModelAssociationMigrateOldData) { | |
| 298 ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup)); | |
| 299 ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld)); | |
| 300 | |
| 301 syncer::SyncDataList in; | |
| 302 syncer::SyncChangeList out; | |
| 303 base::ListValue urls_to_restore; | |
| 304 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); | |
| 305 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); | |
| 306 AddToRemoteDataList(prefs::kURLsToRestoreOnStartupOld, urls_to_restore, | |
| 307 &in); | |
| 308 InitWithSyncDataTakeOutput(in, &out); | |
| 309 | |
| 310 // Expect that the new preference data contains the old pref's values. | |
| 311 scoped_ptr<base::ListValue> expected_urls(new base::ListValue); | |
| 312 expected_urls->Append(new base::StringValue(kExampleUrl1)); | |
| 313 expected_urls->Append(new base::StringValue(kExampleUrl2)); | |
| 314 | |
| 315 ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup)); | |
| 316 scoped_ptr<base::Value> value( | |
| 317 FindValue(prefs::kURLsToRestoreOnStartup, out)); | |
| 318 ASSERT_TRUE(value.get()); | |
| 319 EXPECT_TRUE(value->Equals(expected_urls.get())); | |
| 320 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). | |
| 321 Equals(expected_urls.get())); | |
| 322 | |
| 323 // The old preference value should be the same. | |
| 324 expected_urls.reset(new base::ListValue); | |
| 325 ASSERT_FALSE(FindValue(prefs::kURLsToRestoreOnStartupOld, out).get()); | |
| 326 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). | |
| 327 Equals(expected_urls.get())); | |
| 328 } | |
| 329 | |
| 330 TEST_F(PrefServiceSyncableTest, ModelAssociationCloudHasOldMigratedData) { | |
| 331 ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup)); | |
| 332 ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld)); | |
| 333 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | |
| 334 { | |
| 335 ListPrefUpdate update(GetPrefs(), prefs::kURLsToRestoreOnStartup); | |
| 336 base::ListValue* url_list = update.Get(); | |
| 337 url_list->Append(new base::StringValue(kExampleUrl0)); | |
| 338 url_list->Append(new base::StringValue(kExampleUrl1)); | |
| 339 } | |
| 340 | |
| 341 syncer::SyncDataList in; | |
| 342 syncer::SyncChangeList out; | |
| 343 base::ListValue urls_to_restore; | |
| 344 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); | |
| 345 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); | |
| 346 AddToRemoteDataList(prefs::kURLsToRestoreOnStartupOld, urls_to_restore, &in); | |
| 347 AddToRemoteDataList(prefs::kHomePage, base::StringValue(kExampleUrl1), &in); | |
| 348 InitWithSyncDataTakeOutput(in, &out); | |
| 349 | |
| 350 ASSERT_FALSE(FindValue(prefs::kHomePage, out).get()); | |
| 351 | |
| 352 // Expect that the new preference data contains the merged old prefs values. | |
| 353 scoped_ptr<base::ListValue> expected_urls(new base::ListValue); | |
| 354 expected_urls->Append(new base::StringValue(kExampleUrl1)); | |
| 355 expected_urls->Append(new base::StringValue(kExampleUrl2)); | |
| 356 expected_urls->Append(new base::StringValue(kExampleUrl0)); | |
| 357 | |
| 358 ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup)); | |
| 359 scoped_ptr<base::Value> value( | |
| 360 FindValue(prefs::kURLsToRestoreOnStartup, out)); | |
| 361 ASSERT_TRUE(value.get()); | |
| 362 EXPECT_TRUE(value->Equals(expected_urls.get())); | |
| 363 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). | |
| 364 Equals(expected_urls.get())); | |
| 365 | |
| 366 expected_urls.reset(new base::ListValue); | |
| 367 value = FindValue(prefs::kURLsToRestoreOnStartupOld, out).Pass(); | |
| 368 ASSERT_TRUE(value.get()); | |
| 369 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). | |
| 370 Equals(expected_urls.get())); | |
| 371 } | |
| 372 | |
| 373 TEST_F(PrefServiceSyncableTest, ModelAssociationCloudHasNewMigratedData) { | |
| 374 ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup)); | |
| 375 ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld)); | |
| 376 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | |
| 377 { | |
| 378 ListPrefUpdate update(GetPrefs(), prefs::kURLsToRestoreOnStartupOld); | |
| 379 base::ListValue* url_list = update.Get(); | |
| 380 url_list->Append(new base::StringValue(kExampleUrl0)); | |
| 381 url_list->Append(new base::StringValue(kExampleUrl1)); | |
| 382 } | |
| 383 | |
| 384 syncer::SyncDataList in; | |
| 385 syncer::SyncChangeList out; | |
| 386 base::ListValue urls_to_restore; | |
| 387 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); | |
| 388 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); | |
| 389 AddToRemoteDataList(prefs::kURLsToRestoreOnStartupOld, urls_to_restore, &in); | |
| 390 AddToRemoteDataList(prefs::kHomePage, base::StringValue(kExampleUrl1), &in); | |
| 391 InitWithSyncDataTakeOutput(in, &out); | |
| 392 | |
| 393 scoped_ptr<base::Value> value(FindValue(prefs::kHomePage, out)); | |
| 394 ASSERT_FALSE(value.get()); | |
| 395 | |
| 396 // Expect that the cloud data under the new migrated preference name sticks. | |
| 397 scoped_ptr<base::ListValue> expected_urls(new base::ListValue); | |
| 398 expected_urls->Append(new base::StringValue(kExampleUrl1)); | |
| 399 expected_urls->Append(new base::StringValue(kExampleUrl2)); | |
| 400 | |
| 401 ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup)); | |
| 402 value = FindValue(prefs::kURLsToRestoreOnStartup, out).Pass(); | |
| 403 ASSERT_TRUE(value.get()); | |
| 404 EXPECT_TRUE(value->Equals(expected_urls.get())); | |
| 405 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). | |
| 406 Equals(expected_urls.get())); | |
| 407 | |
| 408 // The old preference data should still be here, though not synced. | |
| 409 expected_urls.reset(new base::ListValue); | |
| 410 expected_urls->Append(new base::StringValue(kExampleUrl0)); | |
| 411 expected_urls->Append(new base::StringValue(kExampleUrl1)); | |
| 412 | |
| 413 value = FindValue(prefs::kURLsToRestoreOnStartupOld, out).Pass(); | |
| 414 ASSERT_FALSE(value.get()); | |
| 415 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). | |
| 416 Equals(expected_urls.get())); | |
| 417 } | |
| 418 | |
| 419 TEST_F(PrefServiceSyncableTest, | |
| 420 ModelAssociationCloudAddsOldAndNewMigratedData) { | |
| 421 ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup)); | |
| 422 ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld)); | |
| 423 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | |
| 424 { | |
| 425 ListPrefUpdate update_old(GetPrefs(), prefs::kURLsToRestoreOnStartupOld); | |
| 426 base::ListValue* url_list_old = update_old.Get(); | |
| 427 url_list_old->Append(new base::StringValue(kExampleUrl0)); | |
| 428 url_list_old->Append(new base::StringValue(kExampleUrl1)); | |
| 429 ListPrefUpdate update(GetPrefs(), prefs::kURLsToRestoreOnStartup); | |
| 430 base::ListValue* url_list = update.Get(); | |
| 431 url_list->Append(new base::StringValue(kExampleUrl1)); | |
| 432 url_list->Append(new base::StringValue(kExampleUrl2)); | |
| 433 } | |
| 434 | |
| 435 syncer::SyncDataList in; | |
| 436 syncer::SyncChangeList out; | |
| 437 AddToRemoteDataList(prefs::kHomePage, base::StringValue(kExampleUrl1), &in); | |
| 438 InitWithSyncDataTakeOutput(in, &out); | |
| 439 | |
| 440 scoped_ptr<base::Value> value(FindValue(prefs::kHomePage, out)); | |
| 441 ASSERT_FALSE(value.get()); | |
| 442 | |
| 443 // Expect that the cloud data under the new migrated preference name sticks. | |
| 444 scoped_ptr<base::ListValue> expected_urls(new base::ListValue); | |
| 445 expected_urls->Append(new base::StringValue(kExampleUrl1)); | |
| 446 expected_urls->Append(new base::StringValue(kExampleUrl2)); | |
| 447 | |
| 448 ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup)); | |
| 449 value = FindValue(prefs::kURLsToRestoreOnStartup, out).Pass(); | |
| 450 ASSERT_TRUE(value.get()); | |
| 451 EXPECT_TRUE(value->Equals(expected_urls.get())); | |
| 452 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). | |
| 453 Equals(expected_urls.get())); | |
| 454 | |
| 455 // Should not have synced in the old startup url values. | |
| 456 value = FindValue(prefs::kURLsToRestoreOnStartupOld, out).Pass(); | |
| 457 ASSERT_FALSE(value.get()); | |
| 458 EXPECT_FALSE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). | |
| 459 Equals(expected_urls.get())); | |
| 460 } | |
| 461 | |
| 462 TEST_F(PrefServiceSyncableTest, FailModelAssociation) { | 296 TEST_F(PrefServiceSyncableTest, FailModelAssociation) { |
| 463 syncer::SyncChangeList output; | 297 syncer::SyncChangeList output; |
| 464 TestSyncProcessorStub* stub = new TestSyncProcessorStub(&output); | 298 TestSyncProcessorStub* stub = new TestSyncProcessorStub(&output); |
| 465 stub->FailNextProcessSyncChanges(); | 299 stub->FailNextProcessSyncChanges(); |
| 466 syncer::SyncMergeResult r = pref_sync_service_->MergeDataAndStartSyncing( | 300 syncer::SyncMergeResult r = pref_sync_service_->MergeDataAndStartSyncing( |
| 467 syncer::PREFERENCES, syncer::SyncDataList(), | 301 syncer::PREFERENCES, syncer::SyncDataList(), |
| 468 scoped_ptr<syncer::SyncChangeProcessor>(stub), | 302 scoped_ptr<syncer::SyncChangeProcessor>(stub), |
| 469 scoped_ptr<syncer::SyncErrorFactory>( | 303 scoped_ptr<syncer::SyncErrorFactory>( |
| 470 new syncer::SyncErrorFactoryMock())); | 304 new syncer::SyncErrorFactoryMock())); |
| 471 EXPECT_TRUE(r.error().IsSet()); | 305 EXPECT_TRUE(r.error().IsSet()); |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 | 543 |
| 710 InitWithNoSyncData(); | 544 InitWithNoSyncData(); |
| 711 | 545 |
| 712 scoped_ptr<base::Value> null_value = base::Value::CreateNullValue(); | 546 scoped_ptr<base::Value> null_value = base::Value::CreateNullValue(); |
| 713 syncer::SyncChangeList list; | 547 syncer::SyncChangeList list; |
| 714 list.push_back(MakeRemoteChange( | 548 list.push_back(MakeRemoteChange( |
| 715 1, prefs::kHomePage, *null_value, SyncChange::ACTION_DELETE)); | 549 1, prefs::kHomePage, *null_value, SyncChange::ACTION_DELETE)); |
| 716 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 550 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 717 EXPECT_TRUE(pref->IsDefaultValue()); | 551 EXPECT_TRUE(pref->IsDefaultValue()); |
| 718 } | 552 } |
| OLD | NEW |