summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_management_api.cc
diff options
context:
space:
mode:
authorpam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-02 13:14:14 +0000
committerpam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-02 13:14:14 +0000
commit6518715de7d13fee24c654377a29da2e643b05e5 (patch)
tree1e916cbec83cc4dcbc4f8b7dcffc3368f91da3f9 /chrome/browser/extensions/extension_management_api.cc
parentbb5035d4a6048baf8b1f2801114d058134833a40 (diff)
downloadchromium_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.cc30
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;
}