mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 23:23:28 +00:00
Compare commits
1 Commits
fetch_lazy
...
fetch_set_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d96a25c55 |
@@ -101,7 +101,7 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
|
||||
|
||||
try page.requestCookie(.{}).headersForRequest(arena, req.url, &headers);
|
||||
|
||||
const resolver = try page.main_context.createPersistentPromiseResolver();
|
||||
const resolver = page.main_context.createPersistentPromiseResolver();
|
||||
|
||||
const fetch_ctx = try arena.create(FetchContext);
|
||||
fetch_ctx.* = .{
|
||||
@@ -170,6 +170,7 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
|
||||
.done_callback = struct {
|
||||
fn doneCallback(ctx: *anyopaque) !void {
|
||||
const self: *FetchContext = @ptrCast(@alignCast(ctx));
|
||||
defer self.promise_resolver.setWeak();
|
||||
self.transfer = null;
|
||||
|
||||
log.info(.fetch, "request complete", .{
|
||||
@@ -186,6 +187,7 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
|
||||
.error_callback = struct {
|
||||
fn errorCallback(ctx: *anyopaque, err: anyerror) void {
|
||||
const self: *FetchContext = @ptrCast(@alignCast(ctx));
|
||||
defer self.promise_resolver.setWeak();
|
||||
self.transfer = null;
|
||||
|
||||
log.err(.fetch, "error", .{
|
||||
|
||||
@@ -78,8 +78,8 @@ const QueueingStrategy = struct {
|
||||
pub fn constructor(underlying: ?UnderlyingSource, _strategy: ?QueueingStrategy, page: *Page) !*ReadableStream {
|
||||
const strategy: QueueingStrategy = _strategy orelse .{};
|
||||
|
||||
const cancel_resolver = try page.main_context.createPersistentPromiseResolver();
|
||||
const closed_resolver = try page.main_context.createPersistentPromiseResolver();
|
||||
const cancel_resolver = page.main_context.createPersistentPromiseResolver();
|
||||
const closed_resolver = page.main_context.createPersistentPromiseResolver();
|
||||
|
||||
const stream = try page.arena.create(ReadableStream);
|
||||
stream.* = ReadableStream{ .cancel_resolver = cancel_resolver, .closed_resolver = closed_resolver, .strategy = strategy };
|
||||
@@ -106,6 +106,9 @@ pub fn constructor(underlying: ?UnderlyingSource, _strategy: ?QueueingStrategy,
|
||||
}
|
||||
|
||||
pub fn destructor(self: *ReadableStream) void {
|
||||
self.cancel_resolver.deinit();
|
||||
self.closed_resolver.deinit();
|
||||
|
||||
if (self.reader_resolver) |*rr| {
|
||||
rr.deinit();
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ pub fn _read(self: *const ReadableStreamDefaultReader, page: *Page) !Env.Promise
|
||||
if (self.stream.reader_resolver) |rr| {
|
||||
return rr.promise();
|
||||
} else {
|
||||
const persistent_resolver = try page.main_context.createPersistentPromiseResolver();
|
||||
const persistent_resolver = page.main_context.createPersistentPromiseResolver();
|
||||
self.stream.reader_resolver = persistent_resolver;
|
||||
return persistent_resolver.promise();
|
||||
}
|
||||
|
||||
@@ -677,9 +677,6 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
||||
// we now simply persist every time persist() is called.
|
||||
js_object_list: std.ArrayListUnmanaged(PersistentObject) = .empty,
|
||||
|
||||
|
||||
persisted_promise_resolvers: std.ArrayListUnmanaged(v8.Persistent(v8.PromiseResolver)) = .empty,
|
||||
|
||||
// When we need to load a resource (i.e. an external script), we call
|
||||
// this function to get the source. This is always a reference to the
|
||||
// Page's fetchModuleSource, but we use a function pointer
|
||||
@@ -736,10 +733,6 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
||||
p.deinit();
|
||||
}
|
||||
|
||||
for (self.persisted_promise_resolvers.items) |*p| {
|
||||
p.deinit();
|
||||
}
|
||||
|
||||
{
|
||||
var it = self.module_cache.valueIterator();
|
||||
while (it.next()) |p| {
|
||||
@@ -1268,12 +1261,10 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
||||
};
|
||||
}
|
||||
|
||||
pub fn createPersistentPromiseResolver(self: *JsContext) !PersistentPromiseResolver {
|
||||
const resolver = v8.Persistent(v8.PromiseResolver).init(self.isolate, v8.PromiseResolver.init(self.v8_context));
|
||||
try self.persisted_promise_resolvers.append(self.context_arena, resolver);
|
||||
pub fn createPersistentPromiseResolver(self: *JsContext) PersistentPromiseResolver {
|
||||
return .{
|
||||
.js_context = self,
|
||||
.resolver = resolver,
|
||||
.resolver = v8.Persistent(v8.PromiseResolver).init(self.isolate, v8.PromiseResolver.init(self.v8_context)),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2255,6 +2246,10 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
||||
self.resolver.deinit();
|
||||
}
|
||||
|
||||
pub fn setWeak(self: *PersistentPromiseResolver) void {
|
||||
self.resolver.setWeak();
|
||||
}
|
||||
|
||||
pub fn promise(self: PersistentPromiseResolver) Promise {
|
||||
return .{
|
||||
.promise = self.resolver.castToPromiseResolver().getPromise(),
|
||||
|
||||
Reference in New Issue
Block a user