From 941f7dc04bc02ad196e86c5167ea292477fb7284 Mon Sep 17 00:00:00 2001 From: Michael Wu Date: Fri, 10 Jul 2015 21:27:41 -0400 Subject: [PATCH 1/2] Move EventTargetTypeId/NodeTypeId to DOMClass --- components/layout/construct.rs | 3 + .../dom/bindings/codegen/CodegenRust.py | 22 +++++- .../dom/bindings/codegen/Configuration.py | 3 +- components/script/dom/bindings/conversions.rs | 6 +- components/script/dom/bindings/utils.rs | 4 + components/script/dom/characterdata.rs | 4 +- .../script/dom/dedicatedworkerglobalscope.rs | 5 +- components/script/dom/element.rs | 2 +- components/script/dom/eventtarget.rs | 17 +++-- components/script/dom/filereader.rs | 4 +- components/script/dom/htmlelement.rs | 2 +- components/script/dom/htmlmediaelement.rs | 4 +- components/script/dom/htmltablecellelement.rs | 4 +- components/script/dom/node.rs | 73 ++++++++++++------- components/script/dom/websocket.rs | 4 +- components/script/dom/window.rs | 2 +- components/script/dom/worker.rs | 4 +- components/script/dom/workerglobalscope.rs | 13 ++-- components/script/dom/xmlhttprequest.rs | 2 +- .../script/dom/xmlhttprequesteventtarget.rs | 8 +- components/script/dom/xmlhttprequestupload.rs | 3 +- components/script/mem.rs | 16 +++- components/script/parse/html.rs | 2 + tests/unit/script/size_of.rs | 16 ++-- 24 files changed, 149 insertions(+), 74 deletions(-) diff --git a/components/layout/construct.rs b/components/layout/construct.rs index dd1d58a6acc..8b4fd32d56c 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -1430,6 +1430,8 @@ impl<'a> PostorderNodeMutTraversal for FlowConstructor<'a> { Some(NodeTypeId::Document) => { (display::T::none, float::T::none, position::T::static_) } + Some(NodeTypeId::Node) => unreachable!(), + Some(NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData)) => unreachable!(), }; debug!("building flow for node: {:?} {:?} {:?} {:?}", display, float, positioning, node.type_id()); @@ -1585,6 +1587,7 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> { Some(NodeTypeId::Element(ElementTypeId::HTMLElement( HTMLElementTypeId::HTMLObjectElement))) => self.has_object_data(), Some(NodeTypeId::Element(_)) => false, + Some(NodeTypeId::Node) => unreachable!(), } } diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 5b3a3de2f18..d0b45e350a3 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -1722,6 +1722,25 @@ class CGNamespace(CGWrapper): return CGNamespace(namespaces[0], inner, public=public) +def EventTargetEnum(desc): + protochain = desc.prototypeChain + if protochain[0] != "EventTarget": + return "None" + + inner = "" + name = desc.interface.identifier.name + if desc.interface.getUserData("hasConcreteDescendant", False): + inner = "(::dom::%s::%sTypeId::%s)" % (name.lower(), name, name) + prev_proto = "" + for proto in reversed(protochain): + if prev_proto != "": + inner = "(::dom::%s::%sTypeId::%s%s)" % (proto.lower(), proto, prev_proto, inner) + prev_proto = proto + if inner == "": + return "None" + return "Some%s" % inner + + def DOMClass(descriptor): protoList = ['PrototypeList::ID::' + proto for proto in descriptor.prototypeChain] # Pad out the list to the right length with ID::Count so we @@ -1734,7 +1753,8 @@ def DOMClass(descriptor): DOMClass { interface_chain: [ %s ], native_hooks: &sNativePropertyHooks, -}""" % prototypeChainString + type_id: %s, +}""" % (prototypeChainString, EventTargetEnum(descriptor)) class CGDOMJSClass(CGThing): diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py index 1a88968619b..2573e96fc78 100644 --- a/components/script/dom/bindings/codegen/Configuration.py +++ b/components/script/dom/bindings/codegen/Configuration.py @@ -223,8 +223,9 @@ class Descriptor(DescriptorProvider): if m.isDeleter(): addIndexedOrNamedOperation('Deleter', m) - iface.setUserData('hasConcreteDescendant', True) iface = iface.parent + if iface: + iface.setUserData('hasConcreteDescendant', True) if self.proxy: iface = self.interface diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 35f7be92b94..7118bef0e68 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -645,7 +645,7 @@ pub unsafe fn native_from_reflector(obj: *mut JSObject) -> *const T { } /// Get the `DOMClass` from `obj`, or `Err(())` if `obj` is not a DOM object. -unsafe fn get_dom_class(obj: *mut JSObject) -> Result { +pub unsafe fn get_dom_class(obj: *mut JSObject) -> Result<&'static DOMClass, ()> { use dom::bindings::utils::DOMJSClass; use js::glue::GetProxyHandlerExtra; @@ -653,12 +653,12 @@ unsafe fn get_dom_class(obj: *mut JSObject) -> Result { if is_dom_class(&*clasp) { debug!("plain old dom object"); let domjsclass: *const DOMJSClass = clasp as *const DOMJSClass; - return Ok((*domjsclass).dom_class); + return Ok(&(&*domjsclass).dom_class); } if is_dom_proxy(obj) { debug!("proxy dom object"); let dom_class: *const DOMClass = GetProxyHandlerExtra(obj) as *const DOMClass; - return Ok(*dom_class); + return Ok(&*dom_class); } debug!("not a dom object"); Err(()) diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 08e8fde7225..be600d807d3 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -15,6 +15,7 @@ use dom::bindings::global::GlobalRef; use dom::bindings::js::Root; use dom::bindings::trace::trace_object; use dom::browsercontext; +use dom::eventtarget::EventTargetTypeId; use dom::window; use util::mem::HeapSizeOf; use util::str::DOMString; @@ -157,6 +158,9 @@ pub struct DOMClass { /// derivedness. pub interface_chain: [PrototypeList::ID; MAX_PROTO_CHAIN_LENGTH], + /// The EventTarget type, if this is derived from an EventTarget. + pub type_id: Option, + /// The NativePropertyHooks for the interface associated with this class. pub native_hooks: &'static NativePropertyHooks, } diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs index 3efcd7c16c2..d4a2c5e0478 100644 --- a/components/script/dom/characterdata.rs +++ b/components/script/dom/characterdata.rs @@ -158,8 +158,10 @@ impl CharacterDataMethods for CharacterData { } /// The different types of CharacterData. -#[derive(JSTraceable, Copy, Clone, PartialEq, Debug, HeapSizeOf)] +#[derive(Copy, Clone, PartialEq, Debug)] pub enum CharacterDataTypeId { + CharacterData, + Comment, Text, ProcessingInstruction, diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index a3c033e56a6..9ced7221078 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -163,8 +163,7 @@ impl DedicatedWorkerGlobalScope { -> DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope { workerglobalscope: WorkerGlobalScope::new_inherited( - WorkerGlobalScopeTypeId::DedicatedGlobalScope, init, worker_url, - runtime, from_devtools_receiver), + init, worker_url, runtime, from_devtools_receiver), id: id, receiver: receiver, own_sender: own_sender, @@ -364,7 +363,7 @@ impl DedicatedWorkerGlobalScopeMethods for DedicatedWorkerGlobalScope { impl DedicatedWorkerGlobalScopeDerived for EventTarget { fn is_dedicatedworkerglobalscope(&self) -> bool { match *self.type_id() { - EventTargetTypeId::WorkerGlobalScope(WorkerGlobalScopeTypeId::DedicatedGlobalScope) => true, + EventTargetTypeId::WorkerGlobalScope(WorkerGlobalScopeTypeId::DedicatedWorkerGlobalScope) => true, _ => false } } diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 27e8e9c7b7e..bd522dccf0a 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -116,7 +116,7 @@ impl PartialEq for Element { } } -#[derive(JSTraceable, Copy, Clone, PartialEq, Debug, HeapSizeOf)] +#[derive(Copy, Clone, PartialEq, Debug)] pub enum ElementTypeId { HTMLElement(HTMLElementTypeId), Element, diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index f2f228f2c0d..6ac33876e09 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -7,6 +7,7 @@ use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull; use dom::bindings::codegen::Bindings::EventListenerBinding::EventListener; use dom::bindings::codegen::Bindings::EventTargetBinding::EventTargetMethods; +use dom::bindings::conversions::get_dom_class; use dom::bindings::error::Error::InvalidState; use dom::bindings::error::{Fallible, report_pending_exception}; use dom::bindings::utils::{Reflectable, Reflector}; @@ -45,9 +46,10 @@ pub enum ListenerPhase { Bubbling, } -#[derive(JSTraceable, Copy, Clone)] -#[derive(HeapSizeOf)] +#[derive(Copy, Clone)] pub enum EventTargetTypeId { + EventTarget, + Node(NodeTypeId), WebSocket, Window, @@ -132,15 +134,13 @@ pub struct EventListenerEntry { #[dom_struct] pub struct EventTarget { reflector_: Reflector, - type_id: EventTargetTypeId, handlers: DOMRefCell, DefaultState>>, } impl EventTarget { - pub fn new_inherited(type_id: EventTargetTypeId) -> EventTarget { + pub fn new_inherited() -> EventTarget { EventTarget { reflector_: Reflector::new(), - type_id: type_id, handlers: DOMRefCell::new(Default::default()), } } @@ -159,9 +159,12 @@ impl EventTarget { }) } - #[inline] + #[allow(unsafe_code)] pub fn type_id(&self) -> &EventTargetTypeId { - &self.type_id + let domclass = unsafe { + get_dom_class(self.reflector_.get_jsobject().get()).unwrap() + }; + domclass.type_id.as_ref().unwrap() } pub fn dispatch_event_with_target(&self, diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs index ffd74806c04..5de6f4dd5f9 100644 --- a/components/script/dom/filereader.rs +++ b/components/script/dom/filereader.rs @@ -15,7 +15,7 @@ use dom::bindings::utils::{reflect_dom_object, Reflectable}; use dom::blob::Blob; use dom::domexception::{DOMException, DOMErrorName}; use dom::event::{EventCancelable, EventBubbles}; -use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::eventtarget::EventTarget; use dom::progressevent::ProgressEvent; use encoding::all::UTF_8; use encoding::label::encoding_from_whatwg_label; @@ -80,7 +80,7 @@ pub struct FileReader { impl FileReader { pub fn new_inherited(global: GlobalRef) -> FileReader { FileReader { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::FileReader),//? + eventtarget: EventTarget::new_inherited(),//? global: GlobalField::from_rooted(&global), ready_state: Cell::new(FileReaderReadyState::Empty), error: MutNullableHeap::new(None), diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 661378a7fc4..9a02a47dd0f 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -344,7 +344,7 @@ impl VirtualMethods for HTMLElement { } } -#[derive(JSTraceable, Copy, Clone, Debug, HeapSizeOf)] +#[derive(Copy, Clone, Debug)] pub enum HTMLElementTypeId { HTMLElement, diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 4b40e13e129..7a2b798c728 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -41,8 +41,10 @@ impl HTMLMediaElement { } } -#[derive(JSTraceable, Copy, Clone, Debug, HeapSizeOf)] +#[derive(Copy, Clone, Debug)] pub enum HTMLMediaElementTypeId { + HTMLMediaElement = -1, + HTMLAudioElement = 0, HTMLVideoElement = 1, } diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index c67d02c8693..e1f8179a19b 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -22,8 +22,10 @@ use std::cmp::max; const DEFAULT_COLSPAN: u32 = 1; -#[derive(JSTraceable, Copy, Clone, Debug, HeapSizeOf)] +#[derive(Copy, Clone, Debug)] pub enum HTMLTableCellElementTypeId { + HTMLTableCellElement = -1, + HTMLTableDataCellElement = 0, HTMLTableHeaderCellElement = 1, } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index b0c8d79228e..5f437fe0cad 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -81,9 +81,6 @@ pub struct Node { /// The JavaScript reflector for this node. eventtarget: EventTarget, - /// The type of node that this is. - type_id: NodeTypeId, - /// The parent of this node. parent_node: MutNullableHeap>, @@ -284,9 +281,10 @@ impl LayoutDataRef { } /// The different types of nodes. -#[derive(JSTraceable, Copy, Clone, PartialEq, Debug)] -#[derive(HeapSizeOf)] +#[derive(Copy, Clone, PartialEq, Debug)] pub enum NodeTypeId { + Node, + CharacterData(CharacterDataTypeId), DocumentType, DocumentFragment, @@ -452,7 +450,7 @@ impl Node { /// Returns a string that describes this node. pub fn debug_str(&self) -> String { - format!("{:?}", self.type_id) + format!("{:?}", self.type_id()) } pub fn is_in_doc(&self) -> bool { @@ -461,12 +459,15 @@ impl Node { /// Returns the type ID of this node. Fails if this node is borrowed mutably. pub fn type_id(&self) -> NodeTypeId { - self.type_id + match *self.eventtarget.type_id() { + EventTargetTypeId::Node(type_id) => type_id, + _ => unreachable!(), + } } // https://dom.spec.whatwg.org/#concept-node-length pub fn len(&self) -> u32 { - match self.type_id { + match self.type_id() { NodeTypeId::DocumentType => 0, NodeTypeId::CharacterData(_) => { CharacterDataCast::to_ref(self).unwrap().Length() @@ -486,12 +487,12 @@ impl Node { #[inline] pub fn is_anchor_element(&self) -> bool { - self.type_id == NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) + self.type_id() == NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) } #[inline] pub fn is_doctype(&self) -> bool { - self.type_id == NodeTypeId::DocumentType + self.type_id() == NodeTypeId::DocumentType } pub fn get_flag(&self, flag: NodeFlags) -> bool { @@ -1026,7 +1027,7 @@ impl LayoutNodeHelpers for LayoutJS { #[inline] #[allow(unsafe_code)] unsafe fn type_id_for_layout(&self) -> NodeTypeId { - (*self.unsafe_get()).type_id + (*self.unsafe_get()).type_id() } #[inline] @@ -1393,8 +1394,7 @@ impl Node { fn new_(type_id: NodeTypeId, doc: Option<&Document>) -> Node { Node { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::Node(type_id)), - type_id: type_id, + eventtarget: EventTarget::new_inherited(), parent_node: Default::default(), first_child: Default::default(), @@ -1456,6 +1456,8 @@ impl Node { // Step 4-5. match node.type_id() { + NodeTypeId::Node => unreachable!(), + NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) => { if parent.is_document() { return Err(HierarchyRequest); @@ -1538,7 +1540,7 @@ impl Node { } }, NodeTypeId::CharacterData(_) => (), - NodeTypeId::Document => unreachable!(), + NodeTypeId::Document | NodeTypeId::Node => unreachable!(), } } Ok(()) @@ -1698,6 +1700,8 @@ impl Node { // Step 2. // XXXabinader: clone() for each node as trait? let copy: Root = match node.type_id() { + NodeTypeId::Node => unreachable!(), + NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::DocumentType => { let doctype: &DocumentType = DocumentTypeCast::to_ref(node).unwrap(); let doctype = DocumentType::new(doctype.name().clone(), @@ -1833,7 +1837,7 @@ impl Node { } } - match node.type_id { + match node.type_id() { NodeTypeId::Element(_) => { let element = ElementCast::to_ref(node).unwrap(); // Step 1. @@ -1889,7 +1893,9 @@ impl Node { impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-nodetype fn NodeType(&self) -> u16 { - match self.type_id { + match self.type_id() { + NodeTypeId::Node => unreachable!(), + NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) => NodeConstants::TEXT_NODE, NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) => @@ -1909,11 +1915,13 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-nodename fn NodeName(&self) -> DOMString { - match self.type_id { + match self.type_id() { + NodeTypeId::Node => unreachable!(), NodeTypeId::Element(..) => { let elem: &Element = ElementCast::to_ref(self).unwrap(); elem.TagName() } + NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) => "#text".to_owned(), NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) => { let processing_instruction: &ProcessingInstruction = @@ -1937,7 +1945,8 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-ownerdocument fn GetOwnerDocument(&self) -> Option> { - match self.type_id { + match self.type_id() { + NodeTypeId::Node => unreachable!(), NodeTypeId::CharacterData(..) | NodeTypeId::Element(..) | NodeTypeId::DocumentType | @@ -1992,19 +2001,31 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-nodevalue fn GetNodeValue(&self) -> Option { - CharacterDataCast::to_ref(self).map(|c| c.Data()) + match self.type_id() { + NodeTypeId::CharacterData(..) => { + let chardata: &CharacterData = CharacterDataCast::to_ref(self).unwrap(); + Some(chardata.Data()) + } + _ => { + None + } + } } // https://dom.spec.whatwg.org/#dom-node-nodevalue fn SetNodeValue(&self, val: Option) { - if let NodeTypeId::CharacterData(..) = self.type_id { - self.SetTextContent(val) + match self.type_id() { + NodeTypeId::CharacterData(..) => { + self.SetTextContent(val) + } + _ => {} } } // https://dom.spec.whatwg.org/#dom-node-textcontent fn GetTextContent(&self) -> Option { - match self.type_id { + match self.type_id() { + NodeTypeId::Node => unreachable!(), NodeTypeId::DocumentFragment | NodeTypeId::Element(..) => { let content = Node::collect_text_contents(self.traverse_preorder()); @@ -2024,7 +2045,8 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-textcontent fn SetTextContent(&self, value: Option) { let value = value.unwrap_or(String::new()); - match self.type_id { + match self.type_id() { + NodeTypeId::Node => unreachable!(), NodeTypeId::DocumentFragment | NodeTypeId::Element(..) => { // Step 1-2. @@ -2065,7 +2087,7 @@ impl NodeMethods for Node { fn ReplaceChild(&self, node: &Node, child: &Node) -> Fallible> { // Step 1. - match self.type_id { + match self.type_id() { NodeTypeId::Document | NodeTypeId::DocumentFragment | NodeTypeId::Element(..) => (), @@ -2084,6 +2106,7 @@ impl NodeMethods for Node { // Step 4-5. match node.type_id() { + NodeTypeId::Node => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) if self.is_document() => return Err(HierarchyRequest), NodeTypeId::DocumentType if !self.is_document() => return Err(HierarchyRequest), @@ -2147,7 +2170,7 @@ impl NodeMethods for Node { } }, NodeTypeId::CharacterData(..) => (), - NodeTypeId::Document => unreachable!() + NodeTypeId::Document | NodeTypeId::Node => unreachable!() } } diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 4b614786efa..2bf84d609e7 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -20,7 +20,7 @@ use dom::bindings::utils::{reflect_dom_object, Reflectable}; use dom::blob::Blob; use dom::closeevent::CloseEvent; use dom::event::{Event, EventBubbles, EventCancelable}; -use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::eventtarget::EventTarget; use dom::messageevent::MessageEvent; use script_task::ScriptTaskEventCategory::WebSocketEvent; use script_task::{Runnable, CommonScriptMsg}; @@ -110,7 +110,7 @@ fn establish_a_websocket_connection(resource_url: &Url, net_url: (Host, String, impl WebSocket { fn new_inherited(global: GlobalRef, url: Url) -> WebSocket { WebSocket { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::WebSocket), + eventtarget: EventTarget::new_inherited(), url: url, global: GlobalField::from_rooted(&global), ready_state: Cell::new(WebSocketRequestState::Connecting), diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 2ca420d441d..484685584c2 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -1288,7 +1288,7 @@ impl Window { }; let win = box Window { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::Window), + eventtarget: EventTarget::new_inherited(), script_chan: script_chan, image_cache_chan: image_cache_chan, control_chan: control_chan, diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 2711e8502db..92053392db7 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -17,7 +17,7 @@ use dom::bindings::utils::{Reflectable, reflect_dom_object}; use dom::dedicatedworkerglobalscope::{DedicatedWorkerGlobalScope, WorkerScriptMsg}; use dom::errorevent::ErrorEvent; use dom::event::{Event, EventBubbles, EventCancelable}; -use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::eventtarget::EventTarget; use dom::messageevent::MessageEvent; use dom::workerglobalscope::WorkerGlobalScopeInit; @@ -52,7 +52,7 @@ impl Worker { sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>) -> Worker { Worker { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::Worker), + eventtarget: EventTarget::new_inherited(), global: GlobalField::from_rooted(&global), sender: sender, } diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 3bc805a67e6..5d5e944ccf2 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -12,7 +12,7 @@ use dom::bindings::js::{JS, Root, MutNullableHeap}; use dom::bindings::utils::Reflectable; use dom::console::Console; use dom::crypto::Crypto; -use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::eventtarget::EventTarget; use dom::window::{base64_atob, base64_btoa}; use dom::workerlocation::WorkerLocation; use dom::workernavigator::WorkerNavigator; @@ -36,9 +36,11 @@ use std::default::Default; use std::rc::Rc; use std::sync::mpsc::Receiver; -#[derive(JSTraceable, Copy, Clone, PartialEq, HeapSizeOf)] +#[derive(Copy, Clone, PartialEq)] pub enum WorkerGlobalScopeTypeId { - DedicatedGlobalScope, + WorkerGlobalScope, + + DedicatedWorkerGlobalScope, } pub struct WorkerGlobalScopeInit { @@ -90,14 +92,13 @@ pub struct WorkerGlobalScope { } impl WorkerGlobalScope { - pub fn new_inherited(type_id: WorkerGlobalScopeTypeId, - init: WorkerGlobalScopeInit, + pub fn new_inherited(init: WorkerGlobalScopeInit, worker_url: Url, runtime: Rc, from_devtools_receiver: Receiver) -> WorkerGlobalScope { WorkerGlobalScope { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::WorkerGlobalScope(type_id)), + eventtarget: EventTarget::new_inherited(), next_worker_id: Cell::new(WorkerId(0)), worker_id: init.worker_id, worker_url: worker_url, diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 4dd5647029a..743c0e2f6dd 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -155,7 +155,7 @@ pub struct XMLHttpRequest { impl XMLHttpRequest { fn new_inherited(global: GlobalRef) -> XMLHttpRequest { XMLHttpRequest { - eventtarget: XMLHttpRequestEventTarget::new_inherited(XMLHttpRequestEventTargetTypeId::XMLHttpRequest), + eventtarget: XMLHttpRequestEventTarget::new_inherited(), ready_state: Cell::new(XMLHttpRequestState::Unsent), timeout: Cell::new(0u32), with_credentials: Cell::new(false), diff --git a/components/script/dom/xmlhttprequesteventtarget.rs b/components/script/dom/xmlhttprequesteventtarget.rs index 627e4882dde..20452261f94 100644 --- a/components/script/dom/xmlhttprequesteventtarget.rs +++ b/components/script/dom/xmlhttprequesteventtarget.rs @@ -8,8 +8,10 @@ use dom::bindings::codegen::InheritTypes::EventTargetCast; use dom::bindings::codegen::InheritTypes::XMLHttpRequestEventTargetDerived; use dom::eventtarget::{EventTarget, EventTargetTypeId}; -#[derive(JSTraceable, Copy, Clone, PartialEq, HeapSizeOf)] +#[derive(Copy, Clone, PartialEq)] pub enum XMLHttpRequestEventTargetTypeId { + XMLHttpRequestEventTarget, + XMLHttpRequest, XMLHttpRequestUpload, } @@ -20,9 +22,9 @@ pub struct XMLHttpRequestEventTarget { } impl XMLHttpRequestEventTarget { - pub fn new_inherited(type_id: XMLHttpRequestEventTargetTypeId) -> XMLHttpRequestEventTarget { + pub fn new_inherited() -> XMLHttpRequestEventTarget { XMLHttpRequestEventTarget { - eventtarget: EventTarget::new_inherited(EventTargetTypeId::XMLHttpRequestEventTarget(type_id)) + eventtarget: EventTarget::new_inherited() } } } diff --git a/components/script/dom/xmlhttprequestupload.rs b/components/script/dom/xmlhttprequestupload.rs index d112d9d1e08..c7d4d4d4ca3 100644 --- a/components/script/dom/xmlhttprequestupload.rs +++ b/components/script/dom/xmlhttprequestupload.rs @@ -19,8 +19,7 @@ pub struct XMLHttpRequestUpload { impl XMLHttpRequestUpload { fn new_inherited() -> XMLHttpRequestUpload { XMLHttpRequestUpload { - eventtarget: XMLHttpRequestEventTarget::new_inherited( - XMLHttpRequestEventTargetTypeId::XMLHttpRequestUpload) + eventtarget: XMLHttpRequestEventTarget::new_inherited(), } } pub fn new(global: GlobalRef) -> Root { diff --git a/components/script/mem.rs b/components/script/mem.rs index b3a236866bb..55c92f6e4e4 100644 --- a/components/script/mem.rs +++ b/components/script/mem.rs @@ -8,8 +8,12 @@ use dom::bindings::codegen::InheritTypes::*; use dom::element::ElementTypeId; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::HTMLElementTypeId; -use dom::htmlmediaelement::HTMLMediaElementTypeId::{HTMLAudioElement, HTMLVideoElement}; -use dom::htmltablecellelement::HTMLTableCellElementTypeId::{HTMLTableDataCellElement, HTMLTableHeaderCellElement}; +use dom::htmlmediaelement::HTMLMediaElementTypeId::HTMLAudioElement; +use dom::htmlmediaelement::HTMLMediaElementTypeId::HTMLMediaElement; +use dom::htmlmediaelement::HTMLMediaElementTypeId::HTMLVideoElement; +use dom::htmltablecellelement::HTMLTableCellElementTypeId::HTMLTableCellElement; +use dom::htmltablecellelement::HTMLTableCellElementTypeId::HTMLTableDataCellElement; +use dom::htmltablecellelement::HTMLTableCellElementTypeId::HTMLTableHeaderCellElement; use dom::node::NodeTypeId; use libc; use util::mem::{HeapSizeOf, heap_size_of}; @@ -245,5 +249,13 @@ pub fn heap_size_of_eventtarget(target: &EventTarget) -> usize { heap_size_of_self_and_children(DocumentTypeCast::to_ref(target).unwrap()), &EventTargetTypeId::Node(NodeTypeId::DocumentFragment) => heap_size_of_self_and_children(DocumentFragmentCast::to_ref(target).unwrap()), + &EventTargetTypeId::EventTarget | + &EventTargetTypeId::Node(NodeTypeId::Node) | + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( + HTMLElementTypeId::HTMLMediaElement(HTMLMediaElement)))) | + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( + HTMLElementTypeId::HTMLTableCellElement(HTMLTableCellElement)))) => { + unreachable!() + }, } } diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs index 8aec2e816e4..250b128e5f3 100644 --- a/components/script/parse/html.rs +++ b/components/script/parse/html.rs @@ -184,6 +184,8 @@ impl<'a> Serializable for &'a Node { traversal_scope: TraversalScope) -> io::Result<()> { let node = *self; match (traversal_scope, node.type_id()) { + (_, NodeTypeId::Node) => unreachable!(), + (_, NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData)) => unreachable!(), (_, NodeTypeId::Element(..)) => { let elem = ElementCast::to_ref(node).unwrap(); let name = QualName::new(elem.namespace().clone(), diff --git a/tests/unit/script/size_of.rs b/tests/unit/script/size_of.rs index cea905ef545..1b34e462470 100644 --- a/tests/unit/script/size_of.rs +++ b/tests/unit/script/size_of.rs @@ -38,11 +38,11 @@ macro_rules! sizeof_checker ( ); // Update the sizes here -sizeof_checker!(size_event_target, EventTarget, 48); -sizeof_checker!(size_node, Node, 184); -sizeof_checker!(size_element, Element, 296); -sizeof_checker!(size_htmlelement, HTMLElement, 312); -sizeof_checker!(size_div, HTMLDivElement, 312); -sizeof_checker!(size_span, HTMLSpanElement, 312); -sizeof_checker!(size_text, Text, 216); -sizeof_checker!(size_characterdata, CharacterData, 216); +sizeof_checker!(size_event_target, EventTarget, 40); +sizeof_checker!(size_node, Node, 168); +sizeof_checker!(size_element, Element, 280); +sizeof_checker!(size_htmlelement, HTMLElement, 296); +sizeof_checker!(size_div, HTMLDivElement, 296); +sizeof_checker!(size_span, HTMLSpanElement, 296); +sizeof_checker!(size_text, Text, 200); +sizeof_checker!(size_characterdata, CharacterData, 200); From c25085f68a86e2885d77146add097f9f796c96ac Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 11 Sep 2015 23:55:20 +0200 Subject: [PATCH 2/2] Introduce [Abstract] to mark non-leaf interfaces Some interfaces like Node, CharacterData and HTMLTableCellElement are never instantiated directly, only their descendant interfaces are. Those are marked with [Abstract] to set their type_id to None instead of having dummy values in the TypeId enums. --- components/layout/construct.rs | 3 --- .../script/dom/bindings/codegen/CodegenRust.py | 2 +- .../dom/bindings/codegen/parser/WebIDL.py | 3 ++- .../dom/bindings/codegen/parser/abstract.patch | 12 ++++++++++++ .../dom/bindings/codegen/parser/update.sh | 1 + components/script/dom/characterdata.rs | 2 -- components/script/dom/eventtarget.rs | 2 -- components/script/dom/htmlmediaelement.rs | 2 -- components/script/dom/htmltablecellelement.rs | 2 -- components/script/dom/node.rs | 18 ++---------------- .../script/dom/webidls/CharacterData.webidl | 1 + .../script/dom/webidls/EventTarget.webidl | 1 + .../script/dom/webidls/HTMLMediaElement.webidl | 1 + .../dom/webidls/HTMLTableCellElement.webidl | 1 + components/script/dom/webidls/Node.webidl | 1 + .../dom/webidls/WorkerGlobalScope.webidl | 4 ++-- .../webidls/XMLHttpRequestEventTarget.webidl | 2 +- components/script/dom/workerglobalscope.rs | 2 -- .../script/dom/xmlhttprequesteventtarget.rs | 2 -- components/script/mem.rs | 10 ---------- components/script/parse/html.rs | 2 -- 21 files changed, 26 insertions(+), 48 deletions(-) create mode 100644 components/script/dom/bindings/codegen/parser/abstract.patch diff --git a/components/layout/construct.rs b/components/layout/construct.rs index 8b4fd32d56c..dd1d58a6acc 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -1430,8 +1430,6 @@ impl<'a> PostorderNodeMutTraversal for FlowConstructor<'a> { Some(NodeTypeId::Document) => { (display::T::none, float::T::none, position::T::static_) } - Some(NodeTypeId::Node) => unreachable!(), - Some(NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData)) => unreachable!(), }; debug!("building flow for node: {:?} {:?} {:?} {:?}", display, float, positioning, node.type_id()); @@ -1587,7 +1585,6 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> { Some(NodeTypeId::Element(ElementTypeId::HTMLElement( HTMLElementTypeId::HTMLObjectElement))) => self.has_object_data(), Some(NodeTypeId::Element(_)) => false, - Some(NodeTypeId::Node) => unreachable!(), } } diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index d0b45e350a3..e5a90633f01 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -1724,7 +1724,7 @@ class CGNamespace(CGWrapper): def EventTargetEnum(desc): protochain = desc.prototypeChain - if protochain[0] != "EventTarget": + if protochain[0] != "EventTarget" or desc.interface.getExtendedAttribute("Abstract"): return "None" inner = "" diff --git a/components/script/dom/bindings/codegen/parser/WebIDL.py b/components/script/dom/bindings/codegen/parser/WebIDL.py index 09368e45aa7..90ec9e88921 100644 --- a/components/script/dom/bindings/codegen/parser/WebIDL.py +++ b/components/script/dom/bindings/codegen/parser/WebIDL.py @@ -1357,7 +1357,8 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): identifier == "ChromeOnly" or identifier == "Unforgeable" or identifier == "UnsafeInPrerendering" or - identifier == "LegacyEventInit"): + identifier == "LegacyEventInit" or + identifier == "Abstract"): # Known extended attributes that do not take values if not attr.noArguments(): raise WebIDLError("[%s] must take no arguments" % identifier, diff --git a/components/script/dom/bindings/codegen/parser/abstract.patch b/components/script/dom/bindings/codegen/parser/abstract.patch new file mode 100644 index 00000000000..e971a97e443 --- /dev/null +++ b/components/script/dom/bindings/codegen/parser/abstract.patch @@ -0,0 +1,12 @@ +--- WebIDL.py ++++ WebIDL.py +@@ -1357,7 +1357,8 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins): + identifier == "ChromeOnly" or + identifier == "Unforgeable" or + identifier == "UnsafeInPrerendering" or +- identifier == "LegacyEventInit"): ++ identifier == "LegacyEventInit" or ++ identifier == "Abstract"): + # Known extended attributes that do not take values + if not attr.noArguments(): + raise WebIDLError("[%s] must take no arguments" % identifier, diff --git a/components/script/dom/bindings/codegen/parser/update.sh b/components/script/dom/bindings/codegen/parser/update.sh index 5dd513812e1..26f70aac6ae 100755 --- a/components/script/dom/bindings/codegen/parser/update.sh +++ b/components/script/dom/bindings/codegen/parser/update.sh @@ -1,3 +1,4 @@ wget https://mxr.mozilla.org/mozilla-central/source/dom/bindings/parser/WebIDL.py?raw=1 -O WebIDL.py patch < external.patch patch < module.patch +patch < abstract.patch diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs index d4a2c5e0478..36503f8c041 100644 --- a/components/script/dom/characterdata.rs +++ b/components/script/dom/characterdata.rs @@ -160,8 +160,6 @@ impl CharacterDataMethods for CharacterData { /// The different types of CharacterData. #[derive(Copy, Clone, PartialEq, Debug)] pub enum CharacterDataTypeId { - CharacterData, - Comment, Text, ProcessingInstruction, diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 6ac33876e09..c6f3db73d8c 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -48,8 +48,6 @@ pub enum ListenerPhase { #[derive(Copy, Clone)] pub enum EventTargetTypeId { - EventTarget, - Node(NodeTypeId), WebSocket, Window, diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 7a2b798c728..8630cf5a745 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -43,8 +43,6 @@ impl HTMLMediaElement { #[derive(Copy, Clone, Debug)] pub enum HTMLMediaElementTypeId { - HTMLMediaElement = -1, - HTMLAudioElement = 0, HTMLVideoElement = 1, } diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index e1f8179a19b..15c1acf3737 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -24,8 +24,6 @@ const DEFAULT_COLSPAN: u32 = 1; #[derive(Copy, Clone, Debug)] pub enum HTMLTableCellElementTypeId { - HTMLTableCellElement = -1, - HTMLTableDataCellElement = 0, HTMLTableHeaderCellElement = 1, } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 5f437fe0cad..ae725d3d856 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -283,8 +283,6 @@ impl LayoutDataRef { /// The different types of nodes. #[derive(Copy, Clone, PartialEq, Debug)] pub enum NodeTypeId { - Node, - CharacterData(CharacterDataTypeId), DocumentType, DocumentFragment, @@ -1456,8 +1454,6 @@ impl Node { // Step 4-5. match node.type_id() { - NodeTypeId::Node => unreachable!(), - NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) => { if parent.is_document() { return Err(HierarchyRequest); @@ -1540,7 +1536,7 @@ impl Node { } }, NodeTypeId::CharacterData(_) => (), - NodeTypeId::Document | NodeTypeId::Node => unreachable!(), + NodeTypeId::Document => unreachable!(), } } Ok(()) @@ -1700,8 +1696,6 @@ impl Node { // Step 2. // XXXabinader: clone() for each node as trait? let copy: Root = match node.type_id() { - NodeTypeId::Node => unreachable!(), - NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::DocumentType => { let doctype: &DocumentType = DocumentTypeCast::to_ref(node).unwrap(); let doctype = DocumentType::new(doctype.name().clone(), @@ -1894,8 +1888,6 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-nodetype fn NodeType(&self) -> u16 { match self.type_id() { - NodeTypeId::Node => unreachable!(), - NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) => NodeConstants::TEXT_NODE, NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) => @@ -1916,12 +1908,10 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-nodename fn NodeName(&self) -> DOMString { match self.type_id() { - NodeTypeId::Node => unreachable!(), NodeTypeId::Element(..) => { let elem: &Element = ElementCast::to_ref(self).unwrap(); elem.TagName() } - NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData) => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) => "#text".to_owned(), NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) => { let processing_instruction: &ProcessingInstruction = @@ -1946,7 +1936,6 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-ownerdocument fn GetOwnerDocument(&self) -> Option> { match self.type_id() { - NodeTypeId::Node => unreachable!(), NodeTypeId::CharacterData(..) | NodeTypeId::Element(..) | NodeTypeId::DocumentType | @@ -2025,7 +2014,6 @@ impl NodeMethods for Node { // https://dom.spec.whatwg.org/#dom-node-textcontent fn GetTextContent(&self) -> Option { match self.type_id() { - NodeTypeId::Node => unreachable!(), NodeTypeId::DocumentFragment | NodeTypeId::Element(..) => { let content = Node::collect_text_contents(self.traverse_preorder()); @@ -2046,7 +2034,6 @@ impl NodeMethods for Node { fn SetTextContent(&self, value: Option) { let value = value.unwrap_or(String::new()); match self.type_id() { - NodeTypeId::Node => unreachable!(), NodeTypeId::DocumentFragment | NodeTypeId::Element(..) => { // Step 1-2. @@ -2106,7 +2093,6 @@ impl NodeMethods for Node { // Step 4-5. match node.type_id() { - NodeTypeId::Node => unreachable!(), NodeTypeId::CharacterData(CharacterDataTypeId::Text) if self.is_document() => return Err(HierarchyRequest), NodeTypeId::DocumentType if !self.is_document() => return Err(HierarchyRequest), @@ -2170,7 +2156,7 @@ impl NodeMethods for Node { } }, NodeTypeId::CharacterData(..) => (), - NodeTypeId::Document | NodeTypeId::Node => unreachable!() + NodeTypeId::Document => unreachable!(), } } diff --git a/components/script/dom/webidls/CharacterData.webidl b/components/script/dom/webidls/CharacterData.webidl index b22d755438f..68ba9ab8eb8 100644 --- a/components/script/dom/webidls/CharacterData.webidl +++ b/components/script/dom/webidls/CharacterData.webidl @@ -10,6 +10,7 @@ * liability, trademark and document use rules apply. */ +[Abstract] interface CharacterData : Node { [TreatNullAs=EmptyString] attribute DOMString data; readonly attribute unsigned long length; diff --git a/components/script/dom/webidls/EventTarget.webidl b/components/script/dom/webidls/EventTarget.webidl index 1bc929851ed..403b1287fe4 100644 --- a/components/script/dom/webidls/EventTarget.webidl +++ b/components/script/dom/webidls/EventTarget.webidl @@ -6,6 +6,7 @@ * https://dom.spec.whatwg.org/#interface-eventtarget */ +[Abstract] interface EventTarget { void addEventListener(DOMString type, EventListener? listener, diff --git a/components/script/dom/webidls/HTMLMediaElement.webidl b/components/script/dom/webidls/HTMLMediaElement.webidl index e7b0383d1a3..17e86f91469 100644 --- a/components/script/dom/webidls/HTMLMediaElement.webidl +++ b/components/script/dom/webidls/HTMLMediaElement.webidl @@ -5,6 +5,7 @@ // https://www.whatwg.org/html/#htmlmediaelement //enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" }; +[Abstract] interface HTMLMediaElement : HTMLElement { // error state diff --git a/components/script/dom/webidls/HTMLTableCellElement.webidl b/components/script/dom/webidls/HTMLTableCellElement.webidl index de1211b6333..1371bea720e 100644 --- a/components/script/dom/webidls/HTMLTableCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableCellElement.webidl @@ -4,6 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://www.whatwg.org/html/#htmltablecellelement +[Abstract] interface HTMLTableCellElement : HTMLElement { attribute unsigned long colSpan; // attribute unsigned long rowSpan; diff --git a/components/script/dom/webidls/Node.webidl b/components/script/dom/webidls/Node.webidl index bb118820237..73635ab6f7b 100644 --- a/components/script/dom/webidls/Node.webidl +++ b/components/script/dom/webidls/Node.webidl @@ -7,6 +7,7 @@ * https://dom.spec.whatwg.org/#interface-node */ +[Abstract] interface Node : EventTarget { const unsigned short ELEMENT_NODE = 1; const unsigned short ATTRIBUTE_NODE = 2; // historical diff --git a/components/script/dom/webidls/WorkerGlobalScope.webidl b/components/script/dom/webidls/WorkerGlobalScope.webidl index c8427b95fd0..28a4f028bb5 100644 --- a/components/script/dom/webidls/WorkerGlobalScope.webidl +++ b/components/script/dom/webidls/WorkerGlobalScope.webidl @@ -2,8 +2,8 @@ * 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/. */ -// https://www.whatwg.org/html/#workerglobalscope -//[Exposed=Worker] +// https://html.spec.whatwg.org/multipage/#workerglobalscope +[Abstract/*, Exposed=Worker*/] interface WorkerGlobalScope : EventTarget { [BinaryName="Self_"] readonly attribute WorkerGlobalScope self; readonly attribute WorkerLocation location; diff --git a/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl b/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl index fa2d9625ad9..7756d9dd623 100644 --- a/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl +++ b/components/script/dom/webidls/XMLHttpRequestEventTarget.webidl @@ -13,7 +13,7 @@ * http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0. */ -//[Exposed=(Window,Worker)] +[Abstract/*, Exposed=(Window,Worker)*/] interface XMLHttpRequestEventTarget : EventTarget { // event handlers attribute EventHandler onloadstart; diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 5d5e944ccf2..4fbd17a7413 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -38,8 +38,6 @@ use std::sync::mpsc::Receiver; #[derive(Copy, Clone, PartialEq)] pub enum WorkerGlobalScopeTypeId { - WorkerGlobalScope, - DedicatedWorkerGlobalScope, } diff --git a/components/script/dom/xmlhttprequesteventtarget.rs b/components/script/dom/xmlhttprequesteventtarget.rs index 20452261f94..66dcb5f8211 100644 --- a/components/script/dom/xmlhttprequesteventtarget.rs +++ b/components/script/dom/xmlhttprequesteventtarget.rs @@ -10,8 +10,6 @@ use dom::eventtarget::{EventTarget, EventTargetTypeId}; #[derive(Copy, Clone, PartialEq)] pub enum XMLHttpRequestEventTargetTypeId { - XMLHttpRequestEventTarget, - XMLHttpRequest, XMLHttpRequestUpload, } diff --git a/components/script/mem.rs b/components/script/mem.rs index 55c92f6e4e4..2e46ffea85e 100644 --- a/components/script/mem.rs +++ b/components/script/mem.rs @@ -9,9 +9,7 @@ use dom::element::ElementTypeId; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlelement::HTMLElementTypeId; use dom::htmlmediaelement::HTMLMediaElementTypeId::HTMLAudioElement; -use dom::htmlmediaelement::HTMLMediaElementTypeId::HTMLMediaElement; use dom::htmlmediaelement::HTMLMediaElementTypeId::HTMLVideoElement; -use dom::htmltablecellelement::HTMLTableCellElementTypeId::HTMLTableCellElement; use dom::htmltablecellelement::HTMLTableCellElementTypeId::HTMLTableDataCellElement; use dom::htmltablecellelement::HTMLTableCellElementTypeId::HTMLTableHeaderCellElement; use dom::node::NodeTypeId; @@ -249,13 +247,5 @@ pub fn heap_size_of_eventtarget(target: &EventTarget) -> usize { heap_size_of_self_and_children(DocumentTypeCast::to_ref(target).unwrap()), &EventTargetTypeId::Node(NodeTypeId::DocumentFragment) => heap_size_of_self_and_children(DocumentFragmentCast::to_ref(target).unwrap()), - &EventTargetTypeId::EventTarget | - &EventTargetTypeId::Node(NodeTypeId::Node) | - &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( - HTMLElementTypeId::HTMLMediaElement(HTMLMediaElement)))) | - &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( - HTMLElementTypeId::HTMLTableCellElement(HTMLTableCellElement)))) => { - unreachable!() - }, } } diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs index 250b128e5f3..8aec2e816e4 100644 --- a/components/script/parse/html.rs +++ b/components/script/parse/html.rs @@ -184,8 +184,6 @@ impl<'a> Serializable for &'a Node { traversal_scope: TraversalScope) -> io::Result<()> { let node = *self; match (traversal_scope, node.type_id()) { - (_, NodeTypeId::Node) => unreachable!(), - (_, NodeTypeId::CharacterData(CharacterDataTypeId::CharacterData)) => unreachable!(), (_, NodeTypeId::Element(..)) => { let elem = ElementCast::to_ref(node).unwrap(); let name = QualName::new(elem.namespace().clone(),