diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/reflector.rs | 3 | ||||
-rw-r--r-- | components/script/dom/bindings/trace.rs | 14 | ||||
-rw-r--r-- | components/script/dom/customelementregistry.rs | 3 |
3 files changed, 16 insertions, 4 deletions
diff --git a/components/script/dom/bindings/reflector.rs b/components/script/dom/bindings/reflector.rs index 0fef0a30678..97d88cb4357 100644 --- a/components/script/dom/bindings/reflector.rs +++ b/components/script/dom/bindings/reflector.rs @@ -46,7 +46,8 @@ impl Reflector { /// Get the reflector. #[inline] pub fn get_jsobject(&self) -> HandleObject { - self.object.handle() + // We're rooted, so it's safe to hand out a handle to object in Heap + unsafe { self.object.handle() } } /// Initialize the reflector. (May be called only once.) diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 423b053cbbf..be38b14a540 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -59,9 +59,9 @@ use hyper::mime::Mime; use hyper::status::StatusCode; use ipc_channel::ipc::{IpcReceiver, IpcSender}; use js::glue::{CallObjectTracer, CallValueTracer}; -use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, TraceKind}; +use js::jsapi::{GCTraceKindToAscii, Heap, Handle, JSObject, JSTracer, TraceKind}; use js::jsval::JSVal; -use js::rust::Runtime; +use js::rust::{GCMethods, Runtime}; use js::typedarray::TypedArray; use js::typedarray::TypedArrayElement; use metrics::{InteractiveMetrics, InteractiveWindow}; @@ -788,6 +788,16 @@ impl<T: JSTraceable + 'static> RootedTraceableBox<T> { } } +impl<T> RootedTraceableBox<Heap<T>> + where + Heap<T>: JSTraceable + 'static, + T: GCMethods + Copy, +{ + pub fn handle(&self) -> Handle<T> { + unsafe { (*self.ptr).handle() } + } +} + impl<T: JSTraceable + Default> Default for RootedTraceableBox<T> { fn default() -> RootedTraceableBox<T> { RootedTraceableBox::new(T::default()) diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index a208f99def6..123b0bef2cb 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -604,7 +604,8 @@ impl CustomElementReaction { match *self { CustomElementReaction::Upgrade(ref definition) => upgrade_element(definition.clone(), element), CustomElementReaction::Callback(ref callback, ref arguments) => { - let arguments = arguments.iter().map(|arg| arg.handle()).collect(); + // We're rooted, so it's safe to hand out a handle to objects in Heap + let arguments = arguments.iter().map(|arg| unsafe { arg.handle() }).collect(); let _ = callback.Call_(&*element, arguments, ExceptionHandling::Report); } } |