/**
* - main page tells subpage to call startWorker()
* - subpage starts worker
* - worker calls setInterval() and keeps calling postMessage()
* - onmessage(), as setup by the subpage, calls messageCallback
* - when messageCallback gets called more than 25 times
* - subpage gets navigated to blank.html
* - blank page posts message to main page, and main page calls suspendCallback()
* - suspendCallback() schedules waitInterval() to be fired off every second
* - after 5 times, it clears the interval and navigates subpage back
* - suspend_window subpage starts receiving messages again and
* does a final call to messageCallback()
* - finishTest() is called
*/
var lastCount;
var suspended = false; var resumed = false; var finished = false; var suspendBlankPageCurrentlyShowing = false;
var interval; var oldMessageCount; var waitCount = 0;
var bcSuspendWindow, bcSuspendBlank;
function runTest() {
bcSuspendWindow = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("suspendWindow");
bcSuspendWindow.onmessage = (msgEvent) => { var msg = msgEvent.data; varcommand = msg.command; var data = msg.data;
if (command == "loaded") {
if (finished) {
return;
}
bcSuspendWindow.postMessage({command: "startWorker"});
} else if (command == "messageCallback") {
messageCallback(data);
} else if (command == "errorCallback") {
errorCallback(data);
} else if (command == "finished") {
SimpleTest.finish();
}
}
// If Fission is disabled, the pref is no-op.
SpecialPowers.pushPrefEnv({set: [["fission.bfcacheInParent", true]]}, () => {
window.open("suspend_window.html", "testWin", "noopener");
});
}
function finishTest() {
if (finished) {
return;
}
finished = true;
bcSuspendWindow.postMessage({command: "finish"});
}
function waitInterval() {
if (finished) {
return;
}
ok(suspendBlankPageCurrentlyShowing, "correct page is showing");
is(suspended, true, "Not suspended?");
is(resumed, false, "Already resumed?!");
is(lastCount, oldMessageCount, "Received a message while suspended!");
if (++waitCount == 5) {
clearInterval(interval);
resumed = true;
bcSuspendBlank.postMessage({command: "navigateBack"});
}
}
function badOnloadCallback() {
if (finished) {
return;
}
ok(false, "We don't want suspend_window.html to fire a new load event, we want it to come out of the bfcache!");
finishTest();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.