diff options
Diffstat (limited to 'runtime/ops')
-rw-r--r-- | runtime/ops/worker_host.rs | 24 |
1 files changed, 15 insertions, 9 deletions
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<WebWorker, AnyError>> +pub type WorkerEventCb = dyn Fn(WebWorker) -> LocalFutureObj<'static, Result<WebWorker, AnyError>> + Sync + Send; @@ -51,17 +51,16 @@ pub type PreloadModuleCb = dyn Fn(WebWorker) -> LocalFutureObj<'static, Result<W /// because `GothamState` used in `OpState` overrides /// value if type aliases have the same underlying type #[derive(Clone)] -pub struct CreateWebWorkerCbHolder(Arc<CreateWebWorkerCb>); +struct CreateWebWorkerCbHolder(Arc<CreateWebWorkerCb>); #[derive(Clone)] -pub struct FormatJsErrorFnHolder(Option<Arc<FormatJsErrorFn>>); +struct FormatJsErrorFnHolder(Option<Arc<FormatJsErrorFn>>); + +#[derive(Clone)] +struct PreloadModuleCbHolder(Arc<WorkerEventCb>); -/// 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<PreloadModuleCb>); +struct PreExecuteModuleCbHolder(Arc<WorkerEventCb>); pub struct WorkerThread { worker_handle: WebWorkerHandle, @@ -92,7 +91,8 @@ pub type WorkersTable = HashMap<WorkerId, WorkerThread>; pub fn init( create_web_worker_cb: Arc<CreateWebWorkerCb>, - preload_module_cb: Arc<PreloadModuleCb>, + preload_module_cb: Arc<WorkerEventCb>, + pre_execute_module_cb: Arc<WorkerEventCb>, format_js_error_fn: Option<Arc<FormatJsErrorFn>>, ) -> Extension { Extension::builder() @@ -106,6 +106,9 @@ pub fn init( let preload_module_cb_holder = PreloadModuleCbHolder(preload_module_cb.clone()); state.put::<PreloadModuleCbHolder>(preload_module_cb_holder); + let pre_execute_module_cb_holder = + PreExecuteModuleCbHolder(pre_execute_module_cb.clone()); + state.put::<PreExecuteModuleCbHolder>(pre_execute_module_cb_holder); let format_js_error_fn_holder = FormatJsErrorFnHolder(format_js_error_fn.clone()); state.put::<FormatJsErrorFnHolder>(format_js_error_fn_holder); @@ -174,6 +177,8 @@ fn op_create_worker( state.put::<CreateWebWorkerCbHolder>(create_web_worker_cb.clone()); let preload_module_cb = state.take::<PreloadModuleCbHolder>(); state.put::<PreloadModuleCbHolder>(preload_module_cb.clone()); + let pre_execute_module_cb = state.take::<PreExecuteModuleCbHolder>(); + state.put::<PreExecuteModuleCbHolder>(pre_execute_module_cb.clone()); let format_js_error_fn = state.take::<FormatJsErrorFnHolder>(); state.put::<FormatJsErrorFnHolder>(format_js_error_fn.clone()); state.put::<WorkerId>(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, ) })?; |