| <!DOCTYPE html> |
| <title>Test WorkerGlobalScope.close functionality.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| setup({ allow_uncaught_exception: true }); |
| |
| async_test(function(t) { |
| var worker = new Worker('support/WorkerGlobalScope-close.js'); |
| worker.postMessage("typeofClose"); |
| worker.onmessage = t.step_func_done(function(evt) { |
| assert_equals(evt.data, "typeof close: function"); |
| }); |
| }, 'Test type of close function.'); |
| |
| async_test(function(t) { |
| var worker = new Worker('support/WorkerGlobalScope-close.js'); |
| worker.postMessage("ping"); |
| worker.onmessage = t.step_func(function(evt) { |
| assert_equals(evt.data, "pong"); |
| // Tell the worker to close, then send a followup message. This message |
| // should not be delivered, since that would require JS to invoke the |
| // onmessage handler, which does not happen after the JS fragment with |
| // 'close()' in it exits. So, the 'ping' should not come back as 'pong'. |
| worker.postMessage("close"); |
| worker.postMessage("ping"); |
| worker.onmessage = t.step_func(function(evt) { |
| assert_not_equals(evt.data, "pong"); |
| t.step_timeout(function() { t.done(); }, 500); |
| }); |
| }); |
| }, 'Test sending a message after closing.'); |
| |
| async_test(function(t) { |
| var worker = new Worker('support/WorkerGlobalScope-close.js'); |
| worker.postMessage("closeWithError"); |
| worker.onerror = function(event) { |
| t.done() |
| }; |
| }, 'Test errors are delivered after close.'); |
| |
| async_test(function(t) { |
| var worker = new Worker('support/WorkerGlobalScope-close.js'); |
| worker.postMessage("closeWithPendingEvents"); |
| worker.onmessage = t.step_func(function(evt) { |
| assert_unreached("Pending events should not fire: " + evt.data); |
| }); |
| worker.onerror = t.step_func(function(evt) { |
| assert_unreached("Pending events should not fire:" + evt.message); |
| }); |
| t.step_timeout(function() { t.done(); }, 500); |
| }, 'Test workers do not deliver pending events.'); |
| |
| async_test(function(t) { |
| var worker = new Worker('support/WorkerGlobalScope-close.js'); |
| worker.postMessage("close"); |
| worker.onmessage = function(evt) { |
| assert_equals(evt.data, "Should be delivered"); |
| // Give worker a chance to close first, then terminate it. |
| t.step_timeout(function() { |
| worker.terminate(); |
| t.done(); |
| }, 500); |
| }; |
| }, 'Test terminating a worker after close.'); |
| </script> |