diff options
author | pam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-02 13:14:14 +0000 |
---|---|---|
committer | pam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-02 13:14:14 +0000 |
commit | 6518715de7d13fee24c654377a29da2e643b05e5 (patch) | |
tree | 1e916cbec83cc4dcbc4f8b7dcffc3368f91da3f9 /chrome/browser/extensions/extension_management_api.cc | |
parent | bb5035d4a6048baf8b1f2801114d058134833a40 (diff) | |
download | chromium_src-6518715de7d13fee24c654377a29da2e643b05e5.zip chromium_src-6518715de7d13fee24c654377a29da2e643b05e5.tar.gz chromium_src-6518715de7d13fee24c654377a29da2e643b05e5.tar.bz2 |
Refactor the various ways to control what users can do to extensions.
Add an ExtensionManagementPolicy class, held by the ExtensionService, that registers delegates and mediates questions about what can be done to extensions (install, uninstall, modify, etc.). Convert existing mechanisms to control extension operations, namely administrator policy black/whitelists and component extension requirements, to use this abstraction.
In addition to cleaning up existing mechanisms, this will support the control managed mode needs to impose (in an upcoming patch).
BUG=117987
TEST=covered by unit, browser, and api tests
Review URL: https://chromiumcodereview.appspot.com/10382149
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140194 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_management_api.cc')
-rw-r--r-- | chrome/browser/extensions/extension_management_api.cc | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/chrome/browser/extensions/extension_management_api.cc b/chrome/browser/extensions/extension_management_api.cc index 5666e07..3f508d2 100644 --- a/chrome/browser/extensions/extension_management_api.cc +++ b/chrome/browser/extensions/extension_management_api.cc @@ -17,7 +17,9 @@ #include "chrome/browser/extensions/extension_event_router.h" #include "chrome/browser/extensions/extension_management_api_constants.h" #include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/extensions/extension_uninstall_dialog.h" +#include "chrome/browser/extensions/management_policy.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/extensions/application_launch.h" #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" @@ -72,11 +74,17 @@ static DictionaryValue* CreateExtensionInfo(const Extension& extension, bool enabled = service->IsExtensionEnabled(extension.id()); extension.GetBasicInfo(enabled, info); + const extensions::ManagementPolicy* policy = ExtensionSystem::Get( + service->profile())->management_policy(); + info->SetBoolean(keys::kMayDisableKey, + policy->UserMayModifySettings(&extension, NULL)); + info->SetBoolean(keys::kIsAppKey, extension.is_app()); if (!enabled) { - bool permissions_escalated = service->extension_prefs()-> - DidExtensionEscalatePermissions(extension.id()); + ExtensionPrefs* prefs = service->extension_prefs(); + bool permissions_escalated = + prefs->DidExtensionEscalatePermissions(extension.id()); const char* reason = permissions_escalated ? keys::kDisabledReasonPermissionsIncrease : keys::kDisabledReasonUnknown; info->SetString(keys::kDisabledReasonKey, reason); @@ -183,7 +191,7 @@ bool GetPermissionWarningsByIdFunction::RunImpl() { const Extension* extension = service()->GetExtensionById(ext_id, true); if (!extension) { error_ = ExtensionErrorUtils::FormatErrorMessage(keys::kNoExtensionError, - ext_id); + ext_id); return false; } @@ -203,7 +211,7 @@ namespace { class SafeManifestJSONParser : public UtilityProcessHostClient { public: SafeManifestJSONParser(GetPermissionWarningsByManifestFunction* client, - const std::string& manifest) + const std::string& manifest) : client_(client), manifest_(manifest) {} @@ -381,9 +389,11 @@ bool SetEnabledFunction::RunImpl() { return false; } - if (!Extension::UserMayDisable(extension->location())) { + const extensions::ManagementPolicy* policy = ExtensionSystem::Get( + profile())->management_policy(); + if (!policy->UserMayModifySettings(extension, NULL)) { error_ = ExtensionErrorUtils::FormatErrorMessage( - keys::kUserCantDisableError, extension_id_); + keys::kUserCantModifyError, extension_id_); return false; } @@ -454,12 +464,10 @@ bool UninstallFunction::RunImpl() { return false; } - ExtensionPrefs* prefs = service()->extension_prefs(); - - if (!Extension::UserMayDisable( - prefs->GetInstalledExtensionInfo(extension_id_)->extension_location)) { + if (!ExtensionSystem::Get( + profile())->management_policy()->UserMayModifySettings(extension, NULL)) { error_ = ExtensionErrorUtils::FormatErrorMessage( - keys::kUserCantDisableError, extension_id_); + keys::kUserCantModifyError, extension_id_); return false; } |