Index: components/search_engines/default_search_manager.cc |
diff --git a/components/search_engines/default_search_manager.cc b/components/search_engines/default_search_manager.cc |
index a7e2919caf822831cc33eec684def666d6d7768a..f7b4740deb125b1fd32f2b32babc218339475b97 100644 |
--- a/components/search_engines/default_search_manager.cc |
+++ b/components/search_engines/default_search_manager.cc |
@@ -15,6 +15,7 @@ |
#include "base/compiler_specific.h" |
#include "base/i18n/case_conversion.h" |
#include "base/logging.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_split.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
@@ -139,6 +140,7 @@ |
*source = FROM_USER; |
return prefs_default_search_.get(); |
} |
+ |
if (source) |
*source = FROM_FALLBACK; |
return g_fallback_search_engines_disabled ? |
@@ -165,6 +167,20 @@ |
*TemplateURLDataToDictionary(data)); |
} |
+void DefaultSearchManager::SetExtensionControlledDefaultSearchEngine( |
+ const TemplateURLData& data) { |
+ extension_default_search_.reset(new TemplateURLData(data)); |
+ if (GetDefaultSearchEngineSource() == FROM_EXTENSION) |
+ NotifyObserver(); |
+} |
+ |
+void DefaultSearchManager::ClearExtensionControlledDefaultSearchEngine() { |
+ Source old_source = GetDefaultSearchEngineSource(); |
+ extension_default_search_.reset(); |
+ if (old_source == FROM_EXTENSION) |
+ NotifyObserver(); |
+} |
+ |
void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() { |
if (pref_service_) { |
pref_service_->ClearPref(kDefaultSearchProviderDataPrefName); |
@@ -175,13 +191,13 @@ |
} |
void DefaultSearchManager::OnDefaultSearchPrefChanged() { |
- bool source_was_fallback = GetDefaultSearchEngineSource() == FROM_FALLBACK; |
- |
+ Source source = GetDefaultSearchEngineSource(); |
LoadDefaultSearchEngineFromPrefs(); |
- // The effective DSE may have changed unless we were using the fallback source |
- // both before and after the above load. |
- if (!source_was_fallback || (GetDefaultSearchEngineSource() != FROM_FALLBACK)) |
+ // If we were/are FROM_USER or FROM_POLICY the effective DSE may have changed. |
+ if (source != FROM_USER && source != FROM_POLICY) |
+ source = GetDefaultSearchEngineSource(); |
+ if (source == FROM_USER || source == FROM_POLICY) |
NotifyObserver(); |
} |
@@ -230,7 +246,6 @@ |
return; |
prefs_default_search_.reset(); |
- extension_default_search_.reset(); |
const PrefService::Preference* pref = |
pref_service_->FindPreference(kDefaultSearchProviderDataPrefName); |
DCHECK(pref); |
@@ -252,13 +267,8 @@ |
if (!turl_data) |
return; |
- // Check if default search preference is overriden by extension. |
- if (pref->IsExtensionControlled()) { |
- extension_default_search_ = std::move(turl_data); |
- } else { |
- prefs_default_search_ = std::move(turl_data); |
- MergePrefsDataWithPrepopulated(); |
- } |
+ prefs_default_search_ = std::move(turl_data); |
+ MergePrefsDataWithPrepopulated(); |
} |
void DefaultSearchManager::LoadPrepopulatedDefaultSearch() { |