| 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 ca3904c163a4ecf0693fb2a13a0ef0769f64f318..9d3e4ad1b80b150ae3a30f3d48d6d0e7e0acc3ed 100644
|
| --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc
|
| +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
|
| @@ -60,9 +60,10 @@ std::string GetKeyword(const syncer::SyncData& sync_data) {
|
| // order to create custom data that should be handled specially when synced to a
|
| // client.
|
| syncer::SyncData CreateCustomSyncData(const TemplateURL& turl,
|
| - bool autogenerate_keyword,
|
| - const std::string& url,
|
| - const std::string& sync_guid) {
|
| + bool autogenerate_keyword,
|
| + const std::string& url,
|
| + const std::string& sync_guid,
|
| + int prepopulate_id = -1) {
|
| sync_pb::EntitySpecifics specifics;
|
| sync_pb::SearchEngineSpecifics* se_specifics =
|
| specifics.mutable_search_engine();
|
| @@ -78,7 +79,8 @@ syncer::SyncData CreateCustomSyncData(const TemplateURL& turl,
|
| base::JoinString(turl.input_encodings(), ";"));
|
| se_specifics->set_show_in_default_list(turl.show_in_default_list());
|
| se_specifics->set_suggestions_url(turl.suggestions_url());
|
| - se_specifics->set_prepopulate_id(turl.prepopulate_id());
|
| + se_specifics->set_prepopulate_id(prepopulate_id == -1 ? turl.prepopulate_id()
|
| + : prepopulate_id);
|
| se_specifics->set_autogenerate_keyword(autogenerate_keyword);
|
| se_specifics->set_instant_url(turl.instant_url());
|
| se_specifics->set_last_modified(turl.last_modified().ToInternalValue());
|
| @@ -209,7 +211,8 @@ class TemplateURLServiceSyncTest : public testing::Test {
|
| const std::string& guid = std::string(),
|
| time_t last_mod = 100,
|
| bool safe_for_autoreplace = false,
|
| - bool created_by_policy = false) const;
|
| + bool created_by_policy = false,
|
| + int prepopulate_id = 999999) const;
|
|
|
| // Verifies the two TemplateURLs are equal.
|
| // TODO(stevet): Share this with TemplateURLServiceTest.
|
| @@ -296,7 +299,8 @@ TemplateURL* TemplateURLServiceSyncTest::CreateTestTemplateURL(
|
| const std::string& guid,
|
| time_t last_mod,
|
| bool safe_for_autoreplace,
|
| - bool created_by_policy) const {
|
| + bool created_by_policy,
|
| + int prepopulate_id) const {
|
| TemplateURLData data;
|
| data.SetShortName(ASCIIToUTF16("unittest"));
|
| data.SetKeyword(keyword);
|
| @@ -306,7 +310,7 @@ TemplateURL* TemplateURLServiceSyncTest::CreateTestTemplateURL(
|
| data.date_created = Time::FromTimeT(100);
|
| data.last_modified = Time::FromTimeT(last_mod);
|
| data.created_by_policy = created_by_policy;
|
| - data.prepopulate_id = 999999;
|
| + data.prepopulate_id = prepopulate_id;
|
| if (!guid.empty())
|
| data.sync_guid = guid;
|
| return new TemplateURL(data);
|
| @@ -531,7 +535,7 @@ TEST_F(TemplateURLServiceSyncTest, IsLocalTemplateURLBetter) {
|
| CreateTestTemplateURL(ASCIIToUTF16("synckey"), "www.sync.com",
|
| "syncguid", test_cases[i].sync_time));
|
| EXPECT_EQ(test_cases[i].expected_result,
|
| - model()->IsLocalTemplateURLBetter(local_turl, sync_turl.get()));
|
| + model()->IsLocalTemplateURLBetter(local_turl, sync_turl.get()));
|
|
|
| // Undo the changes.
|
| if (test_cases[i].local_is_default)
|
| @@ -854,13 +858,15 @@ TEST_F(TemplateURLServiceSyncTest, MergeAddFromNewerSyncData) {
|
| // from Sync are newer. Set up the local data so that one is a dupe, one has a
|
| // conflicting keyword, and the last has no conflicts (a clean ADD).
|
| model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com",
|
| - "aaa", 10)); // dupe
|
| + "aaa", 10, false, false, 111)); // dupe
|
|
|
| model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key2"),
|
| - "http://expected.com", "bbb", 10)); // keyword conflict
|
| + "http://expected.com", "bbb", 10, false,
|
| + false, 112)); // keyword conflict
|
|
|
| model()->Add(CreateTestTemplateURL(ASCIIToUTF16("unique"),
|
| - "http://unique.com", "ccc", 10)); // add
|
| + "http://unique.com", "ccc", 10, false,
|
| + false, 113)); // add
|
|
|
| syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
|
| syncer::SEARCH_ENGINES,
|
| @@ -1142,7 +1148,7 @@ TEST_F(TemplateURLServiceSyncTest, AutogeneratedKeywordMigrated) {
|
| turl.reset(CreateTestTemplateURL(ASCIIToUTF16("key2"),
|
| "{google:baseURL}search?q={searchTerms}", "key2"));
|
| initial_data.push_back(
|
| - CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid()));
|
| + CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid(), 99));
|
|
|
| // Now try to sync the data locally.
|
| model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data,
|
| @@ -2221,6 +2227,70 @@ TEST_F(TemplateURLServiceSyncTest, MergeEditedPrepopulatedEngine) {
|
| EXPECT_EQ(default_turl->url(), result_turl->url());
|
| }
|
|
|
| +TEST_F(TemplateURLServiceSyncTest, MergeConflictingPrepopulatedEngine) {
|
| + std::unique_ptr<TemplateURLData> default_turl(
|
| + TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(nullptr));
|
| +
|
| + TemplateURLData data(*default_turl);
|
| + data.SetKeyword(ASCIIToUTF16("old_kw"));
|
| + data.SetShortName(ASCIIToUTF16("my name"));
|
| + data.SetURL("http://wrong.url.com?q={searchTerms}");
|
| + data.safe_for_autoreplace = true;
|
| + data.date_created = Time::FromTimeT(50);
|
| + data.last_modified = Time::FromTimeT(50);
|
| + data.prepopulate_id = 1;
|
| + data.sync_guid = "default";
|
| + model()->Add(new TemplateURL(data));
|
| +
|
| + TemplateURLData new_data(*default_turl);
|
| + new_data.SetKeyword(ASCIIToUTF16("new_kw"));
|
| + new_data.SetShortName(ASCIIToUTF16("my name"));
|
| + new_data.SetURL("http://wrong.url.com?q={searchTerms}");
|
| + new_data.safe_for_autoreplace = false;
|
| + new_data.date_created = Time::FromTimeT(100);
|
| + new_data.last_modified = Time::FromTimeT(100);
|
| + new_data.prepopulate_id = 1;
|
| + new_data.sync_guid = "different_guid";
|
| +
|
| + // Test that a remote TemplateURL can override a local TemplateURL not yet
|
| + // known to sync.
|
| + std::unique_ptr<TemplateURL> sync_turl =
|
| + base::MakeUnique<TemplateURL>(new_data);
|
| + syncer::SyncDataList list;
|
| + list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl));
|
| + syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
|
| + syncer::SEARCH_ENGINES, list, PassProcessor(),
|
| + CreateAndPassSyncErrorFactory());
|
| +
|
| + TemplateURL* result_turl = model()->GetTemplateURLForGUID("different_guid");
|
| + EXPECT_TRUE(result_turl);
|
| + EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword());
|
| + EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name());
|
| + EXPECT_EQ(default_turl->url(), result_turl->url());
|
| +
|
| + // Reset the state of the service.
|
| + model()->Remove(result_turl);
|
| + model()->StopSyncing(syncer::SEARCH_ENGINES);
|
| + sync_processor_wrapper_.reset(
|
| + new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get()));
|
| +
|
| + // Now test that a remote TemplateURL can override the attributes of the local
|
| + // default search provider.
|
| + TemplateURL* existing_default = new TemplateURL(data);
|
| + model()->Add(existing_default);
|
| + model()->SetUserSelectedDefaultSearchProvider(existing_default);
|
| +
|
| + merge_result = model()->MergeDataAndStartSyncing(
|
| + syncer::SEARCH_ENGINES, list, PassProcessor(),
|
| + CreateAndPassSyncErrorFactory());
|
| +
|
| + result_turl = model()->GetDefaultSearchProvider();
|
| + EXPECT_TRUE(result_turl);
|
| + EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword());
|
| + EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name());
|
| + EXPECT_EQ(default_turl->url(), result_turl->url());
|
| +}
|
| +
|
| TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) {
|
| std::unique_ptr<TemplateURLData> default_turl(
|
| TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
|
|
|