blob: 3f95f0b647566f39ce7ef2a0b07bbeff232ed0c0 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/worker-utilities.js"></script>
<script>
let worker = new Worker("resources/worker-scripts.js");
function test()
{
let mainTarget = WI.mainTarget;
let workerTarget = Array.from(WI.targets).find((target) => target.type === WI.TargetType.Worker);
let mainDebuggerData = WI.debuggerManager.dataForTarget(mainTarget);
let workerDebuggerData = WI.debuggerManager.dataForTarget(workerTarget);
if (!workerTarget) {
InspectorTest.fail("Missing Worker Target");
InspectorTest.completeTest();
return;
}
let suite = InspectorTest.createAsyncSuite("Worker.Debugger.Script");
suite.addTestCase({
name: "Worker.Debugger.Script.MainResource",
description: "Worker main resource should be a script tied to the Worker.",
test(resolve, reject) {
let script = workerTarget.mainResource;
InspectorTest.expectThat(script instanceof WI.Script, "Worker target's main resource should be a Script.");
InspectorTest.expectEqual(script.target, workerTarget, "Worker target's main resource should be owned by a Worker target.");
InspectorTest.expectThat(workerDebuggerData.scripts.includes(script), "Worker DebuggerData should include script.");
InspectorTest.expectThat(workerDebuggerData.scriptForIdentifier(script.id), "Worker DebuggerData should include script by identifier.");
InspectorTest.expectEqual(workerDebuggerData.scriptsForURL(script.url).length, 1, "Worker DebuggerData should include script by URL.");
InspectorTest.expectThat(!mainDebuggerData.scripts.includes(script), "Main DebuggerData should not include the script.");
script.requestContent()
.then(({content}) => {
InspectorTest.expectGreaterThan(content.length, 100, "Worker target's main resource should have content.");
resolve();
}).catch(reject);
}
});
suite.addTestCase({
name: "Worker.Debugger.Script.ImportedScript",
description: "Worker should be told of all scripts, like imported scripts.",
test(resolve, reject) {
InspectorTest.evaluateInPage(`worker.postMessage("triggerImportScripts")`);
let listener = WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, (event) => {
let script = event.data.script;
if (!/worker-import-1\.js$/.test(script.url))
return;
InspectorTest.pass(`ScriptAdded - ${sanitizeURL(script.url)}`);
InspectorTest.expectEqual(script.target, workerTarget, "Script should be owned by a Worker target.");
InspectorTest.expectThat(workerDebuggerData.scripts.includes(script), "Worker DebuggerData should include script.");
InspectorTest.expectThat(workerDebuggerData.scriptForIdentifier(script.id), "Worker DebuggerData should include script by identifier.");
InspectorTest.expectEqual(workerDebuggerData.scriptsForURL(script.url).length, 1, "Worker DebuggerData should include script by URL.");
InspectorTest.expectThat(!mainDebuggerData.scripts.includes(script), "Main DebuggerData should not include the script.");
script.requestContent()
.then(({content}) => {
InspectorTest.expectThat(content.includes("workerImport1"), "Imported script content should have 'workerImport1'.");
WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.ScriptAdded, listener);
resolve();
}).catch(reject);
});
}
});
suite.addTestCase({
name: "Worker.Debugger.Script.NamedEval",
description: "Worker should be told of all scripts, like named evaluations.",
test(resolve, reject) {
InspectorTest.evaluateInPage(`worker.postMessage("triggerEvalScript")`);
let listener = WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, (event) => {
let script = event.data.script;
if (!/worker-eval\.js$/.test(script.sourceURL))
return;
InspectorTest.pass(`ScriptAdded - ${script.sourceURL}`);
InspectorTest.expectEqual(script.target, workerTarget, "Script should be owned by a Worker target.");
InspectorTest.expectThat(workerDebuggerData.scripts.includes(script), "Worker DebuggerData should include script.");
InspectorTest.expectThat(workerDebuggerData.scriptForIdentifier(script.id), "Worker DebuggerData should include script by identifier.");
InspectorTest.expectThat(!mainDebuggerData.scripts.includes(script), "Main DebuggerData should not include the script.");
script.requestContent()
.then(({content}) => {
InspectorTest.expectThat(content.includes("workerEval"), "Eval script content should have 'workerEval'.");
WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.ScriptAdded, listener);
resolve();
}).catch(reject);
});
}
});
awaitTargetMainResource(workerTarget).then(() => suite.runTestCasesAndFinish());
}
</script>
</head>
<body onload="runTest()">
<p>Ensure we can associate scripts with Workers and get their contents.</p>
</body>
</html>