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