Index: third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html |
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..89b9dba5f73878bbd4005398f417da4a06964dd1 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/service-workers/service-workers-navigation-preload.html |
@@ -0,0 +1,130 @@ |
+<html> |
+<head> |
+<script src="../inspector-test.js"></script> |
+<script src="service-workers-test.js"></script> |
+<script> |
+ |
+function initializeServiceWorker(script, scope) { |
+ return navigator.serviceWorker.register(script, {scope: scope}) |
+ .then(reg => waitForActivated(reg.installing)); |
+} |
+ |
+function waitForActivated(worker) { |
+ if (worker.state === 'activated') |
+ return Promise.resolve(); |
+ if (worker.state === 'redundant') |
+ return Promise.reject(new Error('The worker is redundant')); |
+ return new Promise(resolve => { |
+ worker.addEventListener('statechange', _ => { |
+ if (worker.state === 'activated') |
+ resolve(); |
+ }); |
+ }); |
+} |
+ |
+function loadIframe(url) |
+{ |
+ var callback; |
+ var promise = new Promise((fulfill) => callback = fulfill); |
+ var frame = document.createElement('iframe'); |
+ frame.src = url; |
+ frame.onload = callback; |
+ document.body.appendChild(frame); |
+ return promise; |
+} |
+ |
+function test() |
+{ |
+ var scriptURL = "http://127.0.0.1:8000/inspector/service-workers/resources/navigation-preload-worker.php"; |
+ var scope = "http://127.0.0.1:8000/inspector/service-workers/resources/navigation-preload-scope.php"; |
+ var preloadRequestIDs = {}; |
+ |
+ function onRequestStarted(event) |
+ { |
+ var request = event.data; |
+ if (request.initiator().type != "preload") { |
+ return; |
+ } |
+ preloadRequestIDs[request.requestId()] = true; |
+ InspectorTest.addResult("onRequestStarted:"); |
+ InspectorTest.addResult(" url: " + request.url()); |
+ } |
+ |
+ function onResponseReceived(event) |
+ { |
+ var request = event.data; |
+ if (!preloadRequestIDs[request.requestId()]) { |
+ return; |
+ } |
+ InspectorTest.addResult("onResponseReceived:"); |
+ InspectorTest.addResult(" timing available: " + !!request.timing); |
+ request.requestHeaders().map(header => { |
+ if (header.name == 'Service-Worker-Navigation-Preload') { |
+ InspectorTest.addResult( |
+ " requestHeaders['Service-Worker-Navigation-Preload']: " + |
+ header.value); |
+ } |
+ }) |
+ } |
+ function onRequestFinished(event) |
+ { |
+ var request = event.data; |
+ if (!preloadRequestIDs[request.requestId()]) { |
+ return; |
+ } |
+ InspectorTest.addResult("onRequestFinished:"); |
+ if (request.localizedFailDescription) { |
+ InspectorTest.addResult(" localizedFailDescription: " + |
+ request.localizedFailDescription); |
+ } |
+ } |
+ |
+ SDK.targetManager.addModelListener( |
+ SDK.NetworkManager, |
+ SDK.NetworkManager.Events.RequestStarted, |
+ onRequestStarted); |
+ SDK.targetManager.addModelListener( |
+ SDK.NetworkManager, |
+ SDK.NetworkManager.Events.ResponseReceived, |
+ onResponseReceived); |
+ SDK.targetManager.addModelListener( |
+ SDK.NetworkManager, |
+ SDK.NetworkManager.Events.RequestFinished, |
+ onRequestFinished); |
+ |
+ |
+ InspectorTest.callFunctionInPageAsync("initializeServiceWorker", |
+ [ scriptURL, scope ]) |
+ .then(_ => { |
+ InspectorTest.addResult("-----------------"); |
+ InspectorTest.addResult("Loading an iframe."); |
+ return InspectorTest.callFunctionInPageAsync("loadIframe", [ scope ]); |
+ }) |
+ .then(_ => { |
+ InspectorTest.addResult("The iframe loaded."); |
+ InspectorTest.addResult("-----------------"); |
+ InspectorTest.addResult("Loading another iframe."); |
+ return InspectorTest.callFunctionInPageAsync( |
+ "loadIframe", [ scope + "?BrokenChunked"]); |
+ }) |
+ .then(_ => { |
+ InspectorTest.addResult("The iframe loaded."); |
+ InspectorTest.addResult("-----------------"); |
+ InspectorTest.addResult("Loading another iframe."); |
+ return InspectorTest.callFunctionInPageAsync( |
+ "loadIframe", [ scope + "?RedirectError"]); |
+ }) |
+ .then(_ => { |
+ InspectorTest.addResult("The iframe loaded."); |
+ InspectorTest.addResult("-----------------"); |
+ InspectorTest.addResult("Done"); |
+ InspectorTest.completeTest(); |
+ }); |
+} |
+ |
+</script> |
+</head> |
+<body onload="runTest()"> |
+<p>Tests the navigation request related events are available in the DevTools</p> |
+</body> |
+</html> |