<!-- Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ --> <html> <head> <title>Indexed Database Property Test</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> <script type="text/javascript;version=1.7"> /** * Create a composite/multi-file Blob on the worker, then post it as an XHR * payload and ensure that we don't hang/generate an assertion/etc. but * instead generate the expected 404. This test is basically the same as * test_blob_worker_xhr_post.html except for the composite Blob. */ function testSteps() { const BLOB_DATA = ["fun ", "times ", "all ", "around!"]; const BLOB_TYPE = "text/plain"; const BLOB_SIZE = BLOB_DATA.join("").length; info("Setting up"); let request = indexedDB.open(window.location.pathname, 1); request.onerror = errorHandler; request.onupgradeneeded = grabEventAndContinueHandler; request.onsuccess = unexpectedSuccessHandler; let event = yield undefined; let db = event.target.result; db.onerror = errorHandler; ok(db, "Created database"); info("Creating objectStore"); let objectStore = db.createObjectStore("foo", { autoIncrement: true }); request.onupgradeneeded = unexpectedSuccessHandler; request.onsuccess = grabEventAndContinueHandler; event = yield undefined; ok(true, "Opened database"); let blob = new Blob(BLOB_DATA, { type: BLOB_TYPE }); info("Adding blob to database"); objectStore = db.transaction("foo", "readwrite").objectStore("foo"); objectStore.add(blob).onsuccess = grabEventAndContinueHandler; event = yield undefined; let blobKey = event.target.result; ok(blobKey, "Got a key for the blob"); info("Getting blob from the database"); objectStore = db.transaction("foo").objectStore("foo"); objectStore.get(blobKey).onsuccess = grabEventAndContinueHandler; event = yield undefined; blob = event.target.result; ok(blob instanceof Blob, "Got a blob"); is(blob.size, BLOB_SIZE, "Correct size"); is(blob.type, BLOB_TYPE, "Correct type"); function workerScript() { onmessage = function(event) { var blob = event.data; var compositeBlob = new Blob(["preceding string. ", blob], { type: "text/plain" }); var xhr = new XMLHttpRequest(); // We just want to make sure the error case doesn't fire; it's fine for // us to just want a 404. xhr.open('POST', 'http://mochi.test:8888/does-not-exist', true); xhr.onload = function() { postMessage({ status: xhr.status }); }; xhr.onerror = function() { postMessage({ status: 'error' }); } xhr.send(compositeBlob); } } let workerScriptUrl = URL.createObjectURL(new Blob(["(", workerScript.toSource(), ")()"])); let xhrWorker = new Worker(workerScriptUrl); xhrWorker.postMessage(blob); xhrWorker.onmessage = grabEventAndContinueHandler; event = yield undefined; is(event.data.status, 404, "XHR generated the expected 404"); xhrWorker.terminate(); URL.revokeObjectURL(workerScriptUrl); finishTest(); yield undefined; } </script> <script type="text/javascript;version=1.7" src="helpers.js"></script> </head> <body onload="runTest();"></body> </html>