diff options
author | vasilii@chromium.org <vasilii@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-24 13:16:06 +0000 |
---|---|---|
committer | vasilii@chromium.org <vasilii@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-24 13:16:06 +0000 |
commit | d8fd0fdd98c40468a5715fc0d6da37b8cd0033cf (patch) | |
tree | a61f02299399d0f1550514988a160933d046012c /chrome/browser/extensions/api | |
parent | 9cfa98378aeb762634dd1e39510bbca38a4b22b0 (diff) | |
download | chromium_src-d8fd0fdd98c40468a5715fc0d6da37b8cd0033cf.zip chromium_src-d8fd0fdd98c40468a5715fc0d6da37b8cd0033cf.tar.gz chromium_src-d8fd0fdd98c40468a5715fc0d6da37b8cd0033cf.tar.bz2 |
Introduce an extension parameter which is used to customize the extension. It's available for external extensions on Windows by using a registry key. The installer can set this parameter per user.
BUG=267510
TBR=nkostylev@chromium.org,estade@chromium.org
Review URL: https://codereview.chromium.org/196663003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258919 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/api')
4 files changed, 71 insertions, 35 deletions
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc index 29bedb2..c0aec95 100644 --- a/chrome/browser/extensions/api/management/management_browsertest.cc +++ b/chrome/browser/extensions/api/management/management_browsertest.cc @@ -425,8 +425,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalUrlUpdate) { // of external_extensions.json before this test function starts. EXPECT_TRUE(pending_extension_manager->AddFromExternalUpdateUrl( - kExtensionId, GURL("http://localhost/autoupdate/manifest"), - Manifest::EXTERNAL_PREF_DOWNLOAD, Extension::NO_FLAGS, false)); + kExtensionId, + std::string(), + GURL("http://localhost/autoupdate/manifest"), + Manifest::EXTERNAL_PREF_DOWNLOAD, + Extension::NO_FLAGS, + false)); // Run autoupdate and make sure version 2 of the extension was installed. service->updater()->CheckNow(params); @@ -449,8 +453,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, ExternalUrlUpdate) { // Try to install the extension again from an external source. It should fail // because of the killbit. EXPECT_FALSE(pending_extension_manager->AddFromExternalUpdateUrl( - kExtensionId, GURL("http://localhost/autoupdate/manifest"), - Manifest::EXTERNAL_PREF_DOWNLOAD, Extension::NO_FLAGS, false)); + kExtensionId, + std::string(), + GURL("http://localhost/autoupdate/manifest"), + Manifest::EXTERNAL_PREF_DOWNLOAD, + Extension::NO_FLAGS, + false)); EXPECT_FALSE(pending_extension_manager->IsIdPending(kExtensionId)) << "External reinstall of a killed extension shouldn't work."; EXPECT_TRUE(extension_prefs->IsExternalExtensionUninstalled(kExtensionId)) diff --git a/chrome/browser/extensions/api/preference/preference_api_prefs_unittest.cc b/chrome/browser/extensions/api/preference/preference_api_prefs_unittest.cc index 5f2ef28..726e097 100644 --- a/chrome/browser/extensions/api/preference/preference_api_prefs_unittest.cc +++ b/chrome/browser/extensions/api/preference/preference_api_prefs_unittest.cc @@ -152,7 +152,8 @@ void ExtensionControlledPrefsTest::EnsureExtensionInstalled( prefs()->OnExtensionInstalled(extension, Extension::ENABLED, false, - syncer::StringOrdinal()); + syncer::StringOrdinal(), + std::string()); prefs()->SetIsIncognitoEnabled(extension->id(), true); installed_[i] = true; break; 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 9752129..73a3d60 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()); } diff --git a/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc b/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc index 6170f9e..3d4bed8 100644 --- a/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc +++ b/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc @@ -68,38 +68,41 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideSettings) { EXPECT_EQ(TemplateURL::NORMAL, default_provider->GetType()); #if defined(OS_WIN) - const extensions::Extension* extension = LoadExtension( - test_data_dir_.AppendASCII("settings_override")); + const extensions::Extension* extension = LoadExtensionWithInstallParam( + test_data_dir_.AppendASCII("settings_override"), + kFlagEnableFileAccess, + "10"); ASSERT_TRUE(extension); - EXPECT_EQ("http://www.homepage.com/", prefs->GetString(prefs::kHomePage)); + EXPECT_EQ("http://www.homepage.com/?param=10", + prefs->GetString(prefs::kHomePage)); EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage)); startup_pref = SessionStartupPref::GetStartupPref(prefs); EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type); - EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.com")), + EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.com/?param=10")), startup_pref.urls); TemplateURL* extension_provider = url_service->GetDefaultSearchProvider(); EXPECT_EQ(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, extension_provider->GetType()); EXPECT_EQ(base::ASCIIToUTF16("name.de"), extension_provider->short_name()); EXPECT_EQ(base::ASCIIToUTF16("keyword.de"), extension_provider->keyword()); - EXPECT_EQ("http://www.foo.de/s?q={searchTerms}", extension_provider->url()); - EXPECT_EQ(GURL("http://www.foo.de/favicon.ico"), + EXPECT_EQ("http://www.foo.de/s?q={searchTerms}&id=10", + extension_provider->url()); + EXPECT_EQ(GURL("http://www.foo.de/favicon.ico?id=10"), extension_provider->favicon_url()); - EXPECT_EQ("http://www.foo.de/suggest?q={searchTerms}", + EXPECT_EQ("http://www.foo.de/suggest?q={searchTerms}&id=10", extension_provider->suggestions_url()); - EXPECT_EQ("http://www.foo.de/instant?q={searchTerms}", + EXPECT_EQ("http://www.foo.de/instant?q={searchTerms}&id=10", extension_provider->instant_url()); - EXPECT_EQ("http://www.foo.de/image?q={searchTerms}", - extension_provider->image_url()); + EXPECT_EQ("http://www.foo.de/image?q={searchTerms}&id=10", + extension_provider->image_url()); EXPECT_EQ("search_lang=de", extension_provider->search_url_post_params()); EXPECT_EQ("suggest_lang=de", extension_provider->suggestions_url_post_params()); EXPECT_EQ("instant_lang=de", extension_provider->instant_url_post_params()); EXPECT_EQ("image_lang=de", extension_provider->image_url_post_params()); const std::string alternate_urls[] = { - "http://www.moo.de/s?q={searchTerms}", - "http://www.noo.de/s?q={searchTerms}" - }; + "http://www.moo.de/s?q={searchTerms}&id=10", + "http://www.noo.de/s?q={searchTerms}&id=10"}; EXPECT_EQ(std::vector<std::string>( alternate_urls, alternate_urls + arraysize(alternate_urls)), extension_provider->alternate_urls()); |