diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 15 | ||||
-rw-r--r-- | src/components/script/dom/blob.rs | 11 | ||||
-rw-r--r-- | src/components/script/dom/formdata.rs | 11 | ||||
-rw-r--r-- | src/components/script/dom/navigator.rs | 11 |
4 files changed, 21 insertions, 27 deletions
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 6cb7cacea92..a97db130bb2 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -5,6 +5,7 @@ use dom::bindings::codegen::PrototypeList; use dom::bindings::codegen::PrototypeList::MAX_PROTO_CHAIN_LENGTH; use dom::bindings::node; +use dom::window; use dom::node::{AbstractNode, ScriptView}; use std::libc::c_uint; @@ -544,6 +545,20 @@ pub trait Reflectable { fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable>; } +pub fn reflect_dom_object<T: Reflectable> + (obj: @mut T, + window: &window::Window, + wrap_fn: extern "Rust" fn(*JSContext, *JSObject, @mut T) -> *JSObject) + -> @mut T { + let cx = window.get_cx(); + let scope = window.reflector().get_jsobject(); + if wrap_fn(cx, scope, obj).is_null() { + fail!("Could not eagerly wrap object"); + } + assert!(obj.reflector().get_jsobject().is_not_null()); + obj +} + pub struct Reflector { object: *JSObject } diff --git a/src/components/script/dom/blob.rs b/src/components/script/dom/blob.rs index 9e265e4114b..8d1ef93338a 100644 --- a/src/components/script/dom/blob.rs +++ b/src/components/script/dom/blob.rs @@ -2,7 +2,7 @@ * 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/. */ -use dom::bindings::utils::{Reflectable, Reflector}; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::utils::Fallible; use dom::bindings::codegen::BlobBinding; use dom::window::Window; @@ -23,14 +23,7 @@ impl Blob { } pub fn new(window: @mut Window) -> @mut Blob { - let blob = @mut Blob::new_inherited(window); - let cx = window.get_cx(); - let scope = window.reflector().get_jsobject(); - if BlobBinding::Wrap(cx, scope, blob).is_null() { - fail!("BlobBinding::Wrap failed"); - } - assert!(blob.reflector().get_jsobject().is_not_null()); - blob + reflect_dom_object(@mut Blob::new_inherited(window), window, BlobBinding::Wrap) } } diff --git a/src/components/script/dom/formdata.rs b/src/components/script/dom/formdata.rs index cc3f1d6b6ab..0bff8ce41d7 100644 --- a/src/components/script/dom/formdata.rs +++ b/src/components/script/dom/formdata.rs @@ -2,7 +2,7 @@ * 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/. */ -use dom::bindings::utils::{Reflectable, Reflector}; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::utils::{DOMString, null_str_as_empty}; use dom::bindings::codegen::FormDataBinding; use dom::blob::Blob; @@ -33,14 +33,7 @@ impl FormData { } pub fn new(window: @mut Window) -> @mut FormData { - let formdata = @mut FormData::new_inherited(window); - let cx = window.get_cx(); - let scope = window.reflector().get_jsobject(); - if FormDataBinding::Wrap(cx, scope, formdata).is_null() { - fail!("FormDataBinding::Wrap failed"); - } - assert!(formdata.reflector().get_jsobject().is_not_null()); - formdata + reflect_dom_object(@mut FormData::new_inherited(window), window, FormDataBinding::Wrap) } pub fn Append(&mut self, name: &DOMString, value: @mut Blob, filename: Option<DOMString>) { diff --git a/src/components/script/dom/navigator.rs b/src/components/script/dom/navigator.rs index fc60c8486b3..88ea1b7974c 100644 --- a/src/components/script/dom/navigator.rs +++ b/src/components/script/dom/navigator.rs @@ -2,7 +2,7 @@ * 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/. */ -use dom::bindings::utils::{Reflectable, Reflector}; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::utils::{DOMString, Fallible}; use dom::bindings::codegen::NavigatorBinding; use dom::window::Window; @@ -22,14 +22,7 @@ impl Navigator { } pub fn new(window: &Window) -> @mut Navigator { - let nav = @mut Navigator::new_inherited(); - let cx = window.get_cx(); - let scope = window.reflector().get_jsobject(); - if NavigatorBinding::Wrap(cx, scope, nav).is_null() { - fail!("NavigatorBinding::Wrap failed"); - } - assert!(nav.reflector().get_jsobject().is_not_null()); - nav + reflect_dom_object(@mut Navigator::new_inherited(), window, NavigatorBinding::Wrap) } pub fn DoNotTrack(&self) -> DOMString { |