1// Copyright 2014 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 COMPONENTS_SEARCH_ENGINES_DEFAULT_SEARCH_POLICY_HANDLER_H_
6#define COMPONENTS_SEARCH_ENGINES_DEFAULT_SEARCH_POLICY_HANDLER_H_
7
8#include <vector>
9
10#include "components/policy/core/browser/configuration_policy_handler.h"
11
12namespace policy {
13
14// ConfigurationPolicyHandler for the DefaultSearchEncodings policy.
15class DefaultSearchEncodingsPolicyHandler
16    : public TypeCheckingPolicyHandler {
17 public:
18  DefaultSearchEncodingsPolicyHandler();
19  virtual ~DefaultSearchEncodingsPolicyHandler();
20
21  // ConfigurationPolicyHandler methods:
22  virtual void ApplyPolicySettings(const PolicyMap& policies,
23                                   PrefValueMap* prefs) OVERRIDE;
24
25 private:
26  DISALLOW_COPY_AND_ASSIGN(DefaultSearchEncodingsPolicyHandler);
27};
28
29// ConfigurationPolicyHandler for the default search policies.
30class DefaultSearchPolicyHandler : public ConfigurationPolicyHandler {
31 public:
32  DefaultSearchPolicyHandler();
33  virtual ~DefaultSearchPolicyHandler();
34
35  // ConfigurationPolicyHandler methods:
36  virtual bool CheckPolicySettings(const PolicyMap& policies,
37                                   PolicyErrorMap* errors) OVERRIDE;
38  virtual void ApplyPolicySettings(const PolicyMap& policies,
39                                   PrefValueMap* prefs) OVERRIDE;
40
41 private:
42  void HandleDictionaryPref(const PolicyMap& policies, PrefValueMap* prefs);
43
44  // Calls |CheckPolicySettings()| on each of the handlers in |handlers_|
45  // and returns whether all of the calls succeeded.
46  bool CheckIndividualPolicies(const PolicyMap& policies,
47                               PolicyErrorMap* errors);
48
49  // Returns whether there is a value for |policy_name| in |policies|.
50  bool HasDefaultSearchPolicy(const PolicyMap& policies,
51                              const char* policy_name);
52
53  // Returns whether any default search policies are specified in |policies|.
54  bool AnyDefaultSearchPoliciesSpecified(const PolicyMap& policies);
55
56  // Returns whether the default search provider is disabled.
57  bool DefaultSearchProviderIsDisabled(const PolicyMap& policies);
58
59  // Returns whether the default search URL is set and valid.  On success, both
60  // outparams (which must be non-NULL) are filled with the search URL.
61  bool DefaultSearchURLIsValid(const PolicyMap& policies,
62                               const base::Value** url_value,
63                               std::string* url_string);
64
65  // Make sure that the |path| is present in |prefs_|.  If not, set it to
66  // a blank string.
67  void EnsureStringPrefExists(PrefValueMap* prefs, const std::string& path);
68
69  // Make sure that the |path| is present in |prefs_| and is a ListValue.  If
70  // not, set it to an empty list.
71  void EnsureListPrefExists(PrefValueMap* prefs, const std::string& path);
72
73  // The ConfigurationPolicyHandler handlers for each default search policy.
74  std::vector<TypeCheckingPolicyHandler*> handlers_;
75
76  DISALLOW_COPY_AND_ASSIGN(DefaultSearchPolicyHandler);
77};
78
79}  // namespace policy
80
81#endif  // COMPONENTS_SEARCH_ENGINES_DEFAULT_SEARCH_POLICY_HANDLER_H_
82