OLD | NEW |
| (Empty) |
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 CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_ | |
6 #define CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_ | |
7 | |
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" | |
12 | |
13 namespace base { | |
14 class DictionaryValue; | |
15 } | |
16 | |
17 namespace user_prefs { | |
18 class PrefRegistrySyncable; | |
19 } | |
20 | |
21 class PrefService; | |
22 class PrefValueMap; | |
23 struct TemplateURLData; | |
24 | |
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[]; | |
30 | |
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[]; | |
36 | |
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[]; | |
44 | |
45 static const char kSearchURLPostParams[]; | |
46 static const char kSuggestionsURLPostParams[]; | |
47 static const char kInstantURLPostParams[]; | |
48 static const char kImageURLPostParams[]; | |
49 | |
50 static const char kSafeForAutoReplace[]; | |
51 static const char kInputEncodings[]; | |
52 | |
53 static const char kDateCreated[]; | |
54 static const char kLastModified[]; | |
55 | |
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[]; | |
61 | |
62 enum Source { | |
63 FROM_FALLBACK = 0, | |
64 FROM_USER, | |
65 FROM_EXTENSION, | |
66 FROM_POLICY, | |
67 }; | |
68 | |
69 typedef base::Callback<void(const TemplateURLData*, Source)> ObserverCallback; | |
70 | |
71 DefaultSearchManager(PrefService* pref_service, | |
72 const ObserverCallback& change_observer); | |
73 | |
74 ~DefaultSearchManager(); | |
75 | |
76 // Register prefs needed for tracking the default search provider. | |
77 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | |
78 | |
79 // Save default search provider pref values into the map provided. | |
80 static void AddPrefValueToMap(base::DictionaryValue* value, | |
81 PrefValueMap* pref_value_map); | |
82 | |
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); | |
87 | |
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; | |
92 | |
93 // Gets the source of the current Default Search Engine value. | |
94 Source GetDefaultSearchEngineSource() const; | |
95 | |
96 // Write default search provider data to |pref_service_|. | |
97 void SetUserSelectedDefaultSearchEngine(const TemplateURLData& data); | |
98 | |
99 // Override the default search provider with an extension. | |
100 void SetExtensionControlledDefaultSearchEngine(const TemplateURLData& data); | |
101 | |
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(); | |
106 | |
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(); | |
111 | |
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(); | |
117 | |
118 // Handles changes to kSearchProviderOverrides pref. Calls | |
119 // LoadPrepopulatedDefaultSearch() and NotifyObserver() if the effective DSE | |
120 // might have changed. | |
121 void OnOverridesPrefChanged(); | |
122 | |
123 // Updates |prefs_default_search_| with values from its corresponding | |
124 // pre-populated search provider record, if any. | |
125 void MergePrefsDataWithPrepopulated(); | |
126 | |
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(); | |
131 | |
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(); | |
136 | |
137 // Invokes |change_observer_| if it is not NULL. | |
138 void NotifyObserver(); | |
139 | |
140 PrefService* pref_service_; | |
141 const ObserverCallback change_observer_; | |
142 PrefChangeRegistrar pref_change_registrar_; | |
143 | |
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_; | |
148 | |
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_; | |
152 | |
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_; | |
157 | |
158 // True if the default search is currently enforced by policy. | |
159 bool default_search_controlled_by_policy_; | |
160 | |
161 DISALLOW_COPY_AND_ASSIGN(DefaultSearchManager); | |
162 }; | |
163 | |
164 #endif // CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_ | |
OLD | NEW |