Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Side by Side Diff: chrome/browser/search_engines/template_url_service_sync_unittest.cc

Issue 12084076: Ensure post-sync TemplateURL of prepopulated engines use built-in version. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Small correction to tests. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/memory/scoped_vector.h" 6 #include "base/memory/scoped_vector.h"
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/search_engines/search_terms_data.h" 10 #include "chrome/browser/search_engines/search_terms_data.h"
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 218
219 // Helper that creates some initial sync data. We cheat a little by specifying 219 // Helper that creates some initial sync data. We cheat a little by specifying
220 // GUIDs for easy identification later. We also make the last_modified times 220 // GUIDs for easy identification later. We also make the last_modified times
221 // slightly older than CreateTestTemplateURL's default, to test conflict 221 // slightly older than CreateTestTemplateURL's default, to test conflict
222 // resolution. 222 // resolution.
223 syncer::SyncDataList CreateInitialSyncData() const; 223 syncer::SyncDataList CreateInitialSyncData() const;
224 224
225 // Syntactic sugar. 225 // Syntactic sugar.
226 TemplateURL* Deserialize(const syncer::SyncData& sync_data); 226 TemplateURL* Deserialize(const syncer::SyncData& sync_data);
227 227
228 // Creates a new TemplateURL copying the fields of |turl| but replacing
229 // the |url| and |guid|. The caller owns the returned TemplateURL*.
SteveT 2013/02/04 19:00:18 Do you want to mention something about what you do
beaudoin 2013/02/04 20:01:31 Done.
230 TemplateURL* CopyTemplateURL(const TemplateURL* turl,
231 const std::string& url,
232 const std::string& guid);
233
228 protected: 234 protected:
229 // We keep two TemplateURLServices to test syncing between them. 235 // We keep two TemplateURLServices to test syncing between them.
230 TemplateURLServiceTestUtil test_util_a_; 236 TemplateURLServiceTestUtil test_util_a_;
231 scoped_ptr<TestingProfile> profile_b_; 237 scoped_ptr<TestingProfile> profile_b_;
232 scoped_ptr<TemplateURLService> model_b_; 238 scoped_ptr<TemplateURLService> model_b_;
233 239
234 // Our dummy ChangeProcessor used to inspect changes pushed to Sync. 240 // Our dummy ChangeProcessor used to inspect changes pushed to Sync.
235 scoped_ptr<TestChangeProcessor> sync_processor_; 241 scoped_ptr<TestChangeProcessor> sync_processor_;
236 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; 242 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_;
237 243
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 return list; 360 return list;
355 } 361 }
356 362
357 TemplateURL* TemplateURLServiceSyncTest::Deserialize( 363 TemplateURL* TemplateURLServiceSyncTest::Deserialize(
358 const syncer::SyncData& sync_data) { 364 const syncer::SyncData& sync_data) {
359 syncer::SyncChangeList dummy; 365 syncer::SyncChangeList dummy;
360 return TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData(NULL, 366 return TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData(NULL,
361 NULL, sync_data, &dummy); 367 NULL, sync_data, &dummy);
362 } 368 }
363 369
370 TemplateURL* TemplateURLServiceSyncTest::CopyTemplateURL(
371 const TemplateURL* turl,
372 const std::string& url,
373 const std::string& guid) {
374 TemplateURLData data (turl->data());
375 data.SetURL(url);
376 data.date_created = Time::FromTimeT(100);
377 data.last_modified = Time::FromTimeT(100);
378 data.sync_guid = guid;
379 return new TemplateURL(NULL, data);
380 }
364 381
365 // Actual tests --------------------------------------------------------------- 382 // Actual tests ---------------------------------------------------------------
366 383
367 TEST_F(TemplateURLServiceSyncTest, SerializeDeserialize) { 384 TEST_F(TemplateURLServiceSyncTest, SerializeDeserialize) {
368 // Create a TemplateURL and convert it into a sync specific type. 385 // Create a TemplateURL and convert it into a sync specific type.
369 scoped_ptr<TemplateURL> turl( 386 scoped_ptr<TemplateURL> turl(
370 CreateTestTemplateURL( 387 CreateTestTemplateURL(
371 ASCIIToUTF16("unittest"), "http://www.unittest.com/")); 388 ASCIIToUTF16("unittest"), "http://www.unittest.com/"));
372 syncer::SyncData sync_data = 389 syncer::SyncData sync_data =
373 TemplateURLService::CreateSyncDataFromTemplateURL(*turl); 390 TemplateURLService::CreateSyncDataFromTemplateURL(*turl);
(...skipping 1309 matching lines...) Expand 10 before | Expand all | Expand 10 after
1683 1700
1684 EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); 1701 EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size());
1685 ASSERT_FALSE(model()->is_default_search_managed()); 1702 ASSERT_FALSE(model()->is_default_search_managed());
1686 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 1703 ASSERT_TRUE(model()->GetDefaultSearchProvider());
1687 1704
1688 // Change the default search provider to a managed one. 1705 // Change the default search provider to a managed one.
1689 const char kName[] = "manageddefault"; 1706 const char kName[] = "manageddefault";
1690 const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; 1707 const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}";
1691 const char kIconURL[] = "http://manageddefault.com/icon.jpg"; 1708 const char kIconURL[] = "http://manageddefault.com/icon.jpg";
1692 const char kEncodings[] = "UTF-16;UTF-32"; 1709 const char kEncodings[] = "UTF-16;UTF-32";
1710 const char kAlternateURL[] =
1711 "http://manageddefault.com/search#t={searchTerms}";
1712 const char kSearchTermsReplacementKey[] = "espv";
1693 test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName, 1713 test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName,
1694 kSearchURL, std::string(), kIconURL, kEncodings); 1714 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL,
1715 kSearchTermsReplacementKey);
1695 const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); 1716 const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider();
1696 1717
1697 EXPECT_TRUE(model()->is_default_search_managed()); 1718 EXPECT_TRUE(model()->is_default_search_managed());
1698 1719
1699 // Add a new entry from Sync. It should still sync in despite the default 1720 // Add a new entry from Sync. It should still sync in despite the default
1700 // being managed. 1721 // being managed.
1701 syncer::SyncChangeList changes; 1722 syncer::SyncChangeList changes;
1702 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, 1723 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD,
1703 CreateTestTemplateURL(ASCIIToUTF16("newkeyword"), 1724 CreateTestTemplateURL(ASCIIToUTF16("newkeyword"),
1704 "http://new.com/{searchTerms}", 1725 "http://new.com/{searchTerms}",
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 if (test_cases[i].present_in_model == SYNC || 2129 if (test_cases[i].present_in_model == SYNC ||
2109 test_cases[i].present_in_model == BOTH) { 2130 test_cases[i].present_in_model == BOTH) {
2110 ASSERT_TRUE(model()->GetTemplateURLForGUID(sync_guid)); 2131 ASSERT_TRUE(model()->GetTemplateURLForGUID(sync_guid));
2111 EXPECT_EQ(expected_sync_keyword, sync_turl->keyword()); 2132 EXPECT_EQ(expected_sync_keyword, sync_turl->keyword());
2112 EXPECT_EQ(sync_url, sync_turl->url()); 2133 EXPECT_EQ(sync_url, sync_turl->url());
2113 EXPECT_EQ(sync_last_modified, sync_turl->last_modified().ToTimeT()); 2134 EXPECT_EQ(sync_last_modified, sync_turl->last_modified().ToTimeT());
2114 model()->Remove(model()->GetTemplateURLForGUID(sync_guid)); 2135 model()->Remove(model()->GetTemplateURLForGUID(sync_guid));
2115 } 2136 }
2116 } // for 2137 } // for
2117 } 2138 }
2139
2140 TEST_F(TemplateURLServiceSyncTest, MergePrepopulatedEngine) {
2141 scoped_ptr<TemplateURL> default_turl(
2142 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
2143
2144 // Merge with an initial list containing a prepopulated engine with a wrong
2145 // URL.
2146 syncer::SyncDataList list;
2147 scoped_ptr<TemplateURL> sync_turl(CopyTemplateURL(default_turl.get(),
2148 "http://wrong.url.com?q={searchTerms}", "default"));
2149 list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl));
2150 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
2151 syncer::SEARCH_ENGINES, list, PassProcessor(),
2152 CreateAndPassSyncErrorFactory());
2153
2154 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default");
2155 EXPECT_TRUE(result_turl);
2156 EXPECT_EQ(default_turl->keyword(), result_turl->keyword());
2157 EXPECT_EQ(default_turl->short_name(), result_turl->short_name());
2158 EXPECT_EQ(default_turl->url(), result_turl->url());
SteveT 2013/02/04 19:00:18 Some of the above seem to be repeated a few times.
beaudoin 2013/02/04 20:01:31 I usually prefer to keep the expectations right in
2159 }
2160
2161 TEST_F(TemplateURLServiceSyncTest, AddPrepopulatedEngine) {
2162 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
2163 syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(),
2164 CreateAndPassSyncErrorFactory());
2165
2166 scoped_ptr<TemplateURL> default_turl(
2167 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
2168 TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(),
2169 "http://wrong.url.com?q={searchTerms}", "default");
2170
2171 // Add a prepopulated engine with a wrong URL.
2172 syncer::SyncChangeList changes;
2173 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD,
2174 sync_turl));
2175 model()->ProcessSyncChanges(FROM_HERE, changes);
2176
2177 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default");
2178 EXPECT_TRUE(result_turl);
2179 EXPECT_EQ(default_turl->keyword(), result_turl->keyword());
2180 EXPECT_EQ(default_turl->short_name(), result_turl->short_name());
2181 EXPECT_EQ(default_turl->url(), result_turl->url());
2182 }
2183
2184 TEST_F(TemplateURLServiceSyncTest, UpdatePrepopulatedEngine) {
2185 scoped_ptr<TemplateURL> default_turl(
2186 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
2187
2188 TemplateURLData data(default_turl->data());
2189 data.SetURL("http://old.wrong.url.com?q={searchTerms}");
2190 data.sync_guid = "default";
2191 model()->Add(new TemplateURL(NULL, data));
2192
2193 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
2194 syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(),
2195 CreateAndPassSyncErrorFactory());
2196
2197 TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(),
2198 "http://new.wrong.url.com?q={searchTerms}", "default");
2199
2200 // Update the engine in the model, which is prepopulated, with a new one.
2201 // Both have wrong URLs, but it should still get corrected.
2202 syncer::SyncChangeList changes;
2203 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_UPDATE,
2204 sync_turl));
2205 model()->ProcessSyncChanges(FROM_HERE, changes);
2206
2207 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default");
2208 EXPECT_TRUE(result_turl);
2209 EXPECT_EQ(default_turl->keyword(), result_turl->keyword());
2210 EXPECT_EQ(default_turl->short_name(), result_turl->short_name());
2211 EXPECT_EQ(default_turl->url(), result_turl->url());
2212 }
2213
2214 TEST_F(TemplateURLServiceSyncTest, MergeEditedPrepopulatedEngine) {
2215 scoped_ptr<TemplateURL> default_turl(
2216 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
2217
2218 TemplateURLData data(default_turl->data());
2219 data.safe_for_autoreplace = false;
2220 data.SetKeyword(ASCIIToUTF16("new_kw"));
2221 data.short_name = ASCIIToUTF16("my name");
2222 data.SetURL("http://wrong.url.com?q={searchTerms}");
2223 data.date_created = Time::FromTimeT(50);
2224 data.last_modified = Time::FromTimeT(50);
2225 data.sync_guid = "default";
2226 model()->Add(new TemplateURL(NULL, data));
2227
SteveT 2013/02/04 19:00:18 extra break here not needed.
beaudoin 2013/02/04 20:01:31 Done.
2228
2229 data.date_created = Time::FromTimeT(100);
2230 data.last_modified = Time::FromTimeT(100);
2231 scoped_ptr<TemplateURL> sync_turl(new TemplateURL(NULL, data));
2232 syncer::SyncDataList list;
2233 list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl));
2234 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
2235 syncer::SEARCH_ENGINES, list, PassProcessor(),
2236 CreateAndPassSyncErrorFactory());
2237
2238 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default");
2239 EXPECT_TRUE(result_turl);
2240 EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword());
2241 EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name());
2242 EXPECT_EQ(default_turl->url(), result_turl->url());
2243 }
2244
2245
2246 TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) {
2247 scoped_ptr<TemplateURL> default_turl(
2248 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
2249
2250 TemplateURLData data(default_turl->data());
2251 data.safe_for_autoreplace = true; // Can be replaced with built-in values.
2252 data.SetKeyword(ASCIIToUTF16("new_kw"));
2253 data.short_name = ASCIIToUTF16("my name");
2254 data.SetURL("http://wrong.url.com?q={searchTerms}");
2255 data.date_created = Time::FromTimeT(50);
2256 data.last_modified = Time::FromTimeT(50);
2257 data.sync_guid = "default";
2258 model()->Add(new TemplateURL(NULL, data));
2259
SteveT 2013/02/04 19:00:18 extra break here not needed
beaudoin 2013/02/04 20:01:31 Done.
2260
2261 data.date_created = Time::FromTimeT(100);
2262 data.last_modified = Time::FromTimeT(100);
2263 scoped_ptr<TemplateURL> sync_turl(new TemplateURL(NULL, data));
2264 syncer::SyncDataList list;
2265 list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl));
2266 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
2267 syncer::SEARCH_ENGINES, list, PassProcessor(),
2268 CreateAndPassSyncErrorFactory());
2269
2270 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default");
2271 EXPECT_TRUE(result_turl);
2272 EXPECT_EQ(default_turl->keyword(), result_turl->keyword());
2273 EXPECT_EQ(default_turl->short_name(), result_turl->short_name());
2274 EXPECT_EQ(default_turl->url(), result_turl->url());
2275 }
OLDNEW
« no previous file with comments | « chrome/browser/search_engines/template_url_service.cc ('k') | chrome/browser/search_engines/template_url_service_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698