@@ -26,13 +26,6 @@ import type { URLMeta } from "../shared/rewriters/url";
2626import { $scramjet , flagEnabled } from "../scramjet" ;
2727import { rewriteJsWithMap } from "../shared/rewriters/js" ;
2828
29- function newMeta ( url : URL ) : URLMeta {
30- return {
31- origin : url ,
32- base : url ,
33- } ;
34- }
35-
3629export async function handleFetch (
3730 this : ScramjetServiceWorker ,
3831 request : Request ,
@@ -49,6 +42,21 @@ export async function handleFetch(
4942 requestUrl . searchParams . delete ( "dest" ) ;
5043 }
5144
45+ let meta : URLMeta = { } ;
46+ if ( client ) {
47+ meta . base = new URL ( unrewriteUrl ( client . url ) ) ;
48+ meta . origin = new URL ( unrewriteUrl ( client . url ) ) ;
49+ } else {
50+ meta . base = new URL ( unrewriteUrl ( request . url ) ) ;
51+ meta . origin = new URL ( unrewriteUrl ( request . url ) ) ;
52+ }
53+ if ( requestUrl . searchParams . has ( "topFrame" ) ) {
54+ meta . topFrameName = requestUrl . searchParams . get ( "topFrame" ) ;
55+ }
56+ if ( requestUrl . searchParams . has ( "parentFrame" ) ) {
57+ meta . parentFrameName = requestUrl . searchParams . get ( "parentFrame" ) ;
58+ }
59+
5260 if ( requestUrl . pathname === this . config . files . wasm ) {
5361 return fetch ( this . config . files . wasm ) . then ( async ( x ) => {
5462 const buf = await x . arrayBuffer ( ) ;
@@ -89,12 +97,7 @@ export async function handleFetch(
8997 if ( response . body ) {
9098 body = await rewriteBody (
9199 response as BareResponseFetch ,
92- client
93- ? {
94- base : new URL ( new URL ( client . url ) . origin ) ,
95- origin : new URL ( new URL ( client . url ) . origin ) ,
96- }
97- : newMeta ( new URL ( unrewriteUrl ( request . referrer ) ) ) ,
100+ meta ,
98101 request . destination ,
99102 workerType ,
100103 this . cookieStore
@@ -230,7 +233,6 @@ export async function handleFetch(
230233 const unrewrittenReferrer = unrewriteUrl ( request . referrer ) ;
231234 if ( unrewrittenReferrer ) {
232235 const referrerUrl = new URL ( unrewrittenReferrer ) ;
233- const meta = newMeta ( url ) ;
234236 siteDirective = await getSiteDirective (
235237 meta ,
236238 referrerUrl ,
@@ -277,6 +279,7 @@ export async function handleFetch(
277279
278280 return await handleResponse (
279281 url ,
282+ meta ,
280283 workerType ,
281284 request . destination ,
282285 request . mode ,
@@ -316,6 +319,7 @@ export async function handleFetch(
316319
317320async function handleResponse (
318321 url : URL ,
322+ meta : URLMeta ,
319323 workertype : string ,
320324 destination : RequestDestination ,
321325 mode : RequestMode ,
@@ -331,7 +335,7 @@ async function handleResponse(
331335 mode === "navigate" && [ "document" , "iframe" ] . includes ( destination ) ;
332336 const responseHeaders = await rewriteHeaders (
333337 response . rawHeaders ,
334- newMeta ( url ) ,
338+ meta ,
335339 bareClient ,
336340 { get : getReferrerPolicy , set : storeReferrerPolicy }
337341 ) ;
@@ -358,7 +362,10 @@ async function handleResponse(
358362 responseHeaders [ "referrer-policy" ]
359363 ) ;
360364
361- const redirectMeta = newMeta ( redirectUrl ) ;
365+ const redirectMeta = {
366+ origin : redirectUrl ,
367+ base : redirectUrl ,
368+ } ;
362369 const newSiteDirective = await getSiteDirective (
363370 redirectMeta ,
364371 url ,
@@ -395,7 +402,7 @@ async function handleResponse(
395402 if ( response . body ) {
396403 responseBody = await rewriteBody (
397404 response ,
398- newMeta ( url ) ,
405+ meta ,
399406 destination ,
400407 workertype ,
401408 cookieStore
0 commit comments