| <html> | |
| <head> | |
| <script src='resources/worker-util.js'></script> | |
| <script> | |
| var workersStarted; | |
| var workersClosed; | |
| var testNumber = -1; | |
| var syncOperationTests = new Array('openDatabaseSync', 'requestFileSystemSync', 'fileSyncOperations'); | |
| // 30 workers seemed to cause the crash to happen frequently. | |
| var workers = new Array(30); | |
| function startNextTest() | |
| { | |
| testNumber++; | |
| log('Waiting for all workers to exit.'); | |
| if (testNumber >= syncOperationTests.length) { | |
| waitUntilWorkerThreadsExit(done) | |
| return; | |
| } | |
| waitUntilWorkerThreadsExit(startWorkers) | |
| } | |
| function startWorkers() | |
| { | |
| log('Testing interrupting: ' + syncOperationTests[testNumber]); | |
| log('Starting workers.'); | |
| workersStarted = 0; | |
| workersClosed = 0; | |
| for (var i = 0; i < workers.length; ++i) { | |
| workers[i] = new Worker('resources/sync-operations.js?arg=' + i) | |
| workers[i].onmessage = onWorkerStarted; | |
| } | |
| } | |
| // Do our best to try to interrupt the database open | |
| // call by waiting for the worker to start and then | |
| // telling it to do the open database call (and | |
| // then terminate the worker). | |
| function onWorkerStarted() | |
| { | |
| workersStarted++; | |
| log('Started worker count: ' + workersStarted); | |
| if (workersStarted < workers.length) | |
| return; | |
| log('Running operation.'); | |
| for (var i = 0; i < workers.length; ++i) | |
| workers[i].postMessage(syncOperationTests[testNumber]); | |
| setTimeout('closeWorker()', 0); | |
| } | |
| function closeWorker() | |
| { | |
| workers[workersClosed].terminate(); | |
| workersClosed++; | |
| log('Closed worker count: ' + workersClosed); | |
| if (workersClosed < workers.length) | |
| setTimeout('closeWorker()', 3); | |
| else | |
| startNextTest(); | |
| } | |
| function runTest() | |
| { | |
| log('Starting test run.'); | |
| if (window.testRunner) { | |
| testRunner.dumpAsText(); | |
| testRunner.waitUntilDone(); | |
| } | |
| startNextTest(); | |
| } | |
| </script> | |
| </head> | |
| <body onload='runTest()'> | |
| <p>Test that terminating the worker while it is performing synchronous file or database operations will not cause any crashes, asserts, etc.</p> | |
| <div id='result'> | |
| </div> | |
| </body> | |
| </html> |