blob: b838b38be16424e6bd51b483dca27a8445622090 [file] [log] [blame]
<!doctype html>
<script>
var searchParams = new URL(location).searchParams;
var test = searchParams.get("test");
window.onportalactivate = function(e) {
if (test == "adopt-once") {
var portal = e.adoptPredecessor();
document.body.appendChild(portal);
if (portal instanceof HTMLPortalElement) {
portal.postMessage("adopted");
}
}
if (test == "adopt-twice") {
var portal = e.adoptPredecessor();
document.body.appendChild(portal);
try {
e.adoptPredecessor();
} catch(e) {
if (e.name == "InvalidStateError") {
portal.postMessage("passed");
}
}
}
if (test == "adopt-after-event") {
setTimeout(function() {
try {
e.adoptPredecessor();
} catch(e) {
if (e.name == "InvalidStateError") {
var bc_test = new BroadcastChannel(`test-${test}`);
bc_test.postMessage("passed");
bc_test.close();
}
}
});
}
if (test == "adopt-and-activate") {
var portal = e.adoptPredecessor();
portal.activate();
}
if (test == "adopt-attach-remove") {
var portal = e.adoptPredecessor();
document.body.appendChild(portal);
setTimeout(() => {
document.body.removeChild(portal);
var bc_test = new BroadcastChannel(`test-${test}`);
bc_test.postMessage("passed");
bc_test.close();
});
}
if (test == "adopt-and-discard") {
var portal = e.adoptPredecessor();
setTimeout(() => {
// portal should be inactive and activate should fail.
portal.activate().catch(e => {
if (e.name == "InvalidStateError") {
var bc_test = new BroadcastChannel(`test-${test}`);
bc_test.postMessage("passed");
bc_test.close();
}
});
});
}
if (test == "adopt-to-disconnected-node") {
var portal = e.adoptPredecessor();
document.body.appendChild(portal);
var node = document.createElement("div");
node.appendChild(portal);
var bc_test = new BroadcastChannel(`test-${test}`);
bc_test.postMessage("passed");
bc_test.close();
}
}
</script>