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