Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / workers / resources / sync-operations.js
1 function removeAllInDirectorySync(directory)
2 {
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();
13         }
14     } while (entries.length);
15 }
16
17 onmessage = function(evt)
18 {
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);
33
34                 removeAllInDirectorySync(fileSystem.root);
35
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});
41
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});
49
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++;
60                     }
61                 } while (entries.length);
62
63                 removeAllInDirectorySync(fileSystem.root);
64             }
65         }
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.
71     }
72 }
73
74 postMessage('started');