diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-08-16 21:00:35 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-16 21:00:35 -0400 |
commit | 868c7e38bfc9a09b5cfeae30ea5a2345a6d700d7 (patch) | |
tree | 555d1b5cb080aaddfdb8b70c0779086d243a984c /runtime/ops | |
parent | 0b70c81f97a730fda353b6d06e589c3a2a558676 (diff) |
feat(runtime): add pre_execute_module_cb (#15485)
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, ) })?; |