OLD | NEW |
---|---|
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 Loading... | |
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| and initializing the date_created and last_modified | |
230 // timestamps to |last_mod|. The caller owns the returned TemplateURL*. | |
231 TemplateURL* CopyTemplateURL(const TemplateURL* turl, | |
232 const std::string& url, | |
233 const std::string& guid, | |
234 time_t last_mod = 100); | |
Peter Kasting
2013/02/04 20:35:32
Google style guide bans default arguments
beaudoin
2013/02/04 22:33:40
I got the idea from CreateTestTemplateURL above. :
Peter Kasting
2013/02/04 23:52:29
I wouldn't bother trying to fix existing usage, es
| |
235 | |
228 protected: | 236 protected: |
229 // We keep two TemplateURLServices to test syncing between them. | 237 // We keep two TemplateURLServices to test syncing between them. |
230 TemplateURLServiceTestUtil test_util_a_; | 238 TemplateURLServiceTestUtil test_util_a_; |
231 scoped_ptr<TestingProfile> profile_b_; | 239 scoped_ptr<TestingProfile> profile_b_; |
232 scoped_ptr<TemplateURLService> model_b_; | 240 scoped_ptr<TemplateURLService> model_b_; |
233 | 241 |
234 // Our dummy ChangeProcessor used to inspect changes pushed to Sync. | 242 // Our dummy ChangeProcessor used to inspect changes pushed to Sync. |
235 scoped_ptr<TestChangeProcessor> sync_processor_; | 243 scoped_ptr<TestChangeProcessor> sync_processor_; |
236 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; | 244 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; |
237 | 245 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
354 return list; | 362 return list; |
355 } | 363 } |
356 | 364 |
357 TemplateURL* TemplateURLServiceSyncTest::Deserialize( | 365 TemplateURL* TemplateURLServiceSyncTest::Deserialize( |
358 const syncer::SyncData& sync_data) { | 366 const syncer::SyncData& sync_data) { |
359 syncer::SyncChangeList dummy; | 367 syncer::SyncChangeList dummy; |
360 return TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData(NULL, | 368 return TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData(NULL, |
361 NULL, sync_data, &dummy); | 369 NULL, sync_data, &dummy); |
362 } | 370 } |
363 | 371 |
372 TemplateURL* TemplateURLServiceSyncTest::CopyTemplateURL( | |
373 const TemplateURL* turl, | |
374 const std::string& url, | |
375 const std::string& guid, | |
376 time_t last_mod) { | |
377 TemplateURLData data (turl->data()); | |
378 data.SetURL(url); | |
379 data.date_created = Time::FromTimeT(last_mod); | |
380 data.last_modified = Time::FromTimeT(last_mod); | |
381 data.sync_guid = guid; | |
382 return new TemplateURL(NULL, data); | |
383 } | |
364 | 384 |
365 // Actual tests --------------------------------------------------------------- | 385 // Actual tests --------------------------------------------------------------- |
366 | 386 |
367 TEST_F(TemplateURLServiceSyncTest, SerializeDeserialize) { | 387 TEST_F(TemplateURLServiceSyncTest, SerializeDeserialize) { |
368 // Create a TemplateURL and convert it into a sync specific type. | 388 // Create a TemplateURL and convert it into a sync specific type. |
369 scoped_ptr<TemplateURL> turl( | 389 scoped_ptr<TemplateURL> turl( |
370 CreateTestTemplateURL( | 390 CreateTestTemplateURL( |
371 ASCIIToUTF16("unittest"), "http://www.unittest.com/")); | 391 ASCIIToUTF16("unittest"), "http://www.unittest.com/")); |
372 syncer::SyncData sync_data = | 392 syncer::SyncData sync_data = |
373 TemplateURLService::CreateSyncDataFromTemplateURL(*turl); | 393 TemplateURLService::CreateSyncDataFromTemplateURL(*turl); |
(...skipping 1309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1683 | 1703 |
1684 EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); | 1704 EXPECT_EQ(3U, model()->GetAllSyncData(syncer::SEARCH_ENGINES).size()); |
1685 ASSERT_FALSE(model()->is_default_search_managed()); | 1705 ASSERT_FALSE(model()->is_default_search_managed()); |
1686 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 1706 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
1687 | 1707 |
1688 // Change the default search provider to a managed one. | 1708 // Change the default search provider to a managed one. |
1689 const char kName[] = "manageddefault"; | 1709 const char kName[] = "manageddefault"; |
1690 const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; | 1710 const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; |
1691 const char kIconURL[] = "http://manageddefault.com/icon.jpg"; | 1711 const char kIconURL[] = "http://manageddefault.com/icon.jpg"; |
1692 const char kEncodings[] = "UTF-16;UTF-32"; | 1712 const char kEncodings[] = "UTF-16;UTF-32"; |
1713 const char kAlternateURL[] = | |
1714 "http://manageddefault.com/search#t={searchTerms}"; | |
1715 const char kSearchTermsReplacementKey[] = "espv"; | |
1693 test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName, | 1716 test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName, |
1694 kSearchURL, std::string(), kIconURL, kEncodings); | 1717 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, |
1718 kSearchTermsReplacementKey); | |
1695 const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); | 1719 const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); |
1696 | 1720 |
1697 EXPECT_TRUE(model()->is_default_search_managed()); | 1721 EXPECT_TRUE(model()->is_default_search_managed()); |
1698 | 1722 |
1699 // Add a new entry from Sync. It should still sync in despite the default | 1723 // Add a new entry from Sync. It should still sync in despite the default |
1700 // being managed. | 1724 // being managed. |
1701 syncer::SyncChangeList changes; | 1725 syncer::SyncChangeList changes; |
1702 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, | 1726 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
1703 CreateTestTemplateURL(ASCIIToUTF16("newkeyword"), | 1727 CreateTestTemplateURL(ASCIIToUTF16("newkeyword"), |
1704 "http://new.com/{searchTerms}", | 1728 "http://new.com/{searchTerms}", |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2108 if (test_cases[i].present_in_model == SYNC || | 2132 if (test_cases[i].present_in_model == SYNC || |
2109 test_cases[i].present_in_model == BOTH) { | 2133 test_cases[i].present_in_model == BOTH) { |
2110 ASSERT_TRUE(model()->GetTemplateURLForGUID(sync_guid)); | 2134 ASSERT_TRUE(model()->GetTemplateURLForGUID(sync_guid)); |
2111 EXPECT_EQ(expected_sync_keyword, sync_turl->keyword()); | 2135 EXPECT_EQ(expected_sync_keyword, sync_turl->keyword()); |
2112 EXPECT_EQ(sync_url, sync_turl->url()); | 2136 EXPECT_EQ(sync_url, sync_turl->url()); |
2113 EXPECT_EQ(sync_last_modified, sync_turl->last_modified().ToTimeT()); | 2137 EXPECT_EQ(sync_last_modified, sync_turl->last_modified().ToTimeT()); |
2114 model()->Remove(model()->GetTemplateURLForGUID(sync_guid)); | 2138 model()->Remove(model()->GetTemplateURLForGUID(sync_guid)); |
2115 } | 2139 } |
2116 } // for | 2140 } // for |
2117 } | 2141 } |
2142 | |
2143 TEST_F(TemplateURLServiceSyncTest, MergePrepopulatedEngine) { | |
2144 scoped_ptr<TemplateURL> default_turl( | |
2145 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); | |
2146 | |
2147 // Merge with an initial list containing a prepopulated engine with a wrong | |
2148 // URL. | |
2149 syncer::SyncDataList list; | |
2150 scoped_ptr<TemplateURL> sync_turl(CopyTemplateURL(default_turl.get(), | |
2151 "http://wrong.url.com?q={searchTerms}", "default")); | |
2152 list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); | |
2153 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( | |
2154 syncer::SEARCH_ENGINES, list, PassProcessor(), | |
2155 CreateAndPassSyncErrorFactory()); | |
2156 | |
2157 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); | |
2158 EXPECT_TRUE(result_turl); | |
2159 EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); | |
2160 EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); | |
2161 EXPECT_EQ(default_turl->url(), result_turl->url()); | |
2162 } | |
2163 | |
2164 TEST_F(TemplateURLServiceSyncTest, AddPrepopulatedEngine) { | |
2165 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( | |
2166 syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(), | |
2167 CreateAndPassSyncErrorFactory()); | |
2168 | |
2169 scoped_ptr<TemplateURL> default_turl( | |
2170 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); | |
2171 TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(), | |
2172 "http://wrong.url.com?q={searchTerms}", "default"); | |
2173 | |
2174 // Add a prepopulated engine with a wrong URL. | |
2175 syncer::SyncChangeList changes; | |
2176 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, | |
2177 sync_turl)); | |
2178 model()->ProcessSyncChanges(FROM_HERE, changes); | |
2179 | |
2180 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); | |
2181 EXPECT_TRUE(result_turl); | |
2182 EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); | |
2183 EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); | |
2184 EXPECT_EQ(default_turl->url(), result_turl->url()); | |
2185 } | |
2186 | |
2187 TEST_F(TemplateURLServiceSyncTest, UpdatePrepopulatedEngine) { | |
2188 scoped_ptr<TemplateURL> default_turl( | |
2189 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); | |
2190 | |
2191 TemplateURLData data(default_turl->data()); | |
2192 data.SetURL("http://old.wrong.url.com?q={searchTerms}"); | |
2193 data.sync_guid = "default"; | |
2194 model()->Add(new TemplateURL(NULL, data)); | |
2195 | |
2196 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( | |
2197 syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(), | |
2198 CreateAndPassSyncErrorFactory()); | |
2199 | |
2200 TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(), | |
2201 "http://new.wrong.url.com?q={searchTerms}", "default"); | |
2202 | |
2203 // Update the engine in the model, which is prepopulated, with a new one. | |
2204 // Both have wrong URLs, but it should still get corrected. | |
2205 syncer::SyncChangeList changes; | |
2206 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_UPDATE, | |
2207 sync_turl)); | |
2208 model()->ProcessSyncChanges(FROM_HERE, changes); | |
2209 | |
2210 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); | |
2211 EXPECT_TRUE(result_turl); | |
2212 EXPECT_EQ(default_turl->keyword(), result_turl->keyword()); | |
2213 EXPECT_EQ(default_turl->short_name(), result_turl->short_name()); | |
2214 EXPECT_EQ(default_turl->url(), result_turl->url()); | |
2215 } | |
2216 | |
2217 TEST_F(TemplateURLServiceSyncTest, MergeEditedPrepopulatedEngine) { | |
2218 scoped_ptr<TemplateURL> default_turl( | |
2219 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); | |
2220 | |
2221 TemplateURLData data(default_turl->data()); | |
2222 data.safe_for_autoreplace = false; | |
2223 data.SetKeyword(ASCIIToUTF16("new_kw")); | |
2224 data.short_name = ASCIIToUTF16("my name"); | |
2225 data.SetURL("http://wrong.url.com?q={searchTerms}"); | |
2226 data.date_created = Time::FromTimeT(50); | |
2227 data.last_modified = Time::FromTimeT(50); | |
2228 data.sync_guid = "default"; | |
2229 model()->Add(new TemplateURL(NULL, data)); | |
2230 | |
2231 data.date_created = Time::FromTimeT(100); | |
2232 data.last_modified = Time::FromTimeT(100); | |
2233 scoped_ptr<TemplateURL> sync_turl(new TemplateURL(NULL, data)); | |
2234 syncer::SyncDataList list; | |
2235 list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); | |
2236 syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( | |
2237 syncer::SEARCH_ENGINES, list, PassProcessor(), | |
2238 CreateAndPassSyncErrorFactory()); | |
2239 | |
2240 const TemplateURL* result_turl = model()->GetTemplateURLForGUID("default"); | |
2241 EXPECT_TRUE(result_turl); | |
2242 EXPECT_EQ(ASCIIToUTF16("new_kw"), result_turl->keyword()); | |
2243 EXPECT_EQ(ASCIIToUTF16("my name"), result_turl->short_name()); | |
2244 EXPECT_EQ(default_turl->url(), result_turl->url()); | |
2245 } | |
2246 | |
2247 TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) { | |
2248 scoped_ptr<TemplateURL> default_turl( | |
2249 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); | |
2250 | |
2251 TemplateURLData data(default_turl->data()); | |
2252 data.safe_for_autoreplace = true; // Can be replaced with built-in values. | |
2253 data.SetKeyword(ASCIIToUTF16("new_kw")); | |
2254 data.short_name = ASCIIToUTF16("my name"); | |
2255 data.SetURL("http://wrong.url.com?q={searchTerms}"); | |
2256 data.date_created = Time::FromTimeT(50); | |
2257 data.last_modified = Time::FromTimeT(50); | |
2258 data.sync_guid = "default"; | |
2259 model()->Add(new TemplateURL(NULL, data)); | |
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 } | |
OLD | NEW |