зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1253148: [webext] Cleanup running extensions on test failure. r=billm
MozReview-Commit-ID: HTFZk6y6ZEp --HG-- extra : rebase_source : 476d51fba97989b8bcbcdb6720d53f1820db8fc9
This commit is contained in:
Родитель
f92f7a7fae
Коммит
fbcae3eafe
|
@ -145,7 +145,11 @@ function Tester(aTests, structuredLogger, aCallback) {
|
|||
this._scriptLoader.loadSubScript("chrome://mochikit/content/chrome-harness.js", simpleTestScope);
|
||||
this.SimpleTest = simpleTestScope.SimpleTest;
|
||||
|
||||
var extensionUtilsScope = {};
|
||||
var extensionUtilsScope = {
|
||||
registerCleanupFunction: (fn) => {
|
||||
this.currentTest.scope.registerCleanupFunction(fn);
|
||||
},
|
||||
};
|
||||
extensionUtilsScope.SimpleTest = this.SimpleTest;
|
||||
this._scriptLoader.loadSubScript("chrome://mochikit/content/tests/SimpleTest/ExtensionTestUtils.js", extensionUtilsScope);
|
||||
this.ExtensionTestUtils = extensionUtilsScope.ExtensionTestUtils;
|
||||
|
|
|
@ -2,6 +2,15 @@ var ExtensionTestUtils = {};
|
|||
|
||||
ExtensionTestUtils.loadExtension = function(ext, id = null)
|
||||
{
|
||||
// Cleanup functions need to be registered differently depending on
|
||||
// whether we're in browser chrome or plain mochitests.
|
||||
var registerCleanup;
|
||||
if (typeof registerCleanupFunction != "undefined") {
|
||||
registerCleanup = registerCleanupFunction;
|
||||
} else {
|
||||
registerCleanup = SimpleTest.registerCleanupFunction.bind(SimpleTest);
|
||||
}
|
||||
|
||||
var testResolve;
|
||||
var testDone = new Promise(resolve => { testResolve = resolve; });
|
||||
|
||||
|
@ -10,7 +19,7 @@ ExtensionTestUtils.loadExtension = function(ext, id = null)
|
|||
|
||||
var messageQueue = new Set();
|
||||
|
||||
SimpleTest.registerCleanupFunction(() => {
|
||||
registerCleanup(() => {
|
||||
if (messageQueue.size) {
|
||||
SimpleTest.is(messageQueue.size, 0, "message queue is empty");
|
||||
}
|
||||
|
@ -74,6 +83,15 @@ ExtensionTestUtils.loadExtension = function(ext, id = null)
|
|||
|
||||
var extension = SpecialPowers.loadExtension(id, ext, handler);
|
||||
|
||||
registerCleanup(() => {
|
||||
if (extension.state == "pending" || extension.state == "running") {
|
||||
SimpleTest.ok(false, "Extension left running at test shutdown")
|
||||
return extension.unload();
|
||||
} else if (extension.state == "unloading") {
|
||||
SimpleTest.ok(false, "Extension not fully unloaded at test shutdown")
|
||||
}
|
||||
});
|
||||
|
||||
extension.awaitMessage = (msg) => {
|
||||
return new Promise(resolve => {
|
||||
checkDuplicateListeners(msg);
|
||||
|
|
|
@ -1881,15 +1881,20 @@ SpecialPowersAPI.prototype = {
|
|||
ext = Cu.waiveXrays(ext);
|
||||
|
||||
let sp = this;
|
||||
let state = "uninitialized";
|
||||
let extension = {
|
||||
id,
|
||||
|
||||
get state() { return state; },
|
||||
|
||||
startup() {
|
||||
state = "pending";
|
||||
sp._sendAsyncMessage("SPStartupExtension", {id});
|
||||
return startupPromise;
|
||||
},
|
||||
|
||||
unload() {
|
||||
state = "unloading";
|
||||
sp._sendAsyncMessage("SPUnloadExtension", {id});
|
||||
return unloadPromise;
|
||||
},
|
||||
|
@ -1904,11 +1909,14 @@ SpecialPowersAPI.prototype = {
|
|||
let listener = (msg) => {
|
||||
if (msg.data.id == id) {
|
||||
if (msg.data.type == "extensionStarted") {
|
||||
state = "running";
|
||||
resolveStartup();
|
||||
} else if (msg.data.type == "extensionFailed") {
|
||||
state = "failed";
|
||||
rejectStartup("startup failed");
|
||||
} else if (msg.data.type == "extensionUnloaded") {
|
||||
this._removeMessageListener("SPExtensionMessage", listener);
|
||||
state = "unloaded";
|
||||
resolveUnload();
|
||||
} else if (msg.data.type in handler) {
|
||||
handler[msg.data.type](...msg.data.args);
|
||||
|
|
Загрузка…
Ссылка в новой задаче