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 09e4c3aa60b27096ddd8aec1233e46e1973c8404..3104e190e456fb70e9a95dc4987cd4c91e38d5ee 100644 |
--- a/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
+++ b/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc |
@@ -24,6 +24,7 @@ |
namespace extensions { |
namespace { |
+ |
base::LazyInstance<BrowserContextKeyedAPIFactory<SettingsOverridesAPI> > |
g_factory = LAZY_INSTANCE_INITIALIZER; |
@@ -32,19 +33,33 @@ const char kManyStartupPagesWarning[] = "* specifies more than 1 startup URL. " |
using api::manifest_types::ChromeSettingsOverrides; |
+std::string SubstituteInstallParam(std::string str, |
+ const std::string& install_parameter) { |
+ ReplaceSubstringsAfterOffset(&str, 0, "__PARAM__", install_parameter); |
+ return str; |
+} |
+ |
TemplateURLData ConvertSearchProvider( |
- const ChromeSettingsOverrides::Search_provider& search_provider) { |
+ const ChromeSettingsOverrides::Search_provider& search_provider, |
+ const std::string& install_parameter) { |
TemplateURLData data; |
data.short_name = base::UTF8ToUTF16(search_provider.name); |
data.SetKeyword(base::UTF8ToUTF16(search_provider.keyword)); |
- data.SetURL(search_provider.search_url); |
- if (search_provider.suggest_url) |
- data.suggestions_url = *search_provider.suggest_url; |
- if (search_provider.instant_url) |
- data.instant_url = *search_provider.instant_url; |
- if (search_provider.image_url) |
- data.image_url = *search_provider.image_url; |
+ data.SetURL( |
+ SubstituteInstallParam(search_provider.search_url, install_parameter)); |
+ if (search_provider.suggest_url) { |
+ data.suggestions_url = |
+ SubstituteInstallParam(*search_provider.suggest_url, install_parameter); |
+ } |
+ if (search_provider.instant_url) { |
+ data.instant_url = |
+ SubstituteInstallParam(*search_provider.instant_url, install_parameter); |
+ } |
+ if (search_provider.image_url) { |
+ data.image_url = |
+ SubstituteInstallParam(*search_provider.image_url, install_parameter); |
+ } |
if (search_provider.search_url_post_params) |
data.search_url_post_params = *search_provider.search_url_post_params; |
if (search_provider.suggest_url_post_params) |
@@ -53,7 +68,8 @@ TemplateURLData ConvertSearchProvider( |
data.instant_url_post_params = *search_provider.instant_url_post_params; |
if (search_provider.image_url_post_params) |
data.image_url_post_params = *search_provider.image_url_post_params; |
- data.favicon_url = GURL(search_provider.favicon_url); |
+ data.favicon_url = GURL( |
+ SubstituteInstallParam(search_provider.favicon_url, install_parameter)); |
data.show_in_default_list = true; |
data.safe_for_autoreplace = false; |
data.input_encodings.push_back(search_provider.encoding); |
@@ -63,11 +79,13 @@ TemplateURLData ConvertSearchProvider( |
if (search_provider.alternate_urls) { |
for (size_t i = 0; i < search_provider.alternate_urls->size(); ++i) { |
if (!search_provider.alternate_urls->at(i).empty()) |
- data.alternate_urls.push_back(search_provider.alternate_urls->at(i)); |
+ data.alternate_urls.push_back(SubstituteInstallParam( |
+ search_provider.alternate_urls->at(i), install_parameter)); |
} |
} |
return data; |
} |
+ |
} // namespace |
SettingsOverridesAPI::SettingsOverridesAPI(content::BrowserContext* context) |
@@ -119,9 +137,13 @@ void SettingsOverridesAPI::Observe( |
const SettingsOverrides* settings = |
SettingsOverrides::Get(extension); |
if (settings) { |
+ std::string install_parameter = |
+ ExtensionPrefs::Get(profile_)->GetInstallParam(extension->id()); |
if (settings->homepage) { |
- SetPref(extension->id(), prefs::kHomePage, |
- new base::StringValue(settings->homepage->spec())); |
+ SetPref(extension->id(), |
+ prefs::kHomePage, |
+ new base::StringValue(SubstituteInstallParam( |
+ settings->homepage->spec(), install_parameter))); |
SetPref(extension->id(), prefs::kHomePageIsNewTabPage, |
new base::FundamentalValue(false)); |
} |
@@ -134,8 +156,8 @@ void SettingsOverridesAPI::Observe( |
kManyStartupPagesWarning, manifest_keys::kSettingsOverride); |
} |
scoped_ptr<base::ListValue> url_list(new base::ListValue); |
- url_list->Append( |
- new base::StringValue(settings->startup_pages[0].spec())); |
+ url_list->Append(new base::StringValue(SubstituteInstallParam( |
+ settings->startup_pages[0].spec(), install_parameter))); |
SetPref(extension->id(), prefs::kURLsToRestoreOnStartup, |
url_list.release()); |
} |
@@ -213,9 +235,11 @@ void SettingsOverridesAPI::RegisterSearchProvider( |
scoped_ptr<AssociatedExtensionInfo> info(new AssociatedExtensionInfo); |
info->extension_id = extension->id(); |
info->wants_to_be_default_engine = settings->search_engine->is_default; |
- info->install_time = |
- ExtensionPrefs::Get(profile_)->GetInstallTime(extension->id()); |
- TemplateURLData data = ConvertSearchProvider(*settings->search_engine); |
+ ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); |
+ info->install_time = prefs->GetInstallTime(extension->id()); |
+ std::string install_parameter = prefs->GetInstallParam(extension->id()); |
+ TemplateURLData data = |
+ ConvertSearchProvider(*settings->search_engine, install_parameter); |
url_service_->AddExtensionControlledTURL(new TemplateURL(profile_, data), |
info.Pass()); |
} |