two_client_search_engines_sync_test.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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 =
149      search_engines_helper::GetServiceForBrowserContext(1);
150  TemplateURL* turl = service->GetTemplateURLForKeyword(ASCIIToUTF16("test1"));
151  EXPECT_TRUE(turl);
152  service->ResetTemplateURL(turl, turl->short_name(), ASCIIToUTF16("test0"),
153                            turl->url());
154
155  ASSERT_TRUE(AwaitQuiescence());
156  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
157}
158
159// TCM ID - 9004187.
160IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, MergeMultiple) {
161  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
162  DisableVerifier();
163  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
164
165  // Set up some different search engines on each client, with some interesting
166  // conflicts.
167  // client0: { SE0, SE1, SE2 }
168  for (int i = 0; i < 3; ++i)
169    search_engines_helper::AddSearchEngine(0, i);
170
171  // client1: { SE0, SE2, SE3, SE0 + different URL }
172  search_engines_helper::AddSearchEngine(1, 0);
173  search_engines_helper::AddSearchEngine(1, 2);
174  search_engines_helper::AddSearchEngine(1, 3);
175  Profile* profile = sync_datatype_helper::test()->GetProfile(1);
176  TemplateURLServiceFactory::GetForProfile(profile)->Add(
177      search_engines_helper::CreateTestTemplateURL(profile, 0,
178          ASCIIToUTF16("somethingelse.com"), "http://www.somethingelse.com/",
179          "somethingelse"));
180
181  ASSERT_TRUE(AwaitQuiescence());
182  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
183}
184
185// TCM ID - 8906436.
186IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, DisableSync) {
187  ASSERT_TRUE(SetupSync());
188  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
189
190  ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
191  search_engines_helper::AddSearchEngine(0, 0);
192  ASSERT_TRUE(
193      GetClient(0)->AwaitFullSyncCompletion("Added a search engine."));
194  ASSERT_TRUE(search_engines_helper::ServiceMatchesVerifier(0));
195  ASSERT_FALSE(search_engines_helper::ServiceMatchesVerifier(1));
196
197  ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
198  ASSERT_TRUE(AwaitQuiescence());
199  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
200}
201
202// TCM ID - 8891809.
203IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, SyncDefault) {
204  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
205  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
206
207  search_engines_helper::AddSearchEngine(0, 0);
208  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
209
210  // Change the default to the new search engine, sync, and ensure that it
211  // changed in the second client. AllServicesMatch does a default search
212  // provider check.
213  search_engines_helper::ChangeDefaultSearchProvider(0, 0);
214  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
215
216  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
217}
218
219// Ensure that we can change the search engine and immediately delete it
220// without putting the clients out of sync.
221IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, DeleteSyncedDefault) {
222  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
223  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
224
225  search_engines_helper::AddSearchEngine(0, 0);
226  search_engines_helper::AddSearchEngine(0, 1);
227  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
228
229  search_engines_helper::ChangeDefaultSearchProvider(0, 0);
230  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
231  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
232
233  // Change the default on the first client and delete the old default.
234  search_engines_helper::ChangeDefaultSearchProvider(0, 1);
235  search_engines_helper::DeleteSearchEngineBySeed(0, 0);
236  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
237
238  ASSERT_TRUE(search_engines_helper::AllServicesMatch());
239}
240