blob: 8f716f767494620747a74ac7899e5573ecb77f46 [file] [log] [blame]
(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();
})