• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_
165