18bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file.
48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
58bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_POLICY_HANDLERS_H_
68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_POLICY_HANDLERS_H_
78bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/values.h"
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/configuration_policy_handler.h"
118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace policy {
138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class PolicyMap;
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class PolicyErrorMap;
158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}  // namespace policy
168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace extensions {
188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Implements additional checks for policies that are lists of extension IDs.
208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ExtensionListPolicyHandler
218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    : public policy::TypeCheckingPolicyHandler {
228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public:
238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  ExtensionListPolicyHandler(const char* policy_name,
248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                             const char* pref_path,
258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                             bool allow_wildcards);
268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual ~ExtensionListPolicyHandler();
278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // ConfigurationPolicyHandler methods:
298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual bool CheckPolicySettings(const policy::PolicyMap& policies,
308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                   policy::PolicyErrorMap* errors) OVERRIDE;
318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void ApplyPolicySettings(const policy::PolicyMap& policies,
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) protected:
358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  const char* pref_path() const;
368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Runs sanity checks on the policy value and returns it in |extension_ids|.
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool CheckAndGetList(const policy::PolicyMap& policies,
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                       policy::PolicyErrorMap* errors,
408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                       scoped_ptr<base::ListValue>* extension_ids);
418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private:
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  const char* pref_path_;
448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool allow_wildcards_;
458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ExtensionListPolicyHandler);
478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)};
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ExtensionInstallForcelistPolicyHandler
508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    : public policy::TypeCheckingPolicyHandler {
518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public:
528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  ExtensionInstallForcelistPolicyHandler();
538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual ~ExtensionInstallForcelistPolicyHandler();
548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // ConfigurationPolicyHandler methods:
568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual bool CheckPolicySettings(const policy::PolicyMap& policies,
578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                   policy::PolicyErrorMap* errors) OVERRIDE;
588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void ApplyPolicySettings(const policy::PolicyMap& policies,
598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private:
628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Parses the data in |policy_value| and writes them to |extension_dict|.
638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool ParseList(const base::Value* policy_value,
648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                 base::DictionaryValue* extension_dict,
658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                 policy::PolicyErrorMap* errors);
668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ExtensionInstallForcelistPolicyHandler);
688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)};
698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Implements additional checks for policies that are lists of extension
718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// URLPatterns.
728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ExtensionURLPatternListPolicyHandler
738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    : public policy::TypeCheckingPolicyHandler {
748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public:
758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  ExtensionURLPatternListPolicyHandler(const char* policy_name,
768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                       const char* pref_path);
778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual ~ExtensionURLPatternListPolicyHandler();
788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // ConfigurationPolicyHandler methods:
808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual bool CheckPolicySettings(const policy::PolicyMap& policies,
818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                   policy::PolicyErrorMap* errors) OVERRIDE;
828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void ApplyPolicySettings(const policy::PolicyMap& policies,
838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private:
868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  const char* pref_path_;
878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ExtensionURLPatternListPolicyHandler);
898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)};
908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}  // namespace extensions
928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_POLICY_HANDLERS_H_
94