michael@0: /** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: var gTimeoutId; michael@0: var gTimeoutCount = 0; michael@0: var gIntervalCount = 0; michael@0: michael@0: function timeoutFunc() { michael@0: if (++gTimeoutCount > 1) { michael@0: throw new Error("Timeout called more than once!"); michael@0: } michael@0: postMessage("timeoutFinished"); michael@0: } michael@0: michael@0: function intervalFunc() { michael@0: if (++gIntervalCount == 2) { michael@0: postMessage("intervalFinished"); michael@0: } michael@0: } michael@0: michael@0: function messageListener(event) { michael@0: switch (event.data) { michael@0: case "startTimeout": michael@0: gTimeoutId = setTimeout(timeoutFunc, 2000); michael@0: clearTimeout(gTimeoutId); michael@0: gTimeoutId = setTimeout(timeoutFunc, 2000); michael@0: break; michael@0: case "startInterval": michael@0: gTimeoutId = setInterval(intervalFunc, 2000); michael@0: break; michael@0: case "cancelInterval": michael@0: clearInterval(gTimeoutId); michael@0: postMessage("intervalCanceled"); michael@0: break; michael@0: case "startExpression": michael@0: setTimeout("this.postMessage('expressionFinished');", 2000); michael@0: break; michael@0: default: michael@0: throw "Bad message: " + event.data; michael@0: } michael@0: } michael@0: michael@0: addEventListener("message", messageListener, false);