two_client_extensions_sync_test.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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/profile_sync_service_harness.h"
7#include "chrome/browser/sync/test/integration/extensions_helper.h"
8#include "chrome/browser/sync/test/integration/sync_test.h"
9
10using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier;
11using extensions_helper::DisableExtension;
12using extensions_helper::EnableExtension;
13using extensions_helper::HasSameExtensionsAsVerifier;
14using extensions_helper::IncognitoDisableExtension;
15using extensions_helper::IncognitoEnableExtension;
16using extensions_helper::InstallExtension;
17using extensions_helper::InstallExtensionsPendingForSync;
18using extensions_helper::UninstallExtension;
19
20class TwoClientExtensionsSyncTest : public SyncTest {
21 public:
22  TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {}
23
24  virtual ~TwoClientExtensionsSyncTest() {}
25
26 private:
27  DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest);
28};
29
30IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) {
31  ASSERT_TRUE(SetupSync());
32
33  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
34}
35
36IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) {
37  ASSERT_TRUE(SetupClients());
38
39  const int kNumExtensions = 5;
40  for (int i = 0; i < kNumExtensions; ++i) {
41    InstallExtension(GetProfile(0), i);
42    InstallExtension(GetProfile(1), i);
43    InstallExtension(verifier(), i);
44  }
45
46  ASSERT_TRUE(SetupSync());
47
48  ASSERT_TRUE(AwaitQuiescence());
49
50  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
51}
52
53IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
54                       StartWithDifferentExtensions) {
55  ASSERT_TRUE(SetupClients());
56
57  int i = 0;
58
59  const int kNumCommonExtensions = 5;
60  for (int j = 0; j < kNumCommonExtensions; ++i, ++j) {
61    InstallExtension(GetProfile(0), i);
62    InstallExtension(GetProfile(1), i);
63    InstallExtension(verifier(), i);
64  }
65
66  const int kNumProfile0Extensions = 10;
67  for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
68    InstallExtension(GetProfile(0), i);
69    InstallExtension(verifier(), i);
70  }
71
72  const int kNumProfile1Extensions = 10;
73  for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
74    InstallExtension(GetProfile(1), i);
75    InstallExtension(verifier(), i);
76  }
77
78  ASSERT_TRUE(SetupSync());
79
80  ASSERT_TRUE(AwaitQuiescence());
81
82  InstallExtensionsPendingForSync(GetProfile(0));
83  InstallExtensionsPendingForSync(GetProfile(1));
84
85  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
86}
87
88IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
89                       InstallDifferentExtensions) {
90  ASSERT_TRUE(SetupClients());
91
92  int i = 0;
93
94  const int kNumCommonExtensions = 5;
95  for (int j = 0; j < kNumCommonExtensions; ++i, ++j) {
96    InstallExtension(GetProfile(0), i);
97    InstallExtension(GetProfile(1), i);
98    InstallExtension(verifier(), i);
99  }
100
101  ASSERT_TRUE(SetupSync());
102
103  ASSERT_TRUE(AwaitQuiescence());
104
105  const int kNumProfile0Extensions = 10;
106  for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
107    InstallExtension(GetProfile(0), i);
108    InstallExtension(verifier(), i);
109  }
110
111  const int kNumProfile1Extensions = 10;
112  for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
113    InstallExtension(GetProfile(1), i);
114    InstallExtension(verifier(), i);
115  }
116
117  ASSERT_TRUE(AwaitQuiescence());
118
119  InstallExtensionsPendingForSync(GetProfile(0));
120  InstallExtensionsPendingForSync(GetProfile(1));
121
122  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
123}
124
125// TCM ID - 3637311.
126IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) {
127  ASSERT_TRUE(SetupSync());
128  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
129
130  InstallExtension(GetProfile(0), 0);
131  InstallExtension(verifier(), 0);
132  ASSERT_TRUE(AwaitQuiescence());
133
134  InstallExtensionsPendingForSync(GetProfile(0));
135  InstallExtensionsPendingForSync(GetProfile(1));
136  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
137}
138
139// TCM ID - 3724281.
140IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) {
141  ASSERT_TRUE(SetupSync());
142  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
143
144  InstallExtension(GetProfile(0), 0);
145  InstallExtension(verifier(), 0);
146  ASSERT_TRUE(AwaitQuiescence());
147
148  InstallExtensionsPendingForSync(GetProfile(0));
149  InstallExtensionsPendingForSync(GetProfile(1));
150  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
151
152  UninstallExtension(GetProfile(0), 0);
153  UninstallExtension(verifier(), 0);
154  ASSERT_TRUE(AwaitQuiescence());
155  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
156}
157
158// TCM ID - 3635304.
159IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) {
160  ASSERT_TRUE(SetupSync());
161  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
162
163  InstallExtension(GetProfile(0), 0);
164  InstallExtension(GetProfile(1), 0);
165  ASSERT_TRUE(AwaitQuiescence());
166
167  UninstallExtension(GetProfile(0), 0);
168  InstallExtension(GetProfile(0), 1);
169  InstallExtension(verifier(), 1);
170
171  InstallExtension(GetProfile(0), 2);
172  InstallExtension(GetProfile(1), 2);
173  InstallExtension(verifier(), 2);
174
175  InstallExtension(GetProfile(1), 3);
176  InstallExtension(verifier(), 3);
177
178  ASSERT_TRUE(AwaitQuiescence());
179  InstallExtensionsPendingForSync(GetProfile(0));
180  InstallExtensionsPendingForSync(GetProfile(1));
181  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
182}
183
184// TCM ID - 3605300.
185IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
186                       UpdateEnableDisableExtension) {
187  ASSERT_TRUE(SetupSync());
188  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
189
190  InstallExtension(GetProfile(0), 0);
191  InstallExtension(GetProfile(1), 0);
192  InstallExtension(verifier(), 0);
193  ASSERT_TRUE(AwaitQuiescence());
194  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
195
196  DisableExtension(GetProfile(0), 0);
197  DisableExtension(verifier(), 0);
198  ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
199  ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
200
201  ASSERT_TRUE(AwaitQuiescence());
202  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
203
204  EnableExtension(GetProfile(1), 0);
205  EnableExtension(verifier(), 0);
206  ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
207  ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
208
209  ASSERT_TRUE(AwaitQuiescence());
210  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
211}
212
213// TCM ID - 3728322.
214IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
215                       UpdateIncognitoEnableDisable) {
216  ASSERT_TRUE(SetupSync());
217  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
218
219  InstallExtension(GetProfile(0), 0);
220  InstallExtension(GetProfile(1), 0);
221  InstallExtension(verifier(), 0);
222  ASSERT_TRUE(AwaitQuiescence());
223  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
224
225  IncognitoEnableExtension(GetProfile(0), 0);
226  IncognitoEnableExtension(verifier(), 0);
227  ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
228  ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
229
230  ASSERT_TRUE(AwaitQuiescence());
231  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
232
233  IncognitoDisableExtension(GetProfile(1), 0);
234  IncognitoDisableExtension(verifier(), 0);
235  ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
236  ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
237
238  ASSERT_TRUE(AwaitQuiescence());
239  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
240}
241
242// TCM ID - 3732278.
243IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableExtensions) {
244  ASSERT_TRUE(SetupSync());
245  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
246
247  ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::EXTENSIONS));
248  InstallExtension(GetProfile(0), 1);
249  InstallExtension(verifier(), 1);
250  ASSERT_TRUE(
251      GetClient(0)->AwaitFullSyncCompletion("Installed an extension."));
252  ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier());
253
254  ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::EXTENSIONS));
255  ASSERT_TRUE(AwaitQuiescence());
256  InstallExtensionsPendingForSync(GetProfile(0));
257  InstallExtensionsPendingForSync(GetProfile(1));
258  InstallExtensionsPendingForSync(verifier());
259  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
260}
261
262// TCM ID - 3606290.
263IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) {
264  ASSERT_TRUE(SetupSync());
265  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
266
267  ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
268  InstallExtension(GetProfile(0), 0);
269  InstallExtension(verifier(), 0);
270  ASSERT_TRUE(
271      GetClient(0)->AwaitFullSyncCompletion("Installed an extension."));
272  ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
273  ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
274
275  ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
276  ASSERT_TRUE(AwaitQuiescence());
277  InstallExtensionsPendingForSync(GetProfile(0));
278  InstallExtensionsPendingForSync(GetProfile(1));
279  InstallExtensionsPendingForSync(verifier());
280  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
281}
282
283// Regression test for bug 104399: ensure that an extension installed prior to
284// setting up sync, when uninstalled, is also uninstalled from sync.
285IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
286                       UninstallPreinstalledExtensions) {
287  ASSERT_TRUE(SetupClients());
288  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
289
290  InstallExtension(GetProfile(0), 0);
291  InstallExtension(verifier(), 0);
292
293  ASSERT_TRUE(SetupSync());
294
295  InstallExtensionsPendingForSync(GetProfile(0));
296  InstallExtensionsPendingForSync(GetProfile(1));
297  ASSERT_TRUE(AwaitQuiescence());
298  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
299
300  UninstallExtension(GetProfile(0), 0);
301  UninstallExtension(verifier(), 0);
302
303  ASSERT_TRUE(AwaitQuiescence());
304  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
305}
306
307// TODO(akalin): Add tests exercising:
308//   - Offline installation/uninstallation behavior
309