aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/guard.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings/guard.rs')
-rw-r--r--components/script/dom/bindings/guard.rs96
1 files changed, 0 insertions, 96 deletions
diff --git a/components/script/dom/bindings/guard.rs b/components/script/dom/bindings/guard.rs
deleted file mode 100644
index 16b5187abef..00000000000
--- a/components/script/dom/bindings/guard.rs
+++ /dev/null
@@ -1,96 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-//! Machinery to conditionally expose things.
-
-use js::rust::HandleObject;
-use script_bindings::codegen::Globals::Globals;
-use servo_config::prefs::get;
-
-use crate::DomTypes;
-use crate::dom::bindings::interface::is_exposed_in;
-use crate::dom::globalscope::GlobalScopeHelpers;
-use crate::realms::{AlreadyInRealm, InRealm};
-use crate::script_runtime::JSContext;
-
-/// A container with a list of conditions.
-pub(crate) struct Guard<T: Clone + Copy> {
- conditions: &'static [Condition],
- value: T,
-}
-
-impl<T: Clone + Copy> Guard<T> {
- /// Construct a new guarded value.
- pub(crate) const fn new(conditions: &'static [Condition], value: T) -> Self {
- Guard { conditions, value }
- }
-
- /// Expose the value if the conditions are satisfied.
- ///
- /// The passed handle is the object on which the value may be exposed.
- pub(crate) fn expose<D: DomTypes>(
- &self,
- cx: JSContext,
- obj: HandleObject,
- global: HandleObject,
- ) -> Option<T> {
- let mut exposed_on_global = false;
- let conditions_satisfied = self.conditions.iter().all(|c| match c {
- Condition::Satisfied => {
- exposed_on_global = true;
- true
- },
- // If there are multiple Exposed conditions, we just need one of them to be true
- Condition::Exposed(globals) => {
- exposed_on_global |= is_exposed_in(global, *globals);
- true
- },
- _ => c.is_satisfied::<D>(cx, obj, global),
- });
-
- if conditions_satisfied && exposed_on_global {
- Some(self.value)
- } else {
- None
- }
- }
-}
-
-/// A condition to expose things.
-#[derive(Clone, Copy)]
-pub(crate) enum Condition {
- /// The condition is satisfied if the function returns true.
- Func(fn(JSContext, HandleObject) -> bool),
- /// The condition is satisfied if the preference is set.
- Pref(&'static str),
- // The condition is satisfied if the interface is exposed in the global.
- Exposed(Globals),
- SecureContext(),
- /// The condition is always satisfied.
- Satisfied,
-}
-
-fn is_secure_context<D: DomTypes>(cx: JSContext) -> bool {
- unsafe {
- let in_realm_proof = AlreadyInRealm::assert_for_cx(JSContext::from_ptr(*cx));
- D::GlobalScope::from_context(*cx, InRealm::Already(&in_realm_proof)).is_secure_context()
- }
-}
-
-impl Condition {
- pub(crate) fn is_satisfied<D: DomTypes>(
- &self,
- cx: JSContext,
- obj: HandleObject,
- global: HandleObject,
- ) -> bool {
- match *self {
- Condition::Pref(name) => get().get_value(name).try_into().unwrap_or(false),
- Condition::Func(f) => f(cx, obj),
- Condition::Exposed(globals) => is_exposed_in(global, globals),
- Condition::SecureContext() => is_secure_context::<D>(cx),
- Condition::Satisfied => true,
- }
- }
-}