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