@@ -373,7 +373,7 @@ pub const Page = struct {
373373
374374 var response = try request .sendSync (.{});
375375 const header = response .header ;
376- try self .processHTTPResponse (self .uri , & header );
376+ try self .session . cookie_jar . populateFromResponse (self .uri , & header );
377377
378378 log .info ("GET {any} {d}" , .{ self .uri , header .status });
379379
@@ -438,7 +438,9 @@ pub const Page = struct {
438438
439439 // replace the user context document with the new one.
440440 try session .env .setUserContext (.{
441+ .uri = self .uri ,
441442 .document = html_doc ,
443+ .cookie_jar = @ptrCast (& self .session .cookie_jar ),
442444 .http_client = @ptrCast (self .session .http_client ),
443445 });
444446
@@ -614,14 +616,14 @@ pub const Page = struct {
614616 const u = try std .Uri .resolve_inplace (self .uri , res_src , & b );
615617
616618 var request = try self .newHTTPRequest (.GET , u , .{
617- .origin = self .uri ,
619+ .origin_uri = self .uri ,
618620 .navigation = false ,
619621 });
620622 defer request .deinit ();
621623
622624 var response = try request .sendSync (.{});
623625 var header = response .header ;
624- try self .processHTTPResponse (u , & header );
626+ try self .session . cookie_jar . populateFromResponse (u , & header );
625627
626628 log .info ("fetch {any}: {d}" , .{ u , header .status });
627629
@@ -650,46 +652,21 @@ pub const Page = struct {
650652 try s .eval (arena , & self .session .env , body );
651653 }
652654
653- const RequestOpts = struct {
654- origin : ? std.Uri = null ,
655- navigation : bool = true ,
656- };
657- fn newHTTPRequest (self : * const Page , method : http.Request.Method , uri : std.Uri , opts : RequestOpts ) ! http.Request {
655+ fn newHTTPRequest (self : * const Page , method : http.Request.Method , uri : std.Uri , opts : storage.cookie.LookupOpts ) ! http.Request {
658656 const session = self .session ;
659657 var request = try session .http_client .request (method , uri );
660658 errdefer request .deinit ();
661659
662- var cookies = try session .cookie_jar .forRequest (
663- self .arena ,
664- std .time .timestamp (),
665- opts .origin ,
666- uri ,
667- opts .navigation ,
668- );
669- defer cookies .deinit (self .arena );
660+ var arr : std .ArrayListUnmanaged (u8 ) = .{};
661+ try session .cookie_jar .forRequest (uri , arr .writer (self .arena ), opts );
670662
671- if (cookies .len () > 0 ) {
672- var arr : std .ArrayListUnmanaged (u8 ) = .{};
673- try cookies .write (arr .writer (self .arena ));
663+ if (arr .items .len > 0 ) {
674664 try request .addHeader ("Cookie" , arr .items , .{});
675665 }
676666
677667 return request ;
678668 }
679669
680- fn processHTTPResponse (self : * const Page , uri : std.Uri , header : * const http.ResponseHeader ) ! void {
681- const session = self .session ;
682- const now = std .time .timestamp ();
683- var it = header .iterate ("set-cookie" );
684- while (it .next ()) | set_cookie | {
685- const c = storage .Cookie .parse (self .arena , uri , set_cookie ) catch | err | {
686- log .warn ("Couldn't parse cookie '{s}': {}\n " , .{ set_cookie , err });
687- continue ;
688- };
689- try session .cookie_jar .add (c , now );
690- }
691- }
692-
693670 const Script = struct {
694671 element : * parser.Element ,
695672 kind : Kind ,
0 commit comments