| <!DOCTYPE html> |
| <html> |
| <body> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script> |
| description("Tests that recursive calls to MessagePort.postMessage() do not preempt timers."); |
| jsTestIsAsync = true; |
| |
| function simulateSetImmediate() |
| { |
| var channel = new MessageChannel(); |
| // Use a fifo linked list to call callbacks in the right order. |
| var head = {}; |
| var tail = head; |
| channel['port1'].onmessage = function() { |
| if (head.next != null) { |
| head = head.next; |
| var cb = head.cb; |
| head.cb = null; |
| cb(); |
| } |
| }; |
| return function(cb) { |
| tail.next = {cb: cb}; |
| tail = tail.next; |
| channel['port2'].postMessage(0); |
| }; |
| } |
| |
| window.setImmediate = simulateSetImmediate(); |
| |
| var shouldExit = false; |
| |
| function iterate() { |
| if (shouldExit) { |
| testPassed("Timer has fired."); |
| finishJSTest(); |
| return; |
| } |
| setImmediate(iterate); |
| } |
| |
| setImmediate(iterate); |
| setTimeout(function() { |
| shouldExit = true; |
| }, 10); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |