Merge pull request #504 from lightpanda-io/redirect-url

browser: update urls after redirection
This commit is contained in:
Karl Seguin
2025-04-04 16:06:48 +08:00
committed by GitHub

View File

@@ -351,23 +351,7 @@ pub const Page = struct {
return;
}
// own the url
self.rawuri = try arena.dupe(u8, uri);
self.uri = std.Uri.parse(self.rawuri.?) catch try std.Uri.parseAfterScheme("", self.rawuri.?);
self.url = try URL.constructor(arena, self.rawuri.?, null);
self.location.url = &self.url.?;
try self.session.window.replaceLocation(&self.location);
// prepare origin value.
var buf: std.ArrayListUnmanaged(u8) = .{};
try self.uri.writeToStream(.{
.scheme = true,
.authority = true,
}, buf.writer(arena));
self.origin = buf.items;
// TODO handle fragment in url.
self.uri = std.Uri.parse(uri) catch try std.Uri.parseAfterScheme("", uri);
self.session.app.telemetry.record(.{ .navigate = .{
.proxy = false,
@@ -380,7 +364,34 @@ pub const Page = struct {
var response = try request.sendSync(.{});
const header = response.header;
try self.session.cookie_jar.populateFromResponse(self.uri, &header);
try self.session.cookie_jar.populateFromResponse(request.uri, &header);
// update uri after eventual redirection
var buf: std.ArrayListUnmanaged(u8) = .{};
try request.uri.writeToStream(.{
.scheme = true,
.authentication = true,
.authority = true,
.path = true,
.query = true,
.fragment = true,
}, buf.writer(arena));
self.rawuri = buf.items;
self.uri = try std.Uri.parse(self.rawuri.?);
// TODO handle fragment in url.
self.url = try URL.constructor(arena, self.rawuri.?, null);
self.location.url = &self.url.?;
try self.session.window.replaceLocation(&self.location);
// prepare origin value.
buf = .{};
try request.uri.writeToStream(.{
.scheme = true,
.authority = true,
}, buf.writer(arena));
self.origin = buf.items;
log.info("GET {any} {d}", .{ self.uri, header.status });