summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api
diff options
context:
space:
mode:
authorvasilii@chromium.org <vasilii@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-24 13:16:06 +0000
committervasilii@chromium.org <vasilii@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-24 13:16:06 +0000
commitd8fd0fdd98c40468a5715fc0d6da37b8cd0033cf (patch)
treea61f02299399d0f1550514988a160933d046012c /chrome/browser/extensions/api
parent9cfa98378aeb762634dd1e39510bbca38a4b22b0 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/extensions/api/management/management_browsertest.cc16
-rw-r--r--chrome/browser/extensions/api/preference/preference_api_prefs_unittest.cc3
-rw-r--r--chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc58
-rw-r--r--chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc29
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());