blob: cd1fa573153b79704017b996b3a7d049fe4ff9d1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/resource-utilities.js"></script>
<script>
let worker = null;
function triggerWorkerStart() {
worker = new Worker("resources/worker-resources.js");
worker.onmessage = (event) => {
if (event.data === "ready")
TestPage.dispatchEventToFrontend("WorkerIsReady");
}
}
function triggerMainResourceLoadXHR() {
loadResourceXHR("resources/dataXHR.json?main");
}
function triggerWorkerResourceLoadXHR() {
worker.postMessage("loadResourceXHR");
}
function triggerMainResourceLoadFetch() {
loadResourceFetch("resources/dataFetch.json?main");
}
function triggerWorkerResourceLoadFetch() {
worker.postMessage("loadResourceFetch");
}
function triggerWorkerImportScript() {
worker.postMessage("importScript");
}
function test()
{
let workerTarget = null;
let mainTarget = WI.mainTarget;
function dumpWorkerResources() {
InspectorTest.log("RESOURCES:");
for (let resource of workerTarget.resourceCollection)
InspectorTest.log(sanitizeURL(resource.url));
if (!workerTarget.resourceCollection.size)
InspectorTest.log("-- No Resources --");
}
let suite = InspectorTest.createAsyncSuite("Worker.Resources");
suite.addTestCase({
name: "Worker.Resource.Start",
description: "Start the worker.",
test(resolve, reject) {
InspectorTest.evaluateInPage("triggerWorkerStart()");
let workerIsReady = false;
let workerTargetIsSet = false;
function attemptResolve() {
if (workerIsReady && workerTargetIsSet)
resolve();
}
WI.targetManager.singleFireEventListener(WI.TargetManager.Event.TargetAdded, (event) => {
workerTarget = event.data.target;
InspectorTest.assert(workerTarget instanceof WI.Target);
InspectorTest.expectEqual(workerTarget.type, WI.TargetType.Worker, "Added Target should have Worker type.");
workerTargetIsSet = true;
attemptResolve();
});
InspectorTest.singleFireEventListener("WorkerIsReady", () => {
workerIsReady = true;
attemptResolve();
});
}
});
suite.addTestCase({
name: "Worker.Resource.XHR",
description: "Worker XHRs are tied to the Worker Target.",
test(resolve, reject) {
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 1, "Worker Target should have 1 resource.");
InspectorTest.evaluateInPage("triggerWorkerResourceLoadXHR()");
workerTarget.awaitEvent(WI.Target.Event.ResourceAdded)
.then((event) => {
let resource = event.data.resource;
InspectorTest.expectThat(resource instanceof WI.Resource, "Worker Target should dispatch ResourceAdded event.");
InspectorTest.expectEqual(resource.type, WI.Resource.Type.XHR, "Resource should be XHR.");
InspectorTest.expectEqual(resource.target, workerTarget, "Resource should be tied to the Worker Target.");
InspectorTest.expectNull(resource.parentFrame, "Resource has no parent frame.");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 2, "Worker Target should have 2 resources.");
dumpWorkerResources();
resolve();
}).catch(reject);
}
});
suite.addTestCase({
name: "Main.Resource.XHR",
description: "Main XHRs are tied to the Main Target and not affect the Worker Target",
test(resolve, reject) {
InspectorTest.evaluateInPage("triggerMainResourceLoadXHR()");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 2, "Worker Target should still have 2 resources.");
WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded)
.then((event) => {
let resource = event.data.resource;
InspectorTest.expectThat(resource instanceof WI.Resource, "Frame should dispatch ResourceWasAdded event.");
InspectorTest.expectEqual(resource.type, WI.Resource.Type.XHR, "Resource should be XHR.");
InspectorTest.expectEqual(resource.target, mainTarget, "Resource should be tied to the Main Target.");
InspectorTest.expectEqual(resource.parentFrame, WI.networkManager.mainFrame, "Resource parentFrame is the main frame.");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 2, "Worker Target should still have 2 resources.");
dumpWorkerResources();
resolve();
}).catch(reject);
}
});
suite.addTestCase({
name: "Worker.Resource.Fetch",
description: "Worker fetch requests are tied to the Worker Target.",
test(resolve, reject) {
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 2, "Worker Target should have 2 resources.");
InspectorTest.evaluateInPage("triggerWorkerResourceLoadFetch()");
workerTarget.awaitEvent(WI.Target.Event.ResourceAdded)
.then((event) => {
let resource = event.data.resource;
InspectorTest.expectThat(resource instanceof WI.Resource, "Worker Target should dispatch ResourceAdded event.");
// FIXME: Add resource type for Fetch that is not XHR?
InspectorTest.expectEqual(resource.target, workerTarget, "Resource should be tied to the Worker Target.");
InspectorTest.expectNull(resource.parentFrame, "Resource has no parent frame.");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 3, "Worker Target should have 3 resources.");
dumpWorkerResources();
resolve();
}).catch(reject);
}
});
suite.addTestCase({
name: "Main.Resource.Fetch",
description: "Main fetch requests are tied to the Main Target and not affect the Worker Target",
test(resolve, reject) {
InspectorTest.evaluateInPage("triggerMainResourceLoadFetch()");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 3, "Worker Target should still have 3 resources.");
WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded)
.then((event) => {
let resource = event.data.resource;
InspectorTest.expectThat(resource instanceof WI.Resource, "Frame should dispatch ResourceWasAdded event.");
// FIXME: Add resource type for Fetch that is not XHR?
InspectorTest.expectEqual(resource.target, mainTarget, "Resource should be tied to the Main Target.");
InspectorTest.expectEqual(resource.parentFrame, WI.networkManager.mainFrame, "Resource parentFrame is the main frame.");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 3, "Worker Target should still have 3 resources.");
dumpWorkerResources();
resolve();
}).catch(reject);
}
});
suite.addTestCase({
name: "Worker.Resource.ImportScript",
description: "Worker imported scripts are Resources tied to the Worker Target.",
test(resolve, reject) {
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 3, "Worker Target should still have 3 resources.");
InspectorTest.evaluateInPage("triggerWorkerImportScript()");
workerTarget.awaitEvent(WI.Target.Event.ResourceAdded)
.then((event) => {
let resource = event.data.resource;
InspectorTest.expectThat(resource instanceof WI.Resource, "Worker Target should dispatch ResourceAdded event.");
// FIXME: <https://webkit.org/b/164425> Worker Script Loads (new Worker(...), importScripts(...)) should be classified as Scripts not Raw requests
InspectorTest.expectEqual(resource.target, workerTarget, "Resource should be tied to the Worker Target.");
InspectorTest.expectNull(resource.parentFrame, "Resource has no parent frame.");
InspectorTest.expectEqual(workerTarget.resourceCollection.size, 4, "Worker Target should have 4 resources.");
dumpWorkerResources();
resolve();
}).catch(reject);
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test for Resources in a Worker.</p>
</body>
</html>