two_client_extensions_sync_test.cc revision f2477e01787aa58f445919b809d89e252beef54f
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/basictypes.h" 6#include "chrome/browser/sync/profile_sync_service_harness.h" 7#include "chrome/browser/sync/test/integration/extensions_helper.h" 8#include "chrome/browser/sync/test/integration/sync_test.h" 9 10using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier; 11using extensions_helper::DisableExtension; 12using extensions_helper::EnableExtension; 13using extensions_helper::HasSameExtensionsAsVerifier; 14using extensions_helper::IncognitoDisableExtension; 15using extensions_helper::IncognitoEnableExtension; 16using extensions_helper::InstallExtension; 17using extensions_helper::InstallExtensionsPendingForSync; 18using extensions_helper::UninstallExtension; 19 20class TwoClientExtensionsSyncTest : public SyncTest { 21 public: 22 TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {} 23 24 virtual ~TwoClientExtensionsSyncTest() {} 25 26 private: 27 DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest); 28}; 29 30IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) { 31 ASSERT_TRUE(SetupSync()); 32 33 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 34} 35 36IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) { 37 ASSERT_TRUE(SetupClients()); 38 39 const int kNumExtensions = 5; 40 for (int i = 0; i < kNumExtensions; ++i) { 41 InstallExtension(GetProfile(0), i); 42 InstallExtension(GetProfile(1), i); 43 InstallExtension(verifier(), i); 44 } 45 46 ASSERT_TRUE(SetupSync()); 47 48 ASSERT_TRUE(AwaitQuiescence()); 49 50 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 51} 52 53IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 54 StartWithDifferentExtensions) { 55 ASSERT_TRUE(SetupClients()); 56 57 int i = 0; 58 59 const int kNumCommonExtensions = 5; 60 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { 61 InstallExtension(GetProfile(0), i); 62 InstallExtension(GetProfile(1), i); 63 InstallExtension(verifier(), i); 64 } 65 66 const int kNumProfile0Extensions = 10; 67 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) { 68 InstallExtension(GetProfile(0), i); 69 InstallExtension(verifier(), i); 70 } 71 72 const int kNumProfile1Extensions = 10; 73 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) { 74 InstallExtension(GetProfile(1), i); 75 InstallExtension(verifier(), i); 76 } 77 78 ASSERT_TRUE(SetupSync()); 79 80 ASSERT_TRUE(AwaitQuiescence()); 81 82 InstallExtensionsPendingForSync(GetProfile(0)); 83 InstallExtensionsPendingForSync(GetProfile(1)); 84 85 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 86} 87 88IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 89 InstallDifferentExtensions) { 90 ASSERT_TRUE(SetupClients()); 91 92 int i = 0; 93 94 const int kNumCommonExtensions = 5; 95 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { 96 InstallExtension(GetProfile(0), i); 97 InstallExtension(GetProfile(1), i); 98 InstallExtension(verifier(), i); 99 } 100 101 ASSERT_TRUE(SetupSync()); 102 103 ASSERT_TRUE(AwaitQuiescence()); 104 105 const int kNumProfile0Extensions = 10; 106 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) { 107 InstallExtension(GetProfile(0), i); 108 InstallExtension(verifier(), i); 109 } 110 111 const int kNumProfile1Extensions = 10; 112 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) { 113 InstallExtension(GetProfile(1), i); 114 InstallExtension(verifier(), i); 115 } 116 117 ASSERT_TRUE(AwaitQuiescence()); 118 119 InstallExtensionsPendingForSync(GetProfile(0)); 120 InstallExtensionsPendingForSync(GetProfile(1)); 121 122 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 123} 124 125// TCM ID - 3637311. 126IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) { 127 ASSERT_TRUE(SetupSync()); 128 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 129 130 InstallExtension(GetProfile(0), 0); 131 InstallExtension(verifier(), 0); 132 ASSERT_TRUE(AwaitQuiescence()); 133 134 InstallExtensionsPendingForSync(GetProfile(0)); 135 InstallExtensionsPendingForSync(GetProfile(1)); 136 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 137} 138 139// TCM ID - 3724281. 140IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) { 141 ASSERT_TRUE(SetupSync()); 142 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 143 144 InstallExtension(GetProfile(0), 0); 145 InstallExtension(verifier(), 0); 146 ASSERT_TRUE(AwaitQuiescence()); 147 148 InstallExtensionsPendingForSync(GetProfile(0)); 149 InstallExtensionsPendingForSync(GetProfile(1)); 150 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 151 152 UninstallExtension(GetProfile(0), 0); 153 UninstallExtension(verifier(), 0); 154 ASSERT_TRUE(AwaitQuiescence()); 155 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 156} 157 158// TCM ID - 3635304. 159IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) { 160 ASSERT_TRUE(SetupSync()); 161 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 162 163 InstallExtension(GetProfile(0), 0); 164 InstallExtension(GetProfile(1), 0); 165 ASSERT_TRUE(AwaitQuiescence()); 166 167 UninstallExtension(GetProfile(0), 0); 168 InstallExtension(GetProfile(0), 1); 169 InstallExtension(verifier(), 1); 170 171 InstallExtension(GetProfile(0), 2); 172 InstallExtension(GetProfile(1), 2); 173 InstallExtension(verifier(), 2); 174 175 InstallExtension(GetProfile(1), 3); 176 InstallExtension(verifier(), 3); 177 178 ASSERT_TRUE(AwaitQuiescence()); 179 InstallExtensionsPendingForSync(GetProfile(0)); 180 InstallExtensionsPendingForSync(GetProfile(1)); 181 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 182} 183 184// TCM ID - 3605300. 185IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 186 UpdateEnableDisableExtension) { 187 ASSERT_TRUE(SetupSync()); 188 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 189 190 InstallExtension(GetProfile(0), 0); 191 InstallExtension(GetProfile(1), 0); 192 InstallExtension(verifier(), 0); 193 ASSERT_TRUE(AwaitQuiescence()); 194 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 195 196 DisableExtension(GetProfile(0), 0); 197 DisableExtension(verifier(), 0); 198 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 199 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 200 201 ASSERT_TRUE(AwaitQuiescence()); 202 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 203 204 EnableExtension(GetProfile(1), 0); 205 EnableExtension(verifier(), 0); 206 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); 207 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); 208 209 ASSERT_TRUE(AwaitQuiescence()); 210 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 211} 212 213// TCM ID - 3728322. 214IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 215 UpdateIncognitoEnableDisable) { 216 ASSERT_TRUE(SetupSync()); 217 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 218 219 InstallExtension(GetProfile(0), 0); 220 InstallExtension(GetProfile(1), 0); 221 InstallExtension(verifier(), 0); 222 ASSERT_TRUE(AwaitQuiescence()); 223 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 224 225 IncognitoEnableExtension(GetProfile(0), 0); 226 IncognitoEnableExtension(verifier(), 0); 227 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 228 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 229 230 ASSERT_TRUE(AwaitQuiescence()); 231 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 232 233 IncognitoDisableExtension(GetProfile(1), 0); 234 IncognitoDisableExtension(verifier(), 0); 235 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); 236 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); 237 238 ASSERT_TRUE(AwaitQuiescence()); 239 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 240} 241 242// TCM ID - 3732278. 243IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableExtensions) { 244 ASSERT_TRUE(SetupSync()); 245 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 246 247 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::EXTENSIONS)); 248 InstallExtension(GetProfile(0), 1); 249 InstallExtension(verifier(), 1); 250 ASSERT_TRUE( 251 GetClient(0)->AwaitFullSyncCompletion("Installed an extension.")); 252 ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier()); 253 254 ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::EXTENSIONS)); 255 ASSERT_TRUE(AwaitQuiescence()); 256 InstallExtensionsPendingForSync(GetProfile(0)); 257 InstallExtensionsPendingForSync(GetProfile(1)); 258 InstallExtensionsPendingForSync(verifier()); 259 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 260} 261 262// TCM ID - 3606290. 263IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) { 264 ASSERT_TRUE(SetupSync()); 265 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 266 267 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); 268 InstallExtension(GetProfile(0), 0); 269 InstallExtension(verifier(), 0); 270 ASSERT_TRUE( 271 GetClient(0)->AwaitFullSyncCompletion("Installed an extension.")); 272 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 273 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 274 275 ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes()); 276 ASSERT_TRUE(AwaitQuiescence()); 277 InstallExtensionsPendingForSync(GetProfile(0)); 278 InstallExtensionsPendingForSync(GetProfile(1)); 279 InstallExtensionsPendingForSync(verifier()); 280 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 281} 282 283// Regression test for bug 104399: ensure that an extension installed prior to 284// setting up sync, when uninstalled, is also uninstalled from sync. 285IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 286 UninstallPreinstalledExtensions) { 287 ASSERT_TRUE(SetupClients()); 288 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 289 290 InstallExtension(GetProfile(0), 0); 291 InstallExtension(verifier(), 0); 292 293 ASSERT_TRUE(SetupSync()); 294 295 InstallExtensionsPendingForSync(GetProfile(0)); 296 InstallExtensionsPendingForSync(GetProfile(1)); 297 ASSERT_TRUE(AwaitQuiescence()); 298 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 299 300 UninstallExtension(GetProfile(0), 0); 301 UninstallExtension(verifier(), 0); 302 303 ASSERT_TRUE(AwaitQuiescence()); 304 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 305} 306 307// TODO(akalin): Add tests exercising: 308// - Offline installation/uninstallation behavior 309