| Index: chrome/browser/extensions/extension_service_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
|
| index 9723fdf9398fe685c24697f53d7d4d039ffb1909..ce4aded9617d97c05a048c18032dd1857c75d0ac 100644
|
| --- a/chrome/browser/extensions/extension_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_service_unittest.cc
|
| @@ -5279,6 +5279,91 @@ TEST_F(ExtensionServiceTest, DeferredSyncStartupOnInstall) {
|
| ASSERT_EQ(syncer::UNSPECIFIED, triggered_type);
|
| }
|
|
|
| +TEST_F(ExtensionServiceTest, DisableExtensionFromSync) {
|
| + // Start the extensions service with one external extension already installed.
|
| + base::FilePath source_install_dir = data_dir_
|
| + .AppendASCII("good")
|
| + .AppendASCII("Extensions");
|
| + base::FilePath pref_path = source_install_dir
|
| + .DirName()
|
| + .AppendASCII("Preferences");
|
| +
|
| + InitializeInstalledExtensionService(pref_path, source_install_dir);
|
| + InitializeExtensionSyncService();
|
| +
|
| + // The user has enabled sync.
|
| + ProfileSyncService* sync_service =
|
| + ProfileSyncServiceFactory::GetForProfile(profile_.get());
|
| + sync_service->SetSyncSetupCompleted();
|
| +
|
| + service_->Init();
|
| + ASSERT_TRUE(service_->is_ready());
|
| +
|
| + ASSERT_EQ(3u, loaded_.size());
|
| +
|
| + // We start enabled.
|
| + const Extension* extension = service_->GetExtensionById(good0, true);
|
| + ASSERT_TRUE(extension);
|
| + ASSERT_TRUE(service_->IsExtensionEnabled(good0));
|
| + extensions::ExtensionSyncData disable_good_crx(*extension, false, false);
|
| +
|
| + // Then sync data arrives telling us to disable |good0|.
|
| + syncer::SyncDataList sync_data;
|
| + sync_data.push_back(disable_good_crx.GetSyncData());
|
| + extension_sync_service_->MergeDataAndStartSyncing(
|
| + syncer::EXTENSIONS, sync_data,
|
| + scoped_ptr<syncer::SyncChangeProcessor>(new TestSyncProcessorStub),
|
| + scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
|
| + ASSERT_FALSE(service_->IsExtensionEnabled(good0));
|
| +}
|
| +
|
| +TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) {
|
| + // Start the extensions service with one external extension already installed.
|
| + base::FilePath source_install_dir = data_dir_
|
| + .AppendASCII("good")
|
| + .AppendASCII("Extensions");
|
| + base::FilePath pref_path = source_install_dir
|
| + .DirName()
|
| + .AppendASCII("Preferences");
|
| +
|
| + InitializeInstalledExtensionService(pref_path, source_install_dir);
|
| + InitializeExtensionSyncService();
|
| +
|
| + // The user has enabled sync.
|
| + ProfileSyncService* sync_service =
|
| + ProfileSyncServiceFactory::GetForProfile(profile_.get());
|
| + sync_service->SetSyncSetupCompleted();
|
| +
|
| + service_->Init();
|
| + ASSERT_TRUE(service_->is_ready());
|
| + ASSERT_EQ(3u, loaded_.size());
|
| +
|
| + const Extension* extension = service_->GetExtensionById(good0, true);
|
| + ASSERT_TRUE(service_->IsExtensionEnabled(good0));
|
| +
|
| + // Disable extension before first sync data arrives.
|
| + service_->DisableExtension(good0, Extension::DISABLE_USER_ACTION);
|
| + ASSERT_FALSE(service_->IsExtensionEnabled(good0));
|
| +
|
| + // Enable extension - this is now the most recent state.
|
| + service_->EnableExtension(good0);
|
| + ASSERT_TRUE(service_->IsExtensionEnabled(good0));
|
| +
|
| + // Now sync data comes in that says to disable good0. This should be
|
| + // ignored.
|
| + extensions::ExtensionSyncData disable_good_crx(*extension, false, false);
|
| + syncer::SyncDataList sync_data;
|
| + sync_data.push_back(disable_good_crx.GetSyncData());
|
| + extension_sync_service_->MergeDataAndStartSyncing(
|
| + syncer::EXTENSIONS, sync_data,
|
| + scoped_ptr<syncer::SyncChangeProcessor>(new TestSyncProcessorStub),
|
| + scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
|
| +
|
| + // The extension was enabled locally before the sync data arrived, so it
|
| + // should still be enabled now.
|
| + ASSERT_TRUE(service_->IsExtensionEnabled(good0));
|
| +}
|
| +
|
| TEST_F(ExtensionServiceTest, GetSyncData) {
|
| InitializeEmptyExtensionService();
|
| InitializeExtensionSyncService();
|
| @@ -5297,6 +5382,7 @@ TEST_F(ExtensionServiceTest, GetSyncData) {
|
| extensions::ExtensionSyncData data(list[0]);
|
| EXPECT_EQ(extension->id(), data.id());
|
| EXPECT_FALSE(data.uninstalled());
|
| + EXPECT_EQ(service_->IsExtensionEnabled(good_crx), data.enabled());
|
| EXPECT_EQ(extension_util::IsIncognitoEnabled(good_crx, service_),
|
| data.incognito_enabled());
|
| EXPECT_TRUE(data.version().Equals(*extension->version()));
|
| @@ -5325,6 +5411,7 @@ TEST_F(ExtensionServiceTest, GetSyncDataTerminated) {
|
| extensions::ExtensionSyncData data(list[0]);
|
| EXPECT_EQ(extension->id(), data.id());
|
| EXPECT_FALSE(data.uninstalled());
|
| + EXPECT_EQ(service_->IsExtensionEnabled(good_crx), data.enabled());
|
| EXPECT_EQ(extension_util::IsIncognitoEnabled(good_crx, service_),
|
| data.incognito_enabled());
|
| EXPECT_TRUE(data.version().Equals(*extension->version()));
|
| @@ -5370,6 +5457,17 @@ TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) {
|
| syncer::EXTENSIONS);
|
| ASSERT_EQ(list.size(), 1U);
|
| extensions::ExtensionSyncData data(list[0]);
|
| + EXPECT_TRUE(data.enabled());
|
| + EXPECT_FALSE(data.incognito_enabled());
|
| + }
|
| +
|
| + service_->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION);
|
| + {
|
| + syncer::SyncDataList list = extension_sync_service_->GetAllSyncData(
|
| + syncer::EXTENSIONS);
|
| + ASSERT_EQ(list.size(), 1U);
|
| + extensions::ExtensionSyncData data(list[0]);
|
| + EXPECT_FALSE(data.enabled());
|
| EXPECT_FALSE(data.incognito_enabled());
|
| }
|
|
|
| @@ -5379,6 +5477,17 @@ TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) {
|
| syncer::EXTENSIONS);
|
| ASSERT_EQ(list.size(), 1U);
|
| extensions::ExtensionSyncData data(list[0]);
|
| + EXPECT_FALSE(data.enabled());
|
| + EXPECT_TRUE(data.incognito_enabled());
|
| + }
|
| +
|
| + service_->EnableExtension(good_crx);
|
| + {
|
| + syncer::SyncDataList list = extension_sync_service_->GetAllSyncData(
|
| + syncer::EXTENSIONS);
|
| + ASSERT_EQ(list.size(), 1U);
|
| + extensions::ExtensionSyncData data(list[0]);
|
| + EXPECT_TRUE(data.enabled());
|
| EXPECT_TRUE(data.incognito_enabled());
|
| }
|
| }
|
| @@ -5406,6 +5515,7 @@ TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) {
|
| app_specifics->mutable_extension();
|
| extension_specifics->set_id(good_crx);
|
| extension_specifics->set_version("1.0");
|
| + extension_specifics->set_enabled(true);
|
|
|
| syncer::SyncData sync_data =
|
| syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
|
| @@ -5598,6 +5708,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) {
|
| service_->GetInstalledExtension(good_crx)->version()->GetString());
|
|
|
| {
|
| + extension_specifics->set_enabled(true);
|
| syncer::SyncData sync_data =
|
| syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
|
| syncer::SyncChange sync_change(FROM_HERE,
|
| @@ -5612,6 +5723,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) {
|
| }
|
|
|
| {
|
| + extension_specifics->set_enabled(false);
|
| syncer::SyncData sync_data =
|
| syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
|
| syncer::SyncChange sync_change(FROM_HERE,
|
| @@ -5645,6 +5757,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) {
|
| ext_specifics->set_id(good_crx);
|
| ext_specifics->set_version(
|
| service_->GetInstalledExtension(good_crx)->version()->GetString());
|
| + ext_specifics->set_enabled(false);
|
|
|
| {
|
| syncer::SyncData sync_data =
|
| @@ -5655,13 +5768,12 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) {
|
| syncer::SyncChangeList list(1);
|
| list[0] = sync_change;
|
| extension_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
|
| EXPECT_FALSE(extension_util::IsIncognitoEnabled(good_crx, service_));
|
| }
|
|
|
| {
|
| - // Note: enabled is a deprecated field. Although clients may set it,
|
| - // we should ignore it.
|
| - ext_specifics->set_enabled(false);
|
| + ext_specifics->set_enabled(true);
|
| ext_specifics->set_incognito_enabled(true);
|
| syncer::SyncData sync_data =
|
| syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
|
| @@ -5675,6 +5787,21 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) {
|
| EXPECT_TRUE(extension_util::IsIncognitoEnabled(good_crx, service_));
|
| }
|
|
|
| + {
|
| + ext_specifics->set_enabled(false);
|
| + ext_specifics->set_incognito_enabled(true);
|
| + syncer::SyncData sync_data =
|
| + syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
|
| + syncer::SyncChange sync_change(FROM_HERE,
|
| + syncer::SyncChange::ACTION_UPDATE,
|
| + sync_data);
|
| + syncer::SyncChangeList list(1);
|
| + list[0] = sync_change;
|
| + extension_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
|
| + EXPECT_TRUE(extension_util::IsIncognitoEnabled(good_crx, service_));
|
| + }
|
| +
|
| EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
|
| }
|
|
|
| @@ -5697,6 +5824,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) {
|
| ext_specifics->set_id(good_crx);
|
| ext_specifics->set_version(
|
| service_->GetInstalledExtension(good_crx)->version()->GetString());
|
| + ext_specifics->set_enabled(false);
|
| ext_specifics->set_incognito_enabled(true);
|
| syncer::SyncData sync_data =
|
| syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
|
| @@ -5707,6 +5835,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) {
|
| list[0] = sync_change;
|
|
|
| extension_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
|
| EXPECT_TRUE(extension_util::IsIncognitoEnabled(good_crx, service_));
|
|
|
| EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
|
| @@ -5728,6 +5857,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) {
|
| sync_pb::EntitySpecifics specifics;
|
| sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
|
| ext_specifics->set_id(good_crx);
|
| + ext_specifics->set_enabled(true);
|
|
|
| {
|
| ext_specifics->set_version(
|
| @@ -5791,6 +5921,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) {
|
| sync_pb::EntitySpecifics specifics;
|
| sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
|
| ext_specifics->set_id(good_crx);
|
| + ext_specifics->set_enabled(false);
|
| ext_specifics->set_incognito_enabled(true);
|
| ext_specifics->set_update_url("http://www.google.com/");
|
| ext_specifics->set_version("1.2.3.4");
|
| @@ -5807,6 +5938,7 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) {
|
| EXPECT_FALSE(extension_util::IsIncognitoEnabled(good_crx, service_));
|
| extension_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| EXPECT_TRUE(service_->updater()->WillCheckSoon());
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
|
| EXPECT_TRUE(extension_util::IsIncognitoEnabled(good_crx, service_));
|
|
|
| const extensions::PendingExtensionInfo* info;
|
|
|