| <!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> |