gecko-dev/dom/file/tests/test_mozfiledataurl.html
Andrea Marchesini 0606c6006d Bug 1321261 - create dom/file for File APIs, r=qdot
--HG--
rename : dom/base/BlobSet.cpp => dom/file/BlobSet.cpp
rename : dom/base/BlobSet.h => dom/file/BlobSet.h
rename : dom/base/File.cpp => dom/file/File.cpp
rename : dom/base/File.h => dom/file/File.h
rename : dom/base/FileList.cpp => dom/file/FileList.cpp
rename : dom/base/FileList.h => dom/file/FileList.h
rename : dom/base/FileReader.cpp => dom/file/FileReader.cpp
rename : dom/base/FileReader.h => dom/file/FileReader.h
rename : dom/base/MultipartBlobImpl.cpp => dom/file/MultipartBlobImpl.cpp
rename : dom/base/MultipartBlobImpl.h => dom/file/MultipartBlobImpl.h
rename : dom/base/MutableBlobStorage.cpp => dom/file/MutableBlobStorage.cpp
rename : dom/base/MutableBlobStorage.h => dom/file/MutableBlobStorage.h
rename : dom/base/MutableBlobStreamListener.cpp => dom/file/MutableBlobStreamListener.cpp
rename : dom/base/MutableBlobStreamListener.h => dom/file/MutableBlobStreamListener.h
rename : dom/ipc/Blob.cpp => dom/file/ipc/Blob.cpp
rename : dom/ipc/BlobChild.h => dom/file/ipc/BlobChild.h
rename : dom/ipc/BlobParent.h => dom/file/ipc/BlobParent.h
rename : dom/ipc/BlobTypes.ipdlh => dom/file/ipc/BlobTypes.ipdlh
rename : dom/ipc/PBlob.ipdl => dom/file/ipc/PBlob.ipdl
rename : dom/ipc/PBlobStream.ipdl => dom/file/ipc/PBlobStream.ipdl
rename : dom/ipc/nsIRemoteBlob.h => dom/file/ipc/nsIRemoteBlob.h
rename : dom/base/nsHostObjectProtocolHandler.cpp => dom/file/nsHostObjectProtocolHandler.cpp
rename : dom/base/nsHostObjectProtocolHandler.h => dom/file/nsHostObjectProtocolHandler.h
rename : dom/base/nsHostObjectURI.cpp => dom/file/nsHostObjectURI.cpp
rename : dom/base/nsHostObjectURI.h => dom/file/nsHostObjectURI.h
rename : dom/base/nsIDOMBlob.idl => dom/file/nsIDOMBlob.idl
rename : dom/base/nsIDOMFileList.idl => dom/file/nsIDOMFileList.idl
rename : dom/base/test/file_blobURL_expiring.html => dom/file/tests/file_blobURL_expiring.html
rename : dom/base/test/file_nonascii_blob_url.html => dom/file/tests/file_nonascii_blob_url.html
rename : dom/base/test/fileutils.js => dom/file/tests/fileutils.js
rename : dom/base/test/test_blobURL_expiring.html => dom/file/tests/test_blobURL_expiring.html
rename : dom/base/test/test_blob_fragment_and_query.html => dom/file/tests/test_blob_fragment_and_query.html
rename : dom/base/test/test_blobconstructor.html => dom/file/tests/test_blobconstructor.html
rename : dom/base/test/test_file_from_blob.html => dom/file/tests/test_file_from_blob.html
rename : dom/base/test/test_file_negative_date.html => dom/file/tests/test_file_negative_date.html
rename : dom/base/test/test_fileapi.html => dom/file/tests/test_fileapi.html
rename : dom/base/test/test_fileapi_slice.html => dom/file/tests/test_fileapi_slice.html
rename : dom/base/test/test_ipc_messagemanager_blob.html => dom/file/tests/test_ipc_messagemanager_blob.html
rename : dom/base/test/test_mozfiledataurl.html => dom/file/tests/test_mozfiledataurl.html
rename : dom/base/test/test_nonascii_blob_url.html => dom/file/tests/test_nonascii_blob_url.html
2016-12-01 09:21:54 +01:00

226 lines
8.1 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<title>Test for File urls</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body onload="start()">
<p id="display">
<iframe id=inner></iframe>
<iframe id=iframe></iframe>
<img id=img onload="gen.send(event);">
<audio id=audio onloadeddata="gen.send(event);">
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="application/javascript;version=1.8">
try {
URL.createObjectURL(undefined);
} catch(e) { }
window.addEventListener("message", function(e) {
gen.send(JSON.parse(e.data));
}, false);
const innerSameSiteURI = "file_mozfiledataurl_inner.html";
const innerCrossSiteURI = "http://example.com/tests/dom/base/test/file_mozfiledataurl_inner.html"
var fileNames = ["file_mozfiledataurl_img.jpg",
"file_mozfiledataurl_audio.ogg",
"file_mozfiledataurl_doc.html",
"file_mozfiledataurl_text.txt"];
function start() {
let xhr = new XMLHttpRequest;
xhr.open("GET", "/dynamic/getMyDirectory.sjs", false);
xhr.send();
let basePath = xhr.responseText;
let fullFileNames = [];
for (let name of fileNames) {
fullFileNames.push(basePath + name);
}
var script = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL("create_file_objects.js"));
script.addMessageListener("created-file-objects", function handler(files) {
script.removeMessageListener("created-file-objects", handler);
gen = runTest(files);
gen.next();
});
script.sendAsyncMessage("create-file-objects", {fileNames: fullFileNames});
};
SimpleTest.waitForExplicitFinish();
function runTest([imgFile, audioFile, docFile, xhrFile]) {
inner = document.getElementById('inner');
img = document.getElementById('img');
audio = document.getElementById('audio');
iframe = document.getElementById('iframe');
inner.onload = function() { gen.send("inner loaded"); };
// Attempt to load a image in this document
var fileurl = URL.createObjectURL(imgFile);
img.src = fileurl;
var e = (yield);
is(e.type, "load", "loaded successfully");
is(img.width, 120, "correct width");
is(img.height, 90, "correct height");
// Revoke url and attempt to load a image in this document
img.src = "file_mozfiledataurl_img.jpg";
is((yield).type, "load", "successfull reset image");
URL.revokeObjectURL(fileurl);
todo(false, "urls need to act like 404s, not fail to parse");
/* img.src = fileurl;
var e = (yield);
is(e.type, "error", "failed successfully");
isnot(img.width, 120, "correct error width");
isnot(img.height, 90, "correct error height");
*/
// Generate new fileurl and make sure it's different from the old
var oldFileurl = fileurl;
fileurl = URL.createObjectURL(imgFile);
isnot(fileurl, oldFileurl, "URL.createObjectURL generated the same url twice");
// Attempt to load an image in a different same-origin document
inner.src = innerSameSiteURI;
yield undefined;
inner.contentWindow.postMessage(JSON.stringify({img:fileurl}), "*");
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 undefined;
inner.contentWindow.postMessage(JSON.stringify({img:fileurl}), "*");
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 an audio in this document
fileurl = URL.createObjectURL(audioFile);
audio.src = fileurl;
var e = (yield);
is(e.type, "loadeddata", "loaded successfully");
// Revoke url and attempt to load a audio in this document
audio.src = "file_mozfiledataurl_audio.ogg";
is((yield).type, "loadeddata", "successfully reset audio");
URL.revokeObjectURL(fileurl);
todo(false, "urls need to act like 404s, not fail to parse");
/* img.src = fileurl;
var e = (yield);
is(e.type, "error", "failed successfully");
isnot(img.width, 120, "correct error width");
isnot(img.height, 90, "correct error height");
*/
// Generate new fileurl and make sure it's different from the old
var oldFileurl = fileurl;
fileurl = URL.createObjectURL(audioFile);
isnot(fileurl, oldFileurl, "URL.createObjectURL generated the same url twice");
// Attempt to load an audio in a different same-origin document
inner.src = innerSameSiteURI;
yield undefined;
inner.contentWindow.postMessage(JSON.stringify({audio:fileurl}), "*");
var res = (yield);
is(res.type, "loadeddata", "loaded successfully");
// Attempt to load an audio in a different cross-origin document
inner.src = innerCrossSiteURI;
yield undefined;
inner.contentWindow.postMessage(JSON.stringify({audio:fileurl}), "*");
var res = (yield);
is(res.type, "error", "failed successfully");
// Attempt to load a HTML document in an iframe in this document
iframe.onload = function() { gen.next(); };
iframe.src = "file_mozfiledataurl_doc.html";
yield undefined;
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
fileurl = URL.createObjectURL(docFile);
iframe.src = fileurl;
yield undefined;
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_mozfiledataurl_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:fileurl}), "*");
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:fileurl}), "*");
var res = (yield);
is(res.type, "error", "load failed successfully");
// Attempt to load file url using XHR
fileurl = URL.createObjectURL(xhrFile);
xhr = new XMLHttpRequest;
xhr.onload = function() { gen.send("XHR finished"); };
xhr.open("GET", fileurl);
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:fileurl}), "*");
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:fileurl}), "*");
var res = (yield);
is(res.didError, true, "load failed successfully");
SimpleTest.finish();
yield undefined;
}
</script>
</pre>
</body>
</html>