two_client_extensions_sync_test.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved. 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// found in the LICENSE file. 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/basictypes.h" 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/extensions_helper.h" 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/sync_integration_test_util.h" 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/sync_test.h" 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::AllProfilesHaveSameExtensionsAsVerifier; 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::DisableExtension; 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::EnableExtension; 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::HasSameExtensionsAsVerifier; 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::IncognitoDisableExtension; 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::IncognitoEnableExtension; 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::InstallExtension; 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::InstallExtensionsPendingForSync; 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::UninstallExtension; 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing sync_integration_test_util::AwaitCommitActivityCompletion; 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass TwoClientExtensionsSyncTest : public SyncTest { 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public: 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {} 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner virtual ~TwoClientExtensionsSyncTest() {} 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project private: 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest); 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) { 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(SetupSync()); 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) { 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(SetupClients()); 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const int kNumExtensions = 5; 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project for (int i = 0; i < kNumExtensions; ++i) { 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(0), i); 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(1), i); 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(verifier(), i); 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(SetupSync()); 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(AwaitQuiescence()); 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project StartWithDifferentExtensions) { 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(SetupClients()); 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int i = 0; 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const int kNumCommonExtensions = 5; 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(0), i); 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(1), i); 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(verifier(), i); 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const int kNumProfile0Extensions = 10; 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) { 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(0), i); 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(verifier(), i); 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const int kNumProfile1Extensions = 10; 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) { 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(1), i); 775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner InstallExtension(verifier(), i); 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(SetupSync()); 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(AwaitQuiescence()); 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtensionsPendingForSync(GetProfile(0)); 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtensionsPendingForSync(GetProfile(1)); 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallDifferentExtensions) { 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ASSERT_TRUE(SetupClients()); 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int i = 0; 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const int kNumCommonExtensions = 5; 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(0), i); 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project InstallExtension(GetProfile(1), i); 100 InstallExtension(verifier(), i); 101 } 102 103 ASSERT_TRUE(SetupSync()); 104 105 ASSERT_TRUE(AwaitQuiescence()); 106 107 const int kNumProfile0Extensions = 10; 108 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) { 109 InstallExtension(GetProfile(0), i); 110 InstallExtension(verifier(), i); 111 } 112 113 const int kNumProfile1Extensions = 10; 114 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) { 115 InstallExtension(GetProfile(1), i); 116 InstallExtension(verifier(), i); 117 } 118 119 ASSERT_TRUE(AwaitQuiescence()); 120 121 InstallExtensionsPendingForSync(GetProfile(0)); 122 InstallExtensionsPendingForSync(GetProfile(1)); 123 124 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 125} 126 127// TCM ID - 3637311. 128IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) { 129 ASSERT_TRUE(SetupSync()); 130 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 131 132 InstallExtension(GetProfile(0), 0); 133 InstallExtension(verifier(), 0); 134 ASSERT_TRUE(AwaitQuiescence()); 135 136 InstallExtensionsPendingForSync(GetProfile(0)); 137 InstallExtensionsPendingForSync(GetProfile(1)); 138 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 139} 140 141// TCM ID - 3724281. 142IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) { 143 ASSERT_TRUE(SetupSync()); 144 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 145 146 InstallExtension(GetProfile(0), 0); 147 InstallExtension(verifier(), 0); 148 ASSERT_TRUE(AwaitQuiescence()); 149 150 InstallExtensionsPendingForSync(GetProfile(0)); 151 InstallExtensionsPendingForSync(GetProfile(1)); 152 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 153 154 UninstallExtension(GetProfile(0), 0); 155 UninstallExtension(verifier(), 0); 156 ASSERT_TRUE(AwaitQuiescence()); 157 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 158} 159 160// TCM ID - 3635304. 161IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) { 162 ASSERT_TRUE(SetupSync()); 163 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 164 165 InstallExtension(GetProfile(0), 0); 166 InstallExtension(GetProfile(1), 0); 167 ASSERT_TRUE(AwaitQuiescence()); 168 169 UninstallExtension(GetProfile(0), 0); 170 InstallExtension(GetProfile(0), 1); 171 InstallExtension(verifier(), 1); 172 173 InstallExtension(GetProfile(0), 2); 174 InstallExtension(GetProfile(1), 2); 175 InstallExtension(verifier(), 2); 176 177 InstallExtension(GetProfile(1), 3); 178 InstallExtension(verifier(), 3); 179 180 ASSERT_TRUE(AwaitQuiescence()); 181 InstallExtensionsPendingForSync(GetProfile(0)); 182 InstallExtensionsPendingForSync(GetProfile(1)); 183 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 184} 185 186// TCM ID - 3605300. 187IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 188 UpdateEnableDisableExtension) { 189 ASSERT_TRUE(SetupSync()); 190 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 191 192 InstallExtension(GetProfile(0), 0); 193 InstallExtension(GetProfile(1), 0); 194 InstallExtension(verifier(), 0); 195 ASSERT_TRUE(AwaitQuiescence()); 196 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 197 198 DisableExtension(GetProfile(0), 0); 199 DisableExtension(verifier(), 0); 200 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 201 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 202 203 ASSERT_TRUE(AwaitQuiescence()); 204 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 205 206 EnableExtension(GetProfile(1), 0); 207 EnableExtension(verifier(), 0); 208 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); 209 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); 210 211 ASSERT_TRUE(AwaitQuiescence()); 212 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 213} 214 215// TCM ID - 3728322. 216IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 217 UpdateIncognitoEnableDisable) { 218 ASSERT_TRUE(SetupSync()); 219 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 220 221 InstallExtension(GetProfile(0), 0); 222 InstallExtension(GetProfile(1), 0); 223 InstallExtension(verifier(), 0); 224 ASSERT_TRUE(AwaitQuiescence()); 225 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 226 227 IncognitoEnableExtension(GetProfile(0), 0); 228 IncognitoEnableExtension(verifier(), 0); 229 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 230 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 231 232 ASSERT_TRUE(AwaitQuiescence()); 233 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 234 235 IncognitoDisableExtension(GetProfile(1), 0); 236 IncognitoDisableExtension(verifier(), 0); 237 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); 238 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); 239 240 ASSERT_TRUE(AwaitQuiescence()); 241 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 242} 243 244// TCM ID - 3732278. 245IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableExtensions) { 246 ASSERT_TRUE(SetupSync()); 247 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 248 249 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::EXTENSIONS)); 250 InstallExtension(GetProfile(0), 1); 251 InstallExtension(verifier(), 1); 252 ASSERT_TRUE( 253 AwaitCommitActivityCompletion(GetClient(0)->service())); 254 ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier()); 255 256 ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::EXTENSIONS)); 257 ASSERT_TRUE(AwaitQuiescence()); 258 InstallExtensionsPendingForSync(GetProfile(0)); 259 InstallExtensionsPendingForSync(GetProfile(1)); 260 InstallExtensionsPendingForSync(verifier()); 261 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 262} 263 264// TCM ID - 3606290. 265IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) { 266 ASSERT_TRUE(SetupSync()); 267 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 268 269 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); 270 InstallExtension(GetProfile(0), 0); 271 InstallExtension(verifier(), 0); 272 ASSERT_TRUE( 273 AwaitCommitActivityCompletion(GetClient(0)->service())); 274 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 275 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 276 277 ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes()); 278 ASSERT_TRUE(AwaitQuiescence()); 279 InstallExtensionsPendingForSync(GetProfile(0)); 280 InstallExtensionsPendingForSync(GetProfile(1)); 281 InstallExtensionsPendingForSync(verifier()); 282 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 283} 284 285// Regression test for bug 104399: ensure that an extension installed prior to 286// setting up sync, when uninstalled, is also uninstalled from sync. 287IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 288 UninstallPreinstalledExtensions) { 289 ASSERT_TRUE(SetupClients()); 290 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 291 292 InstallExtension(GetProfile(0), 0); 293 InstallExtension(verifier(), 0); 294 295 ASSERT_TRUE(SetupSync()); 296 297 InstallExtensionsPendingForSync(GetProfile(0)); 298 InstallExtensionsPendingForSync(GetProfile(1)); 299 ASSERT_TRUE(AwaitQuiescence()); 300 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 301 302 UninstallExtension(GetProfile(0), 0); 303 UninstallExtension(verifier(), 0); 304 305 ASSERT_TRUE(AwaitQuiescence()); 306 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 307} 308 309// TODO(akalin): Add tests exercising: 310// - Offline installation/uninstallation behavior 311