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 7b8882b66c5128b0de506fbf8604476bb78bd76d..5aa5bafa2f4d783ec4b62abe85bd2bf7e24d9855 100644 |
--- a/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
+++ b/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h" |
#include <stddef.h> |
+#include <memory> |
#include <utility> |
#include "base/lazy_instance.h" |
@@ -18,6 +19,7 @@ |
#include "chrome/common/pref_names.h" |
#include "components/search_engines/search_engines_pref_names.h" |
#include "components/search_engines/template_url.h" |
+#include "components/search_engines/template_url_data_util.h" |
#include "components/search_engines/template_url_prepopulate_data.h" |
#include "extensions/browser/extension_prefs.h" |
#include "extensions/browser/extension_prefs_factory.h" |
@@ -43,28 +45,14 @@ std::string SubstituteInstallParam(std::string str, |
return str; |
} |
-// Find the prepopulated search engine with the given id. |
-std::unique_ptr<TemplateURLData> GetPrepopulatedSearchProvider( |
- PrefService* prefs, |
- int prepopulated_id) { |
- size_t default_index; |
- std::vector<std::unique_ptr<TemplateURLData>> engines = |
- TemplateURLPrepopulateData::GetPrepopulatedEngines(prefs, &default_index); |
- for (auto& engine : engines) { |
- if (engine->prepopulate_id == prepopulated_id) |
- return std::move(engine); |
- } |
- return nullptr; |
-} |
- |
std::unique_ptr<TemplateURLData> ConvertSearchProvider( |
PrefService* prefs, |
const ChromeSettingsOverrides::Search_provider& search_provider, |
const std::string& install_parameter) { |
std::unique_ptr<TemplateURLData> data; |
if (search_provider.prepopulated_id) { |
- data = |
- GetPrepopulatedSearchProvider(prefs, *search_provider.prepopulated_id); |
+ data = TemplateURLPrepopulateData::GetPrepopulatedEngine( |
+ prefs, *search_provider.prepopulated_id); |
if (!data) { |
VLOG(1) << "Settings Overrides API can't recognize prepopulated_id=" |
<< *search_provider.prepopulated_id; |
@@ -143,18 +131,16 @@ SettingsOverridesAPI::GetFactoryInstance() { |
void SettingsOverridesAPI::SetPref(const std::string& extension_id, |
const std::string& pref_key, |
- base::Value* value) { |
+ std::unique_ptr<base::Value> value) const { |
PreferenceAPI* prefs = PreferenceAPI::Get(profile_); |
if (!prefs) |
return; // Expected in unit tests. |
- prefs->SetExtensionControlledPref(extension_id, |
- pref_key, |
- kExtensionPrefsScopeRegular, |
- value); |
+ prefs->SetExtensionControlledPref( |
+ extension_id, pref_key, kExtensionPrefsScopeRegular, value.release()); |
} |
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. |
@@ -172,18 +158,18 @@ void SettingsOverridesAPI::OnExtensionLoaded( |
std::string install_parameter = |
ExtensionPrefs::Get(profile_)->GetInstallParam(extension->id()); |
if (settings->homepage) { |
- SetPref(extension->id(), |
- prefs::kHomePage, |
- new base::StringValue(SubstituteInstallParam( |
+ SetPref(extension->id(), prefs::kHomePage, |
+ base::MakeUnique<base::StringValue>(SubstituteInstallParam( |
settings->homepage->spec(), install_parameter))); |
- SetPref(extension->id(), |
- prefs::kHomePageIsNewTabPage, |
- new base::FundamentalValue(false)); |
+ SetPref(extension->id(), prefs::kHomePageIsNewTabPage, |
+ base::MakeUnique<base::FundamentalValue>(false)); |
} |
if (!settings->startup_pages.empty()) { |
- SetPref(extension->id(), |
- prefs::kRestoreOnStartup, |
- new base::FundamentalValue(SessionStartupPref::kPrefValueURLs)); |
+ // kPrefValueURLs variable defined below is workaround for undefined |
+ // symbol SessionStartupPref::kPrefValueURLs link error on mac. |
vasilii
2016/11/30 14:00:02
I don't understand it. Now everything compiles fin
Alexander Yashkin
2016/12/05 18:16:48
It was a problem with ODR rule applying for Sessio
|
+ const int kPrefValueURLs = SessionStartupPref::kPrefValueURLs; |
+ SetPref(extension->id(), prefs::kRestoreOnStartup, |
+ base::MakeUnique<base::FundamentalValue>(kPrefValueURLs)); |
if (settings->startup_pages.size() > 1) { |
VLOG(1) << extensions::ErrorUtils::FormatErrorMessage( |
kManyStartupPagesWarning, |
@@ -192,17 +178,16 @@ void SettingsOverridesAPI::OnExtensionLoaded( |
std::unique_ptr<base::ListValue> url_list(new base::ListValue); |
url_list->AppendString(SubstituteInstallParam( |
settings->startup_pages[0].spec(), install_parameter)); |
- SetPref( |
- extension->id(), prefs::kURLsToRestoreOnStartup, url_list.release()); |
+ SetPref(extension->id(), prefs::kURLsToRestoreOnStartup, |
+ std::move(url_list)); |
} |
if (settings->search_engine) { |
// Bring the preference to the correct state. Before this code set it |
// to "true" for all search engines. Thus, we should overwrite it for |
// all search engines. |
if (settings->search_engine->is_default) { |
- SetPref(extension->id(), |
- prefs::kDefaultSearchProviderEnabled, |
- new base::FundamentalValue(true)); |
+ SetPref(extension->id(), prefs::kDefaultSearchProviderEnabled, |
+ base::MakeUnique<base::FundamentalValue>(true)); |
} else { |
UnsetPref(extension->id(), prefs::kDefaultSearchProviderEnabled); |
} |
@@ -236,6 +221,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( |
@@ -281,6 +271,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)); |
+ } |
} |
template <> |