summaryrefslogtreecommitdiff
path: root/core/extensions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/extensions.rs')
-rw-r--r--core/extensions.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/core/extensions.rs b/core/extensions.rs
index ae4537af4..10de66dd2 100644
--- a/core/extensions.rs
+++ b/core/extensions.rs
@@ -14,6 +14,18 @@ pub type OpEventLoopFn = dyn Fn(&mut OpState, &mut Context) -> bool;
pub struct OpDecl {
pub name: &'static str,
pub v8_fn_ptr: OpFnRef,
+ pub enabled: bool,
+ pub is_async: bool, // TODO(@AaronO): enum sync/async/fast ?
+}
+
+impl OpDecl {
+ pub fn enabled(self, enabled: bool) -> Self {
+ Self { enabled, ..self }
+ }
+
+ pub fn disable(self) -> Self {
+ self.enabled(false)
+ }
}
#[derive(Default)]
@@ -24,6 +36,7 @@ pub struct Extension {
middleware_fn: Option<Box<OpMiddlewareFn>>,
event_loop_middleware: Option<Box<OpEventLoopFn>>,
initialized: bool,
+ enabled: bool,
}
// Note: this used to be a trait, but we "downgraded" it to a single concrete type
@@ -50,7 +63,11 @@ impl Extension {
}
self.initialized = true;
- self.ops.take()
+ let mut ops = self.ops.take()?;
+ for op in ops.iter_mut() {
+ op.enabled = self.enabled && op.enabled;
+ }
+ Some(ops)
}
/// Allows setting up the initial op-state of an isolate at startup.
@@ -81,6 +98,14 @@ impl Extension {
.map(|f| f(op_state, cx))
.unwrap_or(false)
}
+
+ pub fn enabled(self, enabled: bool) -> Self {
+ Self { enabled, ..self }
+ }
+
+ pub fn disable(self) -> Self {
+ self.enabled(false)
+ }
}
// Provides a convenient builder pattern to declare Extensions
@@ -138,6 +163,7 @@ impl ExtensionBuilder {
middleware_fn: self.middleware.take(),
event_loop_middleware: self.event_loop_middleware.take(),
initialized: false,
+ enabled: true,
}
}
}