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/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 150 |
151 class TemplateURLServiceSyncTest : public testing::Test { | 151 class TemplateURLServiceSyncTest : public testing::Test { |
152 public: | 152 public: |
153 typedef TemplateURLService::SyncDataMap SyncDataMap; | 153 typedef TemplateURLService::SyncDataMap SyncDataMap; |
154 | 154 |
155 TemplateURLServiceSyncTest(); | 155 TemplateURLServiceSyncTest(); |
156 | 156 |
157 virtual void SetUp() OVERRIDE; | 157 virtual void SetUp() OVERRIDE; |
158 virtual void TearDown() OVERRIDE; | 158 virtual void TearDown() OVERRIDE; |
159 | 159 |
160 TemplateURLService* model() { return test_util_a_.model(); } | 160 TemplateURLService* model() { return test_util_a_->model(); } |
161 // For readability, we redefine an accessor for Model A for use in tests that | 161 // For readability, we redefine an accessor for Model A for use in tests that |
162 // involve syncing two models. | 162 // involve syncing two models. |
163 TemplateURLService* model_a() { return test_util_a_.model(); } | 163 TemplateURLService* model_a() { return test_util_a_->model(); } |
164 TemplateURLService* model_b() { return model_b_.get(); } | 164 TemplateURLService* model_b() { return model_b_.get(); } |
165 TestingProfile* profile_a() { return test_util_a_.profile(); } | 165 TestingProfile* profile_a() { return test_util_a_->profile(); } |
166 TestChangeProcessor* processor() { return sync_processor_.get(); } | 166 TestChangeProcessor* processor() { return sync_processor_.get(); } |
167 scoped_ptr<syncer::SyncChangeProcessor> PassProcessor(); | 167 scoped_ptr<syncer::SyncChangeProcessor> PassProcessor(); |
168 scoped_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory(); | 168 scoped_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory(); |
169 | 169 |
170 // Creates a TemplateURL with some test values. The caller owns the returned | 170 // Creates a TemplateURL with some test values. The caller owns the returned |
171 // TemplateURL*. | 171 // TemplateURL*. |
172 TemplateURL* CreateTestTemplateURL(const base::string16& keyword, | 172 TemplateURL* CreateTestTemplateURL(const base::string16& keyword, |
173 const std::string& url, | 173 const std::string& url, |
174 const std::string& guid = std::string(), | 174 const std::string& guid = std::string(), |
175 time_t last_mod = 100, | 175 time_t last_mod = 100, |
(...skipping 27 matching lines...) Expand all Loading... |
203 // Creates a new TemplateURL copying the fields of |turl| but replacing | 203 // Creates a new TemplateURL copying the fields of |turl| but replacing |
204 // the |url| and |guid| and initializing the date_created and last_modified | 204 // the |url| and |guid| and initializing the date_created and last_modified |
205 // timestamps to a default value of 100. The caller owns the returned | 205 // timestamps to a default value of 100. The caller owns the returned |
206 // TemplateURL*. | 206 // TemplateURL*. |
207 TemplateURL* CopyTemplateURL(const TemplateURLData* turl, | 207 TemplateURL* CopyTemplateURL(const TemplateURLData* turl, |
208 const std::string& url, | 208 const std::string& url, |
209 const std::string& guid); | 209 const std::string& guid); |
210 | 210 |
211 protected: | 211 protected: |
212 // We keep two TemplateURLServices to test syncing between them. | 212 // We keep two TemplateURLServices to test syncing between them. |
213 TemplateURLServiceTestUtil test_util_a_; | 213 scoped_ptr<TemplateURLServiceTestUtil> test_util_a_; |
214 scoped_ptr<TestingProfile> profile_b_; | 214 scoped_ptr<TestingProfile> profile_b_; |
215 scoped_ptr<TemplateURLService> model_b_; | 215 scoped_ptr<TemplateURLService> model_b_; |
216 | 216 |
217 // Our dummy ChangeProcessor used to inspect changes pushed to Sync. | 217 // Our dummy ChangeProcessor used to inspect changes pushed to Sync. |
218 scoped_ptr<TestChangeProcessor> sync_processor_; | 218 scoped_ptr<TestChangeProcessor> sync_processor_; |
219 scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> sync_processor_wrapper_; | 219 scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> sync_processor_wrapper_; |
220 | 220 |
221 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceSyncTest); | 221 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceSyncTest); |
222 }; | 222 }; |
223 | 223 |
224 TemplateURLServiceSyncTest::TemplateURLServiceSyncTest() | 224 TemplateURLServiceSyncTest::TemplateURLServiceSyncTest() |
225 : sync_processor_(new TestChangeProcessor), | 225 : sync_processor_(new TestChangeProcessor), |
226 sync_processor_wrapper_(new syncer::SyncChangeProcessorWrapperForTest( | 226 sync_processor_wrapper_(new syncer::SyncChangeProcessorWrapperForTest( |
227 sync_processor_.get())) {} | 227 sync_processor_.get())) {} |
228 | 228 |
229 void TemplateURLServiceSyncTest::SetUp() { | 229 void TemplateURLServiceSyncTest::SetUp() { |
230 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(true); | 230 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(true); |
231 test_util_a_.SetUp(); | 231 test_util_a_.reset(new TemplateURLServiceTestUtil); |
232 // Use ChangeToLoadState() instead of VerifyLoad() so we don't actually pull | 232 // Use ChangeToLoadState() instead of VerifyLoad() so we don't actually pull |
233 // in the prepopulate data, which the sync tests don't care about (and would | 233 // in the prepopulate data, which the sync tests don't care about (and would |
234 // just foul them up). | 234 // just foul them up). |
235 test_util_a_.ChangeModelToLoadState(); | 235 test_util_a_->ChangeModelToLoadState(); |
236 profile_b_.reset(new TestingProfile); | 236 profile_b_.reset(new TestingProfile); |
237 TemplateURLServiceFactory::GetInstance()-> | 237 TemplateURLServiceFactory::GetInstance()-> |
238 RegisterUserPrefsOnBrowserContextForTest(profile_b_.get()); | 238 RegisterUserPrefsOnBrowserContextForTest(profile_b_.get()); |
239 model_b_.reset(new TemplateURLService( | 239 model_b_.reset(new TemplateURLService( |
240 profile_b_->GetPrefs(), scoped_ptr<SearchTermsData>( | 240 profile_b_->GetPrefs(), scoped_ptr<SearchTermsData>( |
241 new UIThreadSearchTermsData(profile_b_.get())), NULL, | 241 new UIThreadSearchTermsData(profile_b_.get())), NULL, |
242 scoped_ptr<TemplateURLServiceClient>(), NULL, NULL, base::Closure())); | 242 scoped_ptr<TemplateURLServiceClient>(), NULL, NULL, base::Closure())); |
243 model_b_->Load(); | 243 model_b_->Load(); |
244 } | 244 } |
245 | 245 |
246 void TemplateURLServiceSyncTest::TearDown() { | 246 void TemplateURLServiceSyncTest::TearDown() { |
247 test_util_a_.TearDown(); | 247 test_util_a_.reset(); |
248 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(false); | 248 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(false); |
249 } | 249 } |
250 | 250 |
251 scoped_ptr<syncer::SyncChangeProcessor> | 251 scoped_ptr<syncer::SyncChangeProcessor> |
252 TemplateURLServiceSyncTest::PassProcessor() { | 252 TemplateURLServiceSyncTest::PassProcessor() { |
253 return sync_processor_wrapper_.PassAs<syncer::SyncChangeProcessor>(); | 253 return sync_processor_wrapper_.PassAs<syncer::SyncChangeProcessor>(); |
254 } | 254 } |
255 | 255 |
256 scoped_ptr<syncer::SyncErrorFactory> TemplateURLServiceSyncTest:: | 256 scoped_ptr<syncer::SyncErrorFactory> TemplateURLServiceSyncTest:: |
257 CreateAndPassSyncErrorFactory() { | 257 CreateAndPassSyncErrorFactory() { |
(...skipping 1396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1654 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 1654 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
1655 | 1655 |
1656 // Change the default search provider to a managed one. | 1656 // Change the default search provider to a managed one. |
1657 const char kName[] = "manageddefault"; | 1657 const char kName[] = "manageddefault"; |
1658 const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; | 1658 const char kSearchURL[] = "http://manageddefault.com/search?t={searchTerms}"; |
1659 const char kIconURL[] = "http://manageddefault.com/icon.jpg"; | 1659 const char kIconURL[] = "http://manageddefault.com/icon.jpg"; |
1660 const char kEncodings[] = "UTF-16;UTF-32"; | 1660 const char kEncodings[] = "UTF-16;UTF-32"; |
1661 const char kAlternateURL[] = | 1661 const char kAlternateURL[] = |
1662 "http://manageddefault.com/search#t={searchTerms}"; | 1662 "http://manageddefault.com/search#t={searchTerms}"; |
1663 const char kSearchTermsReplacementKey[] = "espv"; | 1663 const char kSearchTermsReplacementKey[] = "espv"; |
1664 test_util_a_.SetManagedDefaultSearchPreferences(true, kName, kName, | 1664 test_util_a_->SetManagedDefaultSearchPreferences(true, kName, kName, |
1665 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, | 1665 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, |
1666 kSearchTermsReplacementKey); | 1666 kSearchTermsReplacementKey); |
1667 const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); | 1667 const TemplateURL* dsp_turl = model()->GetDefaultSearchProvider(); |
1668 | 1668 |
1669 EXPECT_TRUE(model()->is_default_search_managed()); | 1669 EXPECT_TRUE(model()->is_default_search_managed()); |
1670 | 1670 |
1671 // Add a new entry from Sync. It should still sync in despite the default | 1671 // Add a new entry from Sync. It should still sync in despite the default |
1672 // being managed. | 1672 // being managed. |
1673 syncer::SyncChangeList changes; | 1673 syncer::SyncChangeList changes; |
1674 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, | 1674 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_ADD, |
(...skipping 10 matching lines...) Expand all Loading... |
1685 prefs::kSyncedDefaultSearchProviderGUID, | 1685 prefs::kSyncedDefaultSearchProviderGUID, |
1686 "newdefault"); | 1686 "newdefault"); |
1687 | 1687 |
1688 EXPECT_EQ(dsp_turl, model()->GetDefaultSearchProvider()); | 1688 EXPECT_EQ(dsp_turl, model()->GetDefaultSearchProvider()); |
1689 EXPECT_TRUE(model()->is_default_search_managed()); | 1689 EXPECT_TRUE(model()->is_default_search_managed()); |
1690 | 1690 |
1691 // Go unmanaged. Ensure that the DSP changes to the expected pending entry | 1691 // Go unmanaged. Ensure that the DSP changes to the expected pending entry |
1692 // from Sync. | 1692 // from Sync. |
1693 const TemplateURL* expected_default = | 1693 const TemplateURL* expected_default = |
1694 model()->GetTemplateURLForGUID("newdefault"); | 1694 model()->GetTemplateURLForGUID("newdefault"); |
1695 test_util_a_.RemoveManagedDefaultSearchPreferences(); | 1695 test_util_a_->RemoveManagedDefaultSearchPreferences(); |
1696 | 1696 |
1697 EXPECT_EQ(expected_default, model()->GetDefaultSearchProvider()); | 1697 EXPECT_EQ(expected_default, model()->GetDefaultSearchProvider()); |
1698 } | 1698 } |
1699 | 1699 |
1700 TEST_F(TemplateURLServiceSyncTest, SyncMergeDeletesDefault) { | 1700 TEST_F(TemplateURLServiceSyncTest, SyncMergeDeletesDefault) { |
1701 // If the value from Sync is a duplicate of the local default and is newer, it | 1701 // If the value from Sync is a duplicate of the local default and is newer, it |
1702 // should safely replace the local value and set as the new default. | 1702 // should safely replace the local value and set as the new default. |
1703 TemplateURL* default_turl = CreateTestTemplateURL(ASCIIToUTF16("key1"), | 1703 TemplateURL* default_turl = CreateTestTemplateURL(ASCIIToUTF16("key1"), |
1704 "http://key1.com/{searchTerms}", "whateverguid", 10); | 1704 "http://key1.com/{searchTerms}", "whateverguid", 10); |
1705 model()->Add(default_turl); | 1705 model()->Add(default_turl); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1839 data_copy.last_modified = Time::FromTimeT(10); | 1839 data_copy.last_modified = Time::FromTimeT(10); |
1840 base::string16 original_keyword = data_copy.keyword(); | 1840 base::string16 original_keyword = data_copy.keyword(); |
1841 data_copy.SetKeyword(ASCIIToUTF16(kNewKeyword)); | 1841 data_copy.SetKeyword(ASCIIToUTF16(kNewKeyword)); |
1842 // Set safe_for_autoreplace to false so our keyword survives. | 1842 // Set safe_for_autoreplace to false so our keyword survives. |
1843 data_copy.safe_for_autoreplace = false; | 1843 data_copy.safe_for_autoreplace = false; |
1844 model()->Add(new TemplateURL(data_copy)); | 1844 model()->Add(new TemplateURL(data_copy)); |
1845 | 1845 |
1846 // Merge the prepopulate search engines. | 1846 // Merge the prepopulate search engines. |
1847 base::Time pre_merge_time = base::Time::Now(); | 1847 base::Time pre_merge_time = base::Time::Now(); |
1848 base::RunLoop().RunUntilIdle(); | 1848 base::RunLoop().RunUntilIdle(); |
1849 test_util_a_.ResetModel(true); | 1849 test_util_a_->ResetModel(true); |
1850 | 1850 |
1851 // The newly added search engine should have been safely merged, with an | 1851 // The newly added search engine should have been safely merged, with an |
1852 // updated time. | 1852 // updated time. |
1853 TemplateURL* added_turl = model()->GetTemplateURLForKeyword( | 1853 TemplateURL* added_turl = model()->GetTemplateURLForKeyword( |
1854 ASCIIToUTF16(kNewKeyword)); | 1854 ASCIIToUTF16(kNewKeyword)); |
1855 ASSERT_TRUE(added_turl); | 1855 ASSERT_TRUE(added_turl); |
1856 base::Time new_timestamp = added_turl->last_modified(); | 1856 base::Time new_timestamp = added_turl->last_modified(); |
1857 EXPECT_GE(new_timestamp, pre_merge_time); | 1857 EXPECT_GE(new_timestamp, pre_merge_time); |
1858 std::string sync_guid = added_turl->sync_guid(); | 1858 std::string sync_guid = added_turl->sync_guid(); |
1859 | 1859 |
(...skipping 28 matching lines...) Expand all Loading... |
1888 EXPECT_EQ(0, merge_result.num_items_deleted()); | 1888 EXPECT_EQ(0, merge_result.num_items_deleted()); |
1889 EXPECT_EQ(static_cast<int>(prepop_turls.size()), | 1889 EXPECT_EQ(static_cast<int>(prepop_turls.size()), |
1890 merge_result.num_items_before_association()); | 1890 merge_result.num_items_before_association()); |
1891 EXPECT_EQ(static_cast<int>(prepop_turls.size()), | 1891 EXPECT_EQ(static_cast<int>(prepop_turls.size()), |
1892 merge_result.num_items_after_association()); | 1892 merge_result.num_items_after_association()); |
1893 } | 1893 } |
1894 | 1894 |
1895 TEST_F(TemplateURLServiceSyncTest, SyncBaseURLs) { | 1895 TEST_F(TemplateURLServiceSyncTest, SyncBaseURLs) { |
1896 // Verify that bringing in a remote TemplateURL that uses Google base URLs | 1896 // Verify that bringing in a remote TemplateURL that uses Google base URLs |
1897 // causes it to get a local keyword that matches the local base URL. | 1897 // causes it to get a local keyword that matches the local base URL. |
1898 test_util_a_.SetGoogleBaseURL(GURL("http://google.com/")); | 1898 test_util_a_->SetGoogleBaseURL(GURL("http://google.com/")); |
1899 syncer::SyncDataList initial_data; | 1899 syncer::SyncDataList initial_data; |
1900 scoped_ptr<TemplateURL> turl(CreateTestTemplateURL( | 1900 scoped_ptr<TemplateURL> turl(CreateTestTemplateURL( |
1901 ASCIIToUTF16("google.co.uk"), "{google:baseURL}search?q={searchTerms}", | 1901 ASCIIToUTF16("google.co.uk"), "{google:baseURL}search?q={searchTerms}", |
1902 "guid")); | 1902 "guid")); |
1903 initial_data.push_back( | 1903 initial_data.push_back( |
1904 TemplateURLService::CreateSyncDataFromTemplateURL(*turl)); | 1904 TemplateURLService::CreateSyncDataFromTemplateURL(*turl)); |
1905 model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, | 1905 model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, |
1906 PassProcessor(), CreateAndPassSyncErrorFactory()); | 1906 PassProcessor(), CreateAndPassSyncErrorFactory()); |
1907 TemplateURL* synced_turl = model()->GetTemplateURLForGUID("guid"); | 1907 TemplateURL* synced_turl = model()->GetTemplateURLForGUID("guid"); |
1908 ASSERT_TRUE(synced_turl); | 1908 ASSERT_TRUE(synced_turl); |
1909 EXPECT_EQ(ASCIIToUTF16("google.com"), synced_turl->keyword()); | 1909 EXPECT_EQ(ASCIIToUTF16("google.com"), synced_turl->keyword()); |
1910 EXPECT_EQ(0U, processor()->change_list_size()); | 1910 EXPECT_EQ(0U, processor()->change_list_size()); |
1911 | 1911 |
1912 // Remote updates to this URL's keyword should be silently ignored. | 1912 // Remote updates to this URL's keyword should be silently ignored. |
1913 syncer::SyncChangeList changes; | 1913 syncer::SyncChangeList changes; |
1914 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_UPDATE, | 1914 changes.push_back(CreateTestSyncChange(syncer::SyncChange::ACTION_UPDATE, |
1915 CreateTestTemplateURL(ASCIIToUTF16("google.de"), | 1915 CreateTestTemplateURL(ASCIIToUTF16("google.de"), |
1916 "{google:baseURL}search?q={searchTerms}", "guid"))); | 1916 "{google:baseURL}search?q={searchTerms}", "guid"))); |
1917 model()->ProcessSyncChanges(FROM_HERE, changes); | 1917 model()->ProcessSyncChanges(FROM_HERE, changes); |
1918 EXPECT_EQ(ASCIIToUTF16("google.com"), synced_turl->keyword()); | 1918 EXPECT_EQ(ASCIIToUTF16("google.com"), synced_turl->keyword()); |
1919 EXPECT_EQ(0U, processor()->change_list_size()); | 1919 EXPECT_EQ(0U, processor()->change_list_size()); |
1920 | 1920 |
1921 // A local change to the Google base URL should update the keyword and | 1921 // A local change to the Google base URL should update the keyword and |
1922 // generate a sync change. | 1922 // generate a sync change. |
1923 test_util_a_.SetGoogleBaseURL(GURL("http://google.co.in/")); | 1923 test_util_a_->SetGoogleBaseURL(GURL("http://google.co.in/")); |
1924 EXPECT_EQ(ASCIIToUTF16("google.co.in"), synced_turl->keyword()); | 1924 EXPECT_EQ(ASCIIToUTF16("google.co.in"), synced_turl->keyword()); |
1925 EXPECT_EQ(1U, processor()->change_list_size()); | 1925 EXPECT_EQ(1U, processor()->change_list_size()); |
1926 ASSERT_TRUE(processor()->contains_guid("guid")); | 1926 ASSERT_TRUE(processor()->contains_guid("guid")); |
1927 syncer::SyncChange change(processor()->change_for_guid("guid")); | 1927 syncer::SyncChange change(processor()->change_for_guid("guid")); |
1928 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type()); | 1928 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type()); |
1929 EXPECT_EQ("google.co.in", GetKeyword(change.sync_data())); | 1929 EXPECT_EQ("google.co.in", GetKeyword(change.sync_data())); |
1930 } | 1930 } |
1931 | 1931 |
1932 TEST_F(TemplateURLServiceSyncTest, MergeInSyncTemplateURL) { | 1932 TEST_F(TemplateURLServiceSyncTest, MergeInSyncTemplateURL) { |
1933 // An enumeration used to indicate which TemplateURL test value is expected | 1933 // An enumeration used to indicate which TemplateURL test value is expected |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2235 const char kNewGUID[] = "newdefault"; | 2235 const char kNewGUID[] = "newdefault"; |
2236 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("what"), | 2236 model()->Add(CreateTestTemplateURL(ASCIIToUTF16("what"), |
2237 "http://thewhat.com/{searchTerms}", | 2237 "http://thewhat.com/{searchTerms}", |
2238 kNewGUID)); | 2238 kNewGUID)); |
2239 model()->SetUserSelectedDefaultSearchProvider( | 2239 model()->SetUserSelectedDefaultSearchProvider( |
2240 model()->GetTemplateURLForGUID(kNewGUID)); | 2240 model()->GetTemplateURLForGUID(kNewGUID)); |
2241 | 2241 |
2242 EXPECT_EQ(kNewGUID, profile_a()->GetTestingPrefService()->GetString( | 2242 EXPECT_EQ(kNewGUID, profile_a()->GetTestingPrefService()->GetString( |
2243 prefs::kSyncedDefaultSearchProviderGUID)); | 2243 prefs::kSyncedDefaultSearchProviderGUID)); |
2244 } | 2244 } |
OLD | NEW |