async_test(t => { function workerCode() { onmessage = function(e) { close(); var mc = new MessageChannel(); mc.port1.onmessage = function() { postMessage("message received!"); } mc.port2.postMessage(42); postMessage("done"); } } var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"}); var w = new Worker(URL.createObjectURL(workerBlob)); w.postMessage(''); w.onmessage = function(e) { if (e.data == "done") { setTimeout(function() { t.done(); }, 250); } else { assert_true(false, "A wrong message has been received!"); } } }, 'MessageChannel/MessagePort should not work after a worker self.close()');