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

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

Issue 1150573002: Do not grant permissions to extensions that come in via Sync disabled due to a permission increase (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sync_disable_reason
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
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7d8042d0bbf90209d00a08cf26ad6f936620fb1e..2e0a50e85661d464180c91ba951c631921647fd7 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -6540,60 +6540,41 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) {
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);
- EXPECT_EQ(0, prefs->GetDisableReasons(good_crx));
- // Permissions should have been granted during installation.
- scoped_refptr<PermissionSet> permissions(
- prefs->GetGrantedPermissions(good_crx));
- EXPECT_FALSE(permissions->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);
- EXPECT_EQ(Extension::DISABLE_USER_ACTION,
- prefs->GetDisableReasons(good_crx));
- // Even if the extension came in disabled, its permissions should have been
+ struct TestCase {
+ const char* name; // For failure output only.
+ bool sync_enabled; // The "enabled" flag coming in from Sync.
+ int sync_disable_reasons; // The disable reason(s) coming in from Sync.
+ // The disable reason(s) that should be set on the installed extension.
+ // This will usually be the same as |sync_disable_reasons|, but see the
+ // "Legacy" case.
+ int expect_disable_reasons;
+ // Whether the extension's permissions should be auto-granted during
+ // installation.
+ bool expect_permissions_granted;
+ } test_cases[] = {
+ // Standard case: Extension comes in enabled; permissions should be granted
+ // during installation.
+ { "Standard", true, 0, 0, true },
+ // If the extension comes in disabled, its permissions should still be
// granted (the user already approved them on another machine).
- scoped_refptr<PermissionSet> permissions(
- prefs->GetGrantedPermissions(good_crx));
- EXPECT_FALSE(permissions->IsEmpty());
- ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
- }
- UninstallExtension(good_crx, false, Extension::DISABLED);
- {
- ext_specifics->set_enabled(false);
+ { "Disabled", false, Extension::DISABLE_USER_ACTION,
+ Extension::DISABLE_USER_ACTION, true },
// Legacy case (<M45): No disable reasons come in from Sync (see
// crbug.com/484214). After installation, the reason should be set to
// DISABLE_UNKNOWN_FROM_SYNC.
- ext_specifics->set_disable_reasons(0);
+ { "Legacy", false, 0, Extension::DISABLE_UNKNOWN_FROM_SYNC, true },
+ // If the extension came in disabled due to a permissions increase, then the
+ // user has *not* approved the permissions, and they shouldn't be granted.
+ // crbug.com/484214
+ { "PermissionsIncrease", false, Extension::DISABLE_PERMISSIONS_INCREASE,
+ Extension::DISABLE_PERMISSIONS_INCREASE, false },
+ };
+
+ for (const TestCase& test_case : test_cases) {
+ SCOPED_TRACE(test_case.name);
+
+ ext_specifics->set_enabled(test_case.sync_enabled);
+ ext_specifics->set_disable_reasons(test_case.sync_disable_reasons);
syncer::SyncData sync_data =
syncer::SyncData::CreateLocalData(good_crx, "Name", specifics);
@@ -6605,15 +6586,20 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNewExtension) {
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,
+ UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED
+ : DISABLED);
+ EXPECT_EQ(test_case.expect_disable_reasons,
prefs->GetDisableReasons(good_crx));
scoped_refptr<PermissionSet> permissions(
prefs->GetGrantedPermissions(good_crx));
- EXPECT_FALSE(permissions->IsEmpty());
+ EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty());
ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx));
+
+ // Remove the extension again, so we can install it again for the next case.
+ UninstallExtension(good_crx, false,
+ test_case.sync_enabled ? Extension::ENABLED
+ : Extension::DISABLED);
}
- UninstallExtension(good_crx, false, Extension::DISABLED);
}
TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) {
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698