188 lines
8.7 KiB
HTML
188 lines
8.7 KiB
HTML
<!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>
|