two_client_search_engines_sync_test.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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_service_factory.h" 7#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" 8#include "chrome/browser/sync/test/integration/search_engines_helper.h" 9#include "chrome/browser/sync/test/integration/sync_datatype_helper.h" 10#include "chrome/browser/sync/test/integration/sync_integration_test_util.h" 11#include "chrome/browser/sync/test/integration/sync_test.h" 12#include "components/search_engines/template_url.h" 13#include "components/search_engines/template_url_service.h" 14 15using base::ASCIIToUTF16; 16using sync_integration_test_util::AwaitCommitActivityCompletion; 17 18class TwoClientSearchEnginesSyncTest : public SyncTest { 19 public: 20 TwoClientSearchEnginesSyncTest() : SyncTest(TWO_CLIENT) {} 21 virtual ~TwoClientSearchEnginesSyncTest() {} 22 23 private: 24 DISALLOW_COPY_AND_ASSIGN(TwoClientSearchEnginesSyncTest); 25}; 26 27// TCM ID - 8898628. 28IN_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. 39IN_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. 52IN_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. 71IN_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. 90IN_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. 109IN_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. 127IN_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. 143IN_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. 164IN_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. 190IN_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. 207IN_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. 225IN_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