diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs index fa05f4e00f14..f1895e8844e6 100644 --- a/components/script/dom/create.rs +++ b/components/script/dom/create.rs @@ -122,7 +122,7 @@ fn create_html_element(name: QualName, assert!(name.ns == ns!(html)); // Step 4 - let definition = document.lookup_custom_element_definition(name.local.clone(), is); + let definition = document.lookup_custom_element_definition(&name.ns, &name.local, is.as_ref()); if let Some(definition) = definition { if definition.is_autonomous() { diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index e3fbe6ef2f52..45482d29c829 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -79,13 +79,13 @@ impl CustomElementRegistry { /// https://html.spec.whatwg.org/multipage/#look-up-a-custom-element-definition pub fn lookup_definition(&self, - local_name: LocalName, - is: Option) + local_name: &LocalName, + is: Option<&LocalName>) -> Option> { self.definitions.borrow().values().find(|definition| { // Step 4-5 - definition.local_name == local_name && - (definition.name == local_name || Some(&definition.name) == is.as_ref()) + definition.local_name == *local_name && + (definition.name == *local_name || Some(&definition.name) == is) }).cloned() } @@ -522,7 +522,10 @@ fn upgrade_element(definition: Rc, element: &Element) { pub fn try_upgrade_element(element: &Element) { // Step 1 let document = document_from_node(element); - if let Some(definition) = document.lookup_custom_element_definition(element.local_name().clone(), element.get_is()) { + let namespace = element.namespace(); + let local_name = element.local_name(); + let is = element.get_is(); + if let Some(definition) = document.lookup_custom_element_definition(namespace, local_name, is.as_ref()) { // Step 2 ScriptThread::enqueue_upgrade_reaction(element, definition); } diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index c63295a06744..4f594f96357b 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -95,7 +95,7 @@ use dom_struct::dom_struct; use encoding::EncodingRef; use encoding::all::UTF_8; use euclid::{Point2D, Vector2D}; -use html5ever::{LocalName, QualName}; +use html5ever::{LocalName, Namespace, QualName}; use hyper::header::{Header, SetCookie}; use hyper_serde::Serde; use ipc_channel::ipc::{self, IpcSender}; @@ -2001,13 +2001,19 @@ impl Document { /// https://html.spec.whatwg.org/multipage/#look-up-a-custom-element-definition pub fn lookup_custom_element_definition(&self, - local_name: LocalName, - is: Option) + namespace: &Namespace, + local_name: &LocalName, + is: Option<&LocalName>) -> Option> { if !PREFS.get("dom.customelements.enabled").as_boolean().unwrap_or(false) { return None; } + // Step 1 + if *namespace != ns!(html) { + return None; + } + // Step 2 if !self.has_browsing_context { return None;