<!
DOCTYPE html>
<
html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1339722
-->
<
head>
<
meta charset=
"utf-8" />
<
title>Test for Bug 1339722</
title>
<
script src=
"chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></
script>
<
link rel=
"stylesheet" type=
"text/css" href=
"chrome://global/skin" />
<
link
rel=
"stylesheet"
type=
"text/css"
href=
"chrome://mochikit/content/tests/SimpleTest/test.css"
/>
<
script type=
"application/javascript">
/**
* Test for Bug 1339722
* 1. Wait for
"http-on-modify-request" or document-on-modify-request for the
*
iframe load.
* 2. In the observer, access it
's window proxy to trigger DOMWindowCreated.
* 3. In the event handler, delete the
iframe so that the frameloader would be
* destroyed in the middle of ReallyStartLoading.
* 4. Verify that it doesn
't crash.
**/
// This topic used to be http-on-useragent-request, but that got removed in
// bug 1513574. on-modify-request is called around the same
time, and should
// behave similarly.
const TOPIC =
"document-on-modify-request";
let win;
const observe = (subject, topic) => {
info(
"Got " + topic);
Services.obs.removeObserver(observe, TOPIC);
// Query window proxy so it triggers DOMWindowCreated.
let channel;
try {
// We need to QI nsIHttpChannel in order to load the interface
's
// methods / attributes for later
code that could assume we are dealing
// with a nsIHttpChannel.
channel = subject.QueryInterface(Ci.nsIHttpChannel);
} catch (e) {
channel = subject.QueryInterface(Ci.nsIIdentChannel);
}
win = channel.notificationCallbacks.getInterface(Ci.mozIDOMWindowProxy);
};
Services.obs.addObserver(observe, TOPIC);
let docShell = SpecialPowers.wrap(window).docShell;
docShell.chromeEventHandler.addEventListener(
"DOMWindowCreated",
function handler(e) {
info(
"Got DOMWindowCreated");
let
iframe = document.getElementById(
"testFrame");
is(e.target,
iframe.contentDocument,
"verify event target");
// Remove the
iframe to cause frameloader destroy.
iframe.remove();
setTimeout(() => {
ok(!document.getElementById(
"testFrame"),
"verify iframe removed");
SimpleTest.finish();
}, 0);
},
{ once: true }
);
SimpleTest.waitForExplicitFinish();
</
script>
</
head>
<
body>
<a
target=
"_blank"
href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=1339722"
>Mozilla Bug 1339722</a
>
<p id=
"display"></p>
<
div id=
"content" style=
"display: none;"></
div>
<
pre id=
"test">
<
div id=
"frameContainer">
<
iframe id=
"testFrame" src=
"http://www.example.com"></
iframe>
</
div>
</
pre>
</
body>
</
html>