diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2016-10-05 10:29:38 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2016-10-06 21:36:00 +0200 |
commit | b6bbd41e11a8d73f884b7011905c05bd3efec3cd (patch) | |
tree | 44bf2af511f941aac3ff449b1b4b088f0286077c /components/script/dom/bindings/global.rs | |
parent | c66cf46bee6306ba8cb51f22c0d704c31c17d0fd (diff) | |
download | servo-b6bbd41e11a8d73f884b7011905c05bd3efec3cd.tar.gz servo-b6bbd41e11a8d73f884b7011905c05bd3efec3cd.zip |
Remove GlobalRoot and GlobalRef
Diffstat (limited to 'components/script/dom/bindings/global.rs')
-rw-r--r-- | components/script/dom/bindings/global.rs | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs deleted file mode 100644 index e62573b5a9a..00000000000 --- a/components/script/dom/bindings/global.rs +++ /dev/null @@ -1,143 +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 http://mozilla.org/MPL/2.0/. */ - -//! Abstractions for global scopes. -//! -//! This module contains smart pointers to global scopes, to simplify writing -//! code that works in workers as well as window scopes. - -use dom::bindings::conversions::root_from_object; -use dom::bindings::inheritance::Castable; -use dom::bindings::js::Root; -use dom::bindings::reflector::{Reflectable, Reflector}; -use dom::globalscope::GlobalScope; -use dom::window; -use dom::workerglobalscope::WorkerGlobalScope; -use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL}; -use js::glue::{IsWrapper, UnwrapObject}; -use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment}; -use js::jsapi::{JSContext, JSObject, JS_GetClass}; - -/// A freely-copyable reference to a rooted global object. -#[derive(Copy, Clone)] -pub enum GlobalRef<'a> { - /// A reference to a `Window` object. - Window(&'a window::Window), - /// A reference to a `WorkerGlobalScope` object. - Worker(&'a WorkerGlobalScope), -} - -/// A stack-based rooted reference to a global object. -pub enum GlobalRoot { - /// A root for a `Window` object. - Window(Root<window::Window>), - /// A root for a `WorkerGlobalScope` object. - Worker(Root<WorkerGlobalScope>), -} - -impl<'a> GlobalRef<'a> { - /// Returns that `GlobalRef` as a `GlobalScope` referengce. - pub fn as_global_scope(&self) -> &GlobalScope { - match *self { - GlobalRef::Window(window) => window.upcast(), - GlobalRef::Worker(worker) => worker.upcast(), - } - } - - /// Get the `JSContext` for the `JSRuntime` associated with the thread - /// this global object is on. - pub fn get_cx(&self) -> *mut JSContext { - match *self { - GlobalRef::Window(ref window) => window.get_cx(), - GlobalRef::Worker(ref worker) => worker.get_cx(), - } - } -} - -impl<'a> Reflectable for GlobalRef<'a> { - fn reflector(&self) -> &Reflector { - match *self { - GlobalRef::Window(ref window) => window.reflector(), - GlobalRef::Worker(ref worker) => worker.reflector(), - } - } -} - -impl GlobalRoot { - /// Obtain a safe reference to the global object that cannot outlive the - /// lifetime of this root. - pub fn r(&self) -> GlobalRef { - match *self { - GlobalRoot::Window(ref window) => GlobalRef::Window(window.r()), - GlobalRoot::Worker(ref worker) => GlobalRef::Worker(worker.r()), - } - } -} - -/// Returns the global scope of the realm that the given DOM object's reflector was created in. -pub fn global_scope_from_reflector<T: Reflectable>(reflector: &T) -> Root<GlobalScope> { - unsafe { global_scope_from_object(*reflector.reflector().get_jsobject()) } -} - -/// Returns the Rust global scope from a JS global object. -unsafe fn global_scope_from_global(global: *mut JSObject) -> Root<GlobalScope> { - assert!(!global.is_null()); - let clasp = JS_GetClass(global); - assert!(((*clasp).flags & (JSCLASS_IS_DOMJSCLASS | JSCLASS_IS_GLOBAL)) != 0); - root_from_object(global).unwrap() -} - -/// Returns the Rust global object from a JS global object. -#[allow(unrooted_must_root)] -unsafe fn global_root_from_global(global: *mut JSObject) -> GlobalRoot { - let global_scope = global_scope_from_global(global); - if let Some(window) = global_scope.downcast::<window::Window>() { - return GlobalRoot::Window(Root::from_ref(window)); - } - if let Some(worker) = Root::downcast(global_scope) { - return GlobalRoot::Worker(worker); - } - panic!("found DOM global that doesn't unwrap to Window or WorkerGlobalScope") -} - -/// Returns the global scope of the realm that the given JS object was created in. -pub unsafe fn global_scope_from_object(obj: *mut JSObject) -> Root<GlobalScope> { - assert!(!obj.is_null()); - let global = GetGlobalForObjectCrossCompartment(obj); - global_scope_from_global(global) -} - -/// Returns the global object of the realm that the given JS object was created in. -#[allow(unrooted_must_root)] -pub unsafe fn global_root_from_object(obj: *mut JSObject) -> GlobalRoot { - assert!(!obj.is_null()); - let global = GetGlobalForObjectCrossCompartment(obj); - global_root_from_global(global) -} - -/// Returns the global scope for the given JSContext -#[allow(unrooted_must_root)] -pub unsafe fn global_scope_from_context(cx: *mut JSContext) -> Root<GlobalScope> { - let global = CurrentGlobalOrNull(cx); - global_scope_from_global(global) -} - -/// Returns the global object for the given JSContext -#[allow(unrooted_must_root)] -pub unsafe fn global_root_from_context(cx: *mut JSContext) -> GlobalRoot { - let global = CurrentGlobalOrNull(cx); - global_root_from_global(global) -} - -/// Returns the global object of the realm that the given JS object was created in, -/// after unwrapping any wrappers. -pub unsafe fn global_scope_from_object_maybe_wrapped( - mut obj: *mut JSObject) - -> Root<GlobalScope> { - if IsWrapper(obj) { - obj = UnwrapObject(obj, /* stopAtWindowProxy = */ 0); - assert!(!obj.is_null()); - } - global_scope_from_object(obj) -} |