Check namespace during ce def lookup

This commit is contained in:
Connor Brewster 2017-07-21 14:08:03 -06:00
parent 1a9f4cad08
commit 41371208a5
3 changed files with 18 additions and 9 deletions

View file

@ -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() {

View file

@ -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<LocalName>)
local_name: &LocalName,
is: Option<&LocalName>)
-> Option<Rc<CustomElementDefinition>> {
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<CustomElementDefinition>, 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);
}

View file

@ -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<LocalName>)
namespace: &Namespace,
local_name: &LocalName,
is: Option<&LocalName>)
-> Option<Rc<CustomElementDefinition>> {
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;