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

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

Issue 1136543003: Extensions: Store disable reasons in Sync (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review Created 5 years, 7 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 308af8002eb11f7debca675029444793890152aa..abaf9c7b50c409df8246ea2bb42b9f941705a6c9 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -924,12 +924,17 @@ class ExtensionServiceTest : public extensions::ExtensionServiceTestBase,
}
void UninstallExtension(const std::string& id, bool use_helper) {
+ UninstallExtension(id, use_helper, Extension::ENABLED);
+ }
+
+ void UninstallExtension(const std::string& id, bool use_helper,
+ Extension::State expected_state) {
// Verify that the extension is installed.
base::FilePath extension_path = extensions_install_dir().AppendASCII(id);
EXPECT_TRUE(base::PathExists(extension_path));
size_t pref_key_count = GetPrefKeyCount();
EXPECT_GT(pref_key_count, 0u);
- ValidateIntegerPref(id, "state", Extension::ENABLED);
+ ValidateIntegerPref(id, "state", expected_state);
// Uninstall it.
if (use_helper) {
@@ -5909,10 +5914,11 @@ TEST_F(ExtensionServiceTest, DisableExtensionFromSync) {
const Extension* extension = service()->GetExtensionById(good0, true);
ASSERT_TRUE(extension);
ASSERT_TRUE(service()->IsExtensionEnabled(good0));
- ExtensionSyncData disable_good_crx(*extension, false, false, false,
- ExtensionSyncData::BOOLEAN_UNSET);
// 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(
@@ -5956,8 +5962,9 @@ TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) {
// Now sync data comes in that says to disable good0. This should be
// ignored.
- ExtensionSyncData disable_good_crx(*extension, false, false, false,
- ExtensionSyncData::BOOLEAN_FALSE);
+ 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(
@@ -6514,6 +6521,90 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) {
EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
}
+TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) {
+ InitializeEmptyExtensionService();
+ InitializeExtensionSyncService();
+ syncer::FakeSyncChangeProcessor processor;
+ extension_sync_service()->MergeDataAndStartSyncing(
+ syncer::EXTENSIONS,
+ syncer::SyncDataList(),
+ scoped_ptr<syncer::SyncChangeProcessor>(
+ new syncer::FakeSyncChangeProcessor),
+ scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
+
+ sync_pb::EntitySpecifics specifics;
+ sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension();
+ ext_specifics->set_id(good_crx);
+ ext_specifics->set_version(base::Version("1").GetString());
+
+ const base::FilePath path = data_dir().AppendASCII("good.crx");
+ const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
+
+ {
+ ext_specifics->set_enabled(true);
+ ext_specifics->set_disable_reasons(0);
+
+ 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);
+
+ ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
+ UpdateExtension(good_crx, path, ENABLED);
+ // Permissions should have been granted during installation.
+ EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty());
+ ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
+ }
+ UninstallExtension(good_crx, false);
+ {
+ ext_specifics->set_enabled(false);
+ ext_specifics->set_disable_reasons(Extension::DISABLE_USER_ACTION);
+
+ 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);
+
+ ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
+ UpdateExtension(good_crx, path, DISABLED);
+ // Even if the extension came in disabled, its permissions should have been
+ // granted (the user already approved them on another machine).
+ EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty());
+ ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
+ }
+ UninstallExtension(good_crx, false, Extension::DISABLED);
+ {
+ ext_specifics->set_enabled(false);
+ // Legacy case: No disable reasons are set.
not at google - send to devlin 2015/05/19 14:32:10 "The disable reason should be set to "DISABLE_UNKN
Marc Treib 2015/05/19 15:30:56 Done.
+ ext_specifics->set_disable_reasons(0);
+
+ 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);
+
+ ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx));
+ UpdateExtension(good_crx, path, DISABLED);
+ EXPECT_EQ(Extension::DISABLE_UNKNOWN_FROM_SYNC,
+ prefs->GetDisableReasons(good_crx));
not at google - send to devlin 2015/05/19 14:32:10 Why is this the only place that GetDisableReasons
Marc Treib 2015/05/19 15:30:56 Good point; added.
+ EXPECT_FALSE(prefs->GetGrantedPermissions(good_crx)->IsEmpty());
+ ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
+ }
+ UninstallExtension(good_crx, false, Extension::DISABLED);
+}
+
TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) {
InitializeExtensionServiceWithUpdater();
InitializeExtensionSyncService();

Powered by Google App Engine
This is Rietveld 408576698