| 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 f7b4740deb125b1fd32f2b32babc218339475b97..1a7f73b5e0887c78a3a778af3f4b2637954846c2 100644 | 
| --- a/components/search_engines/default_search_manager.cc | 
| +++ b/components/search_engines/default_search_manager.cc | 
| @@ -15,7 +15,6 @@ | 
| #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" | 
| @@ -140,7 +139,6 @@ TemplateURLData* DefaultSearchManager::GetDefaultSearchEngine( | 
| *source = FROM_USER; | 
| return prefs_default_search_.get(); | 
| } | 
| - | 
| if (source) | 
| *source = FROM_FALLBACK; | 
| return g_fallback_search_engines_disabled ? | 
| @@ -167,20 +165,6 @@ void DefaultSearchManager::SetUserSelectedDefaultSearchEngine( | 
| *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); | 
| @@ -194,10 +178,10 @@ void DefaultSearchManager::OnDefaultSearchPrefChanged() { | 
| Source source = GetDefaultSearchEngineSource(); | 
| LoadDefaultSearchEngineFromPrefs(); | 
|  | 
| -  // If we were/are FROM_USER or FROM_POLICY the effective DSE may have changed. | 
| -  if (source != FROM_USER && source != FROM_POLICY) | 
| +  if (source == FROM_FALLBACK) | 
| source = GetDefaultSearchEngineSource(); | 
| -  if (source == FROM_USER || source == FROM_POLICY) | 
| +  // The effective DSE may have changed if it was/become non fallback. | 
| +  if (source != FROM_FALLBACK) | 
| NotifyObserver(); | 
| } | 
|  | 
| @@ -246,6 +230,7 @@ void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() { | 
| return; | 
|  | 
| prefs_default_search_.reset(); | 
| +  extension_default_search_.reset(); | 
| const PrefService::Preference* pref = | 
| pref_service_->FindPreference(kDefaultSearchProviderDataPrefName); | 
| DCHECK(pref); | 
| @@ -267,8 +252,13 @@ void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() { | 
| if (!turl_data) | 
| return; | 
|  | 
| -  prefs_default_search_ = std::move(turl_data); | 
| -  MergePrefsDataWithPrepopulated(); | 
| +  // Check if default search preference is overriden by extension. | 
| +  if (pref->IsExtensionControlled()) { | 
| +    extension_default_search_ = TemplateURLDataFromDictionary(*url_dict); | 
| +  } else { | 
| +    prefs_default_search_ = TemplateURLDataFromDictionary(*url_dict); | 
| +    MergePrefsDataWithPrepopulated(); | 
| +  } | 
| } | 
|  | 
| void DefaultSearchManager::LoadPrepopulatedDefaultSearch() { | 
|  |