fune/dom/tests/browser/file_postMessage_parent.html
Andrew McCreight 894b69c6ee Bug 1632332 - Improve inner-window-nuked handling in browser_windowProxy_transplant.js. r=kmag
This code is supposed to test what happens when you wrap the outer for an
inner after the inner has been nuked, and the outer has navigated to a
remote window. However, the current code just runs when any window anywhere
gets nuked. Also, it never unregisters itself. This patch fixes both of
those issues.

My hope is that this will fix an intermittent orange we are seeing, but
there's also an underlying issue that should be addressed at some point.

Also, we don't need the inner-window-nuked notifications from the parent.

Differential Revision: https://phabricator.services.mozilla.com/D72081
2020-04-23 18:23:05 +00:00

48 lines
1.8 KiB
HTML

<!doctype html>
<script>
dump("Content running top level script " + window.location.href + "\n");
var winID = SpecialPowers.getDOMWindowUtils(this).currentInnerWindowID;
var observer = {
observe(subject, topic) {
var currID = SpecialPowers.wrap(subject).QueryInterface(SpecialPowers.Ci.nsISupportsPRUint64).data;
if (currID != winID) {
return;
}
// We should be able to wrap the inner window when the outer
// window has navigated out of process.
SpecialPowers.Cu.getGlobalForObject({});
SpecialPowers.removeObserver(observer, "inner-window-nuked");
}
};
SpecialPowers.addObserver(observer, "inner-window-nuked");
// Unfortunately, we don't currently fire the onload event on a remote iframe,
// so we can't listen for the load event directly on the iframe. Instead, we
// postMessage from the iframe when the load event would be fired.
window.addEventListener("load", function onload() {
dump("Content got load of " + window.location.href + "\n");
if (window.parent) {
window.parent.postMessage({
event: "load",
location: window.location.href,
}, "*");
}
let h1 = document.createElement("h1");
h1.textContent = window.location.href;
document.body.appendChild(h1);
}, { once: true });
// In addition, we listen to the message event to trigger navigations of
// ourself when requested, as we don't fully support our embedder triggering
// us being navigated yet for Totally Not Buggy Reasons.
window.addEventListener("message", function onmessage(event) {
dump("Content got event " + window.location.href + " " + JSON.stringify(event.data) + "\n");
if (event.data.action === "navigate") {
window.location = event.data.location;
}
});
</script>