Index: third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/navigation-preload/resources/redirect-worker.js |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/navigation-preload/resources/redirect-worker.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/navigation-preload/resources/redirect-worker.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f7479edef9290c98c574a2dc72bc37fbd1f9b177 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/navigation-preload/resources/redirect-worker.js |
@@ -0,0 +1,32 @@ |
+self.addEventListener('activate', event => { |
+ event.waitUntil( |
+ self.registration.navigationPreload.enable()); |
+ }); |
+ |
+function get_response_info(r) { |
+ var info = { |
+ type: r.type, |
+ url: r.url, |
+ status: r.status, |
+ ok: r.ok, |
+ statusText: r.statusText, |
+ headers: [] |
+ }; |
+ r.headers.forEach((value, name) => { info.headers.push([value, name]); }); |
+ return info; |
+} |
+ |
+function post_to_page(data) { |
+ return self.clients.matchAll() |
+ .then(clients => clients.forEach(client => client.postMessage(data))); |
+} |
+ |
+self.addEventListener('fetch', event => { |
+ event.respondWith( |
+ event.preloadResponse |
+ .then( |
+ res => { |
+ return post_to_page(get_response_info(res)).then(_ => res); |
+ }, |
+ err => new Response(err.toString()))); |
+ }); |