Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / test / integration / two_client_extensions_sync_test.cc
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