Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Unified Diff: chrome/browser/search_engines/default_search_manager.h

Issue 268643002: Use the DefaultSearchManager as the exclusive authority on DSE, ignoring Web Data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Last test fix? Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698