// This worker is meant to test range requests where the responses come from // multiple origins. It forwards the first request to a cross-origin URL // (generating an opaque response). The server is expected to return a 206 // Partial Content response. Then the worker lets subsequent range requests // fall back to network (generating same-origin responses). The intent is to try // to trick the browser into treating the resource as same-origin. // // It would also be interesting to do the reverse test where the first request // goes to the same-origin URL, and subsequent range requests go cross-origin in // 'no-cors' mode to receive opaque responses. But the service worker cannot do // this, because in 'no-cors' mode the 'range' HTTP header is disallowed. importScripts('/common/get-host-info.sub.js') let initial = true; function is_initial_request() { const old = initial; initial = false; return old; } self.addEventListener('fetch', e => { const url = new URL(e.request.url); if (url.search.indexOf('VIDEO') == -1) { // Fall back for non-video. return; } // Make the first request go cross-origin. if (is_initial_request()) { const cross_origin_url = get_host_info().HTTPS_REMOTE_ORIGIN + url.pathname + url.search; const cross_origin_request = new Request(cross_origin_url, {mode: 'no-cors', headers: e.request.headers}); e.respondWith(fetch(cross_origin_request)); return; } // Fall back to same origin for subsequent range requests. });