diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index b67ab0bd7166..7f9112994d6d 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -3168,7 +3168,7 @@ def __init__(self, errorResult, arguments, argsPre, returnType, if isFallible: if static: - glob = "&global" + glob = "global.upcast::()" else: glob = "&this.global()" @@ -5245,12 +5245,18 @@ def __init__(self, descriptor, constructor=None): assert constructor CGAbstractExternMethod.__init__(self, descriptor, name, 'bool', args) self.constructor = constructor + self.exposureSet = descriptor.interface.exposureSet def definition_body(self): - preamble = CGGeneric("""\ -let global = GlobalScope::from_object(JS_CALLEE(cx, vp).to_object()); -let args = CallArgs::from_vp(vp, argc); -""") + preamble = """let global = GlobalScope::from_object(JS_CALLEE(cx, vp).to_object());\n""" + if len(self.exposureSet) == 1: + globalName = list(self.exposureSet)[0] + downcast = """let global = global.downcast::().unwrap();\n""" + downcast = downcast.format(globalName.lower(), + MakeNativeName(globalName)) + preamble += downcast + preamble += """let args = CallArgs::from_vp(vp, argc);\n""" + preamble = CGGeneric(preamble) name = self.constructor.identifier.name nativeName = MakeNativeName(self.descriptor.binaryNameFor(name)) callGenerator = CGMethodCall(["&global"], nativeName, True, @@ -5581,6 +5587,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries 'dom::bindings::error::throw_dom_exception', 'dom::bindings::guard::Condition', 'dom::bindings::guard::Guard', + 'dom::bindings::inheritance::Castable', 'dom::bindings::proxyhandler', 'dom::bindings::proxyhandler::ensure_expando_object', 'dom::bindings::proxyhandler::fill_property_descriptor', diff --git a/components/script/dom/comment.rs b/components/script/dom/comment.rs index b135def6e2ad..9efe8c8164cc 100644 --- a/components/script/dom/comment.rs +++ b/components/script/dom/comment.rs @@ -9,8 +9,8 @@ use dom::bindings::js::Root; use dom::bindings::str::DOMString; use dom::characterdata::CharacterData; use dom::document::Document; -use dom::globalscope::GlobalScope; use dom::node::Node; +use dom::window::Window; /// An HTML comment. #[dom_struct] @@ -31,8 +31,8 @@ impl Comment { CommentBinding::Wrap) } - pub fn Constructor(global: &GlobalScope, data: DOMString) -> Fallible> { - let document = global.as_window().Document(); + pub fn Constructor(window: &Window, data: DOMString) -> Fallible> { + let document = window.Document(); Ok(Comment::new(data, &document)) } } diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 0bf77ccf73dc..a9813c912d39 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -1917,11 +1917,10 @@ impl Document { } // https://dom.spec.whatwg.org/#dom-document - pub fn Constructor(global: &GlobalScope) -> Fallible> { - let win = global.as_window(); - let doc = win.Document(); + pub fn Constructor(window: &Window) -> Fallible> { + let doc = window.Document(); let docloader = DocumentLoader::new(&*doc.loader()); - Ok(Document::new(win, + Ok(Document::new(window, None, None, IsHTMLDocument::NonHTMLDocument, diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs index 334e083f1b7b..554fb8fe3b3b 100644 --- a/components/script/dom/documentfragment.rs +++ b/components/script/dom/documentfragment.rs @@ -12,10 +12,10 @@ use dom::bindings::js::Root; use dom::bindings::str::DOMString; use dom::document::Document; use dom::element::Element; -use dom::globalscope::GlobalScope; use dom::htmlcollection::HTMLCollection; use dom::node::{Node, window_from_node}; use dom::nodelist::NodeList; +use dom::window::Window; use servo_atoms::Atom; // https://dom.spec.whatwg.org/#documentfragment @@ -38,8 +38,8 @@ impl DocumentFragment { DocumentFragmentBinding::Wrap) } - pub fn Constructor(global: &GlobalScope) -> Fallible> { - let document = global.as_window().Document(); + pub fn Constructor(window: &Window) -> Fallible> { + let document = window.Document(); Ok(DocumentFragment::new(&document)) } diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs index 2a770aeb3a03..0ce2d50e09ad 100644 --- a/components/script/dom/domparser.rs +++ b/components/script/dom/domparser.rs @@ -17,7 +17,6 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::document::{Document, IsHTMLDocument}; use dom::document::DocumentSource; -use dom::globalscope::GlobalScope; use dom::servoparser::ServoParser; use dom::window::Window; @@ -41,8 +40,8 @@ impl DOMParser { DOMParserBinding::Wrap) } - pub fn Constructor(global: &GlobalScope) -> Fallible> { - Ok(DOMParser::new(global.as_window())) + pub fn Constructor(window: &Window) -> Fallible> { + Ok(DOMParser::new(window)) } } diff --git a/components/script/dom/extendableevent.rs b/components/script/dom/extendableevent.rs index 55e9500a8e44..0a7db40b6d55 100644 --- a/components/script/dom/extendableevent.rs +++ b/components/script/dom/extendableevent.rs @@ -10,7 +10,7 @@ use dom::bindings::js::Root; use dom::bindings::reflector::reflect_dom_object; use dom::bindings::str::DOMString; use dom::event::Event; -use dom::globalscope::GlobalScope; +use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope; use js::jsapi::{HandleValue, JSContext}; use servo_atoms::Atom; @@ -28,12 +28,12 @@ impl ExtendableEvent { extensions_allowed: true } } - pub fn new(global: &GlobalScope, + pub fn new(worker: &ServiceWorkerGlobalScope, type_: Atom, bubbles: bool, cancelable: bool) -> Root { - let ev = reflect_dom_object(box ExtendableEvent::new_inherited(), global, ExtendableEventBinding::Wrap); + let ev = reflect_dom_object(box ExtendableEvent::new_inherited(), worker, ExtendableEventBinding::Wrap); { let event = ev.upcast::(); event.init_event(type_, bubbles, cancelable); @@ -41,10 +41,10 @@ impl ExtendableEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(worker: &ServiceWorkerGlobalScope, type_: DOMString, init: &ExtendableEventBinding::ExtendableEventInit) -> Fallible> { - Ok(ExtendableEvent::new(global, + Ok(ExtendableEvent::new(worker, Atom::from(type_), init.parent.bubbles, init.parent.cancelable)) diff --git a/components/script/dom/extendablemessageevent.rs b/components/script/dom/extendablemessageevent.rs index fbbdd59cbd31..8f156a8f4d35 100644 --- a/components/script/dom/extendablemessageevent.rs +++ b/components/script/dom/extendablemessageevent.rs @@ -13,6 +13,7 @@ use dom::event::Event; use dom::eventtarget::EventTarget; use dom::extendableevent::ExtendableEvent; use dom::globalscope::GlobalScope; +use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope; use js::jsapi::{HandleValue, Heap, JSContext}; use js::jsval::JSVal; use servo_atoms::Atom; @@ -46,10 +47,11 @@ impl ExtendableMessageEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(worker: &ServiceWorkerGlobalScope, type_: DOMString, init: &ExtendableMessageEventBinding::ExtendableMessageEventInit) -> Fallible> { + let global = worker.upcast::(); rooted!(in(global.get_cx()) let data = init.data); let ev = ExtendableMessageEvent::new(global, Atom::from(type_), diff --git a/components/script/dom/focusevent.rs b/components/script/dom/focusevent.rs index d06b725286d7..1eb3983737d8 100644 --- a/components/script/dom/focusevent.rs +++ b/components/script/dom/focusevent.rs @@ -53,12 +53,12 @@ impl FocusEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(window: &Window, type_: DOMString, init: &FocusEventBinding::FocusEventInit) -> Fallible> { let bubbles = EventBubbles::from(init.parent.parent.bubbles); let cancelable = EventCancelable::from(init.parent.parent.cancelable); - let event = FocusEvent::new(global.as_window(), + let event = FocusEvent::new(window, type_, bubbles, cancelable, diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 3b58b383bf4f..a86f0258918f 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -16,11 +16,11 @@ use dom::bindings::str::DOMString; use dom::document::Document; use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers}; use dom::eventtarget::EventTarget; -use dom::globalscope::GlobalScope; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeDamage, document_from_node, window_from_node}; use dom::values::UNSIGNED_LONG_MAX; use dom::virtualmethods::VirtualMethods; +use dom::window::Window; use html5ever_atoms::LocalName; use ipc_channel::ipc; use ipc_channel::router::ROUTER; @@ -220,10 +220,10 @@ impl HTMLImageElement { HTMLImageElementBinding::Wrap) } - pub fn Image(global: &GlobalScope, + pub fn Image(window: &Window, width: Option, height: Option) -> Fallible> { - let document = global.as_window().Document(); + let document = window.Document(); let image = HTMLImageElement::new(local_name!("img"), None, &document); if let Some(w) = width { image.SetWidth(w); diff --git a/components/script/dom/keyboardevent.rs b/components/script/dom/keyboardevent.rs index 4da24309e189..99cc61e021f2 100644 --- a/components/script/dom/keyboardevent.rs +++ b/components/script/dom/keyboardevent.rs @@ -12,7 +12,6 @@ use dom::bindings::js::{Root, RootedReference}; use dom::bindings::reflector::reflect_dom_object; use dom::bindings::str::DOMString; use dom::event::Event; -use dom::globalscope::GlobalScope; use dom::uievent::UIEvent; use dom::window::Window; use msg::constellation_msg; @@ -101,10 +100,10 @@ impl KeyboardEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(window: &Window, type_: DOMString, init: &KeyboardEventBinding::KeyboardEventInit) -> Fallible> { - let event = KeyboardEvent::new(global.as_window(), + let event = KeyboardEvent::new(window, type_, init.parent.parent.parent.bubbles, init.parent.parent.parent.cancelable, diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index 27a61c79400b..2b39d5552044 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -12,7 +12,6 @@ use dom::bindings::reflector::reflect_dom_object; use dom::bindings::str::DOMString; use dom::event::{Event, EventBubbles, EventCancelable}; use dom::eventtarget::EventTarget; -use dom::globalscope::GlobalScope; use dom::uievent::UIEvent; use dom::window::Window; use std::cell::Cell; @@ -82,12 +81,12 @@ impl MouseEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(window: &Window, type_: DOMString, init: &MouseEventBinding::MouseEventInit) -> Fallible> { let bubbles = EventBubbles::from(init.parent.parent.parent.bubbles); let cancelable = EventCancelable::from(init.parent.parent.parent.cancelable); - let event = MouseEvent::new(global.as_window(), + let event = MouseEvent::new(window, type_, bubbles, cancelable, diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 8e8b9888b87d..0a5ab7a66dff 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -22,11 +22,11 @@ use dom::characterdata::CharacterData; use dom::document::Document; use dom::documentfragment::DocumentFragment; use dom::element::Element; -use dom::globalscope::GlobalScope; use dom::htmlbodyelement::HTMLBodyElement; use dom::htmlscriptelement::HTMLScriptElement; use dom::node::{Node, UnbindContext}; use dom::text::Text; +use dom::window::Window; use heapsize::HeapSizeOf; use js::jsapi::JSTracer; use std::cell::{Cell, UnsafeCell}; @@ -70,8 +70,8 @@ impl Range { } // https://dom.spec.whatwg.org/#dom-range - pub fn Constructor(global: &GlobalScope) -> Fallible> { - let document = global.as_window().Document(); + pub fn Constructor(window: &Window) -> Fallible> { + let document = window.Document(); Ok(Range::new_with_doc(&document)) } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index a38770641316..b39faeb5694d 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -319,7 +319,7 @@ impl ServiceWorkerGlobalScope { } fn dispatch_activate(&self) { - let event = ExtendableEvent::new(self.upcast(), atom!("activate"), false, false); + let event = ExtendableEvent::new(self, atom!("activate"), false, false); let event = (&*event).upcast::(); self.upcast::().dispatch_event(event); } diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs index a6034a7dad5d..cfa670d9acb9 100644 --- a/components/script/dom/text.rs +++ b/components/script/dom/text.rs @@ -14,8 +14,8 @@ use dom::bindings::js::RootedReference; use dom::bindings::str::DOMString; use dom::characterdata::CharacterData; use dom::document::Document; -use dom::globalscope::GlobalScope; use dom::node::Node; +use dom::window::Window; /// An HTML text node. #[dom_struct] @@ -35,8 +35,8 @@ impl Text { document, TextBinding::Wrap) } - pub fn Constructor(global: &GlobalScope, text: DOMString) -> Fallible> { - let document = global.as_window().Document(); + pub fn Constructor(window: &Window, text: DOMString) -> Fallible> { + let document = window.Document(); Ok(Text::new(text, &document)) } } diff --git a/components/script/dom/transitionevent.rs b/components/script/dom/transitionevent.rs index 1f487cb38a57..cc17e77eae16 100644 --- a/components/script/dom/transitionevent.rs +++ b/components/script/dom/transitionevent.rs @@ -13,6 +13,7 @@ use dom::bindings::reflector::reflect_dom_object; use dom::bindings::str::DOMString; use dom::event::Event; use dom::globalscope::GlobalScope; +use dom::window::Window; use servo_atoms::Atom; #[dom_struct] @@ -46,9 +47,10 @@ impl TransitionEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(window: &Window, type_: DOMString, init: &TransitionEventInit) -> Fallible> { + let global = window.upcast::(); Ok(TransitionEvent::new(global, Atom::from(type_), init)) } } diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs index 08e1b0c912c7..289088b29771 100644 --- a/components/script/dom/uievent.rs +++ b/components/script/dom/uievent.rs @@ -12,7 +12,6 @@ use dom::bindings::js::Root; use dom::bindings::reflector::reflect_dom_object; use dom::bindings::str::DOMString; use dom::event::{Event, EventBubbles, EventCancelable}; -use dom::globalscope::GlobalScope; use dom::window::Window; use servo_atoms::Atom; use std::cell::Cell; @@ -52,12 +51,12 @@ impl UIEvent { ev } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(window: &Window, type_: DOMString, init: &UIEventBinding::UIEventInit) -> Fallible> { let bubbles = EventBubbles::from(init.parent.bubbles); let cancelable = EventCancelable::from(init.parent.cancelable); - let event = UIEvent::new(global.as_window(), + let event = UIEvent::new(window, type_, bubbles, cancelable, init.view.r(), init.detail); diff --git a/components/script/dom/webglcontextevent.rs b/components/script/dom/webglcontextevent.rs index c128515e81a2..3de8efa43541 100644 --- a/components/script/dom/webglcontextevent.rs +++ b/components/script/dom/webglcontextevent.rs @@ -13,6 +13,7 @@ use dom::bindings::reflector::reflect_dom_object; use dom::bindings::str::DOMString; use dom::event::{Event, EventBubbles, EventCancelable}; use dom::globalscope::GlobalScope; +use dom::window::Window; use servo_atoms::Atom; #[dom_struct] @@ -52,14 +53,14 @@ impl WebGLContextEvent { WebGLContextEventBinding::Wrap) } - pub fn new(global: &GlobalScope, + pub fn new(window: &Window, type_: Atom, bubbles: EventBubbles, cancelable: EventCancelable, status_message: DOMString) -> Root { let event = reflect_dom_object( box WebGLContextEvent::new_inherited(status_message), - global, + window, WebGLContextEventBinding::Wrap); { @@ -70,7 +71,7 @@ impl WebGLContextEvent { event } - pub fn Constructor(global: &GlobalScope, + pub fn Constructor(window: &Window, type_: DOMString, init: &WebGLContextEventInit) -> Fallible> { let status_message = match init.statusMessage.as_ref() { @@ -82,7 +83,7 @@ impl WebGLContextEvent { let cancelable = EventCancelable::from(init.parent.cancelable); - Ok(WebGLContextEvent::new(global, + Ok(WebGLContextEvent::new(window, Atom::from(type_), bubbles, cancelable, diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 5428fc794fae..47a139cc1b08 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -172,7 +172,7 @@ impl WebGLRenderingContext { Ok(ctx) => Some(reflect_dom_object(box ctx, global, WebGLRenderingContextBinding::Wrap)), Err(msg) => { error!("Couldn't create WebGLRenderingContext: {}", msg); - let event = WebGLContextEvent::new(global, + let event = WebGLContextEvent::new(global.as_window(), atom!("webglcontextcreationerror"), EventBubbles::DoesNotBubble, EventCancelable::Cancelable, diff --git a/components/script/dom/webidls/DOMMatrix.webidl b/components/script/dom/webidls/DOMMatrix.webidl index d8306d315fb6..f664e7b77b21 100644 --- a/components/script/dom/webidls/DOMMatrix.webidl +++ b/components/script/dom/webidls/DOMMatrix.webidl @@ -12,8 +12,8 @@ [Constructor, // Constructor(DOMString transformList), -Constructor(sequence numberSequence) -// Exposed=(Window,Worker) +Constructor(sequence numberSequence), +Exposed=(Window,Worker) ] interface DOMMatrix : DOMMatrixReadOnly { diff --git a/components/script/dom/webidls/DOMMatrixReadOnly.webidl b/components/script/dom/webidls/DOMMatrixReadOnly.webidl index 6d92a6b08289..b469b1413ece 100644 --- a/components/script/dom/webidls/DOMMatrixReadOnly.webidl +++ b/components/script/dom/webidls/DOMMatrixReadOnly.webidl @@ -13,7 +13,7 @@ [Constructor, // Constructor(DOMString transformList) Constructor(sequence numberSequence), -// Exposed=(Window,Worker) +Exposed=(Window,Worker) ] interface DOMMatrixReadOnly {