Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / filesystem / resources / file-writer-abort-depth.js
blob5752089f778dac7722a61bba082fdbf2db75bd1c
1 if (this.importScripts) {
2 importScripts('fs-worker-common.js');
3 importScripts('../../../resources/js-test.js');
4 importScripts('file-writer-utils.js');
7 description("Test that FileWriter defends against infinite recursion via abort.");
9 var sawWriteStart;
10 var sawAbort;
11 var sawWriteEnd;
12 var writer;
13 var blob = new Blob(["lorem ipsum"]);
14 var recursionDepth = 0;
15 var method;
16 var testsRun = 0;
18 function onWriteStart(e) {
19 testPassed("Calling abort");
20 ++recursionDepth;
21 writer.abort();
24 // We should always abort before completion.
25 function onWrite(e) {
26 testFailed("In onWrite.");
29 function onAbort(e) {
30 testPassed("Saw abort");
31 try {
32 method();
33 } catch (ex) {
34 assert(ex.name == 'SecurityError');
35 testPassed("Saw security error");
39 function onWriteEnd(e) {
40 --recursionDepth;
41 testPassed("Saw writeend.");
42 if (!recursionDepth) {
43 ++testsRun;
44 if (testsRun == 1) {
45 method = function() {
46 testPassed("Calling truncate.");
47 writer.truncate(7);
49 setTimeout(method, 0); // Invoke from the top level, so that we're not already in a handler.
50 } else {
51 cleanUp();
56 function runTest(unusedFileEntry, fileWriter) {
57 writer = fileWriter;
58 method = function () {
59 testPassed("Calling write.");
60 writer.write(blob);
62 fileWriter.onerror = onError;
63 fileWriter.onabort = onAbort;
64 fileWriter.onwritestart = onWriteStart;
65 fileWriter.onwrite = onWrite;
66 fileWriter.onwriteend = onWriteEnd;
67 method();
70 var jsTestIsAsync = true;
71 setupAndRunTest(2*1024*1024, 'file-writer-abort-depth', runTest);