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