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::AwaitAllProfilesHaveSameExtensionsAsVerifier; 12 using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier; 13 using extensions_helper::DisableExtension; 14 using extensions_helper::EnableExtension; 15 using extensions_helper::HasSameExtensionsAsVerifier; 16 using extensions_helper::IncognitoDisableExtension; 17 using extensions_helper::IncognitoEnableExtension; 18 using extensions_helper::InstallExtension; 19 using extensions_helper::UninstallExtension; 20 21 class TwoClientExtensionsSyncTest : public SyncTest { 22 public: 23 TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {} 24 25 virtual ~TwoClientExtensionsSyncTest() {} 26 virtual bool TestUsesSelfNotifications() OVERRIDE { return false; } 27 28 private: 29 DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest); 30 }; 31 32 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) { 33 ASSERT_TRUE(SetupSync()); 34 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 35 } 36 37 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) { 38 ASSERT_TRUE(SetupClients()); 39 40 const int kNumExtensions = 5; 41 for (int i = 0; i < kNumExtensions; ++i) { 42 InstallExtension(GetProfile(0), i); 43 InstallExtension(GetProfile(1), i); 44 InstallExtension(verifier(), i); 45 } 46 47 ASSERT_TRUE(SetupSync()); 48 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 49 } 50 51 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 52 StartWithDifferentExtensions) { 53 ASSERT_TRUE(SetupClients()); 54 55 int i = 0; 56 57 const int kNumCommonExtensions = 5; 58 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { 59 InstallExtension(GetProfile(0), i); 60 InstallExtension(GetProfile(1), i); 61 InstallExtension(verifier(), i); 62 } 63 64 const int kNumProfile0Extensions = 10; 65 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) { 66 InstallExtension(GetProfile(0), i); 67 InstallExtension(verifier(), i); 68 } 69 70 const int kNumProfile1Extensions = 10; 71 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) { 72 InstallExtension(GetProfile(1), i); 73 InstallExtension(verifier(), i); 74 } 75 76 ASSERT_TRUE(SetupSync()); 77 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 78 } 79 80 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 81 InstallDifferentExtensions) { 82 ASSERT_TRUE(SetupClients()); 83 84 int i = 0; 85 86 const int kNumCommonExtensions = 5; 87 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { 88 InstallExtension(GetProfile(0), i); 89 InstallExtension(GetProfile(1), i); 90 InstallExtension(verifier(), i); 91 } 92 93 ASSERT_TRUE(SetupSync()); 94 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 95 96 const int kNumProfile0Extensions = 10; 97 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) { 98 InstallExtension(GetProfile(0), i); 99 InstallExtension(verifier(), i); 100 } 101 102 const int kNumProfile1Extensions = 10; 103 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) { 104 InstallExtension(GetProfile(1), i); 105 InstallExtension(verifier(), i); 106 } 107 108 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 109 } 110 111 // TCM ID - 3637311. 112 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) { 113 ASSERT_TRUE(SetupSync()); 114 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 115 116 InstallExtension(GetProfile(0), 0); 117 InstallExtension(verifier(), 0); 118 119 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 120 } 121 122 // TCM ID - 3724281. 123 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) { 124 ASSERT_TRUE(SetupSync()); 125 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 126 127 InstallExtension(GetProfile(0), 0); 128 InstallExtension(verifier(), 0); 129 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 130 131 UninstallExtension(GetProfile(0), 0); 132 UninstallExtension(verifier(), 0); 133 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 134 } 135 136 // TCM ID - 3605300. 137 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 138 UpdateEnableDisableExtension) { 139 ASSERT_TRUE(SetupSync()); 140 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 141 142 InstallExtension(GetProfile(0), 0); 143 InstallExtension(verifier(), 0); 144 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 145 146 DisableExtension(GetProfile(0), 0); 147 DisableExtension(verifier(), 0); 148 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 149 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 150 151 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 152 153 EnableExtension(GetProfile(1), 0); 154 EnableExtension(verifier(), 0); 155 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); 156 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); 157 158 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 159 } 160 161 // TCM ID - 3728322. 162 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 163 UpdateIncognitoEnableDisable) { 164 ASSERT_TRUE(SetupSync()); 165 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 166 167 InstallExtension(GetProfile(0), 0); 168 InstallExtension(verifier(), 0); 169 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 170 171 IncognitoEnableExtension(GetProfile(0), 0); 172 IncognitoEnableExtension(verifier(), 0); 173 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); 174 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); 175 176 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 177 178 IncognitoDisableExtension(GetProfile(1), 0); 179 IncognitoDisableExtension(verifier(), 0); 180 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); 181 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); 182 183 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 184 } 185 186 // Regression test for bug 104399: ensure that an extension installed prior to 187 // setting up sync, when uninstalled, is also uninstalled from sync. 188 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, 189 UninstallPreinstalledExtensions) { 190 ASSERT_TRUE(SetupClients()); 191 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); 192 193 InstallExtension(GetProfile(0), 0); 194 InstallExtension(verifier(), 0); 195 196 ASSERT_TRUE(SetupSync()); 197 198 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 199 200 UninstallExtension(GetProfile(0), 0); 201 UninstallExtension(verifier(), 0); 202 203 ASSERT_TRUE(AwaitAllProfilesHaveSameExtensionsAsVerifier()); 204 } 205 206 // TODO(akalin): Add tests exercising: 207 // - Offline installation/uninstallation behavior 208