blob: ff4147b025b34178e7ad43f7c3dd9ef7748f2533 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/basictypes.h"
#include "chrome/browser/sync/profile_sync_service_harness.h"
#include "chrome/browser/sync/test/integration/extensions_helper.h"
#include "chrome/browser/sync/test/integration/sync_test.h"
using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier;
using extensions_helper::HasSameExtensionsAsVerifier;
using extensions_helper::IncognitoDisableExtension;
using extensions_helper::IncognitoEnableExtension;
using extensions_helper::InstallExtension;
using extensions_helper::InstallExtensionsPendingForSync;
using extensions_helper::UninstallExtension;
class TwoClientExtensionsSyncTest : public SyncTest {
public:
TwoClientExtensionsSyncTest() : SyncTest(TWO_CLIENT) {}
virtual ~TwoClientExtensionsSyncTest() {}
private:
DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest);
};
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) {
ASSERT_TRUE(SetupClients());
const int kNumExtensions = 5;
for (int i = 0; i < kNumExtensions; ++i) {
InstallExtension(GetProfile(0), i);
InstallExtension(GetProfile(1), i);
InstallExtension(verifier(), i);
}
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
StartWithDifferentExtensions) {
ASSERT_TRUE(SetupClients());
int i = 0;
const int kNumCommonExtensions = 5;
for (int j = 0; j < kNumCommonExtensions; ++i, ++j) {
InstallExtension(GetProfile(0), i);
InstallExtension(GetProfile(1), i);
InstallExtension(verifier(), i);
}
const int kNumProfile0Extensions = 10;
for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
InstallExtension(GetProfile(0), i);
InstallExtension(verifier(), i);
}
const int kNumProfile1Extensions = 10;
for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
InstallExtension(GetProfile(1), i);
InstallExtension(verifier(), i);
}
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
InstallDifferentExtensions) {
ASSERT_TRUE(SetupClients());
int i = 0;
const int kNumCommonExtensions = 5;
for (int j = 0; j < kNumCommonExtensions; ++i, ++j) {
InstallExtension(GetProfile(0), i);
InstallExtension(GetProfile(1), i);
InstallExtension(verifier(), i);
}
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AwaitQuiescence());
const int kNumProfile0Extensions = 10;
for (int j = 0; j < kNumProfile0Extensions; ++i, ++j) {
InstallExtension(GetProfile(0), i);
InstallExtension(verifier(), i);
}
const int kNumProfile1Extensions = 10;
for (int j = 0; j < kNumProfile1Extensions; ++i, ++j) {
InstallExtension(GetProfile(1), i);
InstallExtension(verifier(), i);
}
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TCM ID - 3637311.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
InstallExtension(GetProfile(0), 0);
InstallExtension(verifier(), 0);
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TCM ID - 3724281.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
InstallExtension(GetProfile(0), 0);
InstallExtension(verifier(), 0);
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
UninstallExtension(GetProfile(0), 0);
UninstallExtension(verifier(), 0);
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TCM ID - 3635304.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
InstallExtension(GetProfile(0), 0);
InstallExtension(GetProfile(1), 0);
ASSERT_TRUE(AwaitQuiescence());
UninstallExtension(GetProfile(0), 0);
InstallExtension(GetProfile(0), 1);
InstallExtension(verifier(), 1);
InstallExtension(GetProfile(0), 2);
InstallExtension(GetProfile(1), 2);
InstallExtension(verifier(), 2);
InstallExtension(GetProfile(1), 3);
InstallExtension(verifier(), 3);
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TCM ID - 3728322.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
UpdateIncognitoEnableDisable) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
InstallExtension(GetProfile(0), 0);
InstallExtension(GetProfile(1), 0);
InstallExtension(verifier(), 0);
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
IncognitoEnableExtension(GetProfile(0), 0);
IncognitoEnableExtension(verifier(), 0);
ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
IncognitoDisableExtension(GetProfile(1), 0);
IncognitoDisableExtension(verifier(), 0);
ASSERT_TRUE(HasSameExtensionsAsVerifier(1));
ASSERT_FALSE(HasSameExtensionsAsVerifier(0));
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TCM ID - 3732278.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableExtensions) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::EXTENSIONS));
InstallExtension(GetProfile(0), 1);
InstallExtension(verifier(), 1);
ASSERT_TRUE(
GetClient(0)->AwaitFullSyncCompletion("Installed an extension."));
ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier());
ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::EXTENSIONS));
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
InstallExtensionsPendingForSync(verifier());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TCM ID - 3606290.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) {
ASSERT_TRUE(SetupSync());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
InstallExtension(GetProfile(0), 0);
InstallExtension(verifier(), 0);
ASSERT_TRUE(
GetClient(0)->AwaitFullSyncCompletion("Installed an extension."));
ASSERT_TRUE(HasSameExtensionsAsVerifier(0));
ASSERT_FALSE(HasSameExtensionsAsVerifier(1));
ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
ASSERT_TRUE(AwaitQuiescence());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
InstallExtensionsPendingForSync(verifier());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// Regression test for bug 104399: ensure that an extension installed prior to
// setting up sync, when uninstalled, is also uninstalled from sync.
IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest,
UninstallPreinstalledExtensions) {
ASSERT_TRUE(SetupClients());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
InstallExtension(GetProfile(0), 0);
InstallExtension(verifier(), 0);
ASSERT_TRUE(SetupSync());
InstallExtensionsPendingForSync(GetProfile(0));
InstallExtensionsPendingForSync(GetProfile(1));
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
UninstallExtension(GetProfile(0), 0);
UninstallExtension(verifier(), 0);
ASSERT_TRUE(AwaitQuiescence());
ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier());
}
// TODO(akalin): Add tests exercising:
// - Offline installation/uninstallation behavior