Home | History | Annotate | Download | only in search_engines
      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