Index: chrome/browser/search_engines/default_search_manager.h |
diff --git a/chrome/browser/search_engines/default_search_manager.h b/chrome/browser/search_engines/default_search_manager.h |
index 9035564ed0fbef0028a8b0532eabcfcf844d7229..661cbc39a21a8f641927b5eff50bccd816e419eb 100644 |
--- a/chrome/browser/search_engines/default_search_manager.h |
+++ b/chrome/browser/search_engines/default_search_manager.h |
@@ -5,7 +5,14 @@ |
#ifndef CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_ |
#define CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_ |
+#include "base/callback.h" |
#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/prefs/pref_change_registrar.h" |
+ |
+namespace base { |
+class DictionaryValue; |
+} |
namespace base { |
class DictionaryValue; |
@@ -21,9 +28,10 @@ struct TemplateURLData; |
// DefaultSearchManager handles the loading and writing of the user's default |
// search engine selection to and from prefs. |
- |
class DefaultSearchManager { |
public: |
+ static const char kDefaultSearchProviderDataPrefName[]; |
+ |
static const char kID[]; |
static const char kShortName[]; |
static const char kKeyword[]; |
@@ -55,7 +63,18 @@ class DefaultSearchManager { |
static const char kCreatedByPolicy[]; |
static const char kDisabledByPolicy[]; |
- explicit DefaultSearchManager(PrefService* pref_service); |
+ enum Source { |
+ FROM_FALLBACK = 0, |
+ FROM_USER, |
+ FROM_EXTENSION, |
+ FROM_POLICY, |
+ }; |
+ |
+ typedef base::Callback<void(const TemplateURLData*, Source)> ObserverCallback; |
+ |
+ DefaultSearchManager(PrefService* pref_service, |
+ const ObserverCallback& change_observer); |
+ |
~DefaultSearchManager(); |
// Register prefs needed for tracking the default search provider. |
@@ -65,17 +84,67 @@ class DefaultSearchManager { |
static void AddPrefValueToMap(base::DictionaryValue* value, |
PrefValueMap* pref_value_map); |
- // Read default search provider data from |pref_service_|. |
- bool GetDefaultSearchEngine(TemplateURLData* url); |
+ // Gets a pointer to the current Default Search Engine. If NULL, indicates |
+ // that Default Search is explicitly disabled. |source|, if not NULL, will be |
+ // filled in with the source of the result. |
+ TemplateURLData* GetDefaultSearchEngine(Source* source) const; |
+ |
+ // Gets the source of the current Default Search Engine value. |
+ Source GetDefaultSearchEngineSource() const; |
// Write default search provider data to |pref_service_|. |
void SetUserSelectedDefaultSearchEngine(const TemplateURLData& data); |
- // Clear the user's default search provider choice from |pref_service_|. |
+ // Override the default search provider with an extension. |
+ void SetExtensionControlledDefaultSearchEngine(const TemplateURLData& data); |
+ |
+ // Clear the extension-provided default search engine. Does not explicitly |
+ // disable Default Search.The new current default search engine will be |
+ // defined by policy, extensions, or pre-populated data. |
+ void ClearExtensionControlledDefaultSearchEngine(); |
+ |
+ // Clear the user's default search provider choice from |pref_service_|. Does |
+ // not explicitly disable Default Search. The new current default search |
+ // engine will be defined by policy, extensions, or pre-populated data. |
void ClearUserSelectedDefaultSearchEngine(); |
private: |
+ // Handles changes to kDefaultSearchProviderData pref. This includes sync and |
+ // policy changes. Calls LoadDefaultSearchEngineFromPrefs() and |
+ // NotifyObserver() if the effective DSE might have changed. |
+ void OnDefaultSearchPrefChanged(); |
+ |
+ // Handles changes to kSearchProviderOverrides pref. Calls |
+ // LoadPrepopulatedDefaultSearch() and NotifyObserver() if the effective DSE |
+ // might have changed. |
+ void OnOverridesPrefChanged(); |
+ |
+ // Updates |prefs_default_search_| with values from its corresponding |
+ // pre-populated search provider record, if any. |
+ void MergePrefsDataWithPrepopulated(); |
+ |
+ // Reads default search provider data from |pref_service_|, updating |
+ // |prefs_default_search_| and |default_search_controlled_by_policy_|. |
+ // Invokes MergePrefsDataWithPrepopulated(). |
+ void LoadDefaultSearchEngineFromPrefs(); |
+ |
+ // Reads pre-populated search providers, which may be built-in or overridden |
+ // by kSearchProviderOverrides. Updates |fallback_default_search_|. Invoke |
+ // MergePrefsDataWithPrepopulated(). |
+ void LoadPrepopulatedDefaultSearch(); |
+ |
+ // Invokes |change_observer_| if it is not NULL. |
+ void NotifyObserver(); |
+ |
PrefService* pref_service_; |
+ const ObserverCallback change_observer_; |
+ PrefChangeRegistrar pref_change_registrar_; |
+ |
+ scoped_ptr<TemplateURLData> fallback_default_search_; |
+ scoped_ptr<TemplateURLData> extension_default_search_; |
+ scoped_ptr<TemplateURLData> prefs_default_search_; |
+ |
+ bool default_search_controlled_by_policy_; |
DISALLOW_COPY_AND_ASSIGN(DefaultSearchManager); |
}; |