forked from mirrors/gecko-dev
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
48 lines
1.8 KiB
HTML
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>
|