- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / management_policy.cc
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.
4
5 #include "chrome/browser/extensions/management_policy.h"
6
7 namespace extensions {
8
9 namespace {
10
11 void GetExtensionNameAndId(const Extension* extension,
12                            std::string* name,
13                            std::string* id) {
14   // The extension may be NULL in testing.
15   *id = extension ? extension->id() : "[test]";
16   *name = extension ? extension->name() : "test";
17 }
18
19 }  // namespace
20
21 ManagementPolicy::ManagementPolicy() {
22 }
23
24 ManagementPolicy::~ManagementPolicy() {
25 }
26
27 bool ManagementPolicy::Provider::UserMayLoad(const Extension* extension,
28                                              string16* error) const {
29   return true;
30 }
31
32 bool ManagementPolicy::Provider::UserMayModifySettings(
33     const Extension* extension, string16* error) const {
34   return true;
35 }
36
37 bool ManagementPolicy::Provider::MustRemainEnabled(const Extension* extension,
38                                                    string16* error) const {
39   return false;
40 }
41
42 bool ManagementPolicy::Provider::MustRemainDisabled(
43     const Extension* extension,
44     Extension::DisableReason* reason,
45     string16* error) const {
46   return false;
47 }
48
49 void ManagementPolicy::RegisterProvider(Provider* provider) {
50   providers_.insert(provider);
51 }
52
53 void ManagementPolicy::UnregisterProvider(Provider* provider) {
54   providers_.erase(provider);
55 }
56
57 bool ManagementPolicy::UserMayLoad(const Extension* extension,
58                                    string16* error) const {
59   return ApplyToProviderList(&Provider::UserMayLoad, "Installation",
60                              true, extension, error);
61 }
62
63 bool ManagementPolicy::UserMayModifySettings(const Extension* extension,
64                                              string16* error) const {
65   return ApplyToProviderList(&Provider::UserMayModifySettings, "Modification",
66                              true, extension, error);
67 }
68
69 bool ManagementPolicy::MustRemainEnabled(const Extension* extension,
70                                          string16* error) const {
71   return ApplyToProviderList(&Provider::MustRemainEnabled, "Disabling",
72                              false, extension, error);
73 }
74
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))
81       return true;
82
83   return false;
84 }
85
86 void ManagementPolicy::UnregisterAllProviders() {
87   providers_.clear();
88 }
89
90 int ManagementPolicy::GetNumProviders() const {
91   return providers_.size();
92 }
93
94 bool ManagementPolicy::ApplyToProviderList(ProviderFunction function,
95                                            const char* debug_operation_name,
96                                            bool normal_result,
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) {
104       std::string id;
105       std::string name;
106       GetExtensionNameAndId(extension, &name, &id);
107       DVLOG(1) << debug_operation_name << " of extension " << name
108                << " (" << id << ")"
109                << " prohibited by " << provider->GetDebugPolicyProviderName();
110       return !normal_result;
111     }
112   }
113   return normal_result;
114 }
115
116 }  // namespace extensions