<!DOCTYPE HTML>
<html>
<head>
<title>Subframe</title>
<script src="../resources/js-test-pre.js"></script>
</head>
<body>
<script>
var documentDotAll = window.passDown;
window.parent.passUp = [];

if (document.all) {
    window.parent.passUp.push("FAIL: if (document.all) didn't masqueraded as undefined"); 
} else {
    window.parent.passUp.push("if (document.all) masqueraded as undefined"); 
}

for (var i = 0; i < 300; i++) {
if (documentDotAll) {
    window.parent.passUp.push("if (documentDotAll) did not masquerade as undefined");
} else {
    window.parent.passUp.push("FAIL: if (documentDotAll) masqueraded as undefined"); 
}

if (documentDotAll == null) {
    window.parent.passUp.push("FAIL: if (documentDotAll == null) masqueraded as undefined"); 
} else {
    window.parent.passUp.push("if (documentDotAll == null) did not masquerade as undefined");
}

if (documentDotAll == undefined) {
    window.parent.passUp.push("FAIL: if (documentDotAll == undefined) masqueraded as undefined"); 
} else {
    window.parent.passUp.push("if (documentDotAll == undefined) did not masquerade as undefined");
}

if (!documentDotAll) {
    window.parent.passUp.push("FAIL: if (!documentDotAll) masqueraded as undefined"); 
} else {
    window.parent.passUp.push("if (!documentDotAll) did not masquerade as undefined");
}

if (documentDotAll != null) {
    window.parent.passUp.push("if (documentDotAll != null) did not masquerade as undefined");
} else {
    window.parent.passUp.push("FAIL: if (documentDotAll != null) masqueraded as undefined"); 
}

if (documentDotAll != undefined) {
    window.parent.passUp.push("if (documentDotAll != undefined) did not masquerade as undefined");
} else {
    window.parent.passUp.push("FAIL: if (documentDotAll != undefined) masqueraded as undefined"); 
}

if (documentDotAll === undefined) {
    window.parent.passUp.push("FAIL: if (documentDotAll === undefined) masqueraded as undefined"); 
} else {
    window.parent.passUp.push("if (documentDotAll === undefined) did not masquerade as undefined");
}

if (documentDotAll !== undefined) {
    window.parent.passUp.push("if (documentDotAll !== undefined) did not masquerade as undefined");
} else {
    window.parent.passUp.push("FAIL: if (documentDotAll !== undefined) masqueraded as undefined"); 
}

if (typeof documentDotAll === "undefined") {
    window.parent.passUp.push("FAIL: if (typeof documentDotAll === \"undefined\") masqueraded as undefined");
} else {
    window.parent.passUp.push("if (typeof documentDotAll === \"undefined\") did not masquerade as undefined");
}
}
</script>
</body>
</html>
