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.
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"
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;
22 class TwoClientExtensionsSyncTest : public SyncTest {
24 TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {}
26 virtual ~TwoClientExtensionsSyncTest() {}
29 DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest);
32 class LegacyTwoClientExtensionsSyncTest : public SyncTest {
34 LegacyTwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT_LEGACY) {}
36 virtual ~LegacyTwoClientExtensionsSyncTest() {}
39 DISALLOW_COPY_AND_ASSIGN(LegacyTwoClientExtensionsSyncTest);
42 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) {
43 ASSERT_TRUE(SetupSync());
45 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
48 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) {
49 ASSERT_TRUE(SetupClients());
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);
58 ASSERT_TRUE(SetupSync());
60 ASSERT_TRUE(AwaitQuiescence());
62 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
65 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
66 StartWithDifferentExtensions) {
67 ASSERT_TRUE(SetupClients());
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);
78 const int kNumProfile0Extensions = 10;
79 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
80 InstallExtension(GetProfile(0), i);
81 InstallExtension(verifier(), i);
84 const int kNumProfile1Extensions = 10;
85 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
86 InstallExtension(GetProfile(1), i);
87 InstallExtension(verifier(), i);
90 ASSERT_TRUE(SetupSync());
92 ASSERT_TRUE(AwaitQuiescence());
94 InstallExtensionsPendingForSync(GetProfile(0));
95 InstallExtensionsPendingForSync(GetProfile(1));
97 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
100 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
101 InstallDifferentExtensions) {
102 ASSERT_TRUE(SetupClients());
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);
113 ASSERT_TRUE(SetupSync());
115 ASSERT_TRUE(AwaitQuiescence());
117 const int kNumProfile0Extensions = 10;
118 for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
119 InstallExtension(GetProfile(0), i);
120 InstallExtension(verifier(), i);
123 const int kNumProfile1Extensions = 10;
124 for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
125 InstallExtension(GetProfile(1), i);
126 InstallExtension(verifier(), i);
129 ASSERT_TRUE(AwaitQuiescence());
131 InstallExtensionsPendingForSync(GetProfile(0));
132 InstallExtensionsPendingForSync(GetProfile(1));
134 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
138 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) {
139 ASSERT_TRUE(SetupSync());
140 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
142 InstallExtension(GetProfile(0), 0);
143 InstallExtension(verifier(), 0);
144 ASSERT_TRUE(AwaitQuiescence());
146 InstallExtensionsPendingForSync(GetProfile(0));
147 InstallExtensionsPendingForSync(GetProfile(1));
148 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
152 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) {
153 ASSERT_TRUE(SetupSync());
154 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
156 InstallExtension(GetProfile(0), 0);
157 InstallExtension(verifier(), 0);
158 ASSERT_TRUE(AwaitQuiescence());
160 InstallExtensionsPendingForSync(GetProfile(0));
161 InstallExtensionsPendingForSync(GetProfile(1));
162 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
164 UninstallExtension(GetProfile(0), 0);
165 UninstallExtension(verifier(), 0);
166 ASSERT_TRUE(AwaitQuiescence());
167 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
171 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) {
172 ASSERT_TRUE(SetupSync());
173 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
175 InstallExtension(GetProfile(0), 0);
176 InstallExtension(GetProfile(1), 0);
177 ASSERT_TRUE(AwaitQuiescence());
179 UninstallExtension(GetProfile(0), 0);
180 InstallExtension(GetProfile(0), 1);
181 InstallExtension(verifier(), 1);
183 InstallExtension(GetProfile(0), 2);
184 InstallExtension(GetProfile(1), 2);
185 InstallExtension(verifier(), 2);
187 InstallExtension(GetProfile(1), 3);
188 InstallExtension(verifier(), 3);
190 ASSERT_TRUE(AwaitQuiescence());
191 InstallExtensionsPendingForSync(GetProfile(0));
192 InstallExtensionsPendingForSync(GetProfile(1));
193 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
197 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
198 UpdateEnableDisableExtension) {
199 ASSERT_TRUE(SetupSync());
200 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
202 InstallExtension(GetProfile(0), 0);
203 InstallExtension(GetProfile(1), 0);
204 InstallExtension(verifier(), 0);
205 ASSERT_TRUE(AwaitQuiescence());
206 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
208 DisableExtension(GetProfile(0), 0);
209 DisableExtension(verifier(), 0);
210 ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
211 ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
213 ASSERT_TRUE(AwaitQuiescence());
214 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
216 EnableExtension(GetProfile(1), 0);
217 EnableExtension(verifier(), 0);
218 ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
219 ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
221 ASSERT_TRUE(AwaitQuiescence());
222 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
226 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
227 UpdateIncognitoEnableDisable) {
228 ASSERT_TRUE(SetupSync());
229 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
231 InstallExtension(GetProfile(0), 0);
232 InstallExtension(GetProfile(1), 0);
233 InstallExtension(verifier(), 0);
234 ASSERT_TRUE(AwaitQuiescence());
235 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
237 IncognitoEnableExtension(GetProfile(0), 0);
238 IncognitoEnableExtension(verifier(), 0);
239 ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
240 ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
242 ASSERT_TRUE(AwaitQuiescence());
243 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
245 IncognitoDisableExtension(GetProfile(1), 0);
246 IncognitoDisableExtension(verifier(), 0);
247 ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
248 ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
250 ASSERT_TRUE(AwaitQuiescence());
251 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
255 IN_PROC_BROWSER_TEST_F(LegacyTwoClientExtensionsSyncTest, DisableExtensions) {
256 ASSERT_TRUE(SetupSync());
257 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
259 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::EXTENSIONS));
260 InstallExtension(GetProfile(0), 1);
261 InstallExtension(verifier(), 1);
263 AwaitCommitActivityCompletion(GetSyncService((0))));
264 ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier());
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());
275 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) {
276 ASSERT_TRUE(SetupSync());
277 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
279 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
280 InstallExtension(GetProfile(0), 0);
281 InstallExtension(verifier(), 0);
283 AwaitCommitActivityCompletion(GetSyncService((0))));
284 ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
285 ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
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());
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());
302 InstallExtension(GetProfile(0), 0);
303 InstallExtension(verifier(), 0);
305 ASSERT_TRUE(SetupSync());
307 InstallExtensionsPendingForSync(GetProfile(0));
308 InstallExtensionsPendingForSync(GetProfile(1));
309 ASSERT_TRUE(AwaitQuiescence());
310 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
312 UninstallExtension(GetProfile(0), 0);
313 UninstallExtension(verifier(), 0);
315 ASSERT_TRUE(AwaitQuiescence());
316 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
319 // TODO(akalin): Add tests exercising:
320 // - Offline installation/uninstallation behavior