• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "base/strings/utf_string_conversions.h"
6 #include "chrome/browser/search_engines/template_url.h"
7 #include "chrome/browser/search_engines/template_url_service.h"
8 #include "chrome/browser/search_engines/template_url_service_factory.h"
9 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
10 #include "chrome/browser/sync/test/integration/search_engines_helper.h"
11 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
12 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
13 #include "chrome/browser/sync/test/integration/sync_test.h"
14 
15 using base::ASCIIToUTF16;
16 using sync_integration_test_util::AwaitCommitActivityCompletion;
17 
18 class TwoClientSearchEnginesSyncTest : public SyncTest {
19  public:
TwoClientSearchEnginesSyncTest()20   TwoClientSearchEnginesSyncTest() : SyncTest(TWO_CLIENT) {}
~TwoClientSearchEnginesSyncTest()21   virtual ~TwoClientSearchEnginesSyncTest() {}
22 
23  private:
24   DISALLOW_COPY_AND_ASSIGN(TwoClientSearchEnginesSyncTest);
25 };
26 
27 // TCM ID - 8898628.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,Add)28 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, Add) {
29   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
30   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
31 
32   search_engines_helper::AddSearchEngine(0, 0);
33 
34   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
35   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
36 }
37 
38 // TCM ID - 8912240.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,AddMultiple)39 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, AddMultiple) {
40   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
41   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
42 
43   // Add a few entries.
44   for (int i = 0; i < 3; ++i)
45     search_engines_helper::AddSearchEngine(0, i);
46 
47   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
48   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
49 }
50 
51 // TCM ID - 9011135.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,Duplicates)52 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, Duplicates) {
53   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
54   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
55 
56   // Add two entries with the same Name and URL (but different keywords).
57   // Note that we have to change the GUID of the duplicate.
58   search_engines_helper::AddSearchEngine(0, 0);
59   Profile* profile = sync_datatype_helper::test()->GetProfile(0);
60   TemplateURLServiceFactory::GetForProfile(profile)->Add(
61       search_engines_helper::CreateTestTemplateURL(profile, 0,
62           ASCIIToUTF16("somethingelse"), "newguid"));
63   search_engines_helper::GetVerifierService()->Add(
64       search_engines_helper::CreateTestTemplateURL(profile, 0,
65           ASCIIToUTF16("somethingelse"), "newguid"));
66   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
67   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
68 }
69 
70 // TCM ID - 9004201.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,UpdateKeyword)71 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, UpdateKeyword) {
72   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
73   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
74 
75   search_engines_helper::AddSearchEngine(0, 0);
76 
77   // Change the keyword.
78   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
79   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
80 
81   search_engines_helper::EditSearchEngine(0, ASCIIToUTF16("test0"),
82       ASCIIToUTF16("test0"), ASCIIToUTF16("newkeyword"),
83       "http://www.test0.com/");
84 
85   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
86   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
87 }
88 
89 // TCM ID - 8894859.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,UpdateUrl)90 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, UpdateUrl) {
91   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
92   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
93 
94   search_engines_helper::AddSearchEngine(0, 0);
95 
96   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
97   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
98 
99   // Change the URL.
100   search_engines_helper::EditSearchEngine(0, ASCIIToUTF16("test0"),
101       ASCIIToUTF16("test0"), ASCIIToUTF16("test0"),
102       "http://www.wikipedia.org/q=%s");
103 
104   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
105   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
106 }
107 
108 // TCM ID - 8910490.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,UpdateName)109 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, UpdateName) {
110   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
111   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
112 
113   search_engines_helper::AddSearchEngine(0, 0);
114 
115   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
116   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
117 
118   // Change the short name.
119   search_engines_helper::EditSearchEngine(0, ASCIIToUTF16("test0"),
120       ASCIIToUTF16("New Name"), ASCIIToUTF16("test0"), "http://www.test0.com/");
121 
122   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
123   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
124 }
125 
126 // TCM ID - 8898660.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,Delete)127 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, Delete) {
128   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
129   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
130 
131   search_engines_helper::AddSearchEngine(0, 0);
132 
133   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
134   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
135 
136   search_engines_helper::DeleteSearchEngineBySeed(0, 0);
137 
138   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
139   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
140 }
141 
142 // TCM ID - 9004196.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,ConflictKeyword)143 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, ConflictKeyword) {
144   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
145   DisableVerifier();
146   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
147 
148   // Add a different search engine to each client, but make their keywords
149   // conflict.
150   search_engines_helper::AddSearchEngine(0, 0);
151   search_engines_helper::AddSearchEngine(1, 1);
152   TemplateURLService* service =
153       search_engines_helper::GetServiceForBrowserContext(1);
154   TemplateURL* turl = service->GetTemplateURLForKeyword(ASCIIToUTF16("test1"));
155   EXPECT_TRUE(turl);
156   service->ResetTemplateURL(turl, turl->short_name(), ASCIIToUTF16("test0"),
157                             turl->url());
158 
159   ASSERT_TRUE(AwaitQuiescence());
160   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
161 }
162 
163 // TCM ID - 9004187.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,MergeMultiple)164 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, MergeMultiple) {
165   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
166   DisableVerifier();
167   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
168 
169   // Set up some different search engines on each client, with some interesting
170   // conflicts.
171   // client0: { SE0, SE1, SE2 }
172   for (int i = 0; i < 3; ++i)
173     search_engines_helper::AddSearchEngine(0, i);
174 
175   // client1: { SE0, SE2, SE3, SE0 + different URL }
176   search_engines_helper::AddSearchEngine(1, 0);
177   search_engines_helper::AddSearchEngine(1, 2);
178   search_engines_helper::AddSearchEngine(1, 3);
179   Profile* profile = sync_datatype_helper::test()->GetProfile(1);
180   TemplateURLServiceFactory::GetForProfile(profile)->Add(
181       search_engines_helper::CreateTestTemplateURL(profile, 0,
182           ASCIIToUTF16("somethingelse.com"), "http://www.somethingelse.com/",
183           "somethingelse"));
184 
185   ASSERT_TRUE(AwaitQuiescence());
186   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
187 }
188 
189 // TCM ID - 8906436.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,DisableSync)190 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, DisableSync) {
191   ASSERT_TRUE(SetupSync());
192   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
193 
194   ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
195   search_engines_helper::AddSearchEngine(0, 0);
196   ASSERT_TRUE(
197       AwaitCommitActivityCompletion(GetSyncService((0))));
198   ASSERT_TRUE(search_engines_helper::ServiceMatchesVerifier(0));
199   ASSERT_FALSE(search_engines_helper::ServiceMatchesVerifier(1));
200 
201   ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
202   ASSERT_TRUE(AwaitQuiescence());
203   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
204 }
205 
206 // TCM ID - 8891809.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,SyncDefault)207 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, SyncDefault) {
208   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
209   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
210 
211   search_engines_helper::AddSearchEngine(0, 0);
212   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
213 
214   // Change the default to the new search engine, sync, and ensure that it
215   // changed in the second client. AllServicesMatch does a default search
216   // provider check.
217   search_engines_helper::ChangeDefaultSearchProvider(0, 0);
218   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
219 
220   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
221 }
222 
223 // Ensure that we can change the search engine and immediately delete it
224 // without putting the clients out of sync.
IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest,DeleteSyncedDefault)225 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, DeleteSyncedDefault) {
226   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
227   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
228 
229   search_engines_helper::AddSearchEngine(0, 0);
230   search_engines_helper::AddSearchEngine(0, 1);
231   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
232 
233   search_engines_helper::ChangeDefaultSearchProvider(0, 0);
234   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
235   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
236 
237   // Change the default on the first client and delete the old default.
238   search_engines_helper::ChangeDefaultSearchProvider(0, 1);
239   search_engines_helper::DeleteSearchEngineBySeed(0, 0);
240   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
241 
242   ASSERT_TRUE(search_engines_helper::AllServicesMatch());
243 }
244