if (this.importScripts) { importScripts('fs-worker-common.js'); importScripts('../../../resources/js-test.js'); importScripts('file-writer-utils.js'); } description("Test that FileWriter handles abort properly."); var sawWriteStart; var sawAbort; var sawWriteEnd; var writer; function tenXBlob(blob) { var bb = []; for (var i = 0; i < 10; ++i) { bb.push(blob); } return new Blob(bb); } function onWriteStart(e) { assert(writer); assert(writer.readyState == writer.WRITING); assert(e.type == "writestart"); assert(!sawWriteStart); assert(!sawWriteEnd); assert(!e.loaded); sawWriteStart = true; testPassed("Calling abort"); writer.abort(); } // We should always abort before completion. function onWrite(e) { testFailed("In onWrite."); } function onAbort(e) { assert(writer.readyState == writer.DONE); assert(writer.error.name == "AbortError"); assert(sawWriteStart); assert(!sawWriteEnd); assert(!sawAbort); assert(e.type == "abort"); sawAbort = true; testPassed("Saw abort"); } function onWriteEnd(e) { assert(writer.readyState == writer.DONE); assert(writer.error.name == "AbortError"); assert(sawWriteStart); assert(sawAbort); assert(!sawWriteEnd); assert(e.type == "writeend"); sawWriteEnd = true; testPassed("Saw writeend."); writer.abort(); // Verify that this does nothing in readyState DONE. cleanUp(); } function startWrite(fileWriter) { // Let's make it about a megabyte. var blob = tenXBlob(new Blob(["lorem ipsum"])); blob = tenXBlob(blob); blob = tenXBlob(blob); blob = tenXBlob(blob); blob = tenXBlob(blob); writer = fileWriter; fileWriter.onerror = onError; fileWriter.onabort = onAbort; fileWriter.onwritestart = onWriteStart; fileWriter.onwrite = onWrite; fileWriter.onwriteend = onWriteEnd; fileWriter.abort(); // Verify that this does nothing in readyState INIT. fileWriter.write(blob); } function runTest(unusedFileEntry, fileWriter) { startWrite(fileWriter); } var jsTestIsAsync = true; setupAndRunTest(2*1024*1024, 'file-writer-abort', runTest);