Index: chrome/browser/sync/profile_sync_service_preference_unittest.cc |
diff --git a/chrome/browser/sync/profile_sync_service_preference_unittest.cc b/chrome/browser/sync/profile_sync_service_preference_unittest.cc |
index 3c5dbe674983c80d00d9da1bf47ff2bbc3b5f364..6ab5f35db78e31074a2569bf1228a3c01dd12d10 100644 |
--- a/chrome/browser/sync/profile_sync_service_preference_unittest.cc |
+++ b/chrome/browser/sync/profile_sync_service_preference_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/callback.h" |
#include "base/json/json_reader.h" |
#include "base/json/json_string_value_serializer.h" |
+#include "base/json/json_writer.h" |
#include "base/location.h" |
#include "base/stl_util.h" |
#include "base/strings/string_piece.h" |
@@ -402,6 +403,162 @@ TEST_F(ProfileSyncServicePreferenceTest, ModelAssociationCloudHasData) { |
STLDeleteValues(&cloud_data); |
} |
+TEST_F(ProfileSyncServicePreferenceTest, |
+ ModelAssociationCloudHasOldMigratedData) { |
+ ASSERT_TRUE(PrefModelAssociator::IsMigratedPreference( |
+ prefs::kURLsToRestoreOnStartup)); |
+ ASSERT_TRUE(PrefModelAssociator::IsOldMigratedPreference( |
+ prefs::kURLsToRestoreOnStartupOld)); |
+ prefs_->SetString(prefs::kHomePage, example_url0_); |
+ { |
+ ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartup); |
+ ListValue* url_list = update.Get(); |
+ url_list->Append(Value::CreateStringValue(example_url0_)); |
+ url_list->Append(Value::CreateStringValue(example_url1_)); |
+ } |
+ |
+ PreferenceValues cloud_data; |
+ cloud_data[prefs::kHomePage] = Value::CreateStringValue(example_url1_); |
+ ListValue* urls_to_restore = new ListValue; |
+ urls_to_restore->Append(Value::CreateStringValue(example_url1_)); |
+ urls_to_restore->Append(Value::CreateStringValue(example_url2_)); |
+ cloud_data[prefs::kURLsToRestoreOnStartupOld] = urls_to_restore; |
+ |
+ AddPreferenceEntriesHelper helper(this, cloud_data); |
+ ASSERT_TRUE(StartSyncService(helper.callback(), false)); |
+ ASSERT_TRUE(helper.success()); |
+ |
+ scoped_ptr<const Value> value(GetSyncedValue(prefs::kHomePage)); |
+ ASSERT_TRUE(value.get()); |
+ std::string string_value; |
+ EXPECT_TRUE(value->GetAsString(&string_value)); |
+ EXPECT_EQ(example_url1_, string_value); |
+ EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage)); |
+ |
+ // Expect that the new preference data contains the merged old prefs values. |
+ scoped_ptr<ListValue> expected_urls(new ListValue); |
+ expected_urls->Append(Value::CreateStringValue(example_url1_)); |
+ expected_urls->Append(Value::CreateStringValue(example_url2_)); |
+ expected_urls->Append(Value::CreateStringValue(example_url0_)); |
+ |
+ value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup)); |
+ ASSERT_TRUE(value.get()); |
+ EXPECT_TRUE(value->Equals(expected_urls.get())); |
+ EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). |
+ Equals(expected_urls.get())); |
+ |
+ // The old preference name should also contain the merged sync data. |
+ expected_urls.reset(new ListValue); |
+ value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld)); |
+ ASSERT_TRUE(value.get()); |
+ EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). |
+ Equals(expected_urls.get())); |
+} |
+ |
+TEST_F(ProfileSyncServicePreferenceTest, |
+ ModelAssociationCloudHasNewMigratedData) { |
+ ASSERT_TRUE(PrefModelAssociator::IsMigratedPreference( |
+ prefs::kURLsToRestoreOnStartup)); |
+ ASSERT_TRUE(PrefModelAssociator::IsOldMigratedPreference( |
+ prefs::kURLsToRestoreOnStartupOld)); |
+ prefs_->SetString(prefs::kHomePage, example_url0_); |
+ { |
+ ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartupOld); |
+ ListValue* url_list = update.Get(); |
+ url_list->Append(Value::CreateStringValue(example_url0_)); |
+ url_list->Append(Value::CreateStringValue(example_url1_)); |
+ } |
+ |
+ PreferenceValues cloud_data; |
+ cloud_data[prefs::kHomePage] = Value::CreateStringValue(example_url1_); |
+ ListValue* urls_to_restore = new ListValue; |
+ urls_to_restore->Append(Value::CreateStringValue(example_url1_)); |
+ urls_to_restore->Append(Value::CreateStringValue(example_url2_)); |
+ cloud_data[prefs::kURLsToRestoreOnStartup] = urls_to_restore; |
+ |
+ AddPreferenceEntriesHelper helper(this, cloud_data); |
+ ASSERT_TRUE(StartSyncService(helper.callback(), false)); |
+ ASSERT_TRUE(helper.success()); |
+ |
+ scoped_ptr<const Value> value(GetSyncedValue(prefs::kHomePage)); |
+ ASSERT_TRUE(value.get()); |
+ std::string string_value; |
+ EXPECT_TRUE(value->GetAsString(&string_value)); |
+ EXPECT_EQ(example_url1_, string_value); |
+ EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage)); |
+ |
+ // Expect that the cloud data under the new migrated preference name sticks. |
+ scoped_ptr<ListValue> expected_urls(new ListValue); |
+ expected_urls->Append(Value::CreateStringValue(example_url1_)); |
+ expected_urls->Append(Value::CreateStringValue(example_url2_)); |
+ |
+ value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup)); |
+ ASSERT_TRUE(value.get()); |
+ EXPECT_TRUE(value->Equals(expected_urls.get())); |
+ EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). |
+ Equals(expected_urls.get())); |
+ |
+ // The old preference data should still be here, though not synced. |
+ expected_urls.reset(new ListValue); |
+ expected_urls->Append(Value::CreateStringValue(example_url0_)); |
+ expected_urls->Append(Value::CreateStringValue(example_url1_)); |
+ |
+ value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld)); |
+ ASSERT_FALSE(value.get()); |
+ EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). |
+ Equals(expected_urls.get())); |
+} |
+ |
+TEST_F(ProfileSyncServicePreferenceTest, |
+ ModelAssociationCloudAddsOldAndNewMigratedData) { |
+ ASSERT_TRUE(PrefModelAssociator::IsMigratedPreference( |
+ prefs::kURLsToRestoreOnStartup)); |
+ ASSERT_TRUE(PrefModelAssociator::IsOldMigratedPreference( |
+ prefs::kURLsToRestoreOnStartupOld)); |
+ prefs_->SetString(prefs::kHomePage, example_url0_); |
+ { |
+ ListPrefUpdate update_old(prefs_, prefs::kURLsToRestoreOnStartupOld); |
+ ListValue* url_list_old = update_old.Get(); |
+ url_list_old->Append(Value::CreateStringValue(example_url0_)); |
+ url_list_old->Append(Value::CreateStringValue(example_url1_)); |
+ ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartup); |
+ ListValue* url_list = update.Get(); |
+ url_list->Append(Value::CreateStringValue(example_url1_)); |
+ url_list->Append(Value::CreateStringValue(example_url2_)); |
+ } |
+ |
+ PreferenceValues cloud_data; |
+ cloud_data[prefs::kHomePage] = Value::CreateStringValue(example_url1_); |
+ |
+ AddPreferenceEntriesHelper helper(this, cloud_data); |
+ ASSERT_TRUE(StartSyncService(helper.callback(), false)); |
+ ASSERT_TRUE(helper.success()); |
+ |
+ scoped_ptr<const Value> value(GetSyncedValue(prefs::kHomePage)); |
+ ASSERT_TRUE(value.get()); |
+ std::string string_value; |
+ EXPECT_TRUE(value->GetAsString(&string_value)); |
+ EXPECT_EQ(example_url1_, string_value); |
+ EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage)); |
+ |
+ // Expect that the cloud data under the new migrated preference name sticks. |
+ scoped_ptr<ListValue> expected_urls(new ListValue); |
+ expected_urls->Append(Value::CreateStringValue(example_url1_)); |
+ expected_urls->Append(Value::CreateStringValue(example_url2_)); |
+ |
+ value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup)); |
+ ASSERT_TRUE(value.get()); |
+ EXPECT_TRUE(value->Equals(expected_urls.get())); |
+ EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). |
+ Equals(expected_urls.get())); |
+ |
+ // Should not have synced in the old startup url values. |
+ value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld)); |
+ ASSERT_FALSE(value.get()); |
+ EXPECT_FALSE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld). |
+ Equals(expected_urls.get())); |
+} |
+ |
TEST_F(ProfileSyncServicePreferenceTest, FailModelAssociation) { |
ASSERT_TRUE(StartSyncService(base::Closure(), true)); |
EXPECT_TRUE(sync_service_->HasUnrecoverableError()); |