summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/permissions_based_management_policy_provider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/permissions_based_management_policy_provider.cc')
-rw-r--r--chrome/browser/extensions/permissions_based_management_policy_provider.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/chrome/browser/extensions/permissions_based_management_policy_provider.cc b/chrome/browser/extensions/permissions_based_management_policy_provider.cc
new file mode 100644
index 0000000..4b29945
--- /dev/null
+++ b/chrome/browser/extensions/permissions_based_management_policy_provider.cc
@@ -0,0 +1,61 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/permissions_based_management_policy_provider.h"
+
+#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/extensions/extension_management.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest_handlers/permissions_parser.h"
+#include "extensions/common/permissions/permission_set.h"
+#include "grit/extensions_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace extensions {
+
+PermissionsBasedManagementPolicyProvider::
+ PermissionsBasedManagementPolicyProvider(ExtensionManagement* settings)
+ : settings_(settings) {
+}
+
+PermissionsBasedManagementPolicyProvider::
+ ~PermissionsBasedManagementPolicyProvider() {
+}
+
+std::string
+PermissionsBasedManagementPolicyProvider::GetDebugPolicyProviderName() const {
+#ifdef NDEBUG
+ NOTREACHED();
+ return std::string();
+#else
+ return "Controlled by enterprise policy, restricting extension permissions.";
+#endif
+}
+
+bool PermissionsBasedManagementPolicyProvider::UserMayLoad(
+ const Extension* extension,
+ base::string16* error) const {
+ // Component extensions are always allowed.
+ if (Manifest::IsComponentLocation(extension->location()))
+ return true;
+
+ scoped_refptr<const PermissionSet> required_permissions =
+ PermissionsParser::GetRequiredPermissions(extension);
+
+ if (!settings_->IsPermissionSetAllowed(extension->id(),
+ required_permissions)) {
+ if (error) {
+ *error =
+ l10n_util::GetStringFUTF16(IDS_EXTENSION_CANT_INSTALL_POLICY_BLOCKED,
+ base::UTF8ToUTF16(extension->name()),
+ base::UTF8ToUTF16(extension->id()));
+ }
+ return false;
+ }
+
+ return true;
+}
+
+} // namespace extensions