mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-12-16 08:18:59 +00:00
try safer http cleanup on page deinit
This commit is contained in:
@@ -77,6 +77,13 @@ pub fn init(input: Input, options: ?RequestInit, page: *Page) !js.Promise {
|
|||||||
return fetch._resolver.promise();
|
return fetch._resolver.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn deinit(self: *Fetch) void {
|
||||||
|
if (self.transfer) |transfer| {
|
||||||
|
transfer.abort();
|
||||||
|
self.transfer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn httpHeaderDoneCallback(transfer: *Http.Transfer) !void {
|
fn httpHeaderDoneCallback(transfer: *Http.Transfer) !void {
|
||||||
const self: *Fetch = @ptrCast(@alignCast(transfer.ctx));
|
const self: *Fetch = @ptrCast(@alignCast(transfer.ctx));
|
||||||
|
|
||||||
|
|||||||
@@ -74,6 +74,13 @@ pub fn init(page: *Page) !*XMLHttpRequest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn deinit(self: *XMLHttpRequest) void {
|
||||||
|
if (self.transfer) |transfer| {
|
||||||
|
transfer.abort();
|
||||||
|
self.transfer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn asEventTarget(self: *XMLHttpRequest) *EventTarget {
|
fn asEventTarget(self: *XMLHttpRequest) *EventTarget {
|
||||||
return self._proto._proto;
|
return self._proto._proto;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ pub fn abort(self: *Client) void {
|
|||||||
log.err(.http, "get private info", .{ .err = err, .source = "abort" });
|
log.err(.http, "get private info", .{ .err = err, .source = "abort" });
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
transfer.abort();
|
transfer.kill();
|
||||||
}
|
}
|
||||||
std.debug.assert(self.active == 0);
|
std.debug.assert(self.active == 0);
|
||||||
|
|
||||||
@@ -812,6 +812,15 @@ pub const Transfer = struct {
|
|||||||
self.deinit();
|
self.deinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// internal, when the page is shutting down. Doesn't have the same ceremony
|
||||||
|
// as abort (doesn't send a notification, doesn't invoke an error callback)
|
||||||
|
fn kill(self: *Transfer) void {
|
||||||
|
if (self._handle != null) {
|
||||||
|
self.client.endTransfer(self);
|
||||||
|
}
|
||||||
|
self.deinit();
|
||||||
|
}
|
||||||
|
|
||||||
// abortAuthChallenge is called when an auth chanllenge interception is
|
// abortAuthChallenge is called when an auth chanllenge interception is
|
||||||
// abort. We don't call self.client.endTransfer here b/c it has been done
|
// abort. We don't call self.client.endTransfer here b/c it has been done
|
||||||
// before interception process.
|
// before interception process.
|
||||||
|
|||||||
Reference in New Issue
Block a user