Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / http / tests / workers / resources / sync-operations.js
blob242a031153f6c6032e93d01f4ee2f6ef146278f1
1 function removeAllInDirectorySync(directory)
3 if (!directory)
4 return;
5 var reader = directory.createReader();
6 do {
7 var entries = reader.readEntries();
8 for (var i = 0; i < entries.length; ++i) {
9 if (entries[i].isDirectory)
10 entries[i].removeRecursively();
11 else
12 entries[i].remove();
14 } while (entries.length);
17 onmessage = function(evt)
19 try {
20 // Increase the change of getting caught doing a sync operation
21 // by repeating the opration multiple times.
22 for (var i = 0; i < 10; ++i) {
23 if (evt.data == 'requestFileSystemSync') {
24 if (!this.webkitRequestFileSystemSync)
25 return;
26 webkitRequestFileSystemSync(this.TEMPORARY, 100);
27 } else if (evt.data == 'fileSyncOperations') {
28 if (!this.webkitRequestFileSystemSync)
29 return;
30 // Do many different sync filesystem operations. If this starts crashing,
31 // then a simple investigation would be to isolate these commands.
32 var fileSystem = webkitRequestFileSystemSync(this.TEMPORARY, 100);
34 removeAllInDirectorySync(fileSystem.root);
36 // Stage 1 (prepare)
37 var a = fileSystem.root.getFile('a', {create:true});
38 var b = fileSystem.root.getDirectory('b', {create:true});
39 var c = fileSystem.root.getDirectory('c', {create:true});
40 var d = fileSystem.root.getFile('d', {create:true});
42 // Stage 2 (test)
43 var a_copy = a.copyTo(b, 'tmp');
44 var metadata = a.getMetadata();
45 var b_parent = b.getParent();
46 var c_copy = c.copyTo(fileSystem.root, 'f');
47 var d_new = d.moveTo(fileSystem.root, 'd2');
48 var e = fileSystem.root.getFile('e', {create:true});
50 // Verify
51 var reader = fileSystem.root.createReader();
52 var dirsCount = 0;
53 var paths = [];
54 do {
55 var entries = reader.readEntries();
56 for (var i = 0; i < entries.length; ++i) {
57 paths.push(entries[i].fullPath);
58 if (entries[i].isDirectory)
59 dirsCount++;
61 } while (entries.length);
63 removeAllInDirectorySync(fileSystem.root);
66 } catch (e) {
67 // Purposely ignore any exceptions. Since the whole purpose of this test is to try
68 // to interrupt the synchronous operations, they will naturally throw exceptions,
69 // but which ones throw exception isn't determinant and we don't want random output
70 // showing up as a console message.
74 postMessage('started');