Bug 1413298 - Allow search encoding to be specifed by WebExtension. r?florian
MozReview-Commit-ID: 4O73NlqIfjm
--- a/browser/components/extensions/ext-chrome-settings-overrides.js
+++ b/browser/components/extensions/ext-chrome-settings-overrides.js
@@ -179,16 +179,17 @@ this.chrome_settings_overrides = class e
}
try {
let params = {
template: searchProvider.search_url,
iconURL: searchProvider.favicon_url,
alias: searchProvider.keyword,
extensionID: extension.id,
suggestURL: searchProvider.suggest_url,
+ queryCharset: "UTF-8",
};
Services.search.addEngineWithDetails(searchProvider.name.trim(), params);
if (extension.startupReason === "ADDON_UPGRADE") {
let engine = Services.search.getEngineByName(searchProvider.name.trim());
if (isCurrent) {
Services.search.currentEngine = engine;
}
if (index != -1) {
--- a/browser/components/extensions/test/browser/browser_ext_settings_overrides_search.js
+++ b/browser/components/extensions/test/browser/browser_ext_settings_overrides_search.js
@@ -2,16 +2,17 @@
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
const kSearchEngineURL = "https://example.com/?search={searchTerms}";
const kSearchSuggestURL = "http://example.com/?suggest={searchTerms}";
const kSearchTerm = "foo";
+const kSearchTermIntl = "日";
const URLTYPE_SUGGEST_JSON = "application/x-suggestions+json";
add_task(async function test_extension_adding_engine() {
let ext1 = ExtensionTestUtils.loadExtension({
manifest: {
"chrome_settings_overrides": {
"search_provider": {
"name": "MozSearch",
@@ -26,16 +27,20 @@ add_task(async function test_extension_a
await ext1.startup();
let engine = Services.search.getEngineByName("MozSearch");
ok(engine, "Engine should exist.");
let expectedSuggestURL = kSearchSuggestURL.replace("{searchTerms}", kSearchTerm);
let submissionSuggest = engine.getSubmission(kSearchTerm, URLTYPE_SUGGEST_JSON);
+ let encodedSubmissionURL = engine.getSubmission(kSearchTermIntl).uri.spec;
+ let testSubmissionURL = kSearchEngineURL.replace("{searchTerms}", encodeURIComponent(kSearchTermIntl));
+ is(encodedSubmissionURL, testSubmissionURL, "Encoded UTF-8 URLs should match");
+
is(submissionSuggest.uri.spec, expectedSuggestURL, "Suggest URLs should match");
await ext1.unload();
engine = Services.search.getEngineByName("MozSearch");
ok(!engine, "Engine should not exist");
});
--- a/toolkit/components/search/nsSearchService.js
+++ b/toolkit/components/search/nsSearchService.js
@@ -1807,16 +1807,19 @@ Engine.prototype = {
"Can't call _initFromMetaData on a readonly engine!",
Cr.NS_ERROR_FAILURE);
let method = aParams.method || "GET";
this._urls.push(new EngineURL(URLTYPE_SEARCH_HTML, method, aParams.template));
if (aParams.suggestURL) {
this._urls.push(new EngineURL(URLTYPE_SUGGEST_JSON, "GET", aParams.suggestURL));
}
+ if (aParams.queryCharset) {
+ this._queryCharset = aParams.queryCharset;
+ }
this._name = aName;
this.alias = aParams.alias;
this._description = aParams.description;
this._setIcon(aParams.iconURL, true);
this._extensionID = aParams.extensionID;
},