1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/management_policy.h"
11 void GetExtensionNameAndId(const Extension* extension,
14 // The extension may be NULL in testing.
15 *id = extension ? extension->id() : "[test]";
16 *name = extension ? extension->name() : "test";
21 ManagementPolicy::ManagementPolicy() {
24 ManagementPolicy::~ManagementPolicy() {
27 bool ManagementPolicy::Provider::UserMayLoad(const Extension* extension,
28 string16* error) const {
32 bool ManagementPolicy::Provider::UserMayModifySettings(
33 const Extension* extension, string16* error) const {
37 bool ManagementPolicy::Provider::MustRemainEnabled(const Extension* extension,
38 string16* error) const {
42 bool ManagementPolicy::Provider::MustRemainDisabled(
43 const Extension* extension,
44 Extension::DisableReason* reason,
45 string16* error) const {
49 void ManagementPolicy::RegisterProvider(Provider* provider) {
50 providers_.insert(provider);
53 void ManagementPolicy::UnregisterProvider(Provider* provider) {
54 providers_.erase(provider);
57 bool ManagementPolicy::UserMayLoad(const Extension* extension,
58 string16* error) const {
59 return ApplyToProviderList(&Provider::UserMayLoad, "Installation",
60 true, extension, error);
63 bool ManagementPolicy::UserMayModifySettings(const Extension* extension,
64 string16* error) const {
65 return ApplyToProviderList(&Provider::UserMayModifySettings, "Modification",
66 true, extension, error);
69 bool ManagementPolicy::MustRemainEnabled(const Extension* extension,
70 string16* error) const {
71 return ApplyToProviderList(&Provider::MustRemainEnabled, "Disabling",
72 false, extension, error);
75 bool ManagementPolicy::MustRemainDisabled(const Extension* extension,
76 Extension::DisableReason* reason,
77 string16* error) const {
78 for (ProviderList::const_iterator it = providers_.begin();
79 it != providers_.end(); ++it)
80 if ((*it)->MustRemainDisabled(extension, reason, error))
86 void ManagementPolicy::UnregisterAllProviders() {
90 int ManagementPolicy::GetNumProviders() const {
91 return providers_.size();
94 bool ManagementPolicy::ApplyToProviderList(ProviderFunction function,
95 const char* debug_operation_name,
97 const Extension* extension,
98 string16* error) const {
99 for (ProviderList::const_iterator it = providers_.begin();
100 it != providers_.end(); ++it) {
101 const Provider* provider = *it;
102 bool result = (provider->*function)(extension, error);
103 if (result != normal_result) {
106 GetExtensionNameAndId(extension, &name, &id);
107 DVLOG(1) << debug_operation_name << " of extension " << name
109 << " prohibited by " << provider->GetDebugPolicyProviderName();
110 return !normal_result;
113 return normal_result;
116 } // namespace extensions