• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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