michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: */ michael@0: michael@0: importScripts("onLine_worker_head.js"); michael@0: michael@0: var N_CHILDREN = 3; michael@0: var children = []; michael@0: var finishedChildrenCount = 0; michael@0: var lastTest = false; michael@0: michael@0: for (var event of ["online", "offline"]) { michael@0: addEventListener(event, michael@0: makeHandler( michael@0: "addEventListener('%1', ..., false)", michael@0: event, 1, "Parent Worker"), michael@0: false); michael@0: } michael@0: michael@0: onmessage = function(e) { michael@0: if (e.data === 'lastTest') { michael@0: children.forEach(function(w) { michael@0: w.postMessage({ type: 'lastTest' }); michael@0: }); michael@0: lastTest = true; michael@0: } michael@0: } michael@0: michael@0: function setupChildren(cb) { michael@0: var readyCount = 0; michael@0: for (var i = 0; i < N_CHILDREN; ++i) { michael@0: var w = new Worker("onLine_worker_child.js"); michael@0: children.push(w); michael@0: michael@0: w.onerror = function(e) { michael@0: info("Error creating child " + e.message); michael@0: } michael@0: michael@0: w.onmessage = function(e) { michael@0: if (e.data.type === 'ready') { michael@0: info("Got ready from child"); michael@0: readyCount++; michael@0: if (readyCount === N_CHILDREN) { michael@0: cb(); michael@0: } michael@0: } else if (e.data.type === 'finished') { michael@0: finishedChildrenCount++; michael@0: michael@0: if (lastTest && finishedChildrenCount === N_CHILDREN) { michael@0: postMessage({ type: 'finished' }); michael@0: children = []; michael@0: close(); michael@0: } michael@0: } else if (e.data.type === 'ok') { michael@0: // Pass on test to page. michael@0: postMessage(e.data); michael@0: } michael@0: } michael@0: } michael@0: } michael@0: michael@0: setupChildren(function() { michael@0: postMessage({ type: 'ready' }); michael@0: });