| (async function(testRunner) { |
| const {page, session, dp} = await testRunner.startBlank( |
| 'Tests sourceURL in setTimeout from worker.'); |
| |
| await dp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false, |
| flatten: true}); |
| |
| const attachedPromise = dp.Target.onceAttachedToTarget(); |
| await session.evaluate(` |
| window.worker = new Worker('${testRunner.url('resources/dedicated-worker-string-setTimeout.js')}'); |
| window.worker.onmessage = function(event) { }; |
| window.worker.postMessage(1); |
| `); |
| testRunner.log('Started worker'); |
| |
| const messageObject = await attachedPromise; |
| const childSession = session.createChild(messageObject.params.sessionId); |
| |
| testRunner.log('Worker created'); |
| testRunner.log('didConnectToWorker'); |
| |
| await childSession.protocol.Debugger.enable(); |
| testRunner.log('Did enable debugger'); |
| |
| // posting a message to the worker triggers the onmessage function in |
| // dedicated-worker-string-setTimeout.js, which calls setTimeout("foo()", 0); |
| // - and as a side-effect of that, "foo()" is getting parsed as it has to be |
| // evaluated. |
| // Whereas parsing the worker script itself would result in a Debugger.scriptParsed |
| // message that reports a result url, parsing this string results in a message |
| // that has the url field set to the empty string. |
| // We use this fact below to verify that indeed, we did evaluate setTimeout |
| // in the worker. |
| |
| session.evaluate('worker.postMessage(1)'); |
| testRunner.log('Did post message to worker'); |
| |
| const sourceUrl = |
| (await childSession.protocol.Debugger.onceScriptParsed()).params.url; |
| if (sourceUrl === '') { |
| testRunner.log('SUCCESS: script created from string parameter of ' + |
| 'setTimeout has no url'); |
| } else { |
| testRunner.log('FAIL: script created from string parameter of ' + |
| 'setTimeout has url ' + sourceUrl); |
| } |
| testRunner.completeTest(); |
| }) |