Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
"use strict";
/**
* Add a tab with given `url`. Returns a promise
* that will be resolved when the tab finished loading.
*/
function addTab(url) {
return BrowserTestUtils.openNewForegroundTab(gBrowser, TAB_URL);
}
/**
* Remove the given `tab`.
*/
function removeTab(tab) {
gBrowser.removeTab(tab);
}
/**
* Create a worker with the given `url` in the given `tab`.
*/
function createWorkerInTab(tab, url) {
info("Creating worker with url '" + url + "'\n");
return SpecialPowers.spawn(tab.linkedBrowser, [url], urlChild => {
if (!content._workers) {
content._workers = {};
}
content._workers[urlChild] = new content.Worker(urlChild);
});
}
/**
* Terminate the worker with the given `url` in the given `tab`.
*/
function terminateWorkerInTab(tab, url) {
info("Terminating worker with url '" + url + "'\n");
return SpecialPowers.spawn(tab.linkedBrowser, [url], urlChild => {
content._workers[urlChild].terminate();
delete content._workers[urlChild];
});
}
/**
* Post the given `message` to the worker with the given `url` in the given
* `tab`.
*/
function postMessageToWorkerInTab(tab, url, message) {
info("Posting message to worker with url '" + url + "'\n");
return SpecialPowers.spawn(
tab.linkedBrowser,
[url, message],
(urlChild, messageChild) => {
let worker = content._workers[urlChild];
worker.postMessage(messageChild);
return new Promise(function (resolve) {
worker.onmessage = function (event) {
worker.onmessage = null;
resolve(event.data);
};
});
}
);
}
/**
* Disable the cache in the given `tab`.
*/
function disableCacheInTab(tab) {
return SpecialPowers.spawn(tab.linkedBrowser, [], () => {
content.docShell.defaultLoadFlags =
Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsIRequest.INHIBIT_CACHING;
});
}