зеркало из https://github.com/mozilla/gecko-dev.git
139 строки
3.9 KiB
HTML
139 строки
3.9 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=277724
|
|
-->
|
|
<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;
|
|
ok(doc instanceof 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 nodes[i][1], 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;
|
|
ok(doc instanceof 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;
|
|
ok(doc instanceof 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 nodes[i][1], 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>
|
|
|