Index: chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
diff --git a/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc b/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
index 8ffa9275392a3d64c520fc9e2819eb4a48b9dfe8..9f0aca7db1d3192017dd1742634ea523159790d0 100644 |
--- a/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
+++ b/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
@@ -19,6 +19,7 @@ |
#include "components/search_engines/search_engines_pref_names.h" |
#include "components/search_engines/template_url.h" |
#include "components/search_engines/template_url_prepopulate_data.h" |
+#include "components/search_engines/util.h" |
#include "extensions/browser/extension_prefs.h" |
#include "extensions/browser/extension_prefs_factory.h" |
#include "extensions/browser/extension_registry.h" |
@@ -143,7 +144,7 @@ SettingsOverridesAPI::GetFactoryInstance() { |
void SettingsOverridesAPI::SetPref(const std::string& extension_id, |
const std::string& pref_key, |
- base::Value* value) { |
+ base::Value* value) const { |
PreferenceAPI* prefs = PreferenceAPI::Get(profile_); |
if (!prefs) |
return; // Expected in unit tests. |
@@ -154,7 +155,7 @@ void SettingsOverridesAPI::SetPref(const std::string& extension_id, |
} |
void SettingsOverridesAPI::UnsetPref(const std::string& extension_id, |
- const std::string& pref_key) { |
+ const std::string& pref_key) const { |
PreferenceAPI* prefs = PreferenceAPI::Get(profile_); |
if (!prefs) |
return; // Expected in unit tests. |
@@ -236,6 +237,11 @@ void SettingsOverridesAPI::OnExtensionUnloaded( |
UnsetPref(extension->id(), prefs::kURLsToRestoreOnStartup); |
} |
if (settings->search_engine) { |
+ if (settings->search_engine->is_default) { |
+ // Current extension can be overriding DSE. |
+ UnsetPref(extension->id(), |
+ DefaultSearchManager::kDefaultSearchProviderDataPrefName); |
+ } |
DCHECK(url_service_); |
if (url_service_->loaded()) { |
url_service_->RemoveExtensionControlledTURL( |
@@ -282,6 +288,13 @@ void SettingsOverridesAPI::RegisterSearchProvider( |
*data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
url_service_->AddExtensionControlledTURL(std::move(turl), std::move(info)); |
+ |
+ if (settings->search_engine->is_default) { |
+ // Override current DSE pref to have extension overriden value. |
+ SetPref(extension->id(), |
+ DefaultSearchManager::kDefaultSearchProviderDataPrefName, |
+ TemplateUrlDataToDictionary(*data).release()); |
+ } |
} |
template <> |