mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
use destructor callback for FetchContext
This commit is contained in:
@@ -43,7 +43,7 @@ pub const Interfaces = .{
|
|||||||
@import("Response.zig"),
|
@import("Response.zig"),
|
||||||
};
|
};
|
||||||
|
|
||||||
const FetchContext = struct {
|
pub const FetchContext = struct {
|
||||||
arena: std.mem.Allocator,
|
arena: std.mem.Allocator,
|
||||||
js_ctx: *Env.JsContext,
|
js_ctx: *Env.JsContext,
|
||||||
promise_resolver: v8.Persistent(v8.PromiseResolver),
|
promise_resolver: v8.Persistent(v8.PromiseResolver),
|
||||||
@@ -79,6 +79,17 @@ const FetchContext = struct {
|
|||||||
.url = self.url,
|
.url = self.url,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn destructor(self: *FetchContext) void {
|
||||||
|
if (self.transfer) |_| {
|
||||||
|
const resolver = Env.PromiseResolver{
|
||||||
|
.js_context = self.js_ctx,
|
||||||
|
.resolver = self.promise_resolver.castToPromiseResolver(),
|
||||||
|
};
|
||||||
|
|
||||||
|
resolver.reject("TypeError") catch unreachable;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch
|
// https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch
|
||||||
@@ -107,6 +118,9 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
|
|||||||
.url = req.url,
|
.url = req.url,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Add destructor callback for FetchContext.
|
||||||
|
try page.main_context.destructor_callbacks.append(arena, Env.DestructorCallback.init(fetch_ctx));
|
||||||
|
|
||||||
try page.http_client.request(.{
|
try page.http_client.request(.{
|
||||||
.ctx = @ptrCast(fetch_ctx),
|
.ctx = @ptrCast(fetch_ctx),
|
||||||
.url = req.url,
|
.url = req.url,
|
||||||
@@ -189,13 +203,6 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
|
|||||||
.err = err,
|
.err = err,
|
||||||
.source = "fetch error",
|
.source = "fetch error",
|
||||||
});
|
});
|
||||||
|
|
||||||
const promise_resolver: Env.PromiseResolver = .{
|
|
||||||
.js_context = self.js_ctx,
|
|
||||||
.resolver = self.promise_resolver.castToPromiseResolver(),
|
|
||||||
};
|
|
||||||
|
|
||||||
promise_resolver.reject(@errorName(err)) catch unreachable;
|
|
||||||
}
|
}
|
||||||
}.errorCallback,
|
}.errorCallback,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2901,11 +2901,11 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
|||||||
|
|
||||||
// An interface for types that want to have their jsDeinit function to be
|
// An interface for types that want to have their jsDeinit function to be
|
||||||
// called when the call context ends
|
// called when the call context ends
|
||||||
const DestructorCallback = struct {
|
pub const DestructorCallback = struct {
|
||||||
ptr: *anyopaque,
|
ptr: *anyopaque,
|
||||||
destructorFn: *const fn (ptr: *anyopaque) void,
|
destructorFn: *const fn (ptr: *anyopaque) void,
|
||||||
|
|
||||||
fn init(ptr: anytype) DestructorCallback {
|
pub fn init(ptr: anytype) DestructorCallback {
|
||||||
const T = @TypeOf(ptr);
|
const T = @TypeOf(ptr);
|
||||||
const ptr_info = @typeInfo(T);
|
const ptr_info = @typeInfo(T);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user