Bug 1426081 - Migrate legacy search engines to WebExtensions. r=florian

MozReview-Commit-ID: JfSwJwMC46F

--HG--
extra : rebase_source : 3a9044a4bfad9f01a6894790ad25def0d472ecc1
This commit is contained in:
Michael Kaply 2017-12-21 12:58:56 -06:00
Родитель f6bbf64612
Коммит 348f635510
3 изменённых файлов: 60 добавлений и 9 удалений

Просмотреть файл

@ -3876,6 +3876,7 @@ SearchService.prototype = {
addEngineWithDetails: function SRCH_SVC_addEWD(aName, iconURL, alias,
description, method,
template, extensionID) {
let isCurrent = false;
var params;
if (iconURL && typeof iconURL == "object") {
@ -3896,16 +3897,28 @@ SearchService.prototype = {
FAIL("Invalid name passed to addEngineWithDetails!");
if (!params.template)
FAIL("Invalid template passed to addEngineWithDetails!");
if (this._engines[aName])
FAIL("An engine with that name already exists!", Cr.NS_ERROR_FILE_ALREADY_EXISTS);
var engine = new Engine(sanitizeName(aName), false);
engine._initFromMetadata(aName, params);
engine._loadPath = "[other]addEngineWithDetails";
if (params.extensionID) {
engine._loadPath += ":" + params.extensionID;
let existingEngine = this._engines[aName];
if (existingEngine) {
if (params.extensionID &&
existingEngine._loadPath.startsWith(`jar:[profile]/extensions/${params.extensionID}`)) {
// This is a legacy extension engine that needs to be migrated to WebExtensions.
isCurrent = this.currentEngine == existingEngine;
this.removeEngine(existingEngine);
} else {
FAIL("An engine with that name already exists!", Cr.NS_ERROR_FILE_ALREADY_EXISTS);
}
}
let newEngine = new Engine(sanitizeName(aName), false);
newEngine._initFromMetadata(aName, params);
newEngine._loadPath = "[other]addEngineWithDetails";
if (params.extensionID) {
newEngine._loadPath += ":" + params.extensionID;
}
this._addEngineToStore(newEngine);
if (isCurrent) {
this.currentEngine = newEngine;
}
this._addEngineToStore(engine);
},
addEngine: function SRCH_SVC_addEngine(aEngineURL, aDataType, aIconURL,

Просмотреть файл

@ -0,0 +1,37 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const kSearchEngineID = "addEngineWithDetails_test_engine";
const kExtensionID = "test@example.com";
const kSearchEngineDetails = {
template: "http://example.com/?search={searchTerms}",
description: "Test Description",
iconURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
suggestURL: "http://example.com/?suggest={searchTerms}",
alias: "alias_foo",
extensionID: kExtensionID,
};
add_task(async function test_migrateLegacyEngine() {
Assert.ok(!Services.search.isInitialized);
await asyncInit();
Services.search.addEngineWithDetails(kSearchEngineID, kSearchEngineDetails);
// Modify the loadpath so it looks like an legacy plugin loadpath
let engine = Services.search.getEngineByName(kSearchEngineID);
engine.wrappedJSObject._loadPath = `jar:[profile]/extensions/${kExtensionID}.xpi!/engine.xml`;
engine.wrappedJSObject._extensionID = null;
// This should replace the existing engine
Services.search.addEngineWithDetails(kSearchEngineID, kSearchEngineDetails);
engine = Services.search.getEngineByName(kSearchEngineID);
Assert.equal(engine.wrappedJSObject._loadPath, "[other]addEngineWithDetails:" + kExtensionID);
Assert.equal(engine.wrappedJSObject._extensionID, kExtensionID);
});

Просмотреть файл

@ -97,3 +97,4 @@ tags = addons
[test_chromeresource_icon2.js]
[test_engineUpdate.js]
[test_paramSubstitution.js]
[test_migrateWebExtensionEngine.js]