diff options
Diffstat (limited to 'components/script')
73 files changed, 496 insertions, 49 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index bf6ca70e6c0..5f60a9fc5fa 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2863,7 +2863,7 @@ create_noncallback_interface_object(cx, %(length)s, interface.handle_mut()); assert!(!interface.is_null());""" % properties)) - if self.descriptor.hasDescendants(): + if self.descriptor.shouldCacheConstructor(): code.append(CGGeneric("""\ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null()); (*cache)[PrototypeList::Constructor::%(id)s as usize] = interface.get(); @@ -5301,11 +5301,79 @@ class CGClassConstructHook(CGAbstractExternMethod): preamble += "let global = Root::downcast::<dom::types::%s>(global).unwrap();\n" % list(self.exposureSet)[0] 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, - self.descriptor, self.constructor) - return CGList([preamble, callGenerator]) + if self.constructor.isHTMLConstructor(): + signatures = self.constructor.signatures() + assert len(signatures) == 1 + constructorCall = CGGeneric("""\ +// Step 2 https://html.spec.whatwg.org/multipage/#htmlconstructor +// The custom element definition cannot use an element interface as its constructor + +// The new_target might be a cross-compartment wrapper. Get the underlying object +// so we can do the spec's object-identity checks. +rooted!(in(cx) let new_target = UnwrapObject(args.new_target().to_object(), 1)); +if new_target.is_null() { + throw_dom_exception(cx, global.upcast::<GlobalScope>(), Error::Type("new.target is null".to_owned())); + return false; +} + +if args.callee() == new_target.get() { + throw_dom_exception(cx, global.upcast::<GlobalScope>(), + Error::Type("new.target must not be the active function object".to_owned())); + return false; +} + +// Step 6 +rooted!(in(cx) let mut prototype = ptr::null_mut()); +{ + rooted!(in(cx) let mut proto_val = UndefinedValue()); + let _ac = JSAutoCompartment::new(cx, new_target.get()); + if !JS_GetProperty(cx, new_target.handle(), b"prototype\\0".as_ptr() as *const _, proto_val.handle_mut()) { + return false; + } + + if !proto_val.is_object() { + // Step 7 of https://html.spec.whatwg.org/multipage/#htmlconstructor. + // This fallback behavior is designed to match analogous behavior for the + // JavaScript built-ins. So we enter the compartment of our underlying + // newTarget object and fall back to the prototype object from that global. + // XXX The spec says to use GetFunctionRealm(), which is not actually + // the same thing as what we have here (e.g. in the case of scripted callable proxies + // whose target is not same-compartment with the proxy, or bound functions, etc). + // https://bugzilla.mozilla.org/show_bug.cgi?id=1317658 + + rooted!(in(cx) let global_object = CurrentGlobalOrNull(cx)); + GetProtoObject(cx, global_object.handle(), prototype.handle_mut()); + } else { + // Step 6 + prototype.set(proto_val.to_object()); + }; +} + +// Wrap prototype in this context since it is from the newTarget compartment +if !JS_WrapObject(cx, prototype.handle_mut()) { + return false; +} + +let result: Result<Root<%s>, Error> = html_constructor(&global, &args); +let result = match result { + Ok(result) => result, + Err(e) => { + throw_dom_exception(cx, global.upcast::<GlobalScope>(), e); + return false; + }, +}; + +JS_SetPrototype(cx, result.reflector().get_jsobject(), prototype.handle()); + +(result).to_jsval(cx, args.rval()); +return true; +""" % self.descriptor.name) + else: + name = self.constructor.identifier.name + nativeName = MakeNativeName(self.descriptor.binaryNameFor(name)) + constructorCall = CGMethodCall(["&global"], nativeName, True, + self.descriptor, self.constructor) + return CGList([preamble, constructorCall]) class CGClassFinalizeHook(CGAbstractClassHook): @@ -5517,9 +5585,11 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries 'js::jsapi::JS_ObjectIsDate', 'js::jsapi::JS_SetImmutablePrototype', 'js::jsapi::JS_SetProperty', + 'js::jsapi::JS_SetPrototype', 'js::jsapi::JS_SetReservedSlot', 'js::jsapi::JS_SplicePrototype', 'js::jsapi::JS_WrapValue', + 'js::jsapi::JS_WrapObject', 'js::jsapi::MutableHandle', 'js::jsapi::MutableHandleObject', 'js::jsapi::MutableHandleValue', @@ -5547,6 +5617,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries 'js::glue::RUST_JSID_IS_STRING', 'js::glue::RUST_SYMBOL_TO_JSID', 'js::glue::int_to_jsid', + 'js::glue::UnwrapObject', 'js::panic::maybe_resume_unwind', 'js::panic::wrap_panic', 'js::rust::GCMethods', @@ -5561,14 +5632,15 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries 'dom::bindings::interface::ConstructorClassHook', 'dom::bindings::interface::InterfaceConstructorBehavior', 'dom::bindings::interface::NonCallbackInterfaceObjectClass', - 'dom::bindings::interface::create_callback_interface_object', 'dom::bindings::interface::create_global_object', + 'dom::bindings::interface::create_callback_interface_object', 'dom::bindings::interface::create_interface_prototype_object', 'dom::bindings::interface::create_named_constructors', 'dom::bindings::interface::create_noncallback_interface_object', 'dom::bindings::interface::define_guarded_constants', 'dom::bindings::interface::define_guarded_methods', 'dom::bindings::interface::define_guarded_properties', + 'dom::bindings::interface::html_constructor', 'dom::bindings::interface::is_exposed_in', 'dom::bindings::iterable::Iterable', 'dom::bindings::iterable::IteratorType', diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py index 0fe9bf6c004..df6c0a36c76 100644 --- a/components/script/dom/bindings/codegen/Configuration.py +++ b/components/script/dom/bindings/codegen/Configuration.py @@ -398,7 +398,11 @@ class Descriptor(DescriptorProvider): assert self.interface.hasInterfaceObject() if self.interface.getExtendedAttribute("Inline"): return False - return self.interface.isCallback() or self.interface.isNamespace() or self.hasDescendants() + return (self.interface.isCallback() or self.interface.isNamespace() or + self.hasDescendants() or self.interface.getExtendedAttribute("HTMLConstructor")) + + def shouldCacheConstructor(self): + return self.hasDescendants() or self.interface.getExtendedAttribute("HTMLConstructor") def isExposedConditionally(self): return self.interface.isExposedConditionally() diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index 517adbde425..9900bf00e9a 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -4,17 +4,92 @@ //! Machinery to initialise interface prototype objects and interface objects. +use dom::bindings::codegen::Bindings::HTMLAnchorElementBinding; +use dom::bindings::codegen::Bindings::HTMLAreaElementBinding; +use dom::bindings::codegen::Bindings::HTMLAudioElementBinding; +use dom::bindings::codegen::Bindings::HTMLBRElementBinding; +use dom::bindings::codegen::Bindings::HTMLBaseElementBinding; +use dom::bindings::codegen::Bindings::HTMLBodyElementBinding; +use dom::bindings::codegen::Bindings::HTMLButtonElementBinding; +use dom::bindings::codegen::Bindings::HTMLCanvasElementBinding; +use dom::bindings::codegen::Bindings::HTMLDListElementBinding; +use dom::bindings::codegen::Bindings::HTMLDataElementBinding; +use dom::bindings::codegen::Bindings::HTMLDataListElementBinding; +use dom::bindings::codegen::Bindings::HTMLDetailsElementBinding; +use dom::bindings::codegen::Bindings::HTMLDialogElementBinding; +use dom::bindings::codegen::Bindings::HTMLDirectoryElementBinding; +use dom::bindings::codegen::Bindings::HTMLDivElementBinding; +use dom::bindings::codegen::Bindings::HTMLElementBinding; +use dom::bindings::codegen::Bindings::HTMLEmbedElementBinding; +use dom::bindings::codegen::Bindings::HTMLFieldSetElementBinding; +use dom::bindings::codegen::Bindings::HTMLFontElementBinding; +use dom::bindings::codegen::Bindings::HTMLFormElementBinding; +use dom::bindings::codegen::Bindings::HTMLFrameElementBinding; +use dom::bindings::codegen::Bindings::HTMLFrameSetElementBinding; +use dom::bindings::codegen::Bindings::HTMLHRElementBinding; +use dom::bindings::codegen::Bindings::HTMLHeadElementBinding; +use dom::bindings::codegen::Bindings::HTMLHeadingElementBinding; +use dom::bindings::codegen::Bindings::HTMLHtmlElementBinding; +use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding; +use dom::bindings::codegen::Bindings::HTMLImageElementBinding; +use dom::bindings::codegen::Bindings::HTMLInputElementBinding; +use dom::bindings::codegen::Bindings::HTMLLIElementBinding; +use dom::bindings::codegen::Bindings::HTMLLabelElementBinding; +use dom::bindings::codegen::Bindings::HTMLLegendElementBinding; +use dom::bindings::codegen::Bindings::HTMLLinkElementBinding; +use dom::bindings::codegen::Bindings::HTMLMapElementBinding; +use dom::bindings::codegen::Bindings::HTMLMetaElementBinding; +use dom::bindings::codegen::Bindings::HTMLMeterElementBinding; +use dom::bindings::codegen::Bindings::HTMLModElementBinding; +use dom::bindings::codegen::Bindings::HTMLOListElementBinding; +use dom::bindings::codegen::Bindings::HTMLObjectElementBinding; +use dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding; +use dom::bindings::codegen::Bindings::HTMLOptionElementBinding; +use dom::bindings::codegen::Bindings::HTMLOutputElementBinding; +use dom::bindings::codegen::Bindings::HTMLParagraphElementBinding; +use dom::bindings::codegen::Bindings::HTMLParamElementBinding; +use dom::bindings::codegen::Bindings::HTMLPreElementBinding; +use dom::bindings::codegen::Bindings::HTMLProgressElementBinding; +use dom::bindings::codegen::Bindings::HTMLQuoteElementBinding; +use dom::bindings::codegen::Bindings::HTMLScriptElementBinding; +use dom::bindings::codegen::Bindings::HTMLSelectElementBinding; +use dom::bindings::codegen::Bindings::HTMLSourceElementBinding; +use dom::bindings::codegen::Bindings::HTMLSpanElementBinding; +use dom::bindings::codegen::Bindings::HTMLStyleElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableCaptionElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableColElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableDataCellElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableHeaderCellElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableRowElementBinding; +use dom::bindings::codegen::Bindings::HTMLTableSectionElementBinding; +use dom::bindings::codegen::Bindings::HTMLTemplateElementBinding; +use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding; +use dom::bindings::codegen::Bindings::HTMLTimeElementBinding; +use dom::bindings::codegen::Bindings::HTMLTitleElementBinding; +use dom::bindings::codegen::Bindings::HTMLTrackElementBinding; +use dom::bindings::codegen::Bindings::HTMLUListElementBinding; +use dom::bindings::codegen::Bindings::HTMLVideoElementBinding; +use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::codegen::InterfaceObjectMap::Globals; use dom::bindings::codegen::PrototypeList; use dom::bindings::constant::{ConstantSpec, define_constants}; -use dom::bindings::conversions::{DOM_OBJECT_SLOT, get_dom_class}; +use dom::bindings::conversions::{DOM_OBJECT_SLOT, DerivedFrom, get_dom_class}; +use dom::bindings::error::{Error, Fallible}; use dom::bindings::guard::Guard; +use dom::bindings::js::Root; use dom::bindings::utils::{DOM_PROTOTYPE_SLOT, ProtoOrIfaceArray, get_proto_or_iface_array}; +use dom::create::create_native_html_element; +use dom::element::{Element, ElementCreator}; +use dom::htmlelement::HTMLElement; +use dom::window::Window; +use html5ever::LocalName; +use html5ever::interface::QualName; use js::error::throw_type_error; -use js::glue::{RUST_SYMBOL_TO_JSID, UncheckedUnwrapObject}; -use js::jsapi::{Class, ClassOps, CompartmentOptions, GetGlobalForObjectCrossCompartment}; -use js::jsapi::{GetWellKnownSymbol, HandleObject, HandleValue, JSAutoCompartment}; -use js::jsapi::{JSClass, JSContext, JSFUN_CONSTRUCTOR, JSFunctionSpec, JSObject}; +use js::glue::{RUST_SYMBOL_TO_JSID, UncheckedUnwrapObject, UnwrapObject}; +use js::jsapi::{CallArgs, Class, ClassOps, CompartmentOptions, CurrentGlobalOrNull}; +use js::jsapi::{GetGlobalForObjectCrossCompartment, GetWellKnownSymbol, HandleObject, HandleValue}; +use js::jsapi::{JSAutoCompartment, JSClass, JSContext, JSFUN_CONSTRUCTOR, JSFunctionSpec, JSObject}; use js::jsapi::{JSPROP_PERMANENT, JSPROP_READONLY, JSPROP_RESOLVING}; use js::jsapi::{JSPropertySpec, JSString, JSTracer, JSVersion, JS_AtomizeAndPinString}; use js::jsapi::{JS_DefineProperty, JS_DefineProperty1, JS_DefineProperty2}; @@ -158,6 +233,73 @@ pub unsafe fn create_global_object( JS_FireOnNewGlobalObject(cx, rval.handle()); } +// https://html.spec.whatwg.org/multipage/#htmlconstructor +pub unsafe fn html_constructor<T>(window: &Window, call_args: &CallArgs) -> Fallible<Root<T>> + where T: DerivedFrom<Element> { + let document = window.Document(); + + // Step 1 + let registry = window.CustomElements(); + + // Step 2 is checked in the generated caller code + + // Step 3 + rooted!(in(window.get_cx()) let new_target = call_args.new_target().to_object()); + let definition = match registry.lookup_definition_by_constructor(new_target.handle()) { + Some(definition) => definition, + None => return Err(Error::Type("No custom element definition found for new.target".to_owned())), + }; + + rooted!(in(window.get_cx()) let callee = UnwrapObject(call_args.callee(), 1)); + if callee.is_null() { + return Err(Error::Security); + } + + { + let _ac = JSAutoCompartment::new(window.get_cx(), callee.get()); + rooted!(in(window.get_cx()) let mut constructor = ptr::null_mut()); + rooted!(in(window.get_cx()) let global_object = CurrentGlobalOrNull(window.get_cx())); + + if definition.is_autonomous() { + // Step 4 + // Since this element is autonomous, its active function object must be the HTMLElement + + // Retrieve the constructor object for HTMLElement + HTMLElementBinding::GetConstructorObject(window.get_cx(), global_object.handle(), constructor.handle_mut()); + + } else { + // Step 5 + get_constructor_object_from_local_name(definition.local_name.clone(), + window.get_cx(), + global_object.handle(), + constructor.handle_mut()); + } + // Callee must be the same as the element interface's constructor object. + if constructor.get() != callee.get() { + return Err(Error::Type("Custom element does not extend the proper interface".to_owned())); + } + } + + // Step 8.1 + let name = QualName::new(None, ns!(html), definition.local_name.clone()); + let element = if definition.is_autonomous() { + Root::upcast(HTMLElement::new(name.local, None, &*document)) + } else { + create_native_html_element(name, None, &*document, ElementCreator::ScriptCreated) + }; + + // Step 8.2 is performed in the generated caller code. + + // TODO: Step 8.3 - 8.4 + // Set the element's custom element state and definition. + + // Step 8.5 + Root::downcast(element).ok_or(Error::InvalidState) + + // TODO: Steps 9-13 + // Custom element upgrades are not implemented yet, so these steps are unnecessary. +} + /// Create and define the interface object of a callback interface. pub unsafe fn create_callback_interface_object( cx: *mut JSContext, @@ -474,3 +616,146 @@ unsafe extern "C" fn non_new_constructor( throw_type_error(cx, "This constructor needs to be called with `new`."); false } + +/// Returns the constructor object for the element associated with the given local name. +/// This list should only include elements marked with the [HTMLConstructor] extended attribute. +pub fn get_constructor_object_from_local_name(name: LocalName, + cx: *mut JSContext, + global: HandleObject, + rval: MutableHandleObject) + -> bool { + macro_rules! get_constructor( + ($binding:ident) => ({ + unsafe { $binding::GetConstructorObject(cx, global, rval); } + true + }) + ); + + match name { + local_name!("a") => get_constructor!(HTMLAnchorElementBinding), + local_name!("abbr") => get_constructor!(HTMLElementBinding), + local_name!("acronym") => get_constructor!(HTMLElementBinding), + local_name!("address") => get_constructor!(HTMLElementBinding), + local_name!("area") => get_constructor!(HTMLAreaElementBinding), + local_name!("article") => get_constructor!(HTMLElementBinding), + local_name!("aside") => get_constructor!(HTMLElementBinding), + local_name!("audio") => get_constructor!(HTMLAudioElementBinding), + local_name!("b") => get_constructor!(HTMLElementBinding), + local_name!("base") => get_constructor!(HTMLBaseElementBinding), + local_name!("bdi") => get_constructor!(HTMLElementBinding), + local_name!("bdo") => get_constructor!(HTMLElementBinding), + local_name!("big") => get_constructor!(HTMLElementBinding), + local_name!("blockquote") => get_constructor!(HTMLQuoteElementBinding), + local_name!("body") => get_constructor!(HTMLBodyElementBinding), + local_name!("br") => get_constructor!(HTMLBRElementBinding), + local_name!("button") => get_constructor!(HTMLButtonElementBinding), + local_name!("canvas") => get_constructor!(HTMLCanvasElementBinding), + local_name!("caption") => get_constructor!(HTMLTableCaptionElementBinding), + local_name!("center") => get_constructor!(HTMLElementBinding), + local_name!("cite") => get_constructor!(HTMLElementBinding), + local_name!("code") => get_constructor!(HTMLElementBinding), + local_name!("col") => get_constructor!(HTMLTableColElementBinding), + local_name!("colgroup") => get_constructor!(HTMLTableColElementBinding), + local_name!("data") => get_constructor!(HTMLDataElementBinding), + local_name!("datalist") => get_constructor!(HTMLDataListElementBinding), + local_name!("dd") => get_constructor!(HTMLElementBinding), + local_name!("del") => get_constructor!(HTMLModElementBinding), + local_name!("details") => get_constructor!(HTMLDetailsElementBinding), + local_name!("dfn") => get_constructor!(HTMLElementBinding), + local_name!("dialog") => get_constructor!(HTMLDialogElementBinding), + local_name!("dir") => get_constructor!(HTMLDirectoryElementBinding), + local_name!("div") => get_constructor!(HTMLDivElementBinding), + local_name!("dl") => get_constructor!(HTMLDListElementBinding), + local_name!("dt") => get_constructor!(HTMLElementBinding), + local_name!("em") => get_constructor!(HTMLElementBinding), + local_name!("embed") => get_constructor!(HTMLEmbedElementBinding), + local_name!("fieldset") => get_constructor!(HTMLFieldSetElementBinding), + local_name!("figcaption") => get_constructor!(HTMLElementBinding), + local_name!("figure") => get_constructor!(HTMLElementBinding), + local_name!("font") => get_constructor!(HTMLFontElementBinding), + local_name!("footer") => get_constructor!(HTMLElementBinding), + local_name!("form") => get_constructor!(HTMLFormElementBinding), + local_name!("frame") => get_constructor!(HTMLFrameElementBinding), + local_name!("frameset") => get_constructor!(HTMLFrameSetElementBinding), + local_name!("h1") => get_constructor!(HTMLHeadingElementBinding), + local_name!("h2") => get_constructor!(HTMLHeadingElementBinding), + local_name!("h3") => get_constructor!(HTMLHeadingElementBinding), + local_name!("h4") => get_constructor!(HTMLHeadingElementBinding), + local_name!("h5") => get_constructor!(HTMLHeadingElementBinding), + local_name!("h6") => get_constructor!(HTMLHeadingElementBinding), + local_name!("head") => get_constructor!(HTMLHeadElementBinding), + local_name!("header") => get_constructor!(HTMLElementBinding), + local_name!("hgroup") => get_constructor!(HTMLElementBinding), + local_name!("hr") => get_constructor!(HTMLHRElementBinding), + local_name!("html") => get_constructor!(HTMLHtmlElementBinding), + local_name!("i") => get_constructor!(HTMLElementBinding), + local_name!("iframe") => get_constructor!(HTMLIFrameElementBinding), + local_name!("img") => get_constructor!(HTMLImageElementBinding), + local_name!("input") => get_constructor!(HTMLInputElementBinding), + local_name!("ins") => get_constructor!(HTMLModElementBinding), + local_name!("kbd") => get_constructor!(HTMLElementBinding), + local_name!("label") => get_constructor!(HTMLLabelElementBinding), + local_name!("legend") => get_constructor!(HTMLLegendElementBinding), + local_name!("li") => get_constructor!(HTMLLIElementBinding), + local_name!("link") => get_constructor!(HTMLLinkElementBinding), + local_name!("listing") => get_constructor!(HTMLPreElementBinding), + local_name!("main") => get_constructor!(HTMLElementBinding), + local_name!("map") => get_constructor!(HTMLMapElementBinding), + local_name!("mark") => get_constructor!(HTMLElementBinding), + local_name!("marquee") => get_constructor!(HTMLElementBinding), + local_name!("meta") => get_constructor!(HTMLMetaElementBinding), + local_name!("meter") => get_constructor!(HTMLMeterElementBinding), + local_name!("nav") => get_constructor!(HTMLElementBinding), + local_name!("nobr") => get_constructor!(HTMLElementBinding), + local_name!("noframes") => get_constructor!(HTMLElementBinding), + local_name!("noscript") => get_constructor!(HTMLElementBinding), + local_name!("object") => get_constructor!(HTMLObjectElementBinding), + local_name!("ol") => get_constructor!(HTMLOListElementBinding), + local_name!("optgroup") => get_constructor!(HTMLOptGroupElementBinding), + local_name!("option") => get_constructor!(HTMLOptionElementBinding), + local_name!("output") => get_constructor!(HTMLOutputElementBinding), + local_name!("p") => get_constructor!(HTMLParagraphElementBinding), + local_name!("param") => get_constructor!(HTMLParamElementBinding), + local_name!("plaintext") => get_constructor!(HTMLPreElementBinding), + local_name!("pre") => get_constructor!(HTMLPreElementBinding), + local_name!("progress") => get_constructor!(HTMLProgressElementBinding), + local_name!("q") => get_constructor!(HTMLQuoteElementBinding), + local_name!("rp") => get_constructor!(HTMLElementBinding), + local_name!("rt") => get_constructor!(HTMLElementBinding), + local_name!("ruby") => get_constructor!(HTMLElementBinding), + local_name!("s") => get_constructor!(HTMLElementBinding), + local_name!("samp") => get_constructor!(HTMLElementBinding), + local_name!("script") => get_constructor!(HTMLScriptElementBinding), + local_name!("section") => get_constructor!(HTMLElementBinding), + local_name!("select") => get_constructor!(HTMLSelectElementBinding), + local_name!("small") => get_constructor!(HTMLElementBinding), + local_name!("source") => get_constructor!(HTMLSourceElementBinding), + local_name!("span") => get_constructor!(HTMLSpanElementBinding), + local_name!("strike") => get_constructor!(HTMLElementBinding), + local_name!("strong") => get_constructor!(HTMLElementBinding), + local_name!("style") => get_constructor!(HTMLStyleElementBinding), + local_name!("sub") => get_constructor!(HTMLElementBinding), + local_name!("summary") => get_constructor!(HTMLElementBinding), + local_name!("sup") => get_constructor!(HTMLElementBinding), + local_name!("table") => get_constructor!(HTMLTableElementBinding), + local_name!("tbody") => get_constructor!(HTMLTableSectionElementBinding), + local_name!("td") => get_constructor!(HTMLTableDataCellElementBinding), + local_name!("template") => get_constructor!(HTMLTemplateElementBinding), + local_name!("textarea") => get_constructor!(HTMLTextAreaElementBinding), + local_name!("tfoot") => get_constructor!(HTMLTableSectionElementBinding), + local_name!("th") => get_constructor!(HTMLTableHeaderCellElementBinding), + local_name!("thead") => get_constructor!(HTMLTableSectionElementBinding), + local_name!("time") => get_constructor!(HTMLTimeElementBinding), + local_name!("title") => get_constructor!(HTMLTitleElementBinding), + local_name!("tr") => get_constructor!(HTMLTableRowElementBinding), + local_name!("tt") => get_constructor!(HTMLElementBinding), + local_name!("track") => get_constructor!(HTMLTrackElementBinding), + local_name!("u") => get_constructor!(HTMLElementBinding), + local_name!("ul") => get_constructor!(HTMLUListElementBinding), + local_name!("var") => get_constructor!(HTMLElementBinding), + local_name!("video") => get_constructor!(HTMLVideoElementBinding), + local_name!("wbr") => get_constructor!(HTMLElementBinding), + local_name!("xmp") => get_constructor!(HTMLPreElementBinding), + _ => false, + } +} diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs index 91ea3e1e7da..b96406b60ed 100644 --- a/components/script/dom/create.rs +++ b/components/script/dom/create.rs @@ -107,10 +107,18 @@ fn create_svg_element(name: QualName, } fn create_html_element(name: QualName, - prefix: Option<Prefix>, - document: &Document, - creator: ElementCreator) - -> Root<Element> { + prefix: Option<Prefix>, + document: &Document, + creator: ElementCreator) + -> Root<Element> { + create_native_html_element(name, prefix, document, creator) +} + +pub fn create_native_html_element(name: QualName, + prefix: Option<Prefix>, + document: &Document, + creator: ElementCreator) + -> Root<Element> { assert!(name.ns == ns!(html)); macro_rules! make( diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index eaf7782cb5c..ee584a8bae1 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -18,6 +18,7 @@ use dom::globalscope::GlobalScope; use dom::promise::Promise; use dom::window::Window; use dom_struct::dom_struct; +use html5ever::LocalName; use js::conversions::ToJSValConvertible; use js::jsapi::{IsConstructor, HandleObject, JS_GetProperty, JSAutoCompartment, JSContext}; use js::jsval::{JSVal, UndefinedValue}; @@ -25,7 +26,7 @@ use std::cell::Cell; use std::collections::HashMap; use std::rc::Rc; -// https://html.spec.whatwg.org/multipage/#customelementregistry +/// https://html.spec.whatwg.org/multipage/#customelementregistry #[dom_struct] pub struct CustomElementRegistry { reflector_: Reflector, @@ -37,7 +38,8 @@ pub struct CustomElementRegistry { element_definition_is_running: Cell<bool>, - definitions: DOMRefCell<HashMap<DOMString, CustomElementDefinition>>, + #[ignore_heap_size_of = "Rc"] + definitions: DOMRefCell<HashMap<DOMString, Rc<CustomElementDefinition>>>, } impl CustomElementRegistry { @@ -57,14 +59,20 @@ impl CustomElementRegistry { CustomElementRegistryBinding::Wrap) } - // Cleans up any active promises - // https://github.com/servo/servo/issues/15318 + /// Cleans up any active promises + /// https://github.com/servo/servo/issues/15318 pub fn teardown(&self) { self.when_defined.borrow_mut().clear() } - // https://html.spec.whatwg.org/multipage/#dom-customelementregistry-define - // Steps 10.1, 10.2 + pub fn lookup_definition_by_constructor(&self, constructor: HandleObject) -> Option<Rc<CustomElementDefinition>> { + self.definitions.borrow().values().find(|definition| { + definition.constructor.callback() == constructor.get() + }).cloned() + } + + /// https://html.spec.whatwg.org/multipage/#dom-customelementregistry-define + /// Steps 10.1, 10.2 #[allow(unsafe_code)] fn check_prototype(&self, constructor: HandleObject) -> ErrorResult { let global_scope = self.window.upcast::<GlobalScope>(); @@ -89,7 +97,7 @@ impl CustomElementRegistry { impl CustomElementRegistryMethods for CustomElementRegistry { #[allow(unsafe_code, unrooted_must_root)] - // https://html.spec.whatwg.org/multipage/#dom-customelementregistry-define + /// https://html.spec.whatwg.org/multipage/#dom-customelementregistry-define fn Define(&self, name: DOMString, constructor_: Rc<Function>, options: &ElementDefinitionOptions) -> ErrorResult { let global_scope = self.window.upcast::<GlobalScope>(); rooted!(in(global_scope.get_cx()) let constructor = constructor_.callback()); @@ -125,14 +133,14 @@ impl CustomElementRegistryMethods for CustomElementRegistry { } // Step 7.2 - if !is_known_element_interface(extended_name) { + if !is_extendable_element_interface(extended_name) { return Err(Error::NotSupported) } - extended_name.clone() + extended_name } else { // Step 7.3 - name.clone() + &name }; // Step 8 @@ -157,10 +165,12 @@ impl CustomElementRegistryMethods for CustomElementRegistry { result?; // Step 11 - let definition = CustomElementDefinition::new(name.clone(), local_name, constructor_); + let definition = CustomElementDefinition::new(LocalName::from(&*name), + LocalName::from(&**local_name), + constructor_); // Step 12 - self.definitions.borrow_mut().insert(name.clone(), definition); + self.definitions.borrow_mut().insert(name.clone(), Rc::new(definition)); // TODO: Step 13, 14, 15 // Handle custom element upgrades @@ -175,7 +185,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry { Ok(()) } - // https://html.spec.whatwg.org/multipage/#dom-customelementregistry-get + /// https://html.spec.whatwg.org/multipage/#dom-customelementregistry-get #[allow(unsafe_code)] unsafe fn Get(&self, cx: *mut JSContext, name: DOMString) -> JSVal { match self.definitions.borrow().get(&name) { @@ -188,7 +198,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry { } } - // https://html.spec.whatwg.org/multipage/#dom-customelementregistry-whendefined + /// https://html.spec.whatwg.org/multipage/#dom-customelementregistry-whendefined #[allow(unrooted_must_root)] fn WhenDefined(&self, name: DOMString) -> Rc<Promise> { let global_scope = self.window.upcast::<GlobalScope>(); @@ -222,27 +232,33 @@ impl CustomElementRegistryMethods for CustomElementRegistry { } } -#[derive(HeapSizeOf, JSTraceable)] -struct CustomElementDefinition { - name: DOMString, +/// https://html.spec.whatwg.org/multipage/#custom-element-definition +#[derive(HeapSizeOf, JSTraceable, Clone)] +pub struct CustomElementDefinition { + pub name: LocalName, - local_name: DOMString, + pub local_name: LocalName, #[ignore_heap_size_of = "Rc"] - constructor: Rc<Function>, + pub constructor: Rc<Function>, } impl CustomElementDefinition { - fn new(name: DOMString, local_name: DOMString, constructor: Rc<Function>) -> CustomElementDefinition { + fn new(name: LocalName, local_name: LocalName, constructor: Rc<Function>) -> CustomElementDefinition { CustomElementDefinition { name: name, local_name: local_name, constructor: constructor, } } + + /// https://html.spec.whatwg.org/multipage/#autonomous-custom-element + pub fn is_autonomous(&self) -> bool { + self.name == self.local_name + } } -// https://html.spec.whatwg.org/multipage/#valid-custom-element-name +/// https://html.spec.whatwg.org/multipage/#valid-custom-element-name fn is_valid_custom_element_name(name: &str) -> bool { // Custom elment names must match: // PotentialCustomElementName ::= [a-z] (PCENChar)* '-' (PCENChar)* @@ -284,8 +300,8 @@ fn is_valid_custom_element_name(name: &str) -> bool { true } -// Check if this character is a PCENChar -// https://html.spec.whatwg.org/multipage/#prod-pcenchar +/// Check if this character is a PCENChar +/// https://html.spec.whatwg.org/multipage/#prod-pcenchar fn is_potential_custom_element_char(c: char) -> bool { c == '-' || c == '.' || c == '_' || c == '\u{B7}' || (c >= '0' && c <= '9') || @@ -303,12 +319,11 @@ fn is_potential_custom_element_char(c: char) -> bool { (c >= '\u{10000}' && c <= '\u{EFFFF}') } -fn is_known_element_interface(element: &str) -> bool { +fn is_extendable_element_interface(element: &str) -> bool { element == "a" || element == "abbr" || element == "acronym" || element == "address" || - element == "applet" || element == "area" || element == "article" || element == "aside" || diff --git a/components/script/dom/webidls/HTMLAnchorElement.webidl b/components/script/dom/webidls/HTMLAnchorElement.webidl index 41026e25bce..0b79567c719 100644 --- a/components/script/dom/webidls/HTMLAnchorElement.webidl +++ b/components/script/dom/webidls/HTMLAnchorElement.webidl @@ -11,6 +11,7 @@ */ // https://html.spec.whatwg.org/multipage/#htmlanchorelement +[HTMLConstructor] interface HTMLAnchorElement : HTMLElement { attribute DOMString target; // attribute DOMString download; diff --git a/components/script/dom/webidls/HTMLAppletElement.webidl b/components/script/dom/webidls/HTMLAppletElement.webidl index 9cfeb4183df..822bbc25744 100644 --- a/components/script/dom/webidls/HTMLAppletElement.webidl +++ b/components/script/dom/webidls/HTMLAppletElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlappletelement +// Note: intentionally not [HTMLConstructor] interface HTMLAppletElement : HTMLElement { // attribute DOMString align; // attribute DOMString alt; diff --git a/components/script/dom/webidls/HTMLAreaElement.webidl b/components/script/dom/webidls/HTMLAreaElement.webidl index 14883df3613..b0395d39b2c 100644 --- a/components/script/dom/webidls/HTMLAreaElement.webidl +++ b/components/script/dom/webidls/HTMLAreaElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlareaelement +[HTMLConstructor] interface HTMLAreaElement : HTMLElement { // attribute DOMString alt; // attribute DOMString coords; diff --git a/components/script/dom/webidls/HTMLAudioElement.webidl b/components/script/dom/webidls/HTMLAudioElement.webidl index 09ad8a7cdb3..39115daa5e8 100644 --- a/components/script/dom/webidls/HTMLAudioElement.webidl +++ b/components/script/dom/webidls/HTMLAudioElement.webidl @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlaudioelement -//[NamedConstructor=Audio(optional DOMString src)] +[HTMLConstructor/*, NamedConstructor=Audio(optional DOMString src)*/] interface HTMLAudioElement : HTMLMediaElement {}; diff --git a/components/script/dom/webidls/HTMLBRElement.webidl b/components/script/dom/webidls/HTMLBRElement.webidl index ab277396bdd..5c47fb3f865 100644 --- a/components/script/dom/webidls/HTMLBRElement.webidl +++ b/components/script/dom/webidls/HTMLBRElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlbrelement +[HTMLConstructor] interface HTMLBRElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLBaseElement.webidl b/components/script/dom/webidls/HTMLBaseElement.webidl index a13be544cb9..6192cc600cd 100644 --- a/components/script/dom/webidls/HTMLBaseElement.webidl +++ b/components/script/dom/webidls/HTMLBaseElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlbaseelement +[HTMLConstructor] interface HTMLBaseElement : HTMLElement { attribute DOMString href; // attribute DOMString target; diff --git a/components/script/dom/webidls/HTMLBodyElement.webidl b/components/script/dom/webidls/HTMLBodyElement.webidl index 36c6f4d64e3..f2e9104f275 100644 --- a/components/script/dom/webidls/HTMLBodyElement.webidl +++ b/components/script/dom/webidls/HTMLBodyElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#the-body-element +[HTMLConstructor] interface HTMLBodyElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLButtonElement.webidl b/components/script/dom/webidls/HTMLButtonElement.webidl index 7f663fd305f..92932680ff8 100644 --- a/components/script/dom/webidls/HTMLButtonElement.webidl +++ b/components/script/dom/webidls/HTMLButtonElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlbuttonelement +[HTMLConstructor] interface HTMLButtonElement : HTMLElement { // attribute boolean autofocus; attribute boolean disabled; diff --git a/components/script/dom/webidls/HTMLCanvasElement.webidl b/components/script/dom/webidls/HTMLCanvasElement.webidl index fbb53016605..df72b232a85 100644 --- a/components/script/dom/webidls/HTMLCanvasElement.webidl +++ b/components/script/dom/webidls/HTMLCanvasElement.webidl @@ -5,6 +5,7 @@ // https://html.spec.whatwg.org/multipage/#htmlcanvaselement typedef (CanvasRenderingContext2D or WebGLRenderingContext) RenderingContext; +[HTMLConstructor] interface HTMLCanvasElement : HTMLElement { [Pure] attribute unsigned long width; diff --git a/components/script/dom/webidls/HTMLDListElement.webidl b/components/script/dom/webidls/HTMLDListElement.webidl index b6275107db5..865367fe473 100644 --- a/components/script/dom/webidls/HTMLDListElement.webidl +++ b/components/script/dom/webidls/HTMLDListElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldlistelement +[HTMLConstructor] interface HTMLDListElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLDataElement.webidl b/components/script/dom/webidls/HTMLDataElement.webidl index 658f5274491..d36b79635c0 100644 --- a/components/script/dom/webidls/HTMLDataElement.webidl +++ b/components/script/dom/webidls/HTMLDataElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldataelement +[HTMLConstructor] interface HTMLDataElement : HTMLElement { attribute DOMString value; }; diff --git a/components/script/dom/webidls/HTMLDataListElement.webidl b/components/script/dom/webidls/HTMLDataListElement.webidl index b8673b21c77..5425a391b40 100644 --- a/components/script/dom/webidls/HTMLDataListElement.webidl +++ b/components/script/dom/webidls/HTMLDataListElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldatalistelement +[HTMLConstructor] interface HTMLDataListElement : HTMLElement { readonly attribute HTMLCollection options; }; diff --git a/components/script/dom/webidls/HTMLDetailsElement.webidl b/components/script/dom/webidls/HTMLDetailsElement.webidl index 811465c1c02..d511ce67985 100644 --- a/components/script/dom/webidls/HTMLDetailsElement.webidl +++ b/components/script/dom/webidls/HTMLDetailsElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldetailselement +[HTMLConstructor] interface HTMLDetailsElement : HTMLElement { attribute boolean open; }; diff --git a/components/script/dom/webidls/HTMLDialogElement.webidl b/components/script/dom/webidls/HTMLDialogElement.webidl index 0ac76a0465e..dbac248cc17 100644 --- a/components/script/dom/webidls/HTMLDialogElement.webidl +++ b/components/script/dom/webidls/HTMLDialogElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldialogelement +[HTMLConstructor] interface HTMLDialogElement : HTMLElement { attribute boolean open; attribute DOMString returnValue; diff --git a/components/script/dom/webidls/HTMLDirectoryElement.webidl b/components/script/dom/webidls/HTMLDirectoryElement.webidl index 5df65cd90c2..e4db8ca7af8 100644 --- a/components/script/dom/webidls/HTMLDirectoryElement.webidl +++ b/components/script/dom/webidls/HTMLDirectoryElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldirectoryelement +[HTMLConstructor] interface HTMLDirectoryElement : HTMLElement { // attribute boolean compact; }; diff --git a/components/script/dom/webidls/HTMLDivElement.webidl b/components/script/dom/webidls/HTMLDivElement.webidl index 46ee67ee0e5..5302f9f283e 100644 --- a/components/script/dom/webidls/HTMLDivElement.webidl +++ b/components/script/dom/webidls/HTMLDivElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmldivelement +[HTMLConstructor] interface HTMLDivElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLElement.webidl b/components/script/dom/webidls/HTMLElement.webidl index 188c0421154..e3613736c8b 100644 --- a/components/script/dom/webidls/HTMLElement.webidl +++ b/components/script/dom/webidls/HTMLElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlelement +[HTMLConstructor] interface HTMLElement : Element { // metadata attributes attribute DOMString title; diff --git a/components/script/dom/webidls/HTMLEmbedElement.webidl b/components/script/dom/webidls/HTMLEmbedElement.webidl index 26fa4c3ea5a..a9878d3d776 100644 --- a/components/script/dom/webidls/HTMLEmbedElement.webidl +++ b/components/script/dom/webidls/HTMLEmbedElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlembedelement +[HTMLConstructor] interface HTMLEmbedElement : HTMLElement { // attribute DOMString src; // attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLFieldSetElement.webidl b/components/script/dom/webidls/HTMLFieldSetElement.webidl index d041cdd612f..89100a4d7ca 100644 --- a/components/script/dom/webidls/HTMLFieldSetElement.webidl +++ b/components/script/dom/webidls/HTMLFieldSetElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlfieldsetelement +[HTMLConstructor] interface HTMLFieldSetElement : HTMLElement { attribute boolean disabled; readonly attribute HTMLFormElement? form; diff --git a/components/script/dom/webidls/HTMLFontElement.webidl b/components/script/dom/webidls/HTMLFontElement.webidl index 74db3f45057..4ad5f152ae9 100644 --- a/components/script/dom/webidls/HTMLFontElement.webidl +++ b/components/script/dom/webidls/HTMLFontElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlfontelement +[HTMLConstructor] interface HTMLFontElement : HTMLElement { [TreatNullAs=EmptyString] attribute DOMString color; attribute DOMString face; diff --git a/components/script/dom/webidls/HTMLFormElement.webidl b/components/script/dom/webidls/HTMLFormElement.webidl index c9232cc6d6c..74f6d8d4f15 100644 --- a/components/script/dom/webidls/HTMLFormElement.webidl +++ b/components/script/dom/webidls/HTMLFormElement.webidl @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlformelement -//[OverrideBuiltins] +[/*OverrideBuiltins, */HTMLConstructor] interface HTMLFormElement : HTMLElement { attribute DOMString acceptCharset; attribute DOMString action; diff --git a/components/script/dom/webidls/HTMLFrameElement.webidl b/components/script/dom/webidls/HTMLFrameElement.webidl index ecac61f6860..379bc545e5b 100644 --- a/components/script/dom/webidls/HTMLFrameElement.webidl +++ b/components/script/dom/webidls/HTMLFrameElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlframeelement +[HTMLConstructor] interface HTMLFrameElement : HTMLElement { // attribute DOMString name; // attribute DOMString scrolling; diff --git a/components/script/dom/webidls/HTMLFrameSetElement.webidl b/components/script/dom/webidls/HTMLFrameSetElement.webidl index 5addd41d253..d0e3a8ad520 100644 --- a/components/script/dom/webidls/HTMLFrameSetElement.webidl +++ b/components/script/dom/webidls/HTMLFrameSetElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlframesetelement +[HTMLConstructor] interface HTMLFrameSetElement : HTMLElement { // attribute DOMString cols; // attribute DOMString rows; diff --git a/components/script/dom/webidls/HTMLHRElement.webidl b/components/script/dom/webidls/HTMLHRElement.webidl index 56e2f6ae19b..526f1be78d7 100644 --- a/components/script/dom/webidls/HTMLHRElement.webidl +++ b/components/script/dom/webidls/HTMLHRElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlhrelement +[HTMLConstructor] interface HTMLHRElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLHeadElement.webidl b/components/script/dom/webidls/HTMLHeadElement.webidl index 18e2b351d64..5b5067f87ec 100644 --- a/components/script/dom/webidls/HTMLHeadElement.webidl +++ b/components/script/dom/webidls/HTMLHeadElement.webidl @@ -3,4 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlheadelement +[HTMLConstructor] interface HTMLHeadElement : HTMLElement {}; diff --git a/components/script/dom/webidls/HTMLHeadingElement.webidl b/components/script/dom/webidls/HTMLHeadingElement.webidl index 2c47d6fa10f..66298ac943a 100644 --- a/components/script/dom/webidls/HTMLHeadingElement.webidl +++ b/components/script/dom/webidls/HTMLHeadingElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlheadingelement +[HTMLConstructor] interface HTMLHeadingElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLHtmlElement.webidl b/components/script/dom/webidls/HTMLHtmlElement.webidl index ed409b1b84c..10afdbf08a6 100644 --- a/components/script/dom/webidls/HTMLHtmlElement.webidl +++ b/components/script/dom/webidls/HTMLHtmlElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlhtmlelement +[HTMLConstructor] interface HTMLHtmlElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLIFrameElement.webidl b/components/script/dom/webidls/HTMLIFrameElement.webidl index f02c7c35a1b..3afc3df8d2d 100644 --- a/components/script/dom/webidls/HTMLIFrameElement.webidl +++ b/components/script/dom/webidls/HTMLIFrameElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmliframeelement +[HTMLConstructor] interface HTMLIFrameElement : HTMLElement { attribute DOMString src; // attribute DOMString srcdoc; diff --git a/components/script/dom/webidls/HTMLImageElement.webidl b/components/script/dom/webidls/HTMLImageElement.webidl index 7bd69124d87..0e444e23095 100644 --- a/components/script/dom/webidls/HTMLImageElement.webidl +++ b/components/script/dom/webidls/HTMLImageElement.webidl @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlimageelement -[NamedConstructor=Image(optional unsigned long width, optional unsigned long height)] +[HTMLConstructor, NamedConstructor=Image(optional unsigned long width, optional unsigned long height)] interface HTMLImageElement : HTMLElement { attribute DOMString alt; attribute DOMString src; diff --git a/components/script/dom/webidls/HTMLInputElement.webidl b/components/script/dom/webidls/HTMLInputElement.webidl index 5c644894bbf..bfa8c32ef83 100644 --- a/components/script/dom/webidls/HTMLInputElement.webidl +++ b/components/script/dom/webidls/HTMLInputElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlinputelement +[HTMLConstructor] interface HTMLInputElement : HTMLElement { attribute DOMString accept; attribute DOMString alt; diff --git a/components/script/dom/webidls/HTMLLIElement.webidl b/components/script/dom/webidls/HTMLLIElement.webidl index ea7d574eba4..e3dd1eb2538 100644 --- a/components/script/dom/webidls/HTMLLIElement.webidl +++ b/components/script/dom/webidls/HTMLLIElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmllielement +[HTMLConstructor] interface HTMLLIElement : HTMLElement { attribute long value; diff --git a/components/script/dom/webidls/HTMLLabelElement.webidl b/components/script/dom/webidls/HTMLLabelElement.webidl index 8acb1f312c8..3c2acc33362 100644 --- a/components/script/dom/webidls/HTMLLabelElement.webidl +++ b/components/script/dom/webidls/HTMLLabelElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmllabelelement +[HTMLConstructor] interface HTMLLabelElement : HTMLElement { readonly attribute HTMLFormElement? form; attribute DOMString htmlFor; diff --git a/components/script/dom/webidls/HTMLLegendElement.webidl b/components/script/dom/webidls/HTMLLegendElement.webidl index c137d6db66a..2e50997d80e 100644 --- a/components/script/dom/webidls/HTMLLegendElement.webidl +++ b/components/script/dom/webidls/HTMLLegendElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmllegendelement +[HTMLConstructor] interface HTMLLegendElement : HTMLElement { readonly attribute HTMLFormElement? form; diff --git a/components/script/dom/webidls/HTMLLinkElement.webidl b/components/script/dom/webidls/HTMLLinkElement.webidl index bfab6270092..2489c9e288f 100644 --- a/components/script/dom/webidls/HTMLLinkElement.webidl +++ b/components/script/dom/webidls/HTMLLinkElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmllinkelement +[HTMLConstructor] interface HTMLLinkElement : HTMLElement { attribute DOMString href; attribute DOMString? crossOrigin; diff --git a/components/script/dom/webidls/HTMLMapElement.webidl b/components/script/dom/webidls/HTMLMapElement.webidl index 5e21b52916e..60fa8928f18 100644 --- a/components/script/dom/webidls/HTMLMapElement.webidl +++ b/components/script/dom/webidls/HTMLMapElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlmapelement +[HTMLConstructor] interface HTMLMapElement : HTMLElement { // attribute DOMString name; //readonly attribute HTMLCollection areas; diff --git a/components/script/dom/webidls/HTMLMetaElement.webidl b/components/script/dom/webidls/HTMLMetaElement.webidl index 20afc297a20..9680a38555a 100644 --- a/components/script/dom/webidls/HTMLMetaElement.webidl +++ b/components/script/dom/webidls/HTMLMetaElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlmetaelement +[HTMLConstructor] interface HTMLMetaElement : HTMLElement { attribute DOMString name; // attribute DOMString httpEquiv; diff --git a/components/script/dom/webidls/HTMLMeterElement.webidl b/components/script/dom/webidls/HTMLMeterElement.webidl index c6abe4aef46..19e0aa1eabc 100644 --- a/components/script/dom/webidls/HTMLMeterElement.webidl +++ b/components/script/dom/webidls/HTMLMeterElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlmeterelement +[HTMLConstructor] interface HTMLMeterElement : HTMLElement { // attribute double value; // attribute double min; diff --git a/components/script/dom/webidls/HTMLModElement.webidl b/components/script/dom/webidls/HTMLModElement.webidl index beda6f97dcc..05998bcaa46 100644 --- a/components/script/dom/webidls/HTMLModElement.webidl +++ b/components/script/dom/webidls/HTMLModElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlmodelement +[HTMLConstructor] interface HTMLModElement : HTMLElement { // attribute DOMString cite; // attribute DOMString dateTime; diff --git a/components/script/dom/webidls/HTMLOListElement.webidl b/components/script/dom/webidls/HTMLOListElement.webidl index 02dc3d1146f..f6f32653564 100644 --- a/components/script/dom/webidls/HTMLOListElement.webidl +++ b/components/script/dom/webidls/HTMLOListElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlolistelement +[HTMLConstructor] interface HTMLOListElement : HTMLElement { // attribute boolean reversed; // attribute long start; diff --git a/components/script/dom/webidls/HTMLObjectElement.webidl b/components/script/dom/webidls/HTMLObjectElement.webidl index ce1d0ff1f8c..dc730a33f11 100644 --- a/components/script/dom/webidls/HTMLObjectElement.webidl +++ b/components/script/dom/webidls/HTMLObjectElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlobjectelement +[HTMLConstructor] interface HTMLObjectElement : HTMLElement { // attribute DOMString data; attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLOptGroupElement.webidl b/components/script/dom/webidls/HTMLOptGroupElement.webidl index a81df036a4d..07de66913da 100644 --- a/components/script/dom/webidls/HTMLOptGroupElement.webidl +++ b/components/script/dom/webidls/HTMLOptGroupElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmloptgroupelement +[HTMLConstructor] interface HTMLOptGroupElement : HTMLElement { attribute boolean disabled; // attribute DOMString label; diff --git a/components/script/dom/webidls/HTMLOptionElement.webidl b/components/script/dom/webidls/HTMLOptionElement.webidl index 713ff85a483..7b83e59c5f2 100644 --- a/components/script/dom/webidls/HTMLOptionElement.webidl +++ b/components/script/dom/webidls/HTMLOptionElement.webidl @@ -3,9 +3,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmloptionelement -//[NamedConstructor=Option(optional DOMString text = "", optional DOMString value, -// optional boolean defaultSelected = false, -// optional boolean selected = false)] +[HTMLConstructor/*, NamedConstructor=Option(optional DOMString text = "", optional DOMString value, + optional boolean defaultSelected = false, + optional boolean selected = false)*/] interface HTMLOptionElement : HTMLElement { attribute boolean disabled; readonly attribute HTMLFormElement? form; diff --git a/components/script/dom/webidls/HTMLOutputElement.webidl b/components/script/dom/webidls/HTMLOutputElement.webidl index f0baeb8fa03..6b9439588e6 100644 --- a/components/script/dom/webidls/HTMLOutputElement.webidl +++ b/components/script/dom/webidls/HTMLOutputElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmloutputelement +[HTMLConstructor] interface HTMLOutputElement : HTMLElement { // [SameObject, PutForwards=value] readonly attribute DOMTokenList htmlFor; readonly attribute HTMLFormElement? form; diff --git a/components/script/dom/webidls/HTMLParagraphElement.webidl b/components/script/dom/webidls/HTMLParagraphElement.webidl index a96c6dc6f81..a32f8941a64 100644 --- a/components/script/dom/webidls/HTMLParagraphElement.webidl +++ b/components/script/dom/webidls/HTMLParagraphElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlparagraphelement +[HTMLConstructor] interface HTMLParagraphElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLParamElement.webidl b/components/script/dom/webidls/HTMLParamElement.webidl index 9648c9f87ce..de853cfbd2b 100644 --- a/components/script/dom/webidls/HTMLParamElement.webidl +++ b/components/script/dom/webidls/HTMLParamElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlparamelement +[HTMLConstructor] interface HTMLParamElement : HTMLElement { // attribute DOMString name; // attribute DOMString value; diff --git a/components/script/dom/webidls/HTMLPreElement.webidl b/components/script/dom/webidls/HTMLPreElement.webidl index ea0df151020..0f53a4f6ad9 100644 --- a/components/script/dom/webidls/HTMLPreElement.webidl +++ b/components/script/dom/webidls/HTMLPreElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlpreelement +[HTMLConstructor] interface HTMLPreElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLProgressElement.webidl b/components/script/dom/webidls/HTMLProgressElement.webidl index cf69566ecdd..8aea37f8dd6 100644 --- a/components/script/dom/webidls/HTMLProgressElement.webidl +++ b/components/script/dom/webidls/HTMLProgressElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlprogresselement +[HTMLConstructor] interface HTMLProgressElement : HTMLElement { // attribute double value; // attribute double max; diff --git a/components/script/dom/webidls/HTMLQuoteElement.webidl b/components/script/dom/webidls/HTMLQuoteElement.webidl index e546f151d49..78bf941b9d3 100644 --- a/components/script/dom/webidls/HTMLQuoteElement.webidl +++ b/components/script/dom/webidls/HTMLQuoteElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlquoteelement +[HTMLConstructor] interface HTMLQuoteElement : HTMLElement { // attribute DOMString cite; }; diff --git a/components/script/dom/webidls/HTMLScriptElement.webidl b/components/script/dom/webidls/HTMLScriptElement.webidl index 8a1dbc3fc35..f2f40c67607 100644 --- a/components/script/dom/webidls/HTMLScriptElement.webidl +++ b/components/script/dom/webidls/HTMLScriptElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlscriptelement +[HTMLConstructor] interface HTMLScriptElement : HTMLElement { attribute DOMString src; attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLSelectElement.webidl b/components/script/dom/webidls/HTMLSelectElement.webidl index 543c3267c64..b8e581abe0e 100644 --- a/components/script/dom/webidls/HTMLSelectElement.webidl +++ b/components/script/dom/webidls/HTMLSelectElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlselectelement +[HTMLConstructor] interface HTMLSelectElement : HTMLElement { // attribute boolean autofocus; attribute boolean disabled; diff --git a/components/script/dom/webidls/HTMLSourceElement.webidl b/components/script/dom/webidls/HTMLSourceElement.webidl index 738a545713a..c0508bf34e7 100644 --- a/components/script/dom/webidls/HTMLSourceElement.webidl +++ b/components/script/dom/webidls/HTMLSourceElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlsourceelement +[HTMLConstructor] interface HTMLSourceElement : HTMLElement { // attribute DOMString src; // attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLSpanElement.webidl b/components/script/dom/webidls/HTMLSpanElement.webidl index a74967536a1..3996cf9161b 100644 --- a/components/script/dom/webidls/HTMLSpanElement.webidl +++ b/components/script/dom/webidls/HTMLSpanElement.webidl @@ -3,4 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlspanelement +[HTMLConstructor] interface HTMLSpanElement : HTMLElement {}; diff --git a/components/script/dom/webidls/HTMLStyleElement.webidl b/components/script/dom/webidls/HTMLStyleElement.webidl index 78926c2c1a8..203f306f0f6 100644 --- a/components/script/dom/webidls/HTMLStyleElement.webidl +++ b/components/script/dom/webidls/HTMLStyleElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlstyleelement +[HTMLConstructor] interface HTMLStyleElement : HTMLElement { // attribute DOMString media; // attribute DOMString type; diff --git a/components/script/dom/webidls/HTMLTableCaptionElement.webidl b/components/script/dom/webidls/HTMLTableCaptionElement.webidl index b405d23ed40..c855bfee3ae 100644 --- a/components/script/dom/webidls/HTMLTableCaptionElement.webidl +++ b/components/script/dom/webidls/HTMLTableCaptionElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltablecaptionelement +[HTMLConstructor] interface HTMLTableCaptionElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLTableCellElement.webidl b/components/script/dom/webidls/HTMLTableCellElement.webidl index 8ac135170ec..aa11dabc25d 100644 --- a/components/script/dom/webidls/HTMLTableCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableCellElement.webidl @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltablecellelement -[Abstract] +[HTMLConstructor, Abstract] interface HTMLTableCellElement : HTMLElement { attribute unsigned long colSpan; attribute unsigned long rowSpan; diff --git a/components/script/dom/webidls/HTMLTableColElement.webidl b/components/script/dom/webidls/HTMLTableColElement.webidl index 69188251443..df43d4e0591 100644 --- a/components/script/dom/webidls/HTMLTableColElement.webidl +++ b/components/script/dom/webidls/HTMLTableColElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltablecolelement +[HTMLConstructor] interface HTMLTableColElement : HTMLElement { // attribute unsigned long span; diff --git a/components/script/dom/webidls/HTMLTableDataCellElement.webidl b/components/script/dom/webidls/HTMLTableDataCellElement.webidl index 208ed76d692..26cadf779e8 100644 --- a/components/script/dom/webidls/HTMLTableDataCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableDataCellElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltabledatacellelement +[HTMLConstructor] interface HTMLTableDataCellElement : HTMLTableCellElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLTableElement.webidl b/components/script/dom/webidls/HTMLTableElement.webidl index f0d8e19d0eb..822b6846f44 100644 --- a/components/script/dom/webidls/HTMLTableElement.webidl +++ b/components/script/dom/webidls/HTMLTableElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltableelement +[HTMLConstructor] interface HTMLTableElement : HTMLElement { attribute HTMLTableCaptionElement? caption; HTMLTableCaptionElement createCaption(); diff --git a/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl b/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl index 9bf8f1fc950..b9185c93149 100644 --- a/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl +++ b/components/script/dom/webidls/HTMLTableHeaderCellElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltableheadercellelement +[HTMLConstructor] interface HTMLTableHeaderCellElement : HTMLTableCellElement { // attribute DOMString scope; // attribute DOMString abbr; diff --git a/components/script/dom/webidls/HTMLTableRowElement.webidl b/components/script/dom/webidls/HTMLTableRowElement.webidl index 9d4b0655cad..ce26a8c24d5 100644 --- a/components/script/dom/webidls/HTMLTableRowElement.webidl +++ b/components/script/dom/webidls/HTMLTableRowElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltablerowelement +[HTMLConstructor] interface HTMLTableRowElement : HTMLElement { readonly attribute long rowIndex; readonly attribute long sectionRowIndex; diff --git a/components/script/dom/webidls/HTMLTableSectionElement.webidl b/components/script/dom/webidls/HTMLTableSectionElement.webidl index 979d8030ffd..a1bf758c407 100644 --- a/components/script/dom/webidls/HTMLTableSectionElement.webidl +++ b/components/script/dom/webidls/HTMLTableSectionElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltablesectionelement +[HTMLConstructor] interface HTMLTableSectionElement : HTMLElement { readonly attribute HTMLCollection rows; [Throws] diff --git a/components/script/dom/webidls/HTMLTemplateElement.webidl b/components/script/dom/webidls/HTMLTemplateElement.webidl index b3383de69d2..2c74fdd46c1 100644 --- a/components/script/dom/webidls/HTMLTemplateElement.webidl +++ b/components/script/dom/webidls/HTMLTemplateElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltemplateelement +[HTMLConstructor] interface HTMLTemplateElement : HTMLElement { readonly attribute DocumentFragment content; }; diff --git a/components/script/dom/webidls/HTMLTextAreaElement.webidl b/components/script/dom/webidls/HTMLTextAreaElement.webidl index f92e662c354..8f93a83cbd6 100644 --- a/components/script/dom/webidls/HTMLTextAreaElement.webidl +++ b/components/script/dom/webidls/HTMLTextAreaElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltextareaelement +[HTMLConstructor] interface HTMLTextAreaElement : HTMLElement { // attribute DOMString autocomplete; // attribute boolean autofocus; diff --git a/components/script/dom/webidls/HTMLTimeElement.webidl b/components/script/dom/webidls/HTMLTimeElement.webidl index 5f2ac73d4cb..c6b770afe09 100644 --- a/components/script/dom/webidls/HTMLTimeElement.webidl +++ b/components/script/dom/webidls/HTMLTimeElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltimeelement +[HTMLConstructor] interface HTMLTimeElement : HTMLElement { attribute DOMString dateTime; }; diff --git a/components/script/dom/webidls/HTMLTitleElement.webidl b/components/script/dom/webidls/HTMLTitleElement.webidl index 10373be7e4b..5650a35fccc 100644 --- a/components/script/dom/webidls/HTMLTitleElement.webidl +++ b/components/script/dom/webidls/HTMLTitleElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltitleelement +[HTMLConstructor] interface HTMLTitleElement : HTMLElement { [Pure] attribute DOMString text; diff --git a/components/script/dom/webidls/HTMLTrackElement.webidl b/components/script/dom/webidls/HTMLTrackElement.webidl index 55733235321..0692a484fb7 100644 --- a/components/script/dom/webidls/HTMLTrackElement.webidl +++ b/components/script/dom/webidls/HTMLTrackElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmltrackelement +[HTMLConstructor] interface HTMLTrackElement : HTMLElement { // attribute DOMString kind; // attribute DOMString src; diff --git a/components/script/dom/webidls/HTMLUListElement.webidl b/components/script/dom/webidls/HTMLUListElement.webidl index 91a79c7f925..4756da8a2c6 100644 --- a/components/script/dom/webidls/HTMLUListElement.webidl +++ b/components/script/dom/webidls/HTMLUListElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlulistelement +[HTMLConstructor] interface HTMLUListElement : HTMLElement { // also has obsolete members }; diff --git a/components/script/dom/webidls/HTMLVideoElement.webidl b/components/script/dom/webidls/HTMLVideoElement.webidl index 5e7c9cb9fce..835000c98c5 100644 --- a/components/script/dom/webidls/HTMLVideoElement.webidl +++ b/components/script/dom/webidls/HTMLVideoElement.webidl @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#htmlvideoelement +[HTMLConstructor] interface HTMLVideoElement : HTMLMediaElement { // attribute unsigned long width; // attribute unsigned long height; |