Index: third_party/WebKit/LayoutTests/inspector-protocol/worker/exception-from-worker-contains-stack.js |
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/worker/exception-from-worker-contains-stack.js b/third_party/WebKit/LayoutTests/inspector-protocol/worker/exception-from-worker-contains-stack.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..37b6fa13618bb93cfff8f77fa558a42acb31eee8 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/worker/exception-from-worker-contains-stack.js |
@@ -0,0 +1,51 @@ |
+(async function(testRunner) { |
+ let {page, session, dp} = await testRunner.startBlank('Tests that console message from worker contains stack trace.'); |
+ |
+ var workerRequestId = 1; |
+ function sendCommandToWorker(method, params, workerId) { |
+ dp.Target.sendMessageToTarget({ |
+ targetId: workerId, |
+ message: JSON.stringify({ method: method, params: params, id: workerRequestId++ }) |
+ }); |
+ } |
+ |
+ var waitForWorkers = 2; |
+ dp.Target.onAttachedToTarget(messageObject => { |
+ var workerId = messageObject['params']['targetInfo']['targetId']; |
+ testRunner.log('Worker created'); |
+ sendCommandToWorker('Runtime.enable', {}, workerId); |
+ if (!--waitForWorkers) |
+ session.evaluate('worker1.postMessage(239);worker2.postMessage(42);'); |
+ }); |
+ |
+ var workerTerminated = false; |
+ var messageReceived = false; |
+ dp.Target.onReceivedMessageFromTarget(messageObject => { |
+ var message = JSON.parse(messageObject['params']['message']); |
+ if (message['method'] === 'Runtime.exceptionThrown') { |
+ var callFrames = message.params.exceptionDetails.stackTrace ? message.params.exceptionDetails.stackTrace.callFrames : []; |
+ testRunner.log(callFrames.length > 0 ? 'Message with stack trace received.' : '[FAIL] Message contains empty stack trace'); |
+ messageReceived = true; |
+ if (messageReceived && workerTerminated) |
+ testRunner.completeTest(); |
+ } |
+ }); |
+ |
+ function onDetached(messageObject) { |
+ dp.Target.offDetachedFromTarget(onDetached); |
+ workerTerminated = true; |
+ if (messageReceived && workerTerminated) |
+ testRunner.completeTest(); |
+ } |
+ dp.Target.onDetachedFromTarget(onDetached); |
+ |
+ await dp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false}); |
+ session.evaluate(` |
+ window.worker1 = new Worker('${testRunner.url('../resources/worker-with-throw.js')}'); |
+ window.worker1.onerror = function(e) { |
+ e.preventDefault(); |
+ worker1.terminate(); |
+ } |
+ window.worker2 = new Worker('${testRunner.url('../resources/worker-with-throw.js')}'); |
+ `); |
+}) |