diff options
5 files changed, 24 insertions, 18 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 94c9c8603c4..6f0e2620db4 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -11,7 +11,6 @@ use crate::dom::bindings::callback::ExceptionHandling; use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::BeforeUnloadEventBinding::BeforeUnloadEventBinding::BeforeUnloadEventMethods; use crate::dom::bindings::codegen::Bindings::DocumentBinding; -use crate::dom::bindings::codegen::Bindings::DocumentBinding::ElementCreationOptions; use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ DocumentMethods, DocumentReadyState, }; @@ -25,7 +24,7 @@ use crate::dom::bindings::codegen::Bindings::TouchBinding::TouchMethods; use crate::dom::bindings::codegen::Bindings::WindowBinding::{ FrameRequestCallback, ScrollBehavior, WindowMethods, }; -use crate::dom::bindings::codegen::UnionTypes::NodeOrString; +use crate::dom::bindings::codegen::UnionTypes::{NodeOrString, StringOrElementCreationOptions}; use crate::dom::bindings::error::{Error, ErrorResult, Fallible}; use crate::dom::bindings::inheritance::{Castable, ElementTypeId, HTMLElementTypeId, NodeTypeId}; use crate::dom::bindings::num::Finite; @@ -3622,7 +3621,7 @@ impl DocumentMethods for Document { fn CreateElement( &self, mut local_name: DOMString, - options: &ElementCreationOptions, + options: StringOrElementCreationOptions, ) -> Fallible<DomRoot<Element>> { if xml_name_type(&local_name) == InvalidXMLName { debug!("Not a valid element name"); @@ -3643,7 +3642,12 @@ impl DocumentMethods for Document { }; let name = QualName::new(None, ns, LocalName::from(local_name)); - let is = options.is.as_ref().map(|is| LocalName::from(&**is)); + let is = match options { + StringOrElementCreationOptions::String(_) => None, + StringOrElementCreationOptions::ElementCreationOptions(options) => { + options.is.as_ref().map(|is| LocalName::from(&**is)) + }, + }; Ok(Element::create( name, is, @@ -3658,11 +3662,16 @@ impl DocumentMethods for Document { &self, namespace: Option<DOMString>, qualified_name: DOMString, - options: &ElementCreationOptions, + options: StringOrElementCreationOptions, ) -> Fallible<DomRoot<Element>> { let (namespace, prefix, local_name) = validate_and_extract(namespace, &qualified_name)?; let name = QualName::new(prefix, namespace, local_name); - let is = options.is.as_ref().map(|is| LocalName::from(&**is)); + let is = match options { + StringOrElementCreationOptions::String(_) => None, + StringOrElementCreationOptions::ElementCreationOptions(options) => { + options.is.as_ref().map(|is| LocalName::from(&**is)) + }, + }; Ok(Element::create( name, is, diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs index e86e7472a95..d12b18168f8 100644 --- a/components/script/dom/domimplementation.rs +++ b/components/script/dom/domimplementation.rs @@ -9,6 +9,7 @@ use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ DocumentMethods, ElementCreationOptions, }; use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; +use crate::dom::bindings::codegen::UnionTypes::StringOrElementCreationOptions; use crate::dom::bindings::error::Fallible; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; @@ -105,10 +106,13 @@ impl DOMImplementationMethods for DOMImplementation { let maybe_elem = if qname.is_empty() { None } else { - let options = ElementCreationOptions { is: None }; + let options = + StringOrElementCreationOptions::ElementCreationOptions(ElementCreationOptions { + is: None, + }); match doc .upcast::<Document>() - .CreateElementNS(maybe_namespace, qname, &options) + .CreateElementNS(maybe_namespace, qname, options) { Err(error) => return Err(error), Ok(elem) => Some(elem), diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl index 9476b9c2d6d..7d92ddbd137 100644 --- a/components/script/dom/webidls/Document.webidl +++ b/components/script/dom/webidls/Document.webidl @@ -34,9 +34,10 @@ interface Document : Node { HTMLCollection getElementsByClassName(DOMString classNames); [CEReactions, NewObject, Throws] - Element createElement(DOMString localName, optional ElementCreationOptions options = {}); + Element createElement(DOMString localName, optional (DOMString or ElementCreationOptions) options = {}); [CEReactions, NewObject, Throws] - Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional ElementCreationOptions options = {}); + Element createElementNS(DOMString? namespace, DOMString qualifiedName, + optional (DOMString or ElementCreationOptions) options = {}); [NewObject] DocumentFragment createDocumentFragment(); [NewObject] diff --git a/tests/wpt/metadata/custom-elements/Document-createElement.html.ini b/tests/wpt/metadata/custom-elements/Document-createElement.html.ini index 174f0d03891..ef2a2e288c1 100644 --- a/tests/wpt/metadata/custom-elements/Document-createElement.html.ini +++ b/tests/wpt/metadata/custom-elements/Document-createElement.html.ini @@ -1,7 +1,3 @@ [Document-createElement.html] [document.createElement must create an instance of autonomous custom elements when it has is attribute] expected: FAIL - - [document.createElement()'s second argument is to be ignored when it's a string] - expected: FAIL - diff --git a/tests/wpt/metadata/custom-elements/Document-createElementNS.html.ini b/tests/wpt/metadata/custom-elements/Document-createElementNS.html.ini deleted file mode 100644 index eca647d1fac..00000000000 --- a/tests/wpt/metadata/custom-elements/Document-createElementNS.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Document-createElementNS.html] - [document.createElementNS()'s third argument is to be ignored when it's a string] - expected: FAIL - |