Chromium Code Reviews| 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|. 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } | |
| OLD | NEW |