summaryrefslogtreecommitdiff
path: root/core/ops_builtin_v8.rs
diff options
context:
space:
mode:
authorColin Ihrig <cjihrig@gmail.com>2022-06-28 10:49:30 -0400
committerGitHub <noreply@github.com>2022-06-28 10:49:30 -0400
commit0f6a5c5fc24e8dc9125c5c536c8547a86ca87b15 (patch)
tree41538ee1df06dc80d60e49ed50177f99ba8dc297 /core/ops_builtin_v8.rs
parentab11b45d1d2678cfea2217ac72fc24317eef777d (diff)
feat(web): add beforeunload event (#14830)
This commit adds the 'beforeunload' event. Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'core/ops_builtin_v8.rs')
-rw-r--r--core/ops_builtin_v8.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/core/ops_builtin_v8.rs b/core/ops_builtin_v8.rs
index 7f0c58212..4bc80faa5 100644
--- a/core/ops_builtin_v8.rs
+++ b/core/ops_builtin_v8.rs
@@ -47,6 +47,7 @@ pub(crate) fn init_builtins_v8() -> Vec<OpDecl> {
op_op_names::decl(),
op_apply_source_map::decl(),
op_set_format_exception_callback::decl(),
+ op_event_loop_has_more_work::decl(),
]
}
@@ -786,3 +787,26 @@ fn op_set_format_exception_callback<'a>(
let old = old.map(|v| v8::Local::new(scope, v));
Ok(old.map(|v| from_v8(scope, v.into()).unwrap()))
}
+
+#[op(v8)]
+fn op_event_loop_has_more_work(scope: &mut v8::HandleScope) -> bool {
+ let state_rc = JsRuntime::state(scope);
+ let module_map_rc = JsRuntime::module_map(scope);
+ let state = state_rc.borrow_mut();
+ let module_map = module_map_rc.borrow();
+
+ let has_pending_refed_ops = state.pending_ops.len() > state.unrefed_ops.len();
+ let has_pending_dyn_imports = module_map.has_pending_dynamic_imports();
+ let has_pending_dyn_module_evaluation =
+ !state.pending_dyn_mod_evaluate.is_empty();
+ let has_pending_module_evaluation = state.pending_mod_evaluate.is_some();
+ let has_pending_background_tasks = scope.has_pending_background_tasks();
+ let has_tick_scheduled = state.has_tick_scheduled;
+
+ has_pending_refed_ops
+ || has_pending_dyn_imports
+ || has_pending_dyn_module_evaluation
+ || has_pending_module_evaluation
+ || has_pending_background_tasks
+ || has_tick_scheduled
+}