Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE HTML>
<html>
<!--
-->
<head>
<title>Test for Bug 277724</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=277724">Mozilla Bug 277724</a>
<p id="display"></p>
<pre id="test">
<script class="testbody" type="text/javascript">
/** Test for Bug 277724 **/
var childUnloaded = false;
var nodes = [
[ "select", HTMLSelectElement ],
[ "textarea", HTMLTextAreaElement ],
[ "text", HTMLInputElement ],
[ "password", HTMLInputElement ],
[ "checkbox", HTMLInputElement ],
[ "radio", HTMLInputElement ],
[ "image", HTMLInputElement ],
[ "submit", HTMLInputElement ],
[ "reset", HTMLInputElement ],
[ "button input", HTMLInputElement ],
[ "hidden", HTMLInputElement ],
[ "file", HTMLInputElement ],
[ "submit button", HTMLButtonElement ],
[ "reset button", HTMLButtonElement ],
[ "button", HTMLButtonElement ]
];
function soon(f) {
return function() { setTimeout(f, 0); }
}
function startTest(frameid) {
is(childUnloaded, false, "Child not unloaded yet");
var doc = $(frameid).contentDocument;
var win = $(frameid).contentWindow;
ok(doc instanceof win.Document, "doc should be a document");
for (var i = 0; i < nodes.length; ++i) {
var id = nodes[i][0];
var node = doc.getElementById(id);
ok(node instanceof win[nodes[i][1].name], id + " should be a " + nodes[i][1]);
is(node.disabled, false, "check for " + id + " state");
node.disabled = true;
is(node.disabled, true, "check for " + id + " state change");
}
$(frameid).onload = soon(function() { continueTest(frameid) });
// Do this off a timeout so it's not treated like a replace load.
function loadBlank() {
$(frameid).contentWindow.location = "about:blank";
}
setTimeout(loadBlank, 0);
}
function continueTest(frameid) {
is(childUnloaded, true, "Unload handler should have fired");
var doc = $(frameid).contentDocument;
var win = $(frameid).contentWindow;
ok(doc instanceof win.Document, "doc should be a document");
for (var i = 0; i < nodes.length; ++i) {
var id = nodes[i][0];
var node = doc.getElementById(id);
ok(node === null, id + " should be null");
}
$(frameid).onload = soon(function() { finishTest(frameid); });
// Do this off a timeout too. Why, I'm not sure. Something in session
// history creates another history state if we don't. :(
function goBack() {
$(frameid).contentWindow.history.back();
}
setTimeout(goBack, 0);
}
// XXXbz this is a nasty hack to work around the XML content sink not being
// incremental, so that the _first_ control we test is ok but others are not.
var testIs = is;
var once = false;
function flipper(a, b, c) {
if (once) {
todo(a == b, c);
} else {
once = true;
is(a, b, c);
}
}
function finishTest(frameid) {
var doc = $(frameid).contentDocument;
var win = $(frameid).contentWindow;
ok(doc instanceof win.Document, "doc should be a document");
for (var i = 0; i < nodes.length; ++i) {
var id = nodes[i][0];
var node = doc.getElementById(id);
ok(node instanceof win[nodes[i][1].name], id + " should be a " + nodes[i][1]);
//testIs(node.disabled, true, "check for " + id + " state restore");
}
if (frameid == "frame2") {
SimpleTest.finish();
} else {
childUnloaded = false;
// XXXbz this is a nasty hack to deal with the content sink. See above.
testIs = flipper;
$("frame2").onload = soon(function() { startTest("frame2"); });
$("frame2").src = "bug277724_iframe2.xhtml";
}
}
SimpleTest.waitForExplicitFinish();
</script>
</pre>
<!-- Don't use display:none, since we don't support framestate restoration
without a frame tree -->
<div id="content" style="visibility: hidden">
<iframe src="bug277724_iframe1.html" id="frame1"
onload="setTimeout(function() { startTest('frame1') }, 0)"></iframe>
<iframe src="" id="frame2"></iframe>
</div>
</body>
</html>