Bug 1545395 - Handle Search Engine urls properly where the search terms are in the url rather than as parameters. r=daleharvey
Differential Revision: https://phabricator.services.mozilla.com/D29014
This commit is contained in:
@@ -195,3 +195,39 @@ add_task(async function test_extension_post_params() {
|
|||||||
|
|
||||||
await ext1.unload();
|
await ext1.unload();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
add_task(async function test_extension_no_query_params() {
|
||||||
|
const ext1 = ExtensionTestUtils.loadExtension({
|
||||||
|
manifest: {
|
||||||
|
"chrome_settings_overrides": {
|
||||||
|
"search_provider": {
|
||||||
|
"name": "MozSearch",
|
||||||
|
"keyword": "MozSearch",
|
||||||
|
"search_url": "https://example.com/{searchTerms}",
|
||||||
|
"suggest_url": "https://example.com/suggest/{searchTerms}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
useAddonManager: "temporary",
|
||||||
|
});
|
||||||
|
|
||||||
|
await ext1.startup();
|
||||||
|
await AddonTestUtils.waitForSearchProviderStartup(ext1);
|
||||||
|
|
||||||
|
let engine = Services.search.getEngineByName("MozSearch");
|
||||||
|
ok(engine, "Engine should exist.");
|
||||||
|
|
||||||
|
const encodedSubmissionURL = engine.getSubmission(kSearchTermIntl).uri.spec;
|
||||||
|
const testSubmissionURL = "https://example.com/" + encodeURIComponent(kSearchTermIntl);
|
||||||
|
equal(encodedSubmissionURL, testSubmissionURL, "Encoded UTF-8 URLs should match");
|
||||||
|
|
||||||
|
const expectedSuggestURL = "https://example.com/suggest/" + kSearchTerm;
|
||||||
|
let submissionSuggest = engine.getSubmission(kSearchTerm, URLTYPE_SUGGEST_JSON);
|
||||||
|
equal(submissionSuggest.uri.spec, expectedSuggestURL, "Suggest URLs should match");
|
||||||
|
|
||||||
|
await ext1.unload();
|
||||||
|
await delay();
|
||||||
|
|
||||||
|
engine = Services.search.getEngineByName("MozSearch");
|
||||||
|
ok(!engine, "Engine should not exist");
|
||||||
|
});
|
||||||
|
|||||||
@@ -4057,7 +4057,9 @@ SearchService.prototype = {
|
|||||||
shortName: extension.id.split("@")[0],
|
shortName: extension.id.split("@")[0],
|
||||||
description: extension.manifest.description,
|
description: extension.manifest.description,
|
||||||
searchForm: searchProvider.search_form,
|
searchForm: searchProvider.search_form,
|
||||||
template: searchProvider.search_url,
|
// AddonManager will sometimes encode the URL via `new URL()`. We want
|
||||||
|
// to ensure we're always dealing with decoded urls.
|
||||||
|
template: decodeURI(searchProvider.search_url),
|
||||||
searchGetParams: searchProvider.search_url_get_params,
|
searchGetParams: searchProvider.search_url_get_params,
|
||||||
searchPostParams: searchProvider.search_url_post_params,
|
searchPostParams: searchProvider.search_url_post_params,
|
||||||
iconURL: searchProvider.favicon_url || preferredIconUrl,
|
iconURL: searchProvider.favicon_url || preferredIconUrl,
|
||||||
@@ -4065,6 +4067,7 @@ SearchService.prototype = {
|
|||||||
alias: searchProvider.keyword,
|
alias: searchProvider.keyword,
|
||||||
extensionID: extension.id,
|
extensionID: extension.id,
|
||||||
isBuiltin: extension.addonData.builtIn,
|
isBuiltin: extension.addonData.builtIn,
|
||||||
|
// suggest_url doesn't currently get encoded.
|
||||||
suggestURL: searchProvider.suggest_url,
|
suggestURL: searchProvider.suggest_url,
|
||||||
suggestPostParams: searchProvider.suggest_url_post_params,
|
suggestPostParams: searchProvider.suggest_url_post_params,
|
||||||
suggestGetParams: searchProvider.suggest_url_get_params,
|
suggestGetParams: searchProvider.suggest_url_get_params,
|
||||||
|
|||||||
Reference in New Issue
Block a user