gecko-dev/content/base/test/test_bug543870.html

163 строки
5.6 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<title>Test for Cross Site XMLHttpRequest</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body onload="gen.next()">
<p id="display">
<iframe id=inner></iframe>
<iframe id=iframe></iframe>
<img id=img onload="gen.send(event);">
<input type=file id=fileList>
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="application/javascript;version=1.8">
window.addEventListener("message", function(e) {
gen.send(JSON.parse(e.data));
}, false);
const innerSameSiteURI = "file_bug543870_inner.html";
const innerCrossSiteURI = "http://example.com/tests/content/base/test/file_bug543870_inner.html"
gen = runTest();
SimpleTest.waitForExplicitFinish();
function runTest() {
inner = document.getElementById('inner');
img = document.getElementById('img');
iframe = document.getElementById('iframe');
inner.onload = function() { gen.send("inner loaded"); };
// Attempt to load a image in this document
var file = getFile("file_bug543870_img.jpg");
img.src = file.url;
var e = (yield);
is(e.type, "load", "loaded successfully");
is(img.width, 120, "correct width");
is(img.height, 90, "correct height");
// Attempt to load an image in a different same-origin document
inner.src = innerSameSiteURI;
yield;
inner.contentWindow.postMessage(JSON.stringify({img:file.url}), "*");
var res = (yield);
is(res.type, "load", "loaded successfully");
is(res.width, 120, "correct width");
is(res.height, 90, "correct height");
// Attempt to load an image in a different cross-origin document
inner.src = innerCrossSiteURI;
yield;
inner.contentWindow.postMessage(JSON.stringify({img:file.url}), "*");
var res = (yield);
is(res.type, "error", "failed successfully");
isnot(res.width, 120, "correct error width");
isnot(res.height, 90, "correct error height");
// Attempt to load a HTML document in an iframe in this document
iframe.onload = function() { gen.next(); };
iframe.src = "file_bug543870_doc.html";
yield;
is(iframe.contentDocument.getElementsByTagName("p")[0].textContent,
"This here is a document!",
"iframe loaded successfully");
is(iframe.contentDocument.getElementById("img").width, 120,
"image in iframe width");
is(iframe.contentDocument.getElementById("img").height, 90,
"image in iframe height");
// Attempt to load a HTML document in an iframe in this document, using file url
file = getFile("file_bug543870_doc.html");
iframe.src = file.url;
yield;
is(iframe.contentDocument.getElementsByTagName("p")[0].textContent,
"This here is a document!",
"iframe loaded successfully");
isnot(iframe.contentDocument.getElementById("img").width, 120,
"failed image in iframe width");
isnot(iframe.contentDocument.getElementById("img").height, 90,
"failed image in iframe height");
// Attempt to load a HTML document in an iframe in inner document
inner.src = innerSameSiteURI;
is((yield), "inner loaded", "correct gen.next()");
inner.contentWindow.postMessage(JSON.stringify({iframe:"file_bug543870_doc.html"}), "*");
var res = (yield);
is(res.type, "load", "loaded successfully");
is(res.text, "This here is a document!", "loaded successfully");
is(res.imgWidth, 120, "correct width");
// Attempt to load a HTML document in an iframe in inner document, using file url
inner.contentWindow.postMessage(JSON.stringify({iframe:file.url}), "*");
var res = (yield);
is(res.type, "load", "loaded successfully");
is(res.text, "This here is a document!", "loaded successfully");
isnot(res.imgWidth, 120, "correct width");
// Attempt to load a HTML document in an iframe in inner cross-site document, using file url
inner.src = innerCrossSiteURI;
is((yield), "inner loaded", "correct gen.next()");
inner.contentWindow.postMessage(JSON.stringify({iframe:file.url}), "*");
var res = (yield);
is(res.type, "error", "load failed successfully");
// Attempt to load file url using XHR
file = getFile("file_bug543870_text.txt");
xhr = new XMLHttpRequest;
xhr.onload = function() { gen.send("XHR finished"); };
xhr.open("GET", file.url);
xhr.send();
is((yield), "XHR finished", "correct gen.next()");
xhr.responseText == "Yarr, here be plaintext file, ya landlubber\n";
// Attempt to load file url using XHR in inner document
inner.src = innerSameSiteURI;
is((yield), "inner loaded", "correct gen.next()");
inner.contentWindow.postMessage(JSON.stringify({xhr:file.url}), "*");
var res = (yield);
is(res.didThrow, undefined, "load successful");
is(res.text, "Yarr, here be plaintext file, ya landlubber\n", "load successful");
// Attempt to load file url using XHR
inner.src = innerCrossSiteURI;
is((yield), "inner loaded", "correct gen.next()");
inner.contentWindow.postMessage(JSON.stringify({xhr:file.url}), "*");
var res = (yield);
is(res.didThrow, true, "load failed successfully");
SimpleTest.finish();
yield;
}
var basePath = "";
function getFile(name) {
if (!basePath) {
let xhr = new XMLHttpRequest;
xhr.open("GET", "/dynamic/getMyDirectory.sjs", false);
xhr.send();
basePath = xhr.responseText;
}
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var fileList = document.getElementById('fileList');
fileList.value = basePath + name;
return fileList.files[0];
}
</script>
</pre>
</body>
</html>