worker_wrapper.js (2032B)
1 // Any copyright is dedicated to the Public Domain. 2 // http://creativecommons.org/publicdomain/zero/1.0/ 3 // 4 // Worker-side wrapper script for the worker_driver.js helper code. See 5 // the comments at the top of worker_driver.js for more information. 6 7 function ok(a, msg) { 8 dump("OK: " + !!a + " => " + a + ": " + msg + "\n"); 9 postMessage({ type: "status", status: !!a, msg: a + ": " + msg }); 10 } 11 12 function is(a, b, msg) { 13 dump("IS: " + (a === b) + " => " + a + " | " + b + ": " + msg + "\n"); 14 postMessage({ 15 type: "status", 16 status: a === b, 17 msg: a + " === " + b + ": " + msg, 18 }); 19 } 20 21 function workerTestArrayEquals(a, b) { 22 if (!Array.isArray(a) || !Array.isArray(b) || a.length != b.length) { 23 return false; 24 } 25 for (var i = 0, n = a.length; i < n; ++i) { 26 if (a[i] !== b[i]) { 27 return false; 28 } 29 } 30 return true; 31 } 32 33 function workerTestDone() { 34 postMessage({ type: "finish" }); 35 } 36 37 function workerTestGetPermissions(permissions, cb) { 38 addEventListener("message", function workerTestGetPermissionsCB(e) { 39 if ( 40 e.data.type != "returnPermissions" || 41 !workerTestArrayEquals(permissions, e.data.permissions) 42 ) { 43 return; 44 } 45 removeEventListener("message", workerTestGetPermissionsCB); 46 cb(e.data.result); 47 }); 48 postMessage({ 49 type: "getPermissions", 50 permissions, 51 }); 52 } 53 54 function workerTestGetHelperData(cb) { 55 addEventListener("message", function workerTestGetHelperDataCB(e) { 56 if (e.data.type !== "returnHelperData") { 57 return; 58 } 59 removeEventListener("message", workerTestGetHelperDataCB); 60 cb(e.data.result); 61 }); 62 postMessage({ 63 type: "getHelperData", 64 }); 65 } 66 67 addEventListener("message", function workerWrapperOnMessage(e) { 68 removeEventListener("message", workerWrapperOnMessage); 69 var data = e.data; 70 try { 71 importScripts(data.script); 72 } catch (ex) { 73 postMessage({ 74 type: "status", 75 status: false, 76 msg: "worker failed to import " + data.script + "; error: " + ex.message, 77 }); 78 } 79 });