mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Check namespace during ce def lookup
This commit is contained in:
parent
1a9f4cad08
commit
41371208a5
3 changed files with 18 additions and 9 deletions
|
@ -122,7 +122,7 @@ fn create_html_element(name: QualName,
|
||||||
assert!(name.ns == ns!(html));
|
assert!(name.ns == ns!(html));
|
||||||
|
|
||||||
// Step 4
|
// 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 let Some(definition) = definition {
|
||||||
if definition.is_autonomous() {
|
if definition.is_autonomous() {
|
||||||
|
|
|
@ -79,13 +79,13 @@ impl CustomElementRegistry {
|
||||||
|
|
||||||
/// https://html.spec.whatwg.org/multipage/#look-up-a-custom-element-definition
|
/// https://html.spec.whatwg.org/multipage/#look-up-a-custom-element-definition
|
||||||
pub fn lookup_definition(&self,
|
pub fn lookup_definition(&self,
|
||||||
local_name: LocalName,
|
local_name: &LocalName,
|
||||||
is: Option<LocalName>)
|
is: Option<&LocalName>)
|
||||||
-> Option<Rc<CustomElementDefinition>> {
|
-> Option<Rc<CustomElementDefinition>> {
|
||||||
self.definitions.borrow().values().find(|definition| {
|
self.definitions.borrow().values().find(|definition| {
|
||||||
// Step 4-5
|
// Step 4-5
|
||||||
definition.local_name == local_name &&
|
definition.local_name == *local_name &&
|
||||||
(definition.name == local_name || Some(&definition.name) == is.as_ref())
|
(definition.name == *local_name || Some(&definition.name) == is)
|
||||||
}).cloned()
|
}).cloned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -522,7 +522,10 @@ fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Element) {
|
||||||
pub fn try_upgrade_element(element: &Element) {
|
pub fn try_upgrade_element(element: &Element) {
|
||||||
// Step 1
|
// Step 1
|
||||||
let document = document_from_node(element);
|
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
|
// Step 2
|
||||||
ScriptThread::enqueue_upgrade_reaction(element, definition);
|
ScriptThread::enqueue_upgrade_reaction(element, definition);
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ use dom_struct::dom_struct;
|
||||||
use encoding::EncodingRef;
|
use encoding::EncodingRef;
|
||||||
use encoding::all::UTF_8;
|
use encoding::all::UTF_8;
|
||||||
use euclid::{Point2D, Vector2D};
|
use euclid::{Point2D, Vector2D};
|
||||||
use html5ever::{LocalName, QualName};
|
use html5ever::{LocalName, Namespace, QualName};
|
||||||
use hyper::header::{Header, SetCookie};
|
use hyper::header::{Header, SetCookie};
|
||||||
use hyper_serde::Serde;
|
use hyper_serde::Serde;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
|
@ -2001,13 +2001,19 @@ impl Document {
|
||||||
|
|
||||||
/// https://html.spec.whatwg.org/multipage/#look-up-a-custom-element-definition
|
/// https://html.spec.whatwg.org/multipage/#look-up-a-custom-element-definition
|
||||||
pub fn lookup_custom_element_definition(&self,
|
pub fn lookup_custom_element_definition(&self,
|
||||||
local_name: LocalName,
|
namespace: &Namespace,
|
||||||
is: Option<LocalName>)
|
local_name: &LocalName,
|
||||||
|
is: Option<&LocalName>)
|
||||||
-> Option<Rc<CustomElementDefinition>> {
|
-> Option<Rc<CustomElementDefinition>> {
|
||||||
if !PREFS.get("dom.customelements.enabled").as_boolean().unwrap_or(false) {
|
if !PREFS.get("dom.customelements.enabled").as_boolean().unwrap_or(false) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Step 1
|
||||||
|
if *namespace != ns!(html) {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
// Step 2
|
// Step 2
|
||||||
if !self.has_browsing_context {
|
if !self.has_browsing_context {
|
||||||
return None;
|
return None;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue