1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<!doctype html>
<script>
dump("Content running top level script " + window.location.href + "\n");
var winID = SpecialPowers.wrap(this).windowGlobalChild.innerWindowId;
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>
|