зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1426081 - Migrate legacy search engines to WebExtensions. r=florian
MozReview-Commit-ID: JfSwJwMC46F --HG-- extra : rebase_source : 3a9044a4bfad9f01a6894790ad25def0d472ecc1
This commit is contained in:
Родитель
f6bbf64612
Коммит
348f635510
|
@ -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]
|
||||
|
|
Загрузка…
Ссылка в новой задаче