two_client_extensions_sync_test.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// found in the LICENSE file.
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/basictypes.h"
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/extensions_helper.h"
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "chrome/browser/sync/test/integration/sync_test.h"
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::AllProfilesHaveSameExtensionsAsVerifier;
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::DisableExtension;
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::EnableExtension;
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::HasSameExtensionsAsVerifier;
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::IncognitoDisableExtension;
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::IncognitoEnableExtension;
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::InstallExtension;
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::InstallExtensionsPendingForSync;
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing extensions_helper::UninstallExtension;
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectusing sync_integration_test_util::AwaitCommitActivityCompletion;
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass TwoClientExtensionsSyncTest : public SyncTest {
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public:
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {}
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  virtual ~TwoClientExtensionsSyncTest() {}
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project private:
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest);
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) {
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(SetupSync());
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) {
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(SetupClients());
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const int kNumExtensions = 5;
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (int i = 0; i < kNumExtensions; ++i) {
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(0), i);
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(1), i);
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(verifier(), i);
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  }
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(SetupSync());
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(AwaitQuiescence());
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                       StartWithDifferentExtensions) {
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(SetupClients());
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int i = 0;
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const int kNumCommonExtensions = 5;
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (int j = 0; j < kNumCommonExtensions; ++i, ++j) {
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(0), i);
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(1), i);
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(verifier(), i);
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  }
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const int kNumProfile0Extensions = 10;
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(0), i);
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(verifier(), i);
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  }
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const int kNumProfile1Extensions = 10;
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(1), i);
775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    InstallExtension(verifier(), i);
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  }
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(SetupSync());
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(AwaitQuiescence());
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  InstallExtensionsPendingForSync(GetProfile(0));
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  InstallExtensionsPendingForSync(GetProfile(1));
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectIN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                       InstallDifferentExtensions) {
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ASSERT_TRUE(SetupClients());
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int i = 0;
955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  const int kNumCommonExtensions = 5;
975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  for (int j = 0; j < kNumCommonExtensions; ++i, ++j) {
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(0), i);
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    InstallExtension(GetProfile(1), i);
100    InstallExtension(verifier(), i);
101  }
102
103  ASSERT_TRUE(SetupSync());
104
105  ASSERT_TRUE(AwaitQuiescence());
106
107  const int kNumProfile0Extensions = 10;
108  for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
109    InstallExtension(GetProfile(0), i);
110    InstallExtension(verifier(), i);
111  }
112
113  const int kNumProfile1Extensions = 10;
114  for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
115    InstallExtension(GetProfile(1), i);
116    InstallExtension(verifier(), i);
117  }
118
119  ASSERT_TRUE(AwaitQuiescence());
120
121  InstallExtensionsPendingForSync(GetProfile(0));
122  InstallExtensionsPendingForSync(GetProfile(1));
123
124  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
125}
126
127// TCM ID - 3637311.
128IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) {
129  ASSERT_TRUE(SetupSync());
130  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
131
132  InstallExtension(GetProfile(0), 0);
133  InstallExtension(verifier(), 0);
134  ASSERT_TRUE(AwaitQuiescence());
135
136  InstallExtensionsPendingForSync(GetProfile(0));
137  InstallExtensionsPendingForSync(GetProfile(1));
138  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
139}
140
141// TCM ID - 3724281.
142IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) {
143  ASSERT_TRUE(SetupSync());
144  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
145
146  InstallExtension(GetProfile(0), 0);
147  InstallExtension(verifier(), 0);
148  ASSERT_TRUE(AwaitQuiescence());
149
150  InstallExtensionsPendingForSync(GetProfile(0));
151  InstallExtensionsPendingForSync(GetProfile(1));
152  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
153
154  UninstallExtension(GetProfile(0), 0);
155  UninstallExtension(verifier(), 0);
156  ASSERT_TRUE(AwaitQuiescence());
157  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
158}
159
160// TCM ID - 3635304.
161IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) {
162  ASSERT_TRUE(SetupSync());
163  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
164
165  InstallExtension(GetProfile(0), 0);
166  InstallExtension(GetProfile(1), 0);
167  ASSERT_TRUE(AwaitQuiescence());
168
169  UninstallExtension(GetProfile(0), 0);
170  InstallExtension(GetProfile(0), 1);
171  InstallExtension(verifier(), 1);
172
173  InstallExtension(GetProfile(0), 2);
174  InstallExtension(GetProfile(1), 2);
175  InstallExtension(verifier(), 2);
176
177  InstallExtension(GetProfile(1), 3);
178  InstallExtension(verifier(), 3);
179
180  ASSERT_TRUE(AwaitQuiescence());
181  InstallExtensionsPendingForSync(GetProfile(0));
182  InstallExtensionsPendingForSync(GetProfile(1));
183  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
184}
185
186// TCM ID - 3605300.
187IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
188                       UpdateEnableDisableExtension) {
189  ASSERT_TRUE(SetupSync());
190  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
191
192  InstallExtension(GetProfile(0), 0);
193  InstallExtension(GetProfile(1), 0);
194  InstallExtension(verifier(), 0);
195  ASSERT_TRUE(AwaitQuiescence());
196  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
197
198  DisableExtension(GetProfile(0), 0);
199  DisableExtension(verifier(), 0);
200  ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
201  ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
202
203  ASSERT_TRUE(AwaitQuiescence());
204  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
205
206  EnableExtension(GetProfile(1), 0);
207  EnableExtension(verifier(), 0);
208  ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
209  ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
210
211  ASSERT_TRUE(AwaitQuiescence());
212  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
213}
214
215// TCM ID - 3728322.
216IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
217                       UpdateIncognitoEnableDisable) {
218  ASSERT_TRUE(SetupSync());
219  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
220
221  InstallExtension(GetProfile(0), 0);
222  InstallExtension(GetProfile(1), 0);
223  InstallExtension(verifier(), 0);
224  ASSERT_TRUE(AwaitQuiescence());
225  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
226
227  IncognitoEnableExtension(GetProfile(0), 0);
228  IncognitoEnableExtension(verifier(), 0);
229  ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
230  ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
231
232  ASSERT_TRUE(AwaitQuiescence());
233  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
234
235  IncognitoDisableExtension(GetProfile(1), 0);
236  IncognitoDisableExtension(verifier(), 0);
237  ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
238  ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
239
240  ASSERT_TRUE(AwaitQuiescence());
241  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
242}
243
244// TCM ID - 3732278.
245IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableExtensions) {
246  ASSERT_TRUE(SetupSync());
247  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
248
249  ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::EXTENSIONS));
250  InstallExtension(GetProfile(0), 1);
251  InstallExtension(verifier(), 1);
252  ASSERT_TRUE(
253      AwaitCommitActivityCompletion(GetClient(0)->service()));
254  ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier());
255
256  ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::EXTENSIONS));
257  ASSERT_TRUE(AwaitQuiescence());
258  InstallExtensionsPendingForSync(GetProfile(0));
259  InstallExtensionsPendingForSync(GetProfile(1));
260  InstallExtensionsPendingForSync(verifier());
261  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
262}
263
264// TCM ID - 3606290.
265IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) {
266  ASSERT_TRUE(SetupSync());
267  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
268
269  ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
270  InstallExtension(GetProfile(0), 0);
271  InstallExtension(verifier(), 0);
272  ASSERT_TRUE(
273      AwaitCommitActivityCompletion(GetClient(0)->service()));
274  ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
275  ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
276
277  ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
278  ASSERT_TRUE(AwaitQuiescence());
279  InstallExtensionsPendingForSync(GetProfile(0));
280  InstallExtensionsPendingForSync(GetProfile(1));
281  InstallExtensionsPendingForSync(verifier());
282  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
283}
284
285// Regression test for bug 104399: ensure that an extension installed prior to
286// setting up sync, when uninstalled, is also uninstalled from sync.
287IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
288                       UninstallPreinstalledExtensions) {
289  ASSERT_TRUE(SetupClients());
290  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
291
292  InstallExtension(GetProfile(0), 0);
293  InstallExtension(verifier(), 0);
294
295  ASSERT_TRUE(SetupSync());
296
297  InstallExtensionsPendingForSync(GetProfile(0));
298  InstallExtensionsPendingForSync(GetProfile(1));
299  ASSERT_TRUE(AwaitQuiescence());
300  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
301
302  UninstallExtension(GetProfile(0), 0);
303  UninstallExtension(verifier(), 0);
304
305  ASSERT_TRUE(AwaitQuiescence());
306  ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
307}
308
309// TODO(akalin): Add tests exercising:
310//   - Offline installation/uninstallation behavior
311