Roll src/third_party/skia 5df6fee:9b77796
[chromium-blink-merge.git] / components / search_engines / default_search_manager.h
blobf75b0685e499a3279c1e81403f8479f98880febe
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.
5 #ifndef COMPONENTS_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_
6 #define COMPONENTS_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_
8 #include "base/callback.h"
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/prefs/pref_change_registrar.h"
13 namespace base {
14 class DictionaryValue;
17 namespace user_prefs {
18 class PrefRegistrySyncable;
21 class PrefService;
22 class PrefValueMap;
23 struct TemplateURLData;
25 // DefaultSearchManager handles the loading and writing of the user's default
26 // search engine selection to and from prefs.
27 class DefaultSearchManager {
28 public:
29 static const char kDefaultSearchProviderDataPrefName[];
31 static const char kID[];
32 static const char kShortName[];
33 static const char kKeyword[];
34 static const char kPrepopulateID[];
35 static const char kSyncGUID[];
37 static const char kURL[];
38 static const char kSuggestionsURL[];
39 static const char kInstantURL[];
40 static const char kImageURL[];
41 static const char kNewTabURL[];
42 static const char kFaviconURL[];
43 static const char kOriginatingURL[];
45 static const char kSearchURLPostParams[];
46 static const char kSuggestionsURLPostParams[];
47 static const char kInstantURLPostParams[];
48 static const char kImageURLPostParams[];
50 static const char kSafeForAutoReplace[];
51 static const char kInputEncodings[];
53 static const char kDateCreated[];
54 static const char kLastModified[];
56 static const char kUsageCount[];
57 static const char kAlternateURLs[];
58 static const char kSearchTermsReplacementKey[];
59 static const char kCreatedByPolicy[];
60 static const char kDisabledByPolicy[];
62 enum Source {
63 FROM_FALLBACK = 0,
64 FROM_USER,
65 FROM_EXTENSION,
66 FROM_POLICY,
69 typedef base::Callback<void(const TemplateURLData*, Source)> ObserverCallback;
71 DefaultSearchManager(PrefService* pref_service,
72 const ObserverCallback& change_observer);
74 ~DefaultSearchManager();
76 // Register prefs needed for tracking the default search provider.
77 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
79 // Save default search provider pref values into the map provided.
80 static void AddPrefValueToMap(base::DictionaryValue* value,
81 PrefValueMap* pref_value_map);
83 // Testing code can call this with |disabled| set to true to cause
84 // GetDefaultSearchEngine() to return NULL instead of
85 // |fallback_default_search_| in cases where the DSE source is FROM_FALLBACK.
86 static void SetFallbackSearchEnginesDisabledForTesting(bool disabled);
88 // Gets a pointer to the current Default Search Engine. If NULL, indicates
89 // that Default Search is explicitly disabled. |source|, if not NULL, will be
90 // filled in with the source of the result.
91 TemplateURLData* GetDefaultSearchEngine(Source* source) const;
93 // Gets the source of the current Default Search Engine value.
94 Source GetDefaultSearchEngineSource() const;
96 // Write default search provider data to |pref_service_|.
97 void SetUserSelectedDefaultSearchEngine(const TemplateURLData& data);
99 // Override the default search provider with an extension.
100 void SetExtensionControlledDefaultSearchEngine(const TemplateURLData& data);
102 // Clear the extension-provided default search engine. Does not explicitly
103 // disable Default Search. The new current default search engine will be
104 // defined by policy, extensions, or pre-populated data.
105 void ClearExtensionControlledDefaultSearchEngine();
107 // Clear the user's default search provider choice from |pref_service_|. Does
108 // not explicitly disable Default Search. The new default search
109 // engine will be defined by policy, extensions, or pre-populated data.
110 void ClearUserSelectedDefaultSearchEngine();
112 private:
113 // Handles changes to kDefaultSearchProviderData pref. This includes sync and
114 // policy changes. Calls LoadDefaultSearchEngineFromPrefs() and
115 // NotifyObserver() if the effective DSE might have changed.
116 void OnDefaultSearchPrefChanged();
118 // Handles changes to kSearchProviderOverrides pref. Calls
119 // LoadPrepopulatedDefaultSearch() and NotifyObserver() if the effective DSE
120 // might have changed.
121 void OnOverridesPrefChanged();
123 // Updates |prefs_default_search_| with values from its corresponding
124 // pre-populated search provider record, if any.
125 void MergePrefsDataWithPrepopulated();
127 // Reads default search provider data from |pref_service_|, updating
128 // |prefs_default_search_| and |default_search_controlled_by_policy_|.
129 // Invokes MergePrefsDataWithPrepopulated().
130 void LoadDefaultSearchEngineFromPrefs();
132 // Reads pre-populated search providers, which will be built-in or overridden
133 // by kSearchProviderOverrides. Updates |fallback_default_search_|. Invoke
134 // MergePrefsDataWithPrepopulated().
135 void LoadPrepopulatedDefaultSearch();
137 // Invokes |change_observer_| if it is not NULL.
138 void NotifyObserver();
140 PrefService* pref_service_;
141 const ObserverCallback change_observer_;
142 PrefChangeRegistrar pref_change_registrar_;
144 // Default search engine provided by pre-populated data or by the
145 // |kSearchProviderOverrides| pref. This will be used when no other default
146 // search engine has been selected.
147 scoped_ptr<TemplateURLData> fallback_default_search_;
149 // Default search engine provided by prefs (either user prefs or policy
150 // prefs). This will be null if no value was set in the pref store.
151 scoped_ptr<TemplateURLData> extension_default_search_;
153 // Default search engine provided by extension (usings Settings Override API).
154 // This will be null if there are no extensions installed which provide
155 // default search engines.
156 scoped_ptr<TemplateURLData> prefs_default_search_;
158 // True if the default search is currently enforced by policy.
159 bool default_search_controlled_by_policy_;
161 DISALLOW_COPY_AND_ASSIGN(DefaultSearchManager);
164 #endif // COMPONENTS_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_