| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| let testWorker = null; |
| |
| function createWorker() { |
| testWorker = new Worker("resources/worker-echo.js"); |
| testWorker.addEventListener("message", (event) => { |
| let {echo, data} = event.data; |
| console.assert(echo, data); |
| TestPage.dispatchEventToFrontend(data); |
| }); |
| testWorker.postMessage("WorkerCreated"); |
| } |
| |
| function terminateWorker() { |
| testWorker.postMessage("WorkerTerminated"); |
| testWorker.terminate(); |
| testWorker = null; |
| } |
| |
| function test() |
| { |
| InspectorTest.addEventListener("WorkerTerminated", (event) => { |
| InspectorTest.fail("Should not dispatch any events after a Worker is terminated."); |
| }); |
| |
| Promise.resolve() |
| .then(() => { |
| InspectorTest.log("Creating worker..."); |
| return Promise.all([ |
| InspectorTest.awaitEvent("WorkerCreated"), |
| InspectorTest.evaluateInPage(`createWorker()`), |
| ]); |
| }) |
| .then(() => { |
| InspectorTest.log("Terminating worker..."); |
| return InspectorTest.evaluateInPage(`terminateWorker()`); |
| }) |
| .then(() => { |
| InspectorTest.log("Creating worker..."); |
| return Promise.all([ |
| InspectorTest.awaitEvent("WorkerCreated"), |
| InspectorTest.evaluateInPage(`createWorker()`), |
| ]); |
| }) |
| .then(() => { |
| InspectorTest.log("Terminating worker..."); |
| return InspectorTest.evaluateInPage(`terminateWorker()`); |
| }) |
| .then(() => { |
| InspectorTest.pass("Should not crash."); |
| }) |
| .finally(() => { |
| InspectorTest.completeTest(); |
| }); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Test to ensure that any queued messages are not dispatched after terminate is called, which would cause a crash due to the InjectedScript throwing a TerminatedExecutionError when it's evaluated.</p> |
| </body> |
| </html> |