Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2206)

Unified Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 1240573012: Extension syncing: Introduce a NeedsSync pref (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext_sync_uninstall
Patch Set: more cleanup; fix test Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698