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