Skip to content

Commit 77eee7f

Browse files
committed
Cookies
1 parent 03694b5 commit 77eee7f

File tree

5 files changed

+31
-24
lines changed

5 files changed

+31
-24
lines changed

src/browser/ScriptManager.zig

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -229,12 +229,15 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element) !void {
229229

230230
errdefer pending_script.deinit();
231231

232+
var headers = try HttpClient.Headers.init();
233+
try page.requestCookie(.{}).headersForRequest(self.allocator, remote_url.?, &headers);
234+
232235
try self.client.request(.{
233236
.url = remote_url.?,
234237
.ctx = pending_script,
235238
.method = .GET,
236-
.headers = try HttpClient.Headers.init(),
237-
.cookie = page.requestCookie(.{}),
239+
.headers = headers,
240+
.cookie_jar = page.cookie_jar,
238241
.start_callback = if (log.enabled(.http, .debug)) startCallback else null,
239242
.header_done_callback = headerCallback,
240243
.data_callback = dataCallback,
@@ -293,13 +296,16 @@ pub fn blockingGet(self: *ScriptManager, url: [:0]const u8) !BlockingResult {
293296
.buffer_pool = &self.buffer_pool,
294297
};
295298

299+
var headers = try HttpClient.Headers.init();
300+
try self.page.requestCookie(.{}).headersForRequest(self.allocator, url, &headers);
301+
296302
var client = self.client;
297303
try client.blockingRequest(.{
298304
.url = url,
299305
.method = .GET,
300-
.headers = try HttpClient.Headers.init(),
306+
.headers = headers,
307+
.cookie_jar = self.page.cookie_jar,
301308
.ctx = &blocking,
302-
.cookie = self.page.requestCookie(.{}),
303309
.start_callback = if (log.enabled(.http, .debug)) Blocking.startCallback else null,
304310
.header_done_callback = Blocking.headerCallback,
305311
.data_callback = Blocking.dataCallback,

src/browser/page.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,14 +469,15 @@ pub const Page = struct {
469469

470470
var headers = try HttpClient.Headers.init();
471471
if (opts.header) |hdr| try headers.add(hdr);
472+
try self.requestCookie(.{ .is_navigation = true }).headersForRequest(self.arena, owned_url, &headers);
472473

473474
self.http_client.request(.{
474475
.ctx = self,
475476
.url = owned_url,
476477
.method = opts.method,
477478
.headers = headers,
478479
.body = opts.body,
479-
.cookie = self.requestCookie(.{ .is_navigation = true }),
480+
.cookie_jar = self.cookie_jar,
480481
.header_done_callback = pageHeaderDoneCallback,
481482
.data_callback = pageDataCallback,
482483
.done_callback = pageDoneCallback,

src/browser/xhr/xhr.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,14 +374,15 @@ pub const XMLHttpRequest = struct {
374374
for (self.headers.items) |hdr| {
375375
try headers.add(hdr);
376376
}
377+
try page.requestCookie(.{}).headersForRequest(self.arena, self.url.?, &headers);
377378

378379
try page.http_client.request(.{
379380
.ctx = self,
380381
.url = self.url.?,
381382
.method = self.method,
382383
.headers = headers,
383384
.body = self.request_body,
384-
.cookie = page.requestCookie(.{}),
385+
.cookie_jar = page.cookie_jar,
385386
.start_callback = httpStartCallback,
386387
.header_callback = httpHeaderCallback,
387388
.header_done_callback = httpHeaderDoneCallback,

src/http/Client.zig

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const builtin = @import("builtin");
2222
const Http = @import("Http.zig");
2323
pub const Headers = Http.Headers;
2424
const Notification = @import("../notification.zig").Notification;
25+
const storage = @import("../browser/storage/storage.zig");
2526

2627
const c = Http.c;
2728

@@ -271,20 +272,6 @@ fn makeRequest(self: *Client, handle: *Handle, req: Request) !void {
271272
try conn.setBody(b);
272273
}
273274

274-
// { // TODO move up to `fn request()`
275-
// const aa = self.arena.allocator();
276-
// var arr: std.ArrayListUnmanaged(u8) = .{};
277-
// try req.cookie.forRequest(&uri, arr.writer(aa));
278-
279-
// if (arr.items.len > 0) {
280-
// try arr.append(aa, 0); //null terminate
281-
282-
// // copies the value
283-
// header_list = c.curl_slist_append(header_list, @ptrCast(arr.items.ptr));
284-
// defer _ = self.arena.reset(.{ .retain_with_limit = 2048 });
285-
// }
286-
// }
287-
288275
try conn.secretHeaders(&header_list); // Add headers that must be hidden from intercepts
289276
try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_HTTPHEADER, header_list.headers));
290277
}
@@ -475,13 +462,24 @@ pub const RequestCookie = struct {
475462
origin: *const std.Uri,
476463
jar: *@import("../browser/storage/cookie.zig").Jar,
477464

478-
fn forRequest(self: *const RequestCookie, uri: *const std.Uri, writer: anytype) !void {
479-
return self.jar.forRequest(uri, writer, .{
465+
pub fn headersForRequest(self: *const RequestCookie, temp: Allocator, url: [:0]const u8, headers: *Headers) !void {
466+
const uri = std.Uri.parse(url) catch |err| {
467+
log.warn(.http, "invalid url", .{ .err = err, .url = url });
468+
return error.InvalidUrl;
469+
};
470+
471+
var arr: std.ArrayListUnmanaged(u8) = .{};
472+
try self.jar.forRequest(&uri, arr.writer(temp), .{
480473
.is_http = self.is_http,
481474
.is_navigation = self.is_navigation,
482475
.origin_uri = self.origin,
483476
.prefix = "Cookie: ",
484477
});
478+
479+
if (arr.items.len > 0) {
480+
try arr.append(temp, 0); //null terminate
481+
try headers.add(@ptrCast(arr.items.ptr));
482+
}
485483
}
486484
};
487485

@@ -491,7 +489,7 @@ pub const Request = struct {
491489
url: [:0]const u8,
492490
headers: Headers,
493491
body: ?[]const u8 = null,
494-
cookie: RequestCookie,
492+
cookie_jar: *storage.CookieJar,
495493

496494
// arbitrary data that can be associated with this request
497495
ctx: *anyopaque = undefined,
@@ -616,7 +614,7 @@ pub const Transfer = struct {
616614
if (header.len > SET_COOKIE_LEN) {
617615
if (std.ascii.eqlIgnoreCase(header[0..SET_COOKIE_LEN], "set-cookie:")) {
618616
const value = std.mem.trimLeft(u8, header[SET_COOKIE_LEN..], " ");
619-
transfer.req.cookie.jar.populateFromResponse(&transfer.uri, value) catch |err| {
617+
transfer.req.cookie_jar.populateFromResponse(&transfer.uri, value) catch |err| {
620618
log.err(.http, "set cookie", .{ .err = err, .req = transfer });
621619
};
622620
}

src/http/Http.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ pub const Headers = struct {
224224
}
225225

226226
pub fn add(self: *Headers, header: [*c]const u8) !void {
227+
// Copies the value
227228
const updated_headers = c.curl_slist_append(self.headers, header);
228229
if (updated_headers == null) return error.OutOfMemory;
229230
self.headers = updated_headers;

0 commit comments

Comments
 (0)