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:
TwoClientExtensionsSyncTest()24 TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {}
25
~TwoClientExtensionsSyncTest()26 virtual ~TwoClientExtensionsSyncTest() {}
27
28 private:
29 DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest);
30 };
31
32 class LegacyTwoClientExtensionsSyncTest : public SyncTest {
33 public:
LegacyTwoClientExtensionsSyncTest()34 LegacyTwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT_LEGACY) {}
35
~LegacyTwoClientExtensionsSyncTest()36 virtual ~LegacyTwoClientExtensionsSyncTest() {}
37
38 private:
39 DISALLOW_COPY_AND_ASSIGN(LegacyTwoClientExtensionsSyncTest);
40 };
41
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,StartWithNoExtensions)42 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) {
43 ASSERT_TRUE(SetupSync());
44
45 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
46 }
47
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,StartWithSameExtensions)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
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,StartWithDifferentExtensions)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
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,InstallDifferentExtensions)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,Add)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,Uninstall)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,Merge)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,UpdateEnableDisableExtension)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,UpdateIncognitoEnableDisable)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.
IN_PROC_BROWSER_TEST_F(LegacyTwoClientExtensionsSyncTest,DisableExtensions)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,DisableSync)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.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,UninstallPreinstalledExtensions)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