Home | History | Annotate | Download | only in integration
      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