Skip to content

Commit 8f9584f

Browse files
committed
wip callback
1 parent 2dde39a commit 8f9584f

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

src/browser/page.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ pub const Page = struct {
122122
// load polyfills
123123
try polyfill.load(self.arena, self.main_context);
124124

125+
_ = session.executor.env.snapshot(self.main_context);
126+
125127
_ = try session.browser.app.loop.timeout(1 * std.time.ns_per_ms, &self.microtask_node);
126128
// message loop must run only non-test env
127129
if (comptime !builtin.is_test) {

src/runtime/js.zig

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,58 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
271271
self.allocator.destroy(self);
272272
}
273273

274+
pub fn snapshot(self: *Self, default_ctx: *const JsContext) v8.StartupData {
275+
self.snapshot_creator.setDefaultContextWithCallbacks(
276+
default_ctx.v8_context,
277+
// SerializeInternalFieldsCallback serializes internal fields
278+
// of V8 objects that contain embedder data
279+
.{
280+
.callback = struct {
281+
fn callback(holder: ?*v8.C_Object, index: c_int, data: ?*anyopaque) callconv(.C) v8.StartupData {
282+
_ = holder;
283+
_ = index;
284+
_ = data;
285+
// TODO
286+
std.debug.print("SerializeInternalFieldsCallback\n", .{});
287+
return .{};
288+
}
289+
}.callback,
290+
.data = null,
291+
},
292+
// SerializeContextDataCallback serializes context-specific
293+
// state (globals, modules, etc.)
294+
.{
295+
.callback = struct {
296+
fn callback(context: ?*v8.C_Context, index: c_int, data: ?*anyopaque) callconv(.C) v8.StartupData {
297+
_ = context;
298+
_ = index;
299+
_ = data;
300+
// TODO
301+
std.debug.print("SerializeContextDataCallback\n", .{});
302+
return .{};
303+
}
304+
}.callback,
305+
.data = null,
306+
},
307+
// SerializeAPIWrapperCallback serializes API wrappers that
308+
// bridge V8 and Native objects
309+
.{
310+
.callback = struct {
311+
fn callback(holder: ?*v8.C_Object, ptr: ?*anyopaque, data: ?*anyopaque) callconv(.C) v8.StartupData {
312+
_ = holder;
313+
_ = ptr;
314+
_ = data;
315+
// TODO
316+
std.debug.print("SerializeAPIWrapperCallback\n", .{});
317+
return .{};
318+
}
319+
}.callback,
320+
.data = null,
321+
},
322+
);
323+
return self.snapshot_creator.createBlob();
324+
}
325+
274326
pub fn newInspector(self: *Self, arena: Allocator, ctx: anytype) !Inspector {
275327
return Inspector.init(arena, self.isolate, ctx);
276328
}

0 commit comments

Comments
 (0)