1// Copyright 2013 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#ifndef CHROME_BROWSER_EXTENSIONS_POLICY_HANDLERS_H_
6#define CHROME_BROWSER_EXTENSIONS_POLICY_HANDLERS_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/values.h"
10#include "components/policy/core/browser/configuration_policy_handler.h"
11
12namespace policy {
13class PolicyMap;
14class PolicyErrorMap;
15}  // namespace policy
16
17namespace extensions {
18
19// Implements additional checks for policies that are lists of extension IDs.
20class ExtensionListPolicyHandler
21    : public policy::TypeCheckingPolicyHandler {
22 public:
23  ExtensionListPolicyHandler(const char* policy_name,
24                             const char* pref_path,
25                             bool allow_wildcards);
26  virtual ~ExtensionListPolicyHandler();
27
28  // ConfigurationPolicyHandler methods:
29  virtual bool CheckPolicySettings(const policy::PolicyMap& policies,
30                                   policy::PolicyErrorMap* errors) OVERRIDE;
31  virtual void ApplyPolicySettings(const policy::PolicyMap& policies,
32                                   PrefValueMap* prefs) OVERRIDE;
33
34 protected:
35  const char* pref_path() const;
36
37  // Runs sanity checks on the policy value and returns it in |extension_ids|.
38  bool CheckAndGetList(const policy::PolicyMap& policies,
39                       policy::PolicyErrorMap* errors,
40                       scoped_ptr<base::ListValue>* extension_ids);
41
42 private:
43  const char* pref_path_;
44  bool allow_wildcards_;
45
46  DISALLOW_COPY_AND_ASSIGN(ExtensionListPolicyHandler);
47};
48
49class ExtensionInstallForcelistPolicyHandler
50    : public policy::TypeCheckingPolicyHandler {
51 public:
52  ExtensionInstallForcelistPolicyHandler();
53  virtual ~ExtensionInstallForcelistPolicyHandler();
54
55  // ConfigurationPolicyHandler methods:
56  virtual bool CheckPolicySettings(const policy::PolicyMap& policies,
57                                   policy::PolicyErrorMap* errors) OVERRIDE;
58  virtual void ApplyPolicySettings(const policy::PolicyMap& policies,
59                                   PrefValueMap* prefs) OVERRIDE;
60
61 private:
62  // Parses the data in |policy_value| and writes them to |extension_dict|.
63  bool ParseList(const base::Value* policy_value,
64                 base::DictionaryValue* extension_dict,
65                 policy::PolicyErrorMap* errors);
66
67  DISALLOW_COPY_AND_ASSIGN(ExtensionInstallForcelistPolicyHandler);
68};
69
70// Implements additional checks for policies that are lists of extension
71// URLPatterns.
72class ExtensionURLPatternListPolicyHandler
73    : public policy::TypeCheckingPolicyHandler {
74 public:
75  ExtensionURLPatternListPolicyHandler(const char* policy_name,
76                                       const char* pref_path);
77  virtual ~ExtensionURLPatternListPolicyHandler();
78
79  // ConfigurationPolicyHandler methods:
80  virtual bool CheckPolicySettings(const policy::PolicyMap& policies,
81                                   policy::PolicyErrorMap* errors) OVERRIDE;
82  virtual void ApplyPolicySettings(const policy::PolicyMap& policies,
83                                   PrefValueMap* prefs) OVERRIDE;
84
85 private:
86  const char* pref_path_;
87
88  DISALLOW_COPY_AND_ASSIGN(ExtensionURLPatternListPolicyHandler);
89};
90
91}  // namespace extensions
92
93#endif  // CHROME_BROWSER_EXTENSIONS_POLICY_HANDLERS_H_
94