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 3378d72db7de623b815975fe239e77b04c9079f1..bca7b49001a833cb7036d4b7c21fe54a1a19c4cd 100644 |
--- a/chrome/browser/extensions/extension_service_unittest.cc |
+++ b/chrome/browser/extensions/extension_service_unittest.cc |
@@ -72,6 +72,7 @@ |
#include "chrome/common/extensions/api/plugins/plugins_handler.h" |
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
#include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" |
+#include "chrome/common/extensions/sync_helper.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/test/base/scoped_browser_locale.h" |
@@ -5907,23 +5908,28 @@ TEST_F(ExtensionServiceTest, DisableExtensionFromSync) { |
ASSERT_TRUE(extension); |
ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
+ // Sync starts up. |
+ extension_sync_service()->MergeDataAndStartSyncing( |
+ syncer::EXTENSIONS, |
+ syncer::SyncDataList(), |
+ make_scoped_ptr(new syncer::FakeSyncChangeProcessor), |
+ scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
+ |
// Then sync data arrives telling us to disable |good0|. |
ExtensionSyncData disable_good_crx(*extension, false, |
Extension::DISABLE_USER_ACTION, false, |
false, ExtensionSyncData::BOOLEAN_UNSET); |
- 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 syncer::FakeSyncChangeProcessor), |
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
+ syncer::SyncChange sync_change(FROM_HERE, |
+ syncer::SyncChange::ACTION_UPDATE, |
+ disable_good_crx.GetSyncData()); |
+ syncer::SyncChangeList list(1, sync_change); |
+ extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
+ |
ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
Marc Treib
2015/07/16 13:20:42
Turns out I broke this test: Installing the extens
|
} |
-TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { |
- // Start the extensions service with one external extension already installed. |
+TEST_F(ExtensionServiceTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) { |
+ // Start the extension service with three extensions already installed. |
base::FilePath source_install_dir = |
data_dir().AppendASCII("good").AppendASCII("Extensions"); |
base::FilePath pref_path = |
@@ -5941,34 +5947,44 @@ TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { |
ASSERT_TRUE(service()->is_ready()); |
ASSERT_EQ(3u, loaded_.size()); |
- const Extension* extension = service()->GetExtensionById(good0, true); |
ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
+ ASSERT_TRUE(service()->IsExtensionEnabled(good2)); |
- // Disable extension before first sync data arrives. |
+ // Disable and re-enable good0 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. |
- ExtensionSyncData disable_good_crx(*extension, false, |
- Extension::DISABLE_USER_ACTION, false, |
- false, ExtensionSyncData::BOOLEAN_UNSET); |
+ // Disable good2 before first sync data arrives (good1 is considered |
+ // non-syncable because it has plugin permission). |
+ service()->DisableExtension(good2, Extension::DISABLE_USER_ACTION); |
+ ASSERT_FALSE(service()->IsExtensionEnabled(good2)); |
+ |
+ const Extension* extension0 = service()->GetExtensionById(good0, true); |
+ const Extension* extension2 = service()->GetExtensionById(good2, true); |
+ ASSERT_TRUE(extensions::sync_helper::IsSyncable(extension0)); |
+ ASSERT_TRUE(extensions::sync_helper::IsSyncable(extension2)); |
+ |
+ // Now sync data comes in that says to disable good0 and enable good2. |
+ ExtensionSyncData disable_good0(*extension0, false, |
+ Extension::DISABLE_USER_ACTION, false, false, |
+ ExtensionSyncData::BOOLEAN_UNSET); |
+ ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE, |
+ false, false, |
+ ExtensionSyncData::BOOLEAN_UNSET); |
syncer::SyncDataList sync_data; |
- sync_data.push_back(disable_good_crx.GetSyncData()); |
+ sync_data.push_back(disable_good0.GetSyncData()); |
+ sync_data.push_back(enable_good2.GetSyncData()); |
extension_sync_service()->MergeDataAndStartSyncing( |
syncer::EXTENSIONS, |
sync_data, |
- scoped_ptr<syncer::SyncChangeProcessor>( |
- new syncer::FakeSyncChangeProcessor), |
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
+ make_scoped_ptr(new syncer::FakeSyncChangeProcessor), |
+ make_scoped_ptr(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)); |
+ // Both sync changes should be ignored, since the local state was changed |
+ // before sync started, and so the local state is considered more recent. |
+ EXPECT_TRUE(service()->IsExtensionEnabled(good0)); |
+ EXPECT_FALSE(service()->IsExtensionEnabled(good2)); |
} |
TEST_F(ExtensionServiceTest, GetSyncData) { |