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

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

Issue 2067723002: [sync] Search engine shortcuts get underscores at the end after sync (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [sync] Search engine shortcuts get underscores at the end after sync Created 4 years, 6 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
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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 // Extract the keyword from a search engine syncer::SyncData. 53 // Extract the keyword from a search engine syncer::SyncData.
54 std::string GetKeyword(const syncer::SyncData& sync_data) { 54 std::string GetKeyword(const syncer::SyncData& sync_data) {
55 return sync_data.GetSpecifics().search_engine().keyword(); 55 return sync_data.GetSpecifics().search_engine().keyword();
56 } 56 }
57 57
58 // Much like TemplateURLService::CreateSyncDataFromTemplateURL(), but allows the 58 // Much like TemplateURLService::CreateSyncDataFromTemplateURL(), but allows the
59 // caller to override the keyword, URL, or GUID fields with empty strings, in 59 // caller to override the keyword, URL, or GUID fields with empty strings, in
60 // order to create custom data that should be handled specially when synced to a 60 // order to create custom data that should be handled specially when synced to a
61 // client. 61 // client.
62 syncer::SyncData CreateCustomSyncData(const TemplateURL& turl, 62 syncer::SyncData CreateCustomSyncData(const TemplateURL& turl,
63 bool autogenerate_keyword, 63 bool autogenerate_keyword,
64 const std::string& url, 64 const std::string& url,
65 const std::string& sync_guid) { 65 const std::string& sync_guid,
66 int prepopulate_id = -1) {
66 sync_pb::EntitySpecifics specifics; 67 sync_pb::EntitySpecifics specifics;
67 sync_pb::SearchEngineSpecifics* se_specifics = 68 sync_pb::SearchEngineSpecifics* se_specifics =
68 specifics.mutable_search_engine(); 69 specifics.mutable_search_engine();
69 se_specifics->set_short_name(base::UTF16ToUTF8(turl.short_name())); 70 se_specifics->set_short_name(base::UTF16ToUTF8(turl.short_name()));
70 se_specifics->set_keyword( 71 se_specifics->set_keyword(
71 autogenerate_keyword ? std::string() : base::UTF16ToUTF8(turl.keyword())); 72 autogenerate_keyword ? std::string() : base::UTF16ToUTF8(turl.keyword()));
72 se_specifics->set_favicon_url(turl.favicon_url().spec()); 73 se_specifics->set_favicon_url(turl.favicon_url().spec());
73 se_specifics->set_url(url); 74 se_specifics->set_url(url);
74 se_specifics->set_safe_for_autoreplace(turl.safe_for_autoreplace()); 75 se_specifics->set_safe_for_autoreplace(turl.safe_for_autoreplace());
75 se_specifics->set_originating_url(turl.originating_url().spec()); 76 se_specifics->set_originating_url(turl.originating_url().spec());
76 se_specifics->set_date_created(turl.date_created().ToInternalValue()); 77 se_specifics->set_date_created(turl.date_created().ToInternalValue());
77 se_specifics->set_input_encodings( 78 se_specifics->set_input_encodings(
78 base::JoinString(turl.input_encodings(), ";")); 79 base::JoinString(turl.input_encodings(), ";"));
79 se_specifics->set_show_in_default_list(turl.show_in_default_list()); 80 se_specifics->set_show_in_default_list(turl.show_in_default_list());
80 se_specifics->set_suggestions_url(turl.suggestions_url()); 81 se_specifics->set_suggestions_url(turl.suggestions_url());
81 se_specifics->set_prepopulate_id(turl.prepopulate_id()); 82 se_specifics->set_prepopulate_id(prepopulate_id == -1 ? turl.prepopulate_id()
83 : prepopulate_id);
82 se_specifics->set_autogenerate_keyword(autogenerate_keyword); 84 se_specifics->set_autogenerate_keyword(autogenerate_keyword);
83 se_specifics->set_instant_url(turl.instant_url()); 85 se_specifics->set_instant_url(turl.instant_url());
84 se_specifics->set_last_modified(turl.last_modified().ToInternalValue()); 86 se_specifics->set_last_modified(turl.last_modified().ToInternalValue());
85 se_specifics->set_sync_guid(sync_guid); 87 se_specifics->set_sync_guid(sync_guid);
86 return syncer::SyncData::CreateLocalData(turl.sync_guid(), // Must be valid! 88 return syncer::SyncData::CreateLocalData(turl.sync_guid(), // Must be valid!
87 se_specifics->keyword(), specifics); 89 se_specifics->keyword(), specifics);
88 } 90 }
89 91
90 92
91 // TestChangeProcessor -------------------------------------------------------- 93 // TestChangeProcessor --------------------------------------------------------
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 std::unique_ptr<syncer::SyncChangeProcessor> PassProcessor(); 204 std::unique_ptr<syncer::SyncChangeProcessor> PassProcessor();
203 std::unique_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory(); 205 std::unique_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory();
204 206
205 // Creates a TemplateURL with some test values. The caller owns the returned 207 // Creates a TemplateURL with some test values. The caller owns the returned
206 // TemplateURL*. 208 // TemplateURL*.
207 TemplateURL* CreateTestTemplateURL(const base::string16& keyword, 209 TemplateURL* CreateTestTemplateURL(const base::string16& keyword,
208 const std::string& url, 210 const std::string& url,
209 const std::string& guid = std::string(), 211 const std::string& guid = std::string(),
210 time_t last_mod = 100, 212 time_t last_mod = 100,
211 bool safe_for_autoreplace = false, 213 bool safe_for_autoreplace = false,
212 bool created_by_policy = false) const; 214 bool created_by_policy = false,
215 int prepopulate_id = 999999) const;
213 216
214 // Verifies the two TemplateURLs are equal. 217 // Verifies the two TemplateURLs are equal.
215 // TODO(stevet): Share this with TemplateURLServiceTest. 218 // TODO(stevet): Share this with TemplateURLServiceTest.
216 void AssertEquals(const TemplateURL& expected, 219 void AssertEquals(const TemplateURL& expected,
217 const TemplateURL& actual) const; 220 const TemplateURL& actual) const;
218 221
219 // Expect that two syncer::SyncDataLists have equal contents, in terms of the 222 // Expect that two syncer::SyncDataLists have equal contents, in terms of the
220 // sync_guid, keyword, and url fields. 223 // sync_guid, keyword, and url fields.
221 void AssertEquals(const syncer::SyncDataList& data1, 224 void AssertEquals(const syncer::SyncDataList& data1,
222 const syncer::SyncDataList& data2) const; 225 const syncer::SyncDataList& data2) const;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 return std::unique_ptr<syncer::SyncErrorFactory>( 292 return std::unique_ptr<syncer::SyncErrorFactory>(
290 new syncer::SyncErrorFactoryMock()); 293 new syncer::SyncErrorFactoryMock());
291 } 294 }
292 295
293 TemplateURL* TemplateURLServiceSyncTest::CreateTestTemplateURL( 296 TemplateURL* TemplateURLServiceSyncTest::CreateTestTemplateURL(
294 const base::string16& keyword, 297 const base::string16& keyword,
295 const std::string& url, 298 const std::string& url,
296 const std::string& guid, 299 const std::string& guid,
297 time_t last_mod, 300 time_t last_mod,
298 bool safe_for_autoreplace, 301 bool safe_for_autoreplace,
299 bool created_by_policy) const { 302 bool created_by_policy,
303 int prepopulate_id) const {
300 TemplateURLData data; 304 TemplateURLData data;
301 data.SetShortName(ASCIIToUTF16("unittest")); 305 data.SetShortName(ASCIIToUTF16("unittest"));
302 data.SetKeyword(keyword); 306 data.SetKeyword(keyword);
303 data.SetURL(url); 307 data.SetURL(url);
304 data.favicon_url = GURL("http://favicon.url"); 308 data.favicon_url = GURL("http://favicon.url");
305 data.safe_for_autoreplace = safe_for_autoreplace; 309 data.safe_for_autoreplace = safe_for_autoreplace;
306 data.date_created = Time::FromTimeT(100); 310 data.date_created = Time::FromTimeT(100);
307 data.last_modified = Time::FromTimeT(last_mod); 311 data.last_modified = Time::FromTimeT(last_mod);
308 data.created_by_policy = created_by_policy; 312 data.created_by_policy = created_by_policy;
309 data.prepopulate_id = 999999; 313 data.prepopulate_id = prepopulate_id;
310 if (!guid.empty()) 314 if (!guid.empty())
311 data.sync_guid = guid; 315 data.sync_guid = guid;
312 return new TemplateURL(data); 316 return new TemplateURL(data);
313 } 317 }
314 318
315 void TemplateURLServiceSyncTest::AssertEquals(const TemplateURL& expected, 319 void TemplateURLServiceSyncTest::AssertEquals(const TemplateURL& expected,
316 const TemplateURL& actual) const { 320 const TemplateURL& actual) const {
317 ASSERT_EQ(expected.short_name(), actual.short_name()); 321 ASSERT_EQ(expected.short_name(), actual.short_name());
318 ASSERT_EQ(expected.keyword(), actual.keyword()); 322 ASSERT_EQ(expected.keyword(), actual.keyword());
319 ASSERT_EQ(expected.url(), actual.url()); 323 ASSERT_EQ(expected.url(), actual.url());
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 TemplateURL* local_turl = CreateTestTemplateURL( 527 TemplateURL* local_turl = CreateTestTemplateURL(
524 ASCIIToUTF16("localkey"), "www.local.com", "localguid", 528 ASCIIToUTF16("localkey"), "www.local.com", "localguid",
525 test_cases[i].local_time, true, test_cases[i].local_created_by_policy); 529 test_cases[i].local_time, true, test_cases[i].local_created_by_policy);
526 model()->Add(local_turl); 530 model()->Add(local_turl);
527 if (test_cases[i].local_is_default) 531 if (test_cases[i].local_is_default)
528 model()->SetUserSelectedDefaultSearchProvider(local_turl); 532 model()->SetUserSelectedDefaultSearchProvider(local_turl);
529 533
530 std::unique_ptr<TemplateURL> sync_turl( 534 std::unique_ptr<TemplateURL> sync_turl(
531 CreateTestTemplateURL(ASCIIToUTF16("synckey"), "www.sync.com", 535 CreateTestTemplateURL(ASCIIToUTF16("synckey"), "www.sync.com",
532 "syncguid", test_cases[i].sync_time)); 536 "syncguid", test_cases[i].sync_time));
533 EXPECT_EQ(test_cases[i].expected_result, 537 EXPECT_EQ(
538 test_cases[i].expected_result,
534 model()->IsLocalTemplateURLBetter(local_turl, sync_turl.get())); 539 model()->IsLocalTemplateURLBetter(local_turl, sync_turl.get()));
535 540
536 // Undo the changes. 541 // Undo the changes.
537 if (test_cases[i].local_is_default) 542 if (test_cases[i].local_is_default)
538 model()->SetUserSelectedDefaultSearchProvider(NULL); 543 model()->SetUserSelectedDefaultSearchProvider(NULL);
539 model()->Remove(local_turl); 544 model()->Remove(local_turl);
540 } 545 }
541 } 546 }
542 547
543 TEST_F(TemplateURLServiceSyncTest, ResolveSyncKeywordConflict) { 548 TEST_F(TemplateURLServiceSyncTest, ResolveSyncKeywordConflict) {
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 EXPECT_EQ(0, merge_result.num_items_deleted()); 852 EXPECT_EQ(0, merge_result.num_items_deleted());
848 EXPECT_EQ(3, merge_result.num_items_before_association()); 853 EXPECT_EQ(3, merge_result.num_items_before_association());
849 EXPECT_EQ(4, merge_result.num_items_after_association()); 854 EXPECT_EQ(4, merge_result.num_items_after_association());
850 } 855 }
851 856
852 TEST_F(TemplateURLServiceSyncTest, MergeAddFromNewerSyncData) { 857 TEST_F(TemplateURLServiceSyncTest, MergeAddFromNewerSyncData) {
853 // GUIDs all differ, so Sync may overtake some entries, but the timestamps 858 // GUIDs all differ, so Sync may overtake some entries, but the timestamps
854 // from Sync are newer. Set up the local data so that one is a dupe, one has a 859 // from Sync are newer. Set up the local data so that one is a dupe, one has a
855 // conflicting keyword, and the last has no conflicts (a clean ADD). 860 // conflicting keyword, and the last has no conflicts (a clean ADD).
856 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com", 861 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com",
857 "aaa", 10)); // dupe 862 "aaa", 10, false, false, 111)); // dupe
858 863
859 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key2"), 864 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key2"),
860 "http://expected.com", "bbb", 10)); // keyword conflict 865 "http://expected.com", "bbb", 10, false,
866 false, 112)); // keyword conflict
861 867
862 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("unique"), 868 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("unique"),
863 "http://unique.com", "ccc", 10)); // add 869 "http://unique.com", "ccc", 10, false,
870 false, 113)); // add
864 871
865 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( 872 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
866 syncer::SEARCH_ENGINES, 873 syncer::SEARCH_ENGINES,
867 CreateInitialSyncData(), PassProcessor(), 874 CreateInitialSyncData(), PassProcessor(),
868 CreateAndPassSyncErrorFactory()); 875 CreateAndPassSyncErrorFactory());
869 876
870 // The dupe and keyword conflict results in merges. The unique keyword be 877 // The dupe and keyword conflict results in merges. The unique keyword be
871 // added to the model. 878 // added to the model.
872 EXPECT_EQ(4U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); 879 EXPECT_EQ(4U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size());
873 880
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 TEST_F(TemplateURLServiceSyncTest, AutogeneratedKeywordMigrated) { 1142 TEST_F(TemplateURLServiceSyncTest, AutogeneratedKeywordMigrated) {
1136 // Create a couple of sync entries with autogenerated keywords. 1143 // Create a couple of sync entries with autogenerated keywords.
1137 syncer::SyncDataList initial_data; 1144 syncer::SyncDataList initial_data;
1138 std::unique_ptr<TemplateURL> turl( 1145 std::unique_ptr<TemplateURL> turl(
1139 CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com", "key1")); 1146 CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com", "key1"));
1140 initial_data.push_back( 1147 initial_data.push_back(
1141 CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); 1148 CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid()));
1142 turl.reset(CreateTestTemplateURL(ASCIIToUTF16("key2"), 1149 turl.reset(CreateTestTemplateURL(ASCIIToUTF16("key2"),
1143 "{google:baseURL}search?q={searchTerms}", "key2")); 1150 "{google:baseURL}search?q={searchTerms}", "key2"));
1144 initial_data.push_back( 1151 initial_data.push_back(
1145 CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); 1152 CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid(), 99));
1146 1153
1147 // Now try to sync the data locally. 1154 // Now try to sync the data locally.
1148 model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, 1155 model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data,
1149 PassProcessor(), CreateAndPassSyncErrorFactory()); 1156 PassProcessor(), CreateAndPassSyncErrorFactory());
1150 1157
1151 // Both entries should have been added, with explicit keywords. 1158 // Both entries should have been added, with explicit keywords.
1152 TemplateURL* key1 = model()->GetTemplateURLForHost("key1.com"); 1159 TemplateURL* key1 = model()->GetTemplateURLForHost("key1.com");
1153 ASSERT_FALSE(key1 == NULL); 1160 ASSERT_FALSE(key1 == NULL);
1154 EXPECT_EQ(ASCIIToUTF16("key1.com"), key1->keyword()); 1161 EXPECT_EQ(ASCIIToUTF16("key1.com"), key1->keyword());
1155 GURL google_url(model()->search_terms_data().GoogleBaseURLValue()); 1162 GURL google_url(model()->search_terms_data().GoogleBaseURLValue());
(...skipping 1058 matching lines...) Expand 10 before | Expand all | Expand 10 after
2214 syncer::SEARCH_ENGINES, list, PassProcessor(), 2221 syncer::SEARCH_ENGINES, list, PassProcessor(),
2215 CreateAndPassSyncErrorFactory()); 2222 CreateAndPassSyncErrorFactory());
2216 2223
2217 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); 2224 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default");
2218 EXPECT_TRUE(result_turl); 2225 EXPECT_TRUE(result_turl);
2219 EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword()); 2226 EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword());
2220 EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name()); 2227 EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name());
2221 EXPECT_EQ(default_turl->url(), result_turl->url()); 2228 EXPECT_EQ(default_turl->url(), result_turl->url());
2222 } 2229 }
2223 2230
2231 TEST_F(TemplateURLServiceSyncTest, MergeConflictingPrepopulatedEngine) {
2232 std::unique_ptr<TemplateURLData> default_turl(
2233 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(nullptr));
2234
2235 TemplateURLData data(*default_turl);
2236 data.SetKeyword(ASCIIToUTF16("old_kw"));
2237 data.SetShortName(ASCIIToUTF16("my name"));
2238 data.SetURL("http://wrong.url.com?q={searchTerms}");
2239 data.safe_for_autoreplace = true;
2240 data.date_created = Time::FromTimeT(50);
2241 data.last_modified = Time::FromTimeT(50);
2242 data.prepopulate_id = 1;
2243 data.sync_guid = "default";
2244 model()->Add(new TemplateURL(data));
2245
2246 TemplateURLData new_data(*default_turl);
2247 new_data.SetKeyword(ASCIIToUTF16("new_kw"));
2248 new_data.SetShortName(ASCIIToUTF16("my name"));
2249 new_data.SetURL("http://wrong.url.com?q={searchTerms}");
2250 new_data.safe_for_autoreplace = false;
2251 new_data.date_created = Time::FromTimeT(100);
2252 new_data.last_modified = Time::FromTimeT(100);
2253 new_data.prepopulate_id = 1;
2254 new_data.sync_guid = "different_guid";
2255
2256 std::unique_ptr<TemplateURL> sync_turl =
Peter Kasting 2016/06/14 23:48:39 Nit: Above each group of code blocks that implemen
2257 base::MakeUnique<TemplateURL>(new_data);
2258 syncer::SyncDataList list;
2259 list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl));
2260 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
2261 syncer::SEARCH_ENGINES, list, PassProcessor(),
2262 CreateAndPassSyncErrorFactory());
2263
2264 TemplateURL* result_turl = model()->GetTemplateURLForGUID("different_guid");
2265 EXPECT_TRUE(result_turl);
2266 EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword());
2267 EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name());
2268 EXPECT_EQ(default_turl->url(), result_turl->url());
2269
2270 model()->Remove(result_turl);
2271 model()->StopSyncing(syncer::SEARCH_ENGINES);
2272 sync_processor_wrapper_.reset(
2273 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get()));
2274
2275 TemplateURL* existing_default = new TemplateURL(data);
2276 model()->Add(existing_default);
2277 model()->SetUserSelectedDefaultSearchProvider(existing_default);
2278
2279 merge_result = model()->MergeDataAndStartSyncing(
2280 syncer::SEARCH_ENGINES, list, PassProcessor(),
2281 CreateAndPassSyncErrorFactory());
2282
2283 result_turl = model()->GetDefaultSearchProvider();
2284 EXPECT_TRUE(result_turl);
2285 EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword());
2286 EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name());
2287 EXPECT_EQ(default_turl->url(), result_turl->url());
2288 }
2289
2224 TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) { 2290 TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) {
2225 std::unique_ptr<TemplateURLData> default_turl( 2291 std::unique_ptr<TemplateURLData> default_turl(
2226 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); 2292 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
2227 2293
2228 TemplateURLData data(*default_turl); 2294 TemplateURLData data(*default_turl);
2229 data.safe_for_autoreplace = true; // Can be replaced with built-in values. 2295 data.safe_for_autoreplace = true; // Can be replaced with built-in values.
2230 data.SetKeyword(ASCIIToUTF16("new_kw")); 2296 data.SetKeyword(ASCIIToUTF16("new_kw"));
2231 data.SetShortName(ASCIIToUTF16("my name")); 2297 data.SetShortName(ASCIIToUTF16("my name"));
2232 data.SetURL("http://wrong.url.com?q={searchTerms}"); 2298 data.SetURL("http://wrong.url.com?q={searchTerms}");
2233 data.date_created = Time::FromTimeT(50); 2299 data.date_created = Time::FromTimeT(50);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2275 2341
2276 TEST_F(TemplateURLServiceSyncTest, NonAsciiKeywordDoesNotCrash) { 2342 TEST_F(TemplateURLServiceSyncTest, NonAsciiKeywordDoesNotCrash) {
2277 model()->Add(CreateTestTemplateURL(UTF8ToUTF16("\xf0\xaf\xa6\x8d"), 2343 model()->Add(CreateTestTemplateURL(UTF8ToUTF16("\xf0\xaf\xa6\x8d"),
2278 "http://key1.com")); 2344 "http://key1.com"));
2279 syncer::SyncDataList initial_data = CreateInitialSyncData(); 2345 syncer::SyncDataList initial_data = CreateInitialSyncData();
2280 2346
2281 model()->MergeDataAndStartSyncing( 2347 model()->MergeDataAndStartSyncing(
2282 syncer::SEARCH_ENGINES, initial_data, PassProcessor(), 2348 syncer::SEARCH_ENGINES, initial_data, PassProcessor(),
2283 CreateAndPassSyncErrorFactory()); 2349 CreateAndPassSyncErrorFactory());
2284 } 2350 }
OLDNEW
« no previous file with comments | « no previous file | components/search_engines/template_url_service.h » ('j') | components/search_engines/template_url_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698