diff options
Diffstat (limited to 'components/script/dom/bindings/conversions.rs')
-rw-r--r-- | components/script/dom/bindings/conversions.rs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 747573cec05..0cbb49bea3e 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -37,6 +37,7 @@ use dom::bindings::js::Root; use dom::bindings::num::Finite; use dom::bindings::reflector::{DomObject, Reflector}; use dom::bindings::str::{ByteString, DOMString, USVString}; +use dom::bindings::trace::{JSTraceable, RootedTraceableBox}; use dom::bindings::utils::DOMClass; use js; pub use js::conversions::{FromJSValConvertible, ToJSValConvertible, ConversionResult}; @@ -117,6 +118,22 @@ impl <T: DomObject + IDLInterface> FromJSValConvertible for Root<T> { } } +impl <T: FromJSValConvertible + JSTraceable> FromJSValConvertible for RootedTraceableBox<T> { + type Config = T::Config; + + unsafe fn from_jsval(cx: *mut JSContext, + value: HandleValue, + config: Self::Config) + -> Result<ConversionResult<Self>, ()> { + T::from_jsval(cx, value, config).map(|result| { + match result { + ConversionResult::Success(v) => ConversionResult::Success(RootedTraceableBox::new(v)), + ConversionResult::Failure(e) => ConversionResult::Failure(e), + } + }) + } +} + /// Convert `id` to a `DOMString`, assuming it is string-valued. /// /// Handling of invalid UTF-16 in strings depends on the relevant option. |