Index: chrome/browser/search_engines/template_url_service_sync_unittest.cc |
diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc |
index 1b0332a879135cdf10f9a317e953002359eb4420..d307aa4d5596b5509ecf730a0d0272b39261557c 100644 |
--- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc |
+++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc |
@@ -230,6 +230,7 @@ TemplateURLServiceSyncTest::TemplateURLServiceSyncTest() |
sync_processor_.get())) {} |
void TemplateURLServiceSyncTest::SetUp() { |
+ TemplateURLService::DisableFallbackSearchEngines(); |
test_util_a_.SetUp(); |
// Use ChangeToLoadState() instead of VerifyLoad() so we don't actually pull |
// in the prepopulate data, which the sync tests don't care about (and would |
@@ -1444,288 +1445,6 @@ TEST_F(TemplateURLServiceSyncTest, MergeTwiceWithSameSyncData) { |
AssertEquals(*updated_turl, *reupdated_turl); |
} |
-TEST_F(TemplateURLServiceSyncTest, SyncedDefaultGUIDArrivesFirst) { |
- syncer::SyncDataList initial_data = CreateInitialSyncData(); |
- // The default search provider should support replacement. |
- scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key2"), |
- "http://key2.com/{searchTerms}", "key2", 90)); |
- initial_data[1] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); |
- model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
- PassProcessor(), CreateAndPassSyncErrorFactory()); |
- model()->SetUserSelectedDefaultSearchProvider( |
- model()->GetTemplateURLForGUID("key2")); |
- |
- EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- const TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
- ASSERT_TRUE(default_search); |
- |
- // Change kSyncedDefaultSearchProviderGUID to a GUID that does not exist in |
- // the model yet. Ensure that the default has not changed in any way. |
- profile_a()->GetTestingPrefService()->SetString( |
- prefs::kSyncedDefaultSearchProviderGUID, "newdefault"); |
- |
- ASSERT_EQ(default_search, model()->GetDefaultSearchProvider()); |
- |
- // Bring in a random new search engine with a different GUID. Ensure that |
- // it doesn't change the default. |
- syncer::SyncChangeList changes1; |
- changes1.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
- CreateTestTemplateURL(ASCIIToUTF16("random"), "http://random.com", |
- "random"))); |
- model()->ProcessSyncChanges(FROM_HERE, changes1); |
- |
- EXPECT_EQ(4U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- ASSERT_EQ(default_search, model()->GetDefaultSearchProvider()); |
- |
- // Finally, bring in the expected entry with the right GUID. Ensure that |
- // the default has changed to the new search engine. |
- syncer::SyncChangeList changes2; |
- changes2.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
- CreateTestTemplateURL(ASCIIToUTF16("new"), "http://new.com/{searchTerms}", |
- "newdefault"))); |
- model()->ProcessSyncChanges(FROM_HERE, changes2); |
- |
- EXPECT_EQ(5U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- ASSERT_NE(default_search, model()->GetDefaultSearchProvider()); |
- ASSERT_EQ("newdefault", model()->GetDefaultSearchProvider()->sync_guid()); |
-} |
- |
-TEST_F(TemplateURLServiceSyncTest, DefaultGuidDeletedBeforeNewDSPArrives) { |
- syncer::SyncDataList initial_data; |
- // The default search provider should support replacement. |
- scoped_ptr<TemplateURL> turl1(CreateTestTemplateURL(ASCIIToUTF16("key1"), |
- "http://key1.com/{searchTerms}", "key1", 90)); |
- // Create a second default search provider for the |
- // FindNewDefaultSearchProvider method to find. |
- TemplateURLData data; |
- data.short_name = ASCIIToUTF16("unittest"); |
- data.SetKeyword(ASCIIToUTF16("key2")); |
- data.SetURL("http://key2.com/{searchTerms}"); |
- data.favicon_url = GURL("http://favicon.url"); |
- data.safe_for_autoreplace = false; |
- data.date_created = Time::FromTimeT(100); |
- data.last_modified = Time::FromTimeT(100); |
- data.created_by_policy = false; |
- data.prepopulate_id = 999999; |
- data.sync_guid = "key2"; |
- data.show_in_default_list = true; |
- scoped_ptr<TemplateURL> turl2(new TemplateURL(NULL, data)); |
- initial_data.push_back(TemplateURLService::CreateSyncDataFromTemplateURL( |
- *turl1)); |
- initial_data.push_back(TemplateURLService::CreateSyncDataFromTemplateURL( |
- *turl2)); |
- model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
- PassProcessor(), CreateAndPassSyncErrorFactory()); |
- model()->SetUserSelectedDefaultSearchProvider( |
- model()->GetTemplateURLForGUID("key1")); |
- ASSERT_EQ("key1", model()->GetDefaultSearchProvider()->sync_guid()); |
- |
- EXPECT_EQ(2U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- const TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
- ASSERT_TRUE(default_search); |
- |
- // Change kSyncedDefaultSearchProviderGUID to a GUID that does not exist in |
- // the model yet. Ensure that the default has not changed in any way. |
- profile_a()->GetTestingPrefService()->SetString( |
- prefs::kSyncedDefaultSearchProviderGUID, "newdefault"); |
- |
- ASSERT_EQ("key1", model()->GetDefaultSearchProvider()->sync_guid()); |
- EXPECT_EQ("newdefault", profile_a()->GetTestingPrefService()->GetString( |
- prefs::kSyncedDefaultSearchProviderGUID)); |
- |
- // Simulate a situation where an ACTION_DELETE on the default arrives before |
- // the new default search provider entry. This should fail to delete the |
- // target entry, and instead send up an "undelete" to the server, after |
- // further uniquifying the keyword to avoid infinite sync loops. The synced |
- // default GUID should not be changed so that when the expected default entry |
- // arrives, it can still be set as the default. |
- syncer::SyncChangeList changes1; |
- changes1.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_DELETE, |
- turl1.release())); |
- model()->ProcessSyncChanges(FROM_HERE, changes1); |
- |
- EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1_"))); |
- EXPECT_EQ(2U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- EXPECT_EQ("key1", model()->GetDefaultSearchProvider()->sync_guid()); |
- EXPECT_EQ("newdefault", profile_a()->GetTestingPrefService()->GetString( |
- prefs::kSyncedDefaultSearchProviderGUID)); |
- syncer::SyncChange undelete = processor()->change_for_guid("key1"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, undelete.change_type()); |
- EXPECT_EQ("key1_", |
- undelete.sync_data().GetSpecifics().search_engine().keyword()); |
- |
- // Finally, bring in the expected entry with the right GUID. Ensure that |
- // the default has changed to the new search engine. |
- syncer::SyncChangeList changes2; |
- changes2.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
- CreateTestTemplateURL(ASCIIToUTF16("new"), "http://new.com/{searchTerms}", |
- "newdefault"))); |
- model()->ProcessSyncChanges(FROM_HERE, changes2); |
- |
- EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- EXPECT_EQ("newdefault", model()->GetDefaultSearchProvider()->sync_guid()); |
- EXPECT_EQ("newdefault", profile_a()->GetTestingPrefService()->GetString( |
- prefs::kSyncedDefaultSearchProviderGUID)); |
-} |
- |
-TEST_F(TemplateURLServiceSyncTest, SyncedDefaultArrivesAfterStartup) { |
- // Start with the default set to something in the model before we start |
- // syncing. |
- model()->Add(CreateTestTemplateURL(ASCIIToUTF16("what"), |
- "http://thewhat.com/{searchTerms}", |
- "initdefault")); |
- model()->SetUserSelectedDefaultSearchProvider( |
- model()->GetTemplateURLForGUID("initdefault")); |
- |
- const TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
- ASSERT_TRUE(default_search); |
- |
- // Set kSyncedDefaultSearchProviderGUID to something that is not yet in |
- // the model but is expected in the initial sync. Ensure that this doesn't |
- // change our default since we're not quite syncing yet. |
- profile_a()->GetTestingPrefService()->SetString( |
- prefs::kSyncedDefaultSearchProviderGUID, "key2"); |
- |
- EXPECT_EQ(default_search, model()->GetDefaultSearchProvider()); |
- |
- // Now sync the initial data, which will include the search engine entry |
- // destined to become the new default. |
- syncer::SyncDataList initial_data = CreateInitialSyncData(); |
- // The default search provider should support replacement. |
- scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key2"), |
- "http://key2.com/{searchTerms}", "key2", 90)); |
- initial_data[1] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); |
- |
- model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
- PassProcessor(), CreateAndPassSyncErrorFactory()); |
- |
- // Ensure that the new default has been set. |
- EXPECT_EQ(4U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- ASSERT_NE(default_search, model()->GetDefaultSearchProvider()); |
- ASSERT_EQ("key2", model()->GetDefaultSearchProvider()->sync_guid()); |
-} |
- |
-TEST_F(TemplateURLServiceSyncTest, SyncedDefaultAlreadySetOnStartup) { |
- // Start with the default set to something in the model before we start |
- // syncing. |
- const char kGUID[] = "initdefault"; |
- model()->Add(CreateTestTemplateURL(ASCIIToUTF16("what"), |
- "http://thewhat.com/{searchTerms}", |
- kGUID)); |
- model()->SetUserSelectedDefaultSearchProvider( |
- model()->GetTemplateURLForGUID(kGUID)); |
- |
- const TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
- ASSERT_TRUE(default_search); |
- |
- // Set kSyncedDefaultSearchProviderGUID to the current default. |
- profile_a()->GetTestingPrefService()->SetString( |
- prefs::kSyncedDefaultSearchProviderGUID, kGUID); |
- |
- EXPECT_EQ(default_search, model()->GetDefaultSearchProvider()); |
- |
- // Now sync the initial data. |
- syncer::SyncDataList initial_data = CreateInitialSyncData(); |
- model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
- PassProcessor(), CreateAndPassSyncErrorFactory()); |
- |
- // Ensure that the new entries were added and the default has not changed. |
- EXPECT_EQ(4U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- ASSERT_EQ(default_search, model()->GetDefaultSearchProvider()); |
-} |
- |
-TEST_F(TemplateURLServiceSyncTest, NewDefaultIsAlreadySynced) { |
- // Ensure that if the synced DSP pref changed to another synced entry (as |
- // opposed to coming in as a new entry), it gets reset correctly. |
- // Start by setting kSyncedDefaultSearchProviderGUID to the entry that should |
- // end up as the default. Note that this must be done before the initial |
- // entries are added as otherwise this call will set the DSP immediately. |
- profile_a()->GetTestingPrefService()->SetString( |
- prefs::kSyncedDefaultSearchProviderGUID, "key2"); |
- |
- syncer::SyncDataList initial_data = CreateInitialSyncData(); |
- // Ensure that our candidate default supports replacement. |
- scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key2"), |
- "http://key2.com/{searchTerms}", "key2", 90)); |
- initial_data[1] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); |
- for (syncer::SyncDataList::const_iterator iter = initial_data.begin(); |
- iter != initial_data.end(); ++iter) { |
- TemplateURL* converted = Deserialize(*iter); |
- model()->Add(converted); |
- } |
- |
- // Set the initial default to something other than the desired default. |
- model()->SetUserSelectedDefaultSearchProvider( |
- model()->GetTemplateURLForGUID("key1")); |
- |
- // Merge in the same data (i.e. already synced entries). |
- model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
- PassProcessor(), CreateAndPassSyncErrorFactory()); |
- |
- EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- TemplateURL* current_default = model()->GetDefaultSearchProvider(); |
- ASSERT_TRUE(current_default); |
- EXPECT_EQ("key2", current_default->sync_guid()); |
- EXPECT_EQ(ASCIIToUTF16("key2"), current_default->keyword()); |
-} |
- |
-TEST_F(TemplateURLServiceSyncTest, SyncWithManagedDefaultSearch) { |
- // First start off with a few entries and make sure we can set an unmanaged |
- // default search provider. |
- syncer::SyncDataList initial_data = CreateInitialSyncData(); |
- model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
- PassProcessor(), CreateAndPassSyncErrorFactory()); |
- model()->SetUserSelectedDefaultSearchProvider( |
- model()->GetTemplateURLForGUID("key2")); |
- |
- EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- ASSERT_FALSE(model()->is_default_search_managed()); |
- ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
- |
- // Change the default search provider to a managed one. |
- const char kName[] = "manageddefault"; |
- const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; |
- const char kIconURL[] = "http://manageddefault.com/icon.jpg"; |
- const char kEncodings[] = "UTF-16;UTF-32"; |
- const char kAlternateURL[] = |
- "http://manageddefault.com/search#t={searchTerms}"; |
- const char kSearchTermsReplacementKey[] = "espv"; |
- test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName, |
- kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, |
- kSearchTermsReplacementKey); |
- const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); |
- |
- EXPECT_TRUE(model()->is_default_search_managed()); |
- |
- // Add a new entry from Sync. It should still sync in despite the default |
- // being managed. |
- syncer::SyncChangeList changes; |
- changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
- CreateTestTemplateURL(ASCIIToUTF16("newkeyword"), |
- "http://new.com/{searchTerms}", |
- "newdefault"))); |
- model()->ProcessSyncChanges(FROM_HERE, changes); |
- |
- EXPECT_EQ(4U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
- |
- // Change kSyncedDefaultSearchProviderGUID to point to the new entry and |
- // ensure that the DSP remains managed. |
- profile_a()->GetTestingPrefService()->SetString( |
- prefs::kSyncedDefaultSearchProviderGUID, |
- "newdefault"); |
- |
- EXPECT_EQ(dsp_turl, model()->GetDefaultSearchProvider()); |
- EXPECT_TRUE(model()->is_default_search_managed()); |
- |
- // Go unmanaged. Ensure that the DSP changes to the expected pending entry |
- // from Sync. |
- const TemplateURL* expected_default = |
- model()->GetTemplateURLForGUID("newdefault"); |
- test_util_a_.RemoveManagedDefaultSearchPreferences(); |
- |
- EXPECT_EQ(expected_default, model()->GetDefaultSearchProvider()); |
-} |
- |
TEST_F(TemplateURLServiceSyncTest, SyncMergeDeletesDefault) { |
// If the value from Sync is a duplicate of the local default and is newer, it |
// should safely replace the local value and set as the new default. |
@@ -1881,9 +1600,9 @@ TEST_F(TemplateURLServiceSyncTest, PreSyncUpdates) { |
// updated time. |
TemplateURL* added_turl = model()->GetTemplateURLForKeyword( |
ASCIIToUTF16(kNewKeyword)); |
+ ASSERT_TRUE(added_turl); |
base::Time new_timestamp = added_turl->last_modified(); |
EXPECT_GE(new_timestamp, pre_merge_time); |
- ASSERT_TRUE(added_turl); |
std::string sync_guid = added_turl->sync_guid(); |
// Bring down a copy of the prepopulate engine from Sync with the old values, |
@@ -2249,3 +1968,25 @@ TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) { |
EXPECT_EQ(default_turl->short_name, result_turl->short_name()); |
EXPECT_EQ(default_turl->url(), result_turl->url()); |
} |
+ |
+TEST_F(TemplateURLServiceSyncTest, GUIDUpdatedOnDefaultSearchChange) { |
+ const char kGUID[] = "initdefault"; |
+ model()->Add(CreateTestTemplateURL(ASCIIToUTF16("what"), |
+ "http://thewhat.com/{searchTerms}", |
+ kGUID)); |
+ model()->SetUserSelectedDefaultSearchProvider( |
+ model()->GetTemplateURLForGUID(kGUID)); |
+ |
+ const TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
+ ASSERT_TRUE(default_search); |
+ |
+ const char kNewGUID[] = "newdefault"; |
+ model()->Add(CreateTestTemplateURL(ASCIIToUTF16("what"), |
+ "http://thewhat.com/{searchTerms}", |
+ kNewGUID)); |
+ model()->SetUserSelectedDefaultSearchProvider( |
+ model()->GetTemplateURLForGUID(kNewGUID)); |
+ |
+ EXPECT_EQ(kNewGUID, profile_a()->GetTestingPrefService()->GetString( |
+ prefs::kSyncedDefaultSearchProviderGUID)); |
+} |