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.
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/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"
14 class TwoClientSearchEnginesSyncTest : public SyncTest {
16 TwoClientSearchEnginesSyncTest() : SyncTest(TWO_CLIENT) {}
17 virtual ~TwoClientSearchEnginesSyncTest() {}
20 DISALLOW_COPY_AND_ASSIGN(TwoClientSearchEnginesSyncTest);
24 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, Add) {
25 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
26 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
28 search_engines_helper::AddSearchEngine(0, 0);
30 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
31 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
35 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, AddMultiple) {
36 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
37 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
40 for (int i = 0; i < 3; ++i)
41 search_engines_helper::AddSearchEngine(0, i);
43 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
44 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
48 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, Duplicates) {
49 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
50 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
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());
67 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, UpdateKeyword) {
68 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
69 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
71 search_engines_helper::AddSearchEngine(0, 0);
73 // Change the keyword.
74 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
75 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
77 search_engines_helper::EditSearchEngine(0, ASCIIToUTF16("test0"),
78 ASCIIToUTF16("test0"), ASCIIToUTF16("newkeyword"),
79 "http://www.test0.com/");
81 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
82 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
86 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, UpdateUrl) {
87 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
88 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
90 search_engines_helper::AddSearchEngine(0, 0);
92 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
93 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
96 search_engines_helper::EditSearchEngine(0, ASCIIToUTF16("test0"),
97 ASCIIToUTF16("test0"), ASCIIToUTF16("test0"),
98 "http://www.wikipedia.org/q=%s");
100 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
101 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
105 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, UpdateName) {
106 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
107 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
109 search_engines_helper::AddSearchEngine(0, 0);
111 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
112 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
114 // Change the short name.
115 search_engines_helper::EditSearchEngine(0, ASCIIToUTF16("test0"),
116 ASCIIToUTF16("New Name"), ASCIIToUTF16("test0"), "http://www.test0.com/");
118 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
119 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
123 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, Delete) {
124 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
125 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
127 search_engines_helper::AddSearchEngine(0, 0);
129 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
130 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
132 search_engines_helper::DeleteSearchEngineBySeed(0, 0);
134 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
135 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
139 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, ConflictKeyword) {
140 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
142 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
144 // Add a different search engine to each client, but make their keywords
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"));
152 service->ResetTemplateURL(turl, turl->short_name(), ASCIIToUTF16("test0"),
155 ASSERT_TRUE(AwaitQuiescence());
156 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
160 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, MergeMultiple) {
161 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
163 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
165 // Set up some different search engines on each client, with some interesting
167 // client0: { SE0, SE1, SE2 }
168 for (int i = 0; i < 3; ++i)
169 search_engines_helper::AddSearchEngine(0, i);
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/",
181 ASSERT_TRUE(AwaitQuiescence());
182 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
186 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, DisableSync) {
187 ASSERT_TRUE(SetupSync());
188 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
190 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
191 search_engines_helper::AddSearchEngine(0, 0);
193 GetClient(0)->AwaitFullSyncCompletion("Added a search engine."));
194 ASSERT_TRUE(search_engines_helper::ServiceMatchesVerifier(0));
195 ASSERT_FALSE(search_engines_helper::ServiceMatchesVerifier(1));
197 ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
198 ASSERT_TRUE(AwaitQuiescence());
199 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
203 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, SyncDefault) {
204 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
205 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
207 search_engines_helper::AddSearchEngine(0, 0);
208 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
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
213 search_engines_helper::ChangeDefaultSearchProvider(0, 0);
214 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
216 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
219 // Ensure that we can change the search engine and immediately delete it
220 // without putting the clients out of sync.
221 IN_PROC_BROWSER_TEST_F(TwoClientSearchEnginesSyncTest, DeleteSyncedDefault) {
222 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
223 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
225 search_engines_helper::AddSearchEngine(0, 0);
226 search_engines_helper::AddSearchEngine(0, 1);
227 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
229 search_engines_helper::ChangeDefaultSearchProvider(0, 0);
230 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
231 ASSERT_TRUE(search_engines_helper::AllServicesMatch());
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)));
238 ASSERT_TRUE(search_engines_helper::AllServicesMatch());