blob: 8489bafcb82c7b227d535e9a4d386dc6b5d28cc3 [file] [log] [blame]
<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>