aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-07-15 13:30:19 +0200
committerMs2ger <ms2ger@gmail.com>2014-07-15 15:33:57 +0200
commit829259fb794831167c9992bd6b1c71bf81bd8023 (patch)
tree4426dba3705cf976e4ead2310e8b34ebac162947
parenta14bb68c3f53ef5fbf562e145b60da46ece9fedc (diff)
downloadservo-829259fb794831167c9992bd6b1c71bf81bd8023.tar.gz
servo-829259fb794831167c9992bd6b1c71bf81bd8023.zip
Introduce abstractions for global scopes.
Part of #2811.
-rw-r--r--src/components/script/dom/attr.rs3
-rw-r--r--src/components/script/dom/attrlist.rs3
-rw-r--r--src/components/script/dom/bindings/callback.rs2
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py5
-rw-r--r--src/components/script/dom/bindings/error.rs5
-rw-r--r--src/components/script/dom/bindings/global.rs82
-rw-r--r--src/components/script/dom/bindings/utils.rs19
-rw-r--r--src/components/script/dom/blob.rs14
-rw-r--r--src/components/script/dom/clientrect.rs3
-rw-r--r--src/components/script/dom/clientrectlist.rs3
-rw-r--r--src/components/script/dom/comment.rs7
-rw-r--r--src/components/script/dom/console.rs4
-rw-r--r--src/components/script/dom/customevent.rs8
-rw-r--r--src/components/script/dom/document.rs11
-rw-r--r--src/components/script/dom/documentfragment.rs7
-rw-r--r--src/components/script/dom/domexception.rs6
-rw-r--r--src/components/script/dom/domimplementation.rs3
-rw-r--r--src/components/script/dom/domparser.rs7
-rw-r--r--src/components/script/dom/domtokenlist.rs3
-rw-r--r--src/components/script/dom/event.rs8
-rw-r--r--src/components/script/dom/file.rs6
-rw-r--r--src/components/script/dom/formdata.rs10
-rw-r--r--src/components/script/dom/htmlcollection.rs3
-rw-r--r--src/components/script/dom/location.rs3
-rw-r--r--src/components/script/dom/mouseevent.rs7
-rw-r--r--src/components/script/dom/navigator.rs3
-rw-r--r--src/components/script/dom/node.rs5
-rw-r--r--src/components/script/dom/nodelist.rs3
-rw-r--r--src/components/script/dom/performance.rs4
-rw-r--r--src/components/script/dom/performancetiming.rs4
-rw-r--r--src/components/script/dom/progressevent.rs6
-rw-r--r--src/components/script/dom/testbinding.rs14
-rw-r--r--src/components/script/dom/text.rs7
-rw-r--r--src/components/script/dom/uievent.rs7
-rw-r--r--src/components/script/dom/urlsearchparams.rs6
-rw-r--r--src/components/script/dom/validitystate.rs3
-rw-r--r--src/components/script/dom/window.rs3
-rw-r--r--src/components/script/dom/xmlhttprequest.rs30
-rw-r--r--src/components/script/dom/xmlhttprequestupload.rs6
-rw-r--r--src/components/script/script.rs1
-rw-r--r--src/components/script/script_task.rs5
41 files changed, 227 insertions, 112 deletions
diff --git a/src/components/script/dom/attr.rs b/src/components/script/dom/attr.rs
index 0a2fba8893e..3ff369bbba8 100644
--- a/src/components/script/dom/attr.rs
+++ b/src/components/script/dom/attr.rs
@@ -4,6 +4,7 @@
use dom::bindings::codegen::Bindings::AttrBinding;
use dom::bindings::codegen::InheritTypes::NodeCast;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
@@ -94,7 +95,7 @@ impl Attr {
name: DOMString, namespace: Namespace,
prefix: Option<DOMString>, owner: &JSRef<Element>) -> Temporary<Attr> {
let attr = Attr::new_inherited(local_name, value, name, namespace, prefix, owner);
- reflect_dom_object(box attr, window, AttrBinding::Wrap)
+ reflect_dom_object(box attr, &Window(*window), AttrBinding::Wrap)
}
pub fn set_value(&self, set_type: AttrSettingType, value: AttrValue) {
diff --git a/src/components/script/dom/attrlist.rs b/src/components/script/dom/attrlist.rs
index 1ccae05b53a..8f4c309ab54 100644
--- a/src/components/script/dom/attrlist.rs
+++ b/src/components/script/dom/attrlist.rs
@@ -4,6 +4,7 @@
use dom::attr::Attr;
use dom::bindings::codegen::Bindings::AttrListBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::element::Element;
@@ -25,7 +26,7 @@ impl AttrList {
pub fn new(window: &JSRef<Window>, elem: &JSRef<Element>) -> Temporary<AttrList> {
reflect_dom_object(box AttrList::new_inherited(elem),
- window, AttrListBinding::Wrap)
+ &Window(*window), AttrListBinding::Wrap)
}
}
diff --git a/src/components/script/dom/bindings/callback.rs b/src/components/script/dom/bindings/callback.rs
index 3cfb3257e5b..865bd9d3ef7 100644
--- a/src/components/script/dom/bindings/callback.rs
+++ b/src/components/script/dom/bindings/callback.rs
@@ -115,7 +115,7 @@ pub struct CallSetup {
impl CallSetup {
pub fn new<T: CallbackContainer>(callback: &T, handling: ExceptionHandling) -> CallSetup {
let global = global_object_for_js_object(callback.callback()).root();
- let cx = global.deref().get_cx();
+ let cx = global.root_ref().get_cx();
CallSetup {
cx: cx,
_handling: handling
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 43c5ac3f169..525c77b6419 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1792,7 +1792,7 @@ class CGWrapMethod(CGAbstractMethod):
def __init__(self, descriptor):
assert descriptor.interface.hasInterfacePrototypeObject()
if not descriptor.createGlobal:
- args = [Argument('*mut JSContext', 'aCx'), Argument('&JSRef<Window>', 'aScope'),
+ args = [Argument('*mut JSContext', 'aCx'), Argument('&GlobalRef', 'aScope'),
Argument("Box<%s>" % descriptor.concreteType, 'aObject', mutable=True)]
else:
args = [Argument('*mut JSContext', 'aCx'),
@@ -2185,7 +2185,7 @@ class CGCallGenerator(CGThing):
" Ok(result) => result,\n"
" Err(e) => {\n"
"%s"
- " throw_dom_exception(cx, &*global, e);\n"
+ " throw_dom_exception(cx, &global.root_ref(), e);\n"
" return%s;\n"
" },\n"
"};\n" % (glob, errorResult)))
@@ -4405,6 +4405,7 @@ class CGBindingRoot(CGThing):
'js::rust::with_compartment',
'dom::types::*',
'dom::bindings',
+ 'dom::bindings::global::GlobalRef',
'dom::bindings::js::{JS, JSRef, Root, RootedReference, Temporary}',
'dom::bindings::js::{OptionalRootable, OptionalRootedRootable, ResultRootable}',
'dom::bindings::js::{OptionalRootedReference, OptionalOptionalRootedRootable}',
diff --git a/src/components/script/dom/bindings/error.rs b/src/components/script/dom/bindings/error.rs
index 7b021bbae2d..f204dc5859a 100644
--- a/src/components/script/dom/bindings/error.rs
+++ b/src/components/script/dom/bindings/error.rs
@@ -3,9 +3,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::conversions::ToJSValConvertible;
-use dom::bindings::js::JSRef;
+use dom::bindings::global::GlobalRef;
use dom::domexception::DOMException;
-use dom::window::Window;
use js::jsapi::{JSContext, JSBool};
use js::jsapi::{JS_IsExceptionPending, JS_SetPendingException};
@@ -37,7 +36,7 @@ pub type Fallible<T> = Result<T, Error>;
pub type ErrorResult = Fallible<()>;
-pub fn throw_dom_exception(cx: *mut JSContext, global: &JSRef<Window>,
+pub fn throw_dom_exception(cx: *mut JSContext, global: &GlobalRef,
result: Error) {
assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
let exception = DOMException::new_from_error(global, result).root();
diff --git a/src/components/script/dom/bindings/global.rs b/src/components/script/dom/bindings/global.rs
new file mode 100644
index 00000000000..cf69b82517b
--- /dev/null
+++ b/src/components/script/dom/bindings/global.rs
@@ -0,0 +1,82 @@
+/* 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.
+
+use dom::bindings::js::{JS, JSRef, Root};
+use dom::bindings::utils::{Reflectable, Reflector};
+use dom::window::Window;
+use page::Page;
+use script_task::ScriptChan;
+
+use js::jsapi::JSContext;
+
+use url::Url;
+
+pub enum GlobalRef<'a> {
+ Window(JSRef<'a, Window>),
+}
+
+pub enum GlobalRoot<'a, 'b> {
+ WindowRoot(Root<'a, 'b, Window>),
+}
+
+#[deriving(Encodable)]
+pub enum GlobalField {
+ WindowField(JS<Window>),
+}
+
+impl<'a> GlobalRef<'a> {
+ pub fn get_cx(&self) -> *mut JSContext {
+ match *self {
+ Window(ref window) => window.get_cx(),
+ }
+ }
+
+ pub fn as_window<'b>(&'b self) -> &'b JSRef<'b, Window> {
+ match *self {
+ Window(ref window) => window,
+ }
+ }
+
+ pub fn page<'b>(&'b self) -> &'b Page {
+ self.as_window().page()
+ }
+ pub fn get_url(&self) -> Url {
+ self.as_window().get_url()
+ }
+ pub fn script_chan<'b>(&'b self) -> &'b ScriptChan {
+ &self.as_window().script_chan
+ }
+}
+
+impl<'a> Reflectable for GlobalRef<'a> {
+ fn reflector<'b>(&'b self) -> &'b Reflector {
+ match *self {
+ Window(ref window) => window.reflector(),
+ }
+ }
+}
+
+impl<'a, 'b> GlobalRoot<'a, 'b> {
+ pub fn root_ref<'c>(&'c self) -> GlobalRef<'c> {
+ match *self {
+ WindowRoot(ref window) => Window(window.root_ref()),
+ }
+ }
+}
+
+impl GlobalField {
+ pub fn from_rooted(global: &GlobalRef) -> GlobalField {
+ match *global {
+ Window(ref window) => WindowField(JS::from_rooted(window)),
+ }
+ }
+
+ pub fn root(&self) -> GlobalRoot {
+ match *self {
+ WindowField(ref window) => WindowRoot(window.root()),
+ }
+ }
+}
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs
index 4200cec0b20..628debb24ea 100644
--- a/src/components/script/dom/bindings/utils.rs
+++ b/src/components/script/dom/bindings/utils.rs
@@ -5,7 +5,8 @@
use dom::bindings::codegen::PrototypeList;
use dom::bindings::codegen::PrototypeList::MAX_PROTO_CHAIN_LENGTH;
use dom::bindings::conversions::{FromJSValConvertible, IDLInterface};
-use dom::bindings::js::{JS, JSRef, Temporary, Root};
+use dom::bindings::global::{GlobalRef, GlobalField, WindowField};
+use dom::bindings::js::{JS, Temporary, Root};
use dom::bindings::trace::Untraceable;
use dom::browsercontext;
use dom::window;
@@ -373,8 +374,8 @@ pub trait Reflectable {
pub fn reflect_dom_object<T: Reflectable>
(obj: Box<T>,
- global: &JSRef<window::Window>,
- wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<window::Window>, Box<T>) -> Temporary<T>)
+ global: &GlobalRef,
+ wrap_fn: extern "Rust" fn(*mut JSContext, &GlobalRef, Box<T>) -> Temporary<T>)
-> Temporary<T> {
wrap_fn(global.get_cx(), global, obj)
}
@@ -580,19 +581,23 @@ pub extern fn outerize_global(_cx: *mut JSContext, obj: JSHandleObject) -> *mut
}
/// Returns the global object of the realm that the given JS object was created in.
-pub fn global_object_for_js_object(obj: *mut JSObject) -> JS<window::Window> {
+pub fn global_object_for_js_object(obj: *mut JSObject) -> GlobalField {
unsafe {
let global = GetGlobalForObjectCrossCompartment(obj);
let clasp = JS_GetClass(global);
assert!(((*clasp).flags & (JSCLASS_IS_DOMJSCLASS | JSCLASS_IS_GLOBAL)) != 0);
- FromJSValConvertible::from_jsval(ptr::mut_null(), ObjectOrNullValue(global), ())
- .ok().expect("found DOM global that doesn't unwrap to Window")
+ match FromJSValConvertible::from_jsval(ptr::mut_null(), ObjectOrNullValue(global), ()) {
+ Ok(window) => return WindowField(window),
+ Err(_) => (),
+ }
+
+ fail!("found DOM global that doesn't unwrap to Window")
}
}
fn cx_for_dom_reflector(obj: *mut JSObject) -> *mut JSContext {
let global = global_object_for_js_object(obj).root();
- global.get_cx()
+ global.root_ref().get_cx()
}
pub fn cx_for_dom_object<T: Reflectable>(obj: &T) -> *mut JSContext {
diff --git a/src/components/script/dom/blob.rs b/src/components/script/dom/blob.rs
index 6128b1c8ce2..f78c3e2f5f5 100644
--- a/src/components/script/dom/blob.rs
+++ b/src/components/script/dom/blob.rs
@@ -3,11 +3,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::InheritTypes::FileDerived;
-use dom::bindings::js::{JS, JSRef, Temporary};
+use dom::bindings::global::{GlobalRef, GlobalField};
+use dom::bindings::js::Temporary;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::bindings::error::Fallible;
use dom::bindings::codegen::Bindings::BlobBinding;
-use dom::window::Window;
#[deriving(Encodable)]
pub enum BlobType {
@@ -18,26 +18,26 @@ pub enum BlobType {
#[deriving(Encodable)]
pub struct Blob {
reflector_: Reflector,
- global: JS<Window>,
+ global: GlobalField,
type_: BlobType
}
impl Blob {
- pub fn new_inherited(global: &JSRef<Window>) -> Blob {
+ pub fn new_inherited(global: &GlobalRef) -> Blob {
Blob {
reflector_: Reflector::new(),
- global: JS::from_rooted(global),
+ global: GlobalField::from_rooted(global),
type_: BlobTypeId
}
}
- pub fn new(global: &JSRef<Window>) -> Temporary<Blob> {
+ pub fn new(global: &GlobalRef) -> Temporary<Blob> {
reflect_dom_object(box Blob::new_inherited(global),
global,
BlobBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>) -> Fallible<Temporary<Blob>> {
+ pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<Blob>> {
Ok(Blob::new(global))
}
}
diff --git a/src/components/script/dom/clientrect.rs b/src/components/script/dom/clientrect.rs
index 8ab22663136..cf6eaee67fc 100644
--- a/src/components/script/dom/clientrect.rs
+++ b/src/components/script/dom/clientrect.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::ClientRectBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
@@ -36,7 +37,7 @@ impl ClientRect {
top: Au, bottom: Au,
left: Au, right: Au) -> Temporary<ClientRect> {
let rect = ClientRect::new_inherited(window, top, bottom, left, right);
- reflect_dom_object(box rect, window, ClientRectBinding::Wrap)
+ reflect_dom_object(box rect, &Window(*window), ClientRectBinding::Wrap)
}
}
diff --git a/src/components/script/dom/clientrectlist.rs b/src/components/script/dom/clientrectlist.rs
index eccca831a03..ded917213d8 100644
--- a/src/components/script/dom/clientrectlist.rs
+++ b/src/components/script/dom/clientrectlist.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::ClientRectListBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::clientrect::ClientRect;
@@ -29,7 +30,7 @@ impl ClientRectList {
pub fn new(window: &JSRef<Window>,
rects: Vec<JSRef<ClientRect>>) -> Temporary<ClientRectList> {
reflect_dom_object(box ClientRectList::new_inherited(window, rects),
- window, ClientRectListBinding::Wrap)
+ &Window(*window), ClientRectListBinding::Wrap)
}
}
diff --git a/src/components/script/dom/comment.rs b/src/components/script/dom/comment.rs
index 3bc9344b4eb..fe200cf9d48 100644
--- a/src/components/script/dom/comment.rs
+++ b/src/components/script/dom/comment.rs
@@ -5,13 +5,14 @@
use dom::bindings::codegen::InheritTypes::CommentDerived;
use dom::bindings::codegen::Bindings::CommentBinding;
use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::characterdata::CharacterData;
use dom::document::Document;
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::node::{CommentNodeTypeId, Node};
-use dom::window::{Window, WindowMethods};
+use dom::window::WindowMethods;
use servo_util::str::DOMString;
/// An HTML comment.
@@ -38,8 +39,8 @@ impl Comment {
Node::reflect_node(box node, document, CommentBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>, data: DOMString) -> Fallible<Temporary<Comment>> {
- let document = global.Document().root();
+ pub fn Constructor(global: &GlobalRef, data: DOMString) -> Fallible<Temporary<Comment>> {
+ let document = global.as_window().Document().root();
Ok(Comment::new(data, &*document))
}
}
diff --git a/src/components/script/dom/console.rs b/src/components/script/dom/console.rs
index 52e108ea649..341ab20f8be 100644
--- a/src/components/script/dom/console.rs
+++ b/src/components/script/dom/console.rs
@@ -3,9 +3,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::ConsoleBinding;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
-use dom::window::Window;
use servo_util::str::DOMString;
#[deriving(Encodable)]
@@ -20,7 +20,7 @@ impl Console {
}
}
- pub fn new(global: &JSRef<Window>) -> Temporary<Console> {
+ pub fn new(global: &GlobalRef) -> Temporary<Console> {
reflect_dom_object(box Console::new_inherited(), global, ConsoleBinding::Wrap)
}
}
diff --git a/src/components/script/dom/customevent.rs b/src/components/script/dom/customevent.rs
index 965decf2e55..5485391ec0c 100644
--- a/src/components/script/dom/customevent.rs
+++ b/src/components/script/dom/customevent.rs
@@ -5,11 +5,11 @@
use dom::bindings::codegen::Bindings::CustomEventBinding;
use dom::bindings::codegen::InheritTypes::{EventCast, CustomEventDerived};
use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::event::{Event, EventMethods, EventTypeId, CustomEventTypeId};
-use dom::window::Window;
use js::jsapi::JSContext;
use js::jsval::{JSVal, NullValue};
use servo_util::str::DOMString;
@@ -43,17 +43,17 @@ impl CustomEvent {
}
}
- pub fn new_uninitialized(global: &JSRef<Window>) -> Temporary<CustomEvent> {
+ pub fn new_uninitialized(global: &GlobalRef) -> Temporary<CustomEvent> {
reflect_dom_object(box CustomEvent::new_inherited(CustomEventTypeId),
global,
CustomEventBinding::Wrap)
}
- pub fn new(global: &JSRef<Window>, type_: DOMString, bubbles: bool, cancelable: bool, detail: JSVal) -> Temporary<CustomEvent> {
+ pub fn new(global: &GlobalRef, type_: DOMString, bubbles: bool, cancelable: bool, detail: JSVal) -> Temporary<CustomEvent> {
let ev = CustomEvent::new_uninitialized(global).root();
ev.deref().InitCustomEvent(global.get_cx(), type_, bubbles, cancelable, detail);
Temporary::from_rooted(&*ev)
}
- pub fn Constructor(global: &JSRef<Window>,
+ pub fn Constructor(global: &GlobalRef,
type_: DOMString,
init: &CustomEventBinding::CustomEventInit) -> Fallible<Temporary<CustomEvent>>{
Ok(CustomEvent::new(global, type_, init.parent.bubbles, init.parent.cancelable, init.detail))
diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs
index 499165e5a26..bee7494ed73 100644
--- a/src/components/script/dom/document.rs
+++ b/src/components/script/dom/document.rs
@@ -10,6 +10,7 @@ use dom::bindings::codegen::InheritTypes::{DocumentTypeCast, HTMLHtmlElementCast
use dom::bindings::codegen::InheritTypes::EventTargetCast;
use dom::bindings::error::{ErrorResult, Fallible, NotSupported, InvalidCharacter};
use dom::bindings::error::{HierarchyRequest, NamespaceError};
+use dom::bindings::global::{GlobalRef, Window};
use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable, TemporaryPushable};
use dom::bindings::js::OptionalRootable;
use dom::bindings::trace::{Traceable, Untraceable};
@@ -222,13 +223,13 @@ impl Document {
}
// http://dom.spec.whatwg.org/#dom-document
- pub fn Constructor(global: &JSRef<Window>) -> Fallible<Temporary<Document>> {
- Ok(Document::new(global, None, NonHTMLDocument, None))
+ pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<Document>> {
+ Ok(Document::new(global.as_window(), None, NonHTMLDocument, None))
}
pub fn new(window: &JSRef<Window>, url: Option<Url>, doctype: IsHTMLDocument, content_type: Option<DOMString>) -> Temporary<Document> {
let document = Document::new_inherited(window, url, doctype, content_type);
- let document = reflect_dom_object(box document, window,
+ let document = reflect_dom_object(box document, &Window(*window),
DocumentBinding::Wrap).root();
let node: &JSRef<Node> = NodeCast::from_ref(&*document);
@@ -540,8 +541,8 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
// FIXME: Implement CustomEvent (http://dom.spec.whatwg.org/#customevent)
"uievents" | "uievent" => Ok(EventCast::from_temporary(UIEvent::new_uninitialized(&*window))),
"mouseevents" | "mouseevent" => Ok(EventCast::from_temporary(MouseEvent::new_uninitialized(&*window))),
- "customevent" => Ok(EventCast::from_temporary(CustomEvent::new_uninitialized(&*window))),
- "htmlevents" | "events" | "event" => Ok(Event::new_uninitialized(&*window)),
+ "customevent" => Ok(EventCast::from_temporary(CustomEvent::new_uninitialized(&Window(*window)))),
+ "htmlevents" | "events" | "event" => Ok(Event::new_uninitialized(&Window(*window))),
_ => Err(NotSupported)
}
}
diff --git a/src/components/script/dom/documentfragment.rs b/src/components/script/dom/documentfragment.rs
index 0af2c79a0b1..c840815f5ca 100644
--- a/src/components/script/dom/documentfragment.rs
+++ b/src/components/script/dom/documentfragment.rs
@@ -6,6 +6,7 @@ use dom::bindings::codegen::InheritTypes::{DocumentFragmentDerived, NodeCast};
use dom::bindings::codegen::Bindings::DocumentFragmentBinding;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::Document;
use dom::element::Element;
@@ -13,7 +14,7 @@ use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlcollection::HTMLCollection;
use dom::node::{DocumentFragmentNodeTypeId, Node, NodeHelpers, window_from_node};
use dom::nodelist::NodeList;
-use dom::window::{Window, WindowMethods};
+use dom::window::WindowMethods;
use servo_util::str::DOMString;
#[deriving(Encodable)]
@@ -40,8 +41,8 @@ impl DocumentFragment {
Node::reflect_node(box node, document, DocumentFragmentBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>) -> Fallible<Temporary<DocumentFragment>> {
- let document = global.Document();
+ pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<DocumentFragment>> {
+ let document = global.as_window().Document();
let document = document.root();
Ok(DocumentFragment::new(&document.root_ref()))
diff --git a/src/components/script/dom/domexception.rs b/src/components/script/dom/domexception.rs
index 297f8011781..e2b771742b5 100644
--- a/src/components/script/dom/domexception.rs
+++ b/src/components/script/dom/domexception.rs
@@ -6,9 +6,9 @@ use dom::bindings::codegen::Bindings::DOMExceptionBinding;
use dom::bindings::codegen::Bindings::DOMExceptionBinding::DOMExceptionConstants;
use dom::bindings::error;
use dom::bindings::error::Error;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
-use dom::window::Window;
use servo_util::str::DOMString;
#[repr(uint)]
@@ -72,11 +72,11 @@ impl DOMException {
}
}
- pub fn new(global: &JSRef<Window>, code: DOMErrorName) -> Temporary<DOMException> {
+ pub fn new(global: &GlobalRef, code: DOMErrorName) -> Temporary<DOMException> {
reflect_dom_object(box DOMException::new_inherited(code), global, DOMExceptionBinding::Wrap)
}
- pub fn new_from_error(global: &JSRef<Window>, code: Error) -> Temporary<DOMException> {
+ pub fn new_from_error(global: &GlobalRef, code: Error) -> Temporary<DOMException> {
DOMException::new(global, DOMErrorName::from_error(code))
}
}
diff --git a/src/components/script/dom/domimplementation.rs b/src/components/script/dom/domimplementation.rs
index afdd89ffd6a..6603488e106 100644
--- a/src/components/script/dom/domimplementation.rs
+++ b/src/components/script/dom/domimplementation.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::DOMImplementationBinding;
use dom::bindings::codegen::InheritTypes::NodeCast;
use dom::bindings::error::{Fallible, InvalidCharacter, NamespaceError};
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Root, Temporary, OptionalRootable};
use dom::bindings::utils::{Reflector, Reflectable, reflect_dom_object};
use dom::bindings::utils::{QName, Name, InvalidXMLName, xml_name_type};
@@ -35,7 +36,7 @@ impl DOMImplementation {
pub fn new(document: &JSRef<Document>) -> Temporary<DOMImplementation> {
let window = document.window.root();
reflect_dom_object(box DOMImplementation::new_inherited(document),
- &*window,
+ &Window(*window),
DOMImplementationBinding::Wrap)
}
}
diff --git a/src/components/script/dom/domparser.rs b/src/components/script/dom/domparser.rs
index 014d1373a0b..44f34bc5d75 100644
--- a/src/components/script/dom/domparser.rs
+++ b/src/components/script/dom/domparser.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::DOMParserBinding;
use dom::bindings::codegen::Bindings::DOMParserBinding::SupportedTypeValues::{Text_html, Text_xml};
use dom::bindings::error::{Fallible, FailureUnknown};
+use dom::bindings::global::{GlobalRef, Window};
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflector, Reflectable, reflect_dom_object};
use dom::document::{Document, HTMLDocument, NonHTMLDocument};
@@ -26,12 +27,12 @@ impl DOMParser {
}
pub fn new(window: &JSRef<Window>) -> Temporary<DOMParser> {
- reflect_dom_object(box DOMParser::new_inherited(window), window,
+ reflect_dom_object(box DOMParser::new_inherited(window), &Window(*window),
DOMParserBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>) -> Fallible<Temporary<DOMParser>> {
- Ok(DOMParser::new(global))
+ pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<DOMParser>> {
+ Ok(DOMParser::new(global.as_window()))
}
}
diff --git a/src/components/script/dom/domtokenlist.rs b/src/components/script/dom/domtokenlist.rs
index a02ad1a59e3..ebbbd73e3ba 100644
--- a/src/components/script/dom/domtokenlist.rs
+++ b/src/components/script/dom/domtokenlist.rs
@@ -4,6 +4,7 @@
use dom::attr::{Attr, TokenListAttrValue};
use dom::bindings::codegen::Bindings::DOMTokenListBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable};
use dom::bindings::utils::{Reflector, Reflectable, reflect_dom_object};
use dom::element::{Element, AttributeHandlers};
@@ -33,7 +34,7 @@ impl DOMTokenList {
local_name: &'static str) -> Temporary<DOMTokenList> {
let window = window_from_node(element).root();
reflect_dom_object(box DOMTokenList::new_inherited(element, local_name),
- &*window, DOMTokenListBinding::Wrap)
+ &Window(*window), DOMTokenListBinding::Wrap)
}
}
diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs
index 7ede8ca21c8..e68f04f2821 100644
--- a/src/components/script/dom/event.rs
+++ b/src/components/script/dom/event.rs
@@ -5,11 +5,11 @@
use dom::bindings::codegen::Bindings::EventBinding;
use dom::bindings::codegen::Bindings::EventBinding::EventConstants;
use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::eventtarget::EventTarget;
-use dom::window::Window;
use servo_msg::constellation_msg::WindowSizeData;
use servo_util::str::DOMString;
use std::cell::{Cell, RefCell};
@@ -85,13 +85,13 @@ impl Event {
}
}
- pub fn new_uninitialized(global: &JSRef<Window>) -> Temporary<Event> {
+ pub fn new_uninitialized(global: &GlobalRef) -> Temporary<Event> {
reflect_dom_object(box Event::new_inherited(HTMLEventTypeId),
global,
EventBinding::Wrap)
}
- pub fn new(global: &JSRef<Window>,
+ pub fn new(global: &GlobalRef,
type_: DOMString,
can_bubble: bool,
cancelable: bool) -> Temporary<Event> {
@@ -100,7 +100,7 @@ impl Event {
Temporary::from_rooted(&*event)
}
- pub fn Constructor(global: &JSRef<Window>,
+ pub fn Constructor(global: &GlobalRef,
type_: DOMString,
init: &EventBinding::EventInit) -> Fallible<Temporary<Event>> {
Ok(Event::new(global, type_, init.bubbles, init.cancelable))
diff --git a/src/components/script/dom/file.rs b/src/components/script/dom/file.rs
index ea2610c1f2f..4cf46e013af 100644
--- a/src/components/script/dom/file.rs
+++ b/src/components/script/dom/file.rs
@@ -3,10 +3,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::FileBinding;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::blob::{Blob, BlobType, FileTypeId};
-use dom::window::Window;
use servo_util::str::DOMString;
#[deriving(Encodable)]
@@ -17,7 +17,7 @@ pub struct File {
}
impl File {
- pub fn new_inherited(global: &JSRef<Window>, _file_bits: &JSRef<Blob>, name: DOMString) -> File {
+ pub fn new_inherited(global: &GlobalRef, _file_bits: &JSRef<Blob>, name: DOMString) -> File {
File {
blob: Blob::new_inherited(global),
name: name,
@@ -27,7 +27,7 @@ impl File {
// the relevant subfields of file_bits should be copied over
}
- pub fn new(global: &JSRef<Window>, file_bits: &JSRef<Blob>, name: DOMString) -> Temporary<File> {
+ pub fn new(global: &GlobalRef, file_bits: &JSRef<Blob>, name: DOMString) -> Temporary<File> {
reflect_dom_object(box File::new_inherited(global, file_bits, name),
global,
FileBinding::Wrap)
diff --git a/src/components/script/dom/formdata.rs b/src/components/script/dom/formdata.rs
index a3a9d7d7fa9..8f5c2cfcd19 100644
--- a/src/components/script/dom/formdata.rs
+++ b/src/components/script/dom/formdata.rs
@@ -6,6 +6,7 @@ use dom::bindings::codegen::Bindings::FormDataBinding;
use dom::bindings::codegen::InheritTypes::FileCast;
use dom::bindings::codegen::UnionTypes::FileOrString::{FileOrString, eFile, eString};
use dom::bindings::error::{Fallible};
+use dom::bindings::global::{GlobalRef, Window};
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
@@ -42,11 +43,12 @@ impl FormData {
}
pub fn new(form: Option<JSRef<HTMLFormElement>>, window: &JSRef<Window>) -> Temporary<FormData> {
- reflect_dom_object(box FormData::new_inherited(form, window), window, FormDataBinding::Wrap)
+ reflect_dom_object(box FormData::new_inherited(form, window),
+ &Window(*window), FormDataBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>, form: Option<JSRef<HTMLFormElement>>) -> Fallible<Temporary<FormData>> {
- Ok(FormData::new(form, global))
+ pub fn Constructor(global: &GlobalRef, form: Option<JSRef<HTMLFormElement>>) -> Fallible<Temporary<FormData>> {
+ Ok(FormData::new(form, global.as_window()))
}
}
@@ -118,6 +120,6 @@ impl PrivateFormDataHelpers for FormData {
let window = self.window.root();
let f: Option<&JSRef<File>> = FileCast::to_ref(value);
let name = filename.unwrap_or(f.map(|inner| inner.name.clone()).unwrap_or("blob".to_string()));
- File::new(&*window, value, name)
+ File::new(&Window(*window), value, name)
}
}
diff --git a/src/components/script/dom/htmlcollection.rs b/src/components/script/dom/htmlcollection.rs
index 2438d745518..ed47802324b 100644
--- a/src/components/script/dom/htmlcollection.rs
+++ b/src/components/script/dom/htmlcollection.rs
@@ -4,6 +4,7 @@
use dom::bindings::codegen::InheritTypes::{ElementCast, NodeCast};
use dom::bindings::codegen::Bindings::HTMLCollectionBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::element::{Element, AttributeHandlers};
@@ -46,7 +47,7 @@ impl HTMLCollection {
pub fn new(window: &JSRef<Window>, collection: CollectionTypeId) -> Temporary<HTMLCollection> {
reflect_dom_object(box HTMLCollection::new_inherited(collection),
- window, HTMLCollectionBinding::Wrap)
+ &Window(*window), HTMLCollectionBinding::Wrap)
}
}
diff --git a/src/components/script/dom/location.rs b/src/components/script/dom/location.rs
index 36a58a4a7ec..d8a1fac08c0 100644
--- a/src/components/script/dom/location.rs
+++ b/src/components/script/dom/location.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::LocationBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
@@ -30,7 +31,7 @@ impl Location {
pub fn new(window: &JSRef<Window>, page: Rc<Page>) -> Temporary<Location> {
reflect_dom_object(box Location::new_inherited(page),
- window,
+ &Window(*window),
LocationBinding::Wrap)
}
}
diff --git a/src/components/script/dom/mouseevent.rs b/src/components/script/dom/mouseevent.rs
index 57b1688cc06..aa164c1eafb 100644
--- a/src/components/script/dom/mouseevent.rs
+++ b/src/components/script/dom/mouseevent.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::MouseEventBinding;
use dom::bindings::codegen::InheritTypes::{UIEventCast, MouseEventDerived};
use dom::bindings::error::Fallible;
+use dom::bindings::global::{GlobalRef, Window};
use dom::bindings::js::{JS, JSRef, RootedReference, Temporary, OptionalSettable};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
@@ -55,7 +56,7 @@ impl MouseEvent {
pub fn new_uninitialized(window: &JSRef<Window>) -> Temporary<MouseEvent> {
reflect_dom_object(box MouseEvent::new_inherited(),
- window,
+ &Window(*window),
MouseEventBinding::Wrap)
}
@@ -83,10 +84,10 @@ impl MouseEvent {
Temporary::from_rooted(&*ev)
}
- pub fn Constructor(global: &JSRef<Window>,
+ pub fn Constructor(global: &GlobalRef,
type_: DOMString,
init: &MouseEventBinding::MouseEventInit) -> Fallible<Temporary<MouseEvent>> {
- let event = MouseEvent::new(global, type_,
+ let event = MouseEvent::new(global.as_window(), type_,
init.parent.parent.bubbles,
init.parent.parent.cancelable,
init.parent.view.root_ref(),
diff --git a/src/components/script/dom/navigator.rs b/src/components/script/dom/navigator.rs
index dd85a33be0d..06ccc910dc9 100644
--- a/src/components/script/dom/navigator.rs
+++ b/src/components/script/dom/navigator.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::NavigatorBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
@@ -22,7 +23,7 @@ impl Navigator {
pub fn new(window: &JSRef<Window>) -> Temporary<Navigator> {
reflect_dom_object(box Navigator::new_inherited(),
- window,
+ &Window(*window),
NavigatorBinding::Wrap)
}
}
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index aacaa9bbedb..52b23c3b3e2 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -12,6 +12,7 @@ use dom::bindings::codegen::InheritTypes::{CharacterDataCast, NodeBase, NodeDeri
use dom::bindings::codegen::InheritTypes::{ProcessingInstructionCast, EventTargetCast};
use dom::bindings::codegen::Bindings::NodeBinding::NodeConstants;
use dom::bindings::error::{ErrorResult, Fallible, NotFound, HierarchyRequest, Syntax};
+use dom::bindings::global::{GlobalRef, Window};
use dom::bindings::js::{JS, JSRef, RootedReference, Temporary, Root, OptionalUnrootable};
use dom::bindings::js::{OptionalSettable, TemporaryPushable, OptionalRootedRootable};
use dom::bindings::js::{ResultRootable, OptionalRootable};
@@ -907,10 +908,10 @@ impl Node {
pub fn reflect_node<N: Reflectable+NodeBase>
(node: Box<N>,
document: &JSRef<Document>,
- wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<Window>, Box<N>) -> Temporary<N>)
+ wrap_fn: extern "Rust" fn(*mut JSContext, &GlobalRef, Box<N>) -> Temporary<N>)
-> Temporary<N> {
let window = document.window.root();
- reflect_dom_object(node, &*window, wrap_fn)
+ reflect_dom_object(node, &Window(*window), wrap_fn)
}
pub fn new_inherited(type_id: NodeTypeId, doc: &JSRef<Document>) -> Node {
diff --git a/src/components/script/dom/nodelist.rs b/src/components/script/dom/nodelist.rs
index b3fbd578fe6..ebd7a2f6ae9 100644
--- a/src/components/script/dom/nodelist.rs
+++ b/src/components/script/dom/nodelist.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::NodeListBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::node::{Node, NodeHelpers};
@@ -31,7 +32,7 @@ impl NodeList {
pub fn new(window: &JSRef<Window>,
list_type: NodeListType) -> Temporary<NodeList> {
reflect_dom_object(box NodeList::new_inherited(list_type),
- window, NodeListBinding::Wrap)
+ &Window(*window), NodeListBinding::Wrap)
}
pub fn new_simple_list(window: &JSRef<Window>, elements: Vec<JSRef<Node>>) -> Temporary<NodeList> {
diff --git a/src/components/script/dom/performance.rs b/src/components/script/dom/performance.rs
index eeab8ad282c..86c431a948e 100644
--- a/src/components/script/dom/performance.rs
+++ b/src/components/script/dom/performance.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::PerformanceBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::performancetiming::{PerformanceTiming, PerformanceTimingMethods};
@@ -27,7 +28,8 @@ impl Performance {
pub fn new(window: &JSRef<Window>) -> Temporary<Performance> {
let performance = Performance::new_inherited(window);
- reflect_dom_object(box performance, window, PerformanceBinding::Wrap)
+ reflect_dom_object(box performance, &Window(*window),
+ PerformanceBinding::Wrap)
}
}
diff --git a/src/components/script/dom/performancetiming.rs b/src/components/script/dom/performancetiming.rs
index 328b351844f..646dd9b087b 100644
--- a/src/components/script/dom/performancetiming.rs
+++ b/src/components/script/dom/performancetiming.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::PerformanceTimingBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
@@ -27,7 +28,8 @@ impl PerformanceTiming {
pub fn new(window: &JSRef<Window>) -> Temporary<PerformanceTiming> {
let timing = PerformanceTiming::new_inherited(window.navigationStart,
window.navigationStartPrecise);
- reflect_dom_object(box timing, window, PerformanceTimingBinding::Wrap)
+ reflect_dom_object(box timing, &Window(*window),
+ PerformanceTimingBinding::Wrap)
}
}
diff --git a/src/components/script/dom/progressevent.rs b/src/components/script/dom/progressevent.rs
index 4434a74020b..a9e380ba989 100644
--- a/src/components/script/dom/progressevent.rs
+++ b/src/components/script/dom/progressevent.rs
@@ -5,10 +5,10 @@
use dom::bindings::codegen::Bindings::ProgressEventBinding;
use dom::bindings::codegen::InheritTypes::{EventCast, ProgressEventDerived};
use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::event::{Event, EventMethods, ProgressEventTypeId};
-use dom::window::Window;
use servo_util::str::DOMString;
#[deriving(Encodable)]
@@ -34,7 +34,7 @@ impl ProgressEvent {
total: total
}
}
- pub fn new(global: &JSRef<Window>, type_: DOMString,
+ pub fn new(global: &GlobalRef, type_: DOMString,
can_bubble: bool, cancelable: bool,
length_computable: bool, loaded: u64, total: u64) -> Temporary<ProgressEvent> {
let ev = reflect_dom_object(box ProgressEvent::new_inherited(length_computable, loaded, total),
@@ -44,7 +44,7 @@ impl ProgressEvent {
event.InitEvent(type_, can_bubble, cancelable);
Temporary::from_rooted(&*ev)
}
- pub fn Constructor(global: &JSRef<Window>,
+ pub fn Constructor(global: &GlobalRef,
type_: DOMString,
init: &ProgressEventBinding::ProgressEventInit)
-> Fallible<Temporary<ProgressEvent>> {
diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs
index e0da2b0734a..bf3e5f2d232 100644
--- a/src/components/script/dom/testbinding.rs
+++ b/src/components/script/dom/testbinding.rs
@@ -7,11 +7,11 @@ use dom::bindings::codegen::Bindings::TestBindingBinding::TestEnumValues::_empty
use dom::bindings::codegen::UnionTypes::BlobOrString::BlobOrString;
use dom::bindings::codegen::UnionTypes::EventOrString::{EventOrString, eString};
use dom::bindings::codegen::UnionTypes::HTMLElementOrLong::{HTMLElementOrLong, eLong};
-use dom::bindings::js::{JS, JSRef, Temporary};
+use dom::bindings::global::GlobalField;
+use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::str::ByteString;
use dom::bindings::utils::{Reflector, Reflectable};
use dom::blob::Blob;
-use dom::window::Window;
use servo_util::str::DOMString;
use js::jsapi::JSContext;
@@ -20,7 +20,7 @@ use js::jsval::{JSVal, NullValue};
#[deriving(Encodable)]
pub struct TestBinding {
reflector: Reflector,
- global: JS<Window>,
+ global: GlobalField,
}
pub trait TestBindingMethods {
@@ -278,19 +278,19 @@ pub trait TestBindingMethods {
impl<'a> TestBindingMethods for JSRef<'a, TestBinding> {
fn InterfaceAttribute(&self) -> Temporary<Blob> {
let global = self.global.root();
- Blob::new(&*global)
+ Blob::new(&global.root_ref())
}
fn GetInterfaceAttributeNullable(&self) -> Option<Temporary<Blob>> {
let global = self.global.root();
- Some(Blob::new(&*global))
+ Some(Blob::new(&global.root_ref()))
}
fn ReceiveInterface(&self) -> Temporary<Blob> {
let global = self.global.root();
- Blob::new(&*global)
+ Blob::new(&global.root_ref())
}
fn ReceiveNullableInterface(&self) -> Option<Temporary<Blob>> {
let global = self.global.root();
- Some(Blob::new(&*global))
+ Some(Blob::new(&global.root_ref()))
}
}
diff --git a/src/components/script/dom/text.rs b/src/components/script/dom/text.rs
index ece96559640..bc05fcb7e39 100644
--- a/src/components/script/dom/text.rs
+++ b/src/components/script/dom/text.rs
@@ -5,13 +5,14 @@
use dom::bindings::codegen::Bindings::TextBinding;
use dom::bindings::codegen::InheritTypes::TextDerived;
use dom::bindings::error::Fallible;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::characterdata::CharacterData;
use dom::document::Document;
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::node::{Node, TextNodeTypeId};
-use dom::window::{Window, WindowMethods};
+use dom::window::WindowMethods;
use servo_util::str::DOMString;
/// An HTML text node.
@@ -38,8 +39,8 @@ impl Text {
Node::reflect_node(box node, document, TextBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>, text: DOMString) -> Fallible<Temporary<Text>> {
- let document = global.Document().root();
+ pub fn Constructor(global: &GlobalRef, text: DOMString) -> Fallible<Temporary<Text>> {
+ let document = global.as_window().Document().root();
Ok(Text::new(text, &*document))
}
}
diff --git a/src/components/script/dom/uievent.rs b/src/components/script/dom/uievent.rs
index 9ed8f80e757..026e6045747 100644
--- a/src/components/script/dom/uievent.rs
+++ b/src/components/script/dom/uievent.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::UIEventBinding;
use dom::bindings::codegen::InheritTypes::{EventCast, UIEventDerived};
use dom::bindings::error::Fallible;
+use dom::bindings::global::{GlobalRef, Window};
use dom::bindings::js::{JS, JSRef, RootedReference, Temporary, OptionalSettable};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
@@ -39,7 +40,7 @@ impl UIEvent {
pub fn new_uninitialized(window: &JSRef<Window>) -> Temporary<UIEvent> {
reflect_dom_object(box UIEvent::new_inherited(UIEventTypeId),
- window,
+ &Window(*window),
UIEventBinding::Wrap)
}
@@ -54,10 +55,10 @@ impl UIEvent {
Temporary::from_rooted(&*ev)
}
- pub fn Constructor(global: &JSRef<Window>,
+ pub fn Constructor(global: &GlobalRef,
type_: DOMString,
init: &UIEventBinding::UIEventInit) -> Fallible<Temporary<UIEvent>> {
- let event = UIEvent::new(global, type_,
+ let event = UIEvent::new(global.as_window(), type_,
init.parent.bubbles, init.parent.cancelable,
init.view.root_ref(), init.detail);
Ok(event)
diff --git a/src/components/script/dom/urlsearchparams.rs b/src/components/script/dom/urlsearchparams.rs
index 9458b7a7226..1baebd376ac 100644
--- a/src/components/script/dom/urlsearchparams.rs
+++ b/src/components/script/dom/urlsearchparams.rs
@@ -6,10 +6,10 @@ use std::collections::hashmap::HashMap;
use dom::bindings::codegen::Bindings::URLSearchParamsBinding;
use dom::bindings::codegen::UnionTypes::StringOrURLSearchParams::{StringOrURLSearchParams, eURLSearchParams, eString};
use dom::bindings::error::{Fallible};
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::trace::Traceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
-use dom::window::Window;
use encoding::all::UTF_8;
use encoding::types::{Encoding, EncodeReplace};
use servo_util::str::DOMString;
@@ -31,11 +31,11 @@ impl URLSearchParams {
}
}
- pub fn new(global: &JSRef<Window>) -> Temporary<URLSearchParams> {
+ pub fn new(global: &GlobalRef) -> Temporary<URLSearchParams> {
reflect_dom_object(box URLSearchParams::new_inherited(), global, URLSearchParamsBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>, init: Option<StringOrURLSearchParams>) -> Fallible<Temporary<URLSearchParams>> {
+ pub fn Constructor(global: &GlobalRef, init: Option<StringOrURLSearchParams>) -> Fallible<Temporary<URLSearchParams>> {
let usp = URLSearchParams::new(global).root();
match init {
Some(eString(_s)) => {
diff --git a/src/components/script/dom/validitystate.rs b/src/components/script/dom/validitystate.rs
index 15566170a3a..a8d0311f047 100644
--- a/src/components/script/dom/validitystate.rs
+++ b/src/components/script/dom/validitystate.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::ValidityStateBinding;
+use dom::bindings::global::Window;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
@@ -23,7 +24,7 @@ impl ValidityState {
pub fn new(window: &JSRef<Window>) -> Temporary<ValidityState> {
reflect_dom_object(box ValidityState::new_inherited(),
- window,
+ &Window(*window),
ValidityStateBinding::Wrap)
}
}
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs
index 029303a960e..a92daa312d7 100644
--- a/src/components/script/dom/window.rs
+++ b/src/components/script/dom/window.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::EventHandlerBinding::{OnErrorEventHandlerNonNull, EventHandlerNonNull};
use dom::bindings::codegen::Bindings::WindowBinding;
use dom::bindings::codegen::InheritTypes::EventTargetCast;
+use dom::bindings::global;
use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable};
use dom::bindings::trace::{Traceable, Untraceable};
use dom::bindings::utils::{Reflectable, Reflector};
@@ -169,7 +170,7 @@ impl<'a> WindowMethods for JSRef<'a, Window> {
fn Console(&self) -> Temporary<Console> {
if self.console.get().is_none() {
- let console = Console::new(self);
+ let console = Console::new(&global::Window(*self));
self.console.assign(Some(console));
}
Temporary::new(self.console.get().get_ref().clone())
diff --git a/src/components/script/dom/xmlhttprequest.rs b/src/components/script/dom/xmlhttprequest.rs
index 50cc71b3513..6d93c5a95da 100644
--- a/src/components/script/dom/xmlhttprequest.rs
+++ b/src/components/script/dom/xmlhttprequest.rs
@@ -10,6 +10,7 @@ use dom::bindings::codegen::InheritTypes::{EventCast, EventTargetCast, XMLHttpRe
use dom::bindings::conversions::ToJSValConvertible;
use dom::bindings::error::{Error, ErrorResult, Fallible, InvalidState, InvalidAccess};
use dom::bindings::error::{Network, Syntax, Security, Abort, Timeout};
+use dom::bindings::global::{GlobalField, GlobalRef};
use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootedRootable};
use dom::bindings::str::ByteString;
use dom::bindings::trace::{Traceable, Untraceable};
@@ -19,7 +20,6 @@ use dom::event::Event;
use dom::eventtarget::{EventTarget, EventTargetHelpers, XMLHttpRequestTargetTypeId};
use dom::progressevent::ProgressEvent;
use dom::urlsearchparams::URLSearchParamsHelpers;
-use dom::window::Window;
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
use dom::xmlhttprequestupload::XMLHttpRequestUpload;
@@ -121,7 +121,7 @@ pub struct XMLHttpRequest {
upload_events: Traceable<Cell<bool>>,
send_flag: Traceable<Cell<bool>>,
- global: JS<Window>,
+ global: GlobalField,
pinned_count: Traceable<Cell<uint>>,
timer: Untraceable<RefCell<Timer>>,
fetch_time: Traceable<Cell<i64>>,
@@ -130,7 +130,7 @@ pub struct XMLHttpRequest {
}
impl XMLHttpRequest {
- pub fn new_inherited(global: &JSRef<Window>) -> XMLHttpRequest {
+ pub fn new_inherited(global: &GlobalRef) -> XMLHttpRequest {
let xhr = XMLHttpRequest {
eventtarget: XMLHttpRequestEventTarget::new_inherited(XMLHttpRequestTypeId),
ready_state: Traceable::new(Cell::new(Unsent)),
@@ -155,7 +155,7 @@ impl XMLHttpRequest {
upload_complete: Traceable::new(Cell::new(false)),
upload_events: Traceable::new(Cell::new(false)),
- global: JS::from_rooted(global),
+ global: GlobalField::from_rooted(global),
pinned_count: Traceable::new(Cell::new(0)),
timer: Untraceable::new(RefCell::new(Timer::new().unwrap())),
fetch_time: Traceable::new(Cell::new(0)),
@@ -164,12 +164,12 @@ impl XMLHttpRequest {
};
xhr
}
- pub fn new(global: &JSRef<Window>) -> Temporary<XMLHttpRequest> {
+ pub fn new(global: &GlobalRef) -> Temporary<XMLHttpRequest> {
reflect_dom_object(box XMLHttpRequest::new_inherited(global),
global,
XMLHttpRequestBinding::Wrap)
}
- pub fn Constructor(global: &JSRef<Window>) -> Fallible<Temporary<XMLHttpRequest>> {
+ pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<XMLHttpRequest>> {
Ok(XMLHttpRequest::new(global))
}
@@ -293,7 +293,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
Method::from_str_or_new(s.as_slice())
});
// Step 2
- let base: Option<Url> = Some(self.global.root().get_url());
+ let base: Option<Url> = Some(self.global.root().root_ref().get_url());
match maybe_method {
// Step 4
Some(Connect) | Some(Trace) => Err(Security),
@@ -486,7 +486,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
}
let global = self.global.root();
- let resource_task = global.deref().page().resource_task.deref().clone();
+ let resource_task = global.root_ref().page().resource_task.deref().clone();
let mut load_data = LoadData::new(self.request_url.deref().borrow().clone());
load_data.data = extracted;
@@ -516,7 +516,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
}
// XXXManishearth this is to be replaced with Origin for CORS (with no path)
- let referer_url = self.global.root().get_url();
+ let referer_url = self.global.root().root_ref().get_url();
let mut buf = String::new();
buf.push_str(referer_url.scheme.as_slice());
buf.push_str("://".as_slice());
@@ -537,7 +537,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
} else {
let builder = TaskBuilder::new().named("XHRTask");
self.fetch_time.deref().set(time::now().to_timespec().sec);
- let script_chan = global.deref().script_chan.clone();
+ let script_chan = global.root_ref().script_chan().clone();
builder.spawn(proc() {
let _ = XMLHttpRequest::fetch(&mut Async(addr.unwrap(), script_chan), resource_task, load_data, terminate_receiver);
});
@@ -692,7 +692,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
// Creates a trusted address to the object, and roots it. Always pair this with a release()
unsafe fn to_trusted(&self) -> TrustedXHRAddress {
if self.pinned_count.deref().get() == 0 {
- JS_AddObjectRoot(self.global.root().get_cx(), self.reflector().rootable());
+ JS_AddObjectRoot(self.global.root().root_ref().get_cx(), self.reflector().rootable());
}
let pinned_count = self.pinned_count.deref().get();
self.pinned_count.deref().set(pinned_count + 1);
@@ -711,7 +711,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
self.pinned_count.deref().set(pinned_count - 1);
if self.pinned_count.deref().get() == 0 {
unsafe {
- JS_RemoveObjectRoot(self.global.root().get_cx(), self.reflector().rootable());
+ JS_RemoveObjectRoot(self.global.root().root_ref().get_cx(), self.reflector().rootable());
}
}
}
@@ -720,7 +720,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
assert!(self.ready_state.deref().get() != rs)
self.ready_state.deref().set(rs);
let global = self.global.root();
- let event = Event::new(&*global,
+ let event = Event::new(&global.root_ref(),
"readystatechange".to_string(),
false, true).root();
let target: &JSRef<EventTarget> = EventTargetCast::from_ref(self);
@@ -842,7 +842,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
fn dispatch_progress_event(&self, upload: bool, type_: DOMString, loaded: u64, total: Option<u64>) {
let global = self.global.root();
let upload_target = &*self.upload.root();
- let progressevent = ProgressEvent::new(&*global,
+ let progressevent = ProgressEvent::new(&global.root_ref(),
type_, false, false,
total.is_some(), loaded,
total.unwrap_or(0)).root();
@@ -880,7 +880,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
}
self.timeout_pinned.deref().set(true);
let global = self.global.root();
- let script_chan = global.deref().script_chan.clone();
+ let script_chan = global.root_ref().script_chan().clone();
let terminate_sender = (*self.terminate_sender.deref().borrow()).clone();
spawn_named("XHR:Timer", proc () {
match oneshot.recv_opt() {
diff --git a/src/components/script/dom/xmlhttprequestupload.rs b/src/components/script/dom/xmlhttprequestupload.rs
index e4d26c7f017..cf444d6c70b 100644
--- a/src/components/script/dom/xmlhttprequestupload.rs
+++ b/src/components/script/dom/xmlhttprequestupload.rs
@@ -4,10 +4,10 @@
use dom::bindings::codegen::InheritTypes::XMLHttpRequestUploadDerived;
use dom::bindings::codegen::Bindings::XMLHttpRequestUploadBinding;
-use dom::bindings::js::{Temporary, JSRef};
+use dom::bindings::global::GlobalRef;
+use dom::bindings::js::Temporary;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::eventtarget::{EventTarget, XMLHttpRequestTargetTypeId};
-use dom::window::Window;
use dom::xmlhttprequest::{XMLHttpRequestUploadTypeId};
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
@@ -22,7 +22,7 @@ impl XMLHttpRequestUpload {
eventtarget:XMLHttpRequestEventTarget::new_inherited(XMLHttpRequestUploadTypeId)
}
}
- pub fn new(global: &JSRef<Window>) -> Temporary<XMLHttpRequestUpload> {
+ pub fn new(global: &GlobalRef) -> Temporary<XMLHttpRequestUpload> {
reflect_dom_object(box XMLHttpRequestUpload::new_inherited(),
global,
XMLHttpRequestUploadBinding::Wrap)
diff --git a/src/components/script/script.rs b/src/components/script/script.rs
index 5ebbc4cbb92..e5a3ab69867 100644
--- a/src/components/script/script.rs
+++ b/src/components/script/script.rs
@@ -43,6 +43,7 @@ extern crate url;
pub mod dom {
pub mod bindings {
+ pub mod global;
pub mod js;
pub mod utils;
pub mod callback;
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs
index dfd121091cf..5551e9d6869 100644
--- a/src/components/script/script_task.rs
+++ b/src/components/script/script_task.rs
@@ -6,6 +6,7 @@
//! and layout tasks.
use dom::bindings::codegen::InheritTypes::{EventTargetCast, NodeCast, EventCast};
+use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, RootCollection, Temporary, OptionalSettable};
use dom::bindings::js::OptionalRootable;
use dom::bindings::utils::Reflectable;
@@ -621,7 +622,7 @@ impl ScriptTask {
// We have no concept of a document loader right now, so just dispatch the
// "load" event as soon as we've finished executing all scripts parsed during
// the initial load.
- let event = Event::new(&*window, "load".to_string(), false, false).root();
+ let event = Event::new(&Window(*window), "load".to_string(), false, false).root();
let doctarget: &JSRef<EventTarget> = EventTargetCast::from_ref(&*document);
let wintarget: &JSRef<EventTarget> = EventTargetCast::from_ref(&*window);
let _ = wintarget.dispatch_event_with_target(Some((*doctarget).clone()),
@@ -719,7 +720,7 @@ impl ScriptTask {
Some(ref frame) => {
let window = frame.window.root();
let event =
- Event::new(&*window,
+ Event::new(&Window(*window),
"click".to_string(),
true, true).root();
let eventtarget: &JSRef<EventTarget> = EventTargetCast::from_ref(&node);