@@ -208,11 +208,7 @@ func transformDocumentResponse(req *http.Request, resp *http.Response, tab *zpht
208208 Servers : headerServers (req .Header .Get ("X-Zp-Relay-Servers" )),
209209 DynamicCompileAllowed : dynamicCompileAllowed ,
210210 ReferrerPolicy : referrerPolicy ,
211- ScriptRewriter : rewriteScriptFromJS ,
212- ScriptURLRewriter : rewriteScriptURLFromJS ,
213- FetchURLRewriter : rewriteFetchURLFromJS ,
214- CSSRewriter : rewriteCSSFromJS ,
215- ImportMapRewriter : rewriteImportMapFromJS ,
211+ DocumentRewriter : rewriteHTMLDocumentFromJS ,
216212 })
217213 closeErr := source .Close ()
218214 if err != nil {
@@ -301,88 +297,31 @@ func cookieRecordsForJS(records []cookiejar.SnapshotRecord) []any {
301297 return out
302298}
303299
304- func rewriteScriptFromJS (source , kind , targetURL , controlPrefix , tabID , runtimeToken string ) (string , error ) {
300+ func rewriteHTMLDocumentFromJS (source , targetURL , controlPrefix , runtimePrelude , tabID , runtimeToken string , servers [] string ) (string , error ) {
305301 rewriter := js .Global ().Get ("ZPRewriter" )
306- if ! rewriter .Truthy () || rewriter .Get ("rewriteScript " ).Type () != js .TypeFunction {
307- return "" , fmt .Errorf ("REALM_INJECTION_FAILURE " )
302+ if ! rewriter .Truthy () || rewriter .Get ("rewriteHTMLDocument " ).Type () != js .TypeFunction {
303+ return "" , fmt .Errorf ("HTML_DOCUMENT_REWRITE_UNAVAILABLE " )
308304 }
309- out := rewriter .Call ("rewriteScript" , source , map [string ]any {
310- "kind" : kind ,
305+ out := rewriter .Call ("rewriteHTMLDocument" , source , map [string ]any {
311306 "targetUrl" : targetURL ,
312307 "controlPrefix" : controlPrefix ,
308+ "prelude" : runtimePrelude ,
313309 "tabId" : tabID ,
314310 "runtimeToken" : runtimeToken ,
315- "strict " : true ,
311+ "servers " : stringsForJS ( servers ) ,
316312 })
317313 if out .Truthy () && out .Get ("ok" ).Bool () {
318314 return out .Get ("code" ).String (), nil
319315 }
320- return "" , fmt .Errorf ("REWRITE_FAILED " )
316+ return "" , fmt .Errorf ("HTML_DOCUMENT_REWRITE_FAILED " )
321317}
322318
323- func rewriteScriptURLFromJS (raw , kind , targetURL , controlPrefix , tabID , runtimeToken string ) (string , string , error ) {
324- rewriter := js .Global ().Get ("ZPRewriter" )
325- if ! rewriter .Truthy () || rewriter .Get ("rewriteScriptURL" ).Type () != js .TypeFunction {
326- return "" , "" , fmt .Errorf ("REALM_INJECTION_FAILURE" )
327- }
328- out := rewriter .Call ("rewriteScriptURL" , raw , map [string ]any {
329- "kind" : kind ,
330- "targetUrl" : targetURL ,
331- "controlPrefix" : controlPrefix ,
332- "tabId" : tabID ,
333- "runtimeToken" : runtimeToken ,
334- })
335- if out .Truthy () && out .Get ("ok" ).Bool () {
336- return out .Get ("url" ).String (), out .Get ("target" ).String (), nil
319+ func stringsForJS (values []string ) []any {
320+ out := make ([]any , 0 , len (values ))
321+ for _ , value := range values {
322+ out = append (out , value )
337323 }
338- return "" , "" , fmt .Errorf ("REWRITE_FAILED" )
339- }
340-
341- func rewriteFetchURLFromJS (raw , targetURL , controlPrefix string ) (string , string , error ) {
342- rewriter := js .Global ().Get ("ZPRewriter" )
343- if ! rewriter .Truthy () || rewriter .Get ("rewriteFetchURL" ).Type () != js .TypeFunction {
344- return "" , "" , fmt .Errorf ("REALM_INJECTION_FAILURE" )
345- }
346- out := rewriter .Call ("rewriteFetchURL" , raw , map [string ]any {
347- "targetUrl" : targetURL ,
348- "controlPrefix" : controlPrefix ,
349- })
350- if out .Truthy () && out .Get ("ok" ).Bool () {
351- return out .Get ("url" ).String (), out .Get ("target" ).String (), nil
352- }
353- return "" , "" , fmt .Errorf ("REWRITE_FAILED" )
354- }
355-
356- func rewriteCSSFromJS (source , baseURL string ) (string , error ) {
357- rewriter := js .Global ().Get ("ZPRewriter" )
358- if ! rewriter .Truthy () || rewriter .Get ("rewriteCSS" ).Type () != js .TypeFunction {
359- return "" , fmt .Errorf ("CSS_REWRITE_UNAVAILABLE" )
360- }
361- out := rewriter .Call ("rewriteCSS" , source , map [string ]any {
362- "baseUrl" : baseURL ,
363- "controlPrefix" : "/zp/" ,
364- })
365- if out .Truthy () && out .Get ("ok" ).Bool () {
366- return out .Get ("code" ).String (), nil
367- }
368- return "" , fmt .Errorf ("CSS_REWRITE_FAILED" )
369- }
370-
371- func rewriteImportMapFromJS (source , baseURL , tabID , runtimeToken , controlPrefix string ) (string , error ) {
372- rewriter := js .Global ().Get ("ZPRewriter" )
373- if ! rewriter .Truthy () || rewriter .Get ("rewriteImportMap" ).Type () != js .TypeFunction {
374- return "" , fmt .Errorf ("IMPORT_MAP_REWRITE_UNAVAILABLE" )
375- }
376- out := rewriter .Call ("rewriteImportMap" , source , map [string ]any {
377- "baseUrl" : baseURL ,
378- "tabId" : tabID ,
379- "runtimeToken" : runtimeToken ,
380- "controlPrefix" : controlPrefix ,
381- })
382- if out .Truthy () && out .Get ("ok" ).Bool () {
383- return out .Get ("code" ).String (), nil
384- }
385- return "" , fmt .Errorf ("IMPORT_MAP_REWRITE_FAILED" )
324+ return out
386325}
387326
388327func targetDynamicCompileAllowed (h http.Header ) bool {
0 commit comments