From 868c7e38bfc9a09b5cfeae30ea5a2345a6d700d7 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 16 Aug 2022 21:00:35 -0400 Subject: feat(runtime): add pre_execute_module_cb (#15485) --- runtime/ops/worker_host.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'runtime/ops') diff --git a/runtime/ops/worker_host.rs b/runtime/ops/worker_host.rs index b61fca460..2f07e48b2 100644 --- a/runtime/ops/worker_host.rs +++ b/runtime/ops/worker_host.rs @@ -42,7 +42,7 @@ pub type CreateWebWorkerCb = dyn Fn(CreateWebWorkerArgs) -> (WebWorker, Sendable + Sync + Send; -pub type PreloadModuleCb = dyn Fn(WebWorker) -> LocalFutureObj<'static, Result> +pub type WorkerEventCb = dyn Fn(WebWorker) -> LocalFutureObj<'static, Result> + Sync + Send; @@ -51,17 +51,16 @@ pub type PreloadModuleCb = dyn Fn(WebWorker) -> LocalFutureObj<'static, Result); +struct CreateWebWorkerCbHolder(Arc); #[derive(Clone)] -pub struct FormatJsErrorFnHolder(Option>); +struct FormatJsErrorFnHolder(Option>); + +#[derive(Clone)] +struct PreloadModuleCbHolder(Arc); -/// A holder for callback that can used to preload some modules into a WebWorker -/// before actual worker code is executed. It's a struct instead of a type -/// because `GothamState` used in `OpState` overrides -/// value if type aliases have the same underlying type #[derive(Clone)] -pub struct PreloadModuleCbHolder(Arc); +struct PreExecuteModuleCbHolder(Arc); pub struct WorkerThread { worker_handle: WebWorkerHandle, @@ -92,7 +91,8 @@ pub type WorkersTable = HashMap; pub fn init( create_web_worker_cb: Arc, - preload_module_cb: Arc, + preload_module_cb: Arc, + pre_execute_module_cb: Arc, format_js_error_fn: Option>, ) -> Extension { Extension::builder() @@ -106,6 +106,9 @@ pub fn init( let preload_module_cb_holder = PreloadModuleCbHolder(preload_module_cb.clone()); state.put::(preload_module_cb_holder); + let pre_execute_module_cb_holder = + PreExecuteModuleCbHolder(pre_execute_module_cb.clone()); + state.put::(pre_execute_module_cb_holder); let format_js_error_fn_holder = FormatJsErrorFnHolder(format_js_error_fn.clone()); state.put::(format_js_error_fn_holder); @@ -174,6 +177,8 @@ fn op_create_worker( state.put::(create_web_worker_cb.clone()); let preload_module_cb = state.take::(); state.put::(preload_module_cb.clone()); + let pre_execute_module_cb = state.take::(); + state.put::(pre_execute_module_cb.clone()); let format_js_error_fn = state.take::(); state.put::(format_js_error_fn.clone()); state.put::(worker_id.next().unwrap()); @@ -219,6 +224,7 @@ fn op_create_worker( module_specifier, maybe_source_code, preload_module_cb.0, + pre_execute_module_cb.0, format_js_error_fn.0, ) })?; -- cgit v1.2.3