Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: LayoutTests/fast/files/blob-close-revoke.html

Issue 157363003: Implement Blob.close(). (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/files/blob-close-revoke.html
diff --git a/LayoutTests/fast/files/blob-close-revoke.html b/LayoutTests/fast/files/blob-close-revoke.html
new file mode 100644
index 0000000000000000000000000000000000000000..f1073f41cba2c3cf1f1087f09db2f43331707ed2
--- /dev/null
+++ b/LayoutTests/fast/files/blob-close-revoke.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/read-common.js"></script>
+<script>
+description("Test the Blob.close() method, revoking.");
+
+window.jsTestIsAsync = true;
+
+function base64ToUint8Array(a)
+{
+ var binary = window.atob(a);
+ var buffer = new Uint8Array(binary.length);
+ for (var i = 0; i < binary.length; i++)
+ buffer[i] = binary.charCodeAt(i);
+
+ return buffer;
+}
+
+var pngBase64 = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR42u3QMQEAAAgDoGlyo1vBzwciUJlw1ApkyZIlS5YsBbJkyZIlS5YCWbJkyZIlS4EsWbJkyZKlQJYsWbJkyVIgS5YsWbJkKZAlS5YsWbIUyJIlS5YsWQpkyZIlS5YsBbJkyZIlS5YCWbJkyZIlS4EsWbJkyZKlQJYsWbJkyVIgS5YsWbJkKZAlS5YsWbIUyJIlS5YsWQpkyfq2MosBSIeKONMAAAAASUVORK5CYII=";
+
+var blobContents = [base64ToUint8Array(pngBase64)];
+
+var blob;
+var blobURL1;
+var blobURL2;
+var img;
+var worker;
+var blobURLs = [];
+
+function testRevokeAfterCloseWorkers()
+{
+ debug("Test that dereferencing URLs referring to closed Blobs fail, workers.");
+ blob = new Blob(["postMessage('FAIL');"], {type: "application/javascript"});
+ for (var i = 0; i < 10; i++)
+ blobURLs.push(window.URL.createObjectURL(blob));
+
+ // First check that the Blob URL can be used by a Worker,
+ // then close it and verify that the rest cannot.
+
+ function onNonClosedError() {
+ testFailed("Worker failed to load from Blob.");
+ blob.close();
+ testNextWorker();
+ }
+ function onNonClosedMessage() {
+ testPassed("Worker loaded.");
+ blob.close();
+ testNextWorker();
+ }
+ function onClosedError() {
+ testPassed("Error triggered on starting Worker from a closed Blob.");
+ testNextWorker();
+ }
+ function onClosedMessage() {
+ testFailed("Worker loaded.");
+ testNextWorker();
+ }
+
+ function testNextWorker(onerror, onmessage) {
+ var u = blobURLs.shift();
+ if (u) {
+ worker = new Worker(u);
+ worker.onerror = onerror ? onerror : onClosedError;
+ worker.onmessage = onmessage ? onmessage : onClosedMessage;
+ } else {
+ runNextTest();
+ }
+ }
+ testNextWorker(onNonClosedError, onNonClosedMessage);
+}
+
+function testRevokeAfterClose()
+{
+ debug("Test that dereferencing URLs referring to closed Blobs fail.");
+ blob = new Blob(blobContents, {type: "image/png"});
+ img = document.createElement("img");
+ img.onerror = function (e) {
+ testPassed("Error triggered on loading image from closed Blob.");
+ runNextTest();
+ };
+ img.onload = function () {
+ testFailed("Image loaded");
+ runNextTest();
+ };
+ blobURL1 = window.URL.createObjectURL(blob);
+ // create some more Blob URLs.
+ for (var i = 0; i < 10; i++)
+ window.URL.createObjectURL(blob);
+ // Make them all inaccessible.
+ blob.close();
+ img.src = blobURL1;
+}
+
+function testRegisterAfterClose()
+{
+ debug("Test creating object URLs on closed Blobs");
+ blob = new Blob(["body{background: green}"], {type: "text/css"});
+ blobURL1 = window.URL.createObjectURL(blob);
+ blob.close();
+ // Verifies createObjectURL() still works and returns a valid (non-empty) URL
+ // without throwing an error. See http://crbug.com/344820 for this requirement.
+ blobURL2 = window.URL.createObjectURL(blob);
+ shouldBeTrue("blobURL1 !== blobURL2");
+ shouldBeTrue("blobURL2.length > 0");
+ runNextTest();
+}
+
+var tests = [
+ testRevokeAfterClose,
+ testRevokeAfterCloseWorkers,
+ testRegisterAfterClose ];
+
+function runNextTest()
+{
+ if (!tests.length) {
+ finishJSTest();
+ return;
+ }
+ tests.shift()();
+}
+</script>
+<body onload="runNextTest()">
+</body>
« no previous file with comments | « LayoutTests/fast/files/blob-close-read-expected.txt ('k') | LayoutTests/fast/files/blob-close-revoke-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698