mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Set is
value when constructing custom elements with the new
operator (#35930)
* Add doc comments throughout the code Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Set is-value for elements constructed with the "new" operator Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Allow custom elements to extend <slot> Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Update WPT expectations Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> --------- Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
parent
bb3d28bca7
commit
b10c53ba6b
7 changed files with 71 additions and 373 deletions
|
@ -31,12 +31,12 @@ use crate::dom::bindings::codegen::Bindings::{
|
||||||
HTMLOptionElementBinding, HTMLOutputElementBinding, HTMLParagraphElementBinding,
|
HTMLOptionElementBinding, HTMLOutputElementBinding, HTMLParagraphElementBinding,
|
||||||
HTMLParamElementBinding, HTMLPictureElementBinding, HTMLPreElementBinding,
|
HTMLParamElementBinding, HTMLPictureElementBinding, HTMLPreElementBinding,
|
||||||
HTMLProgressElementBinding, HTMLQuoteElementBinding, HTMLScriptElementBinding,
|
HTMLProgressElementBinding, HTMLQuoteElementBinding, HTMLScriptElementBinding,
|
||||||
HTMLSelectElementBinding, HTMLSourceElementBinding, HTMLSpanElementBinding,
|
HTMLSelectElementBinding, HTMLSlotElementBinding, HTMLSourceElementBinding,
|
||||||
HTMLStyleElementBinding, HTMLTableCaptionElementBinding, HTMLTableCellElementBinding,
|
HTMLSpanElementBinding, HTMLStyleElementBinding, HTMLTableCaptionElementBinding,
|
||||||
HTMLTableColElementBinding, HTMLTableElementBinding, HTMLTableRowElementBinding,
|
HTMLTableCellElementBinding, HTMLTableColElementBinding, HTMLTableElementBinding,
|
||||||
HTMLTableSectionElementBinding, HTMLTemplateElementBinding, HTMLTextAreaElementBinding,
|
HTMLTableRowElementBinding, HTMLTableSectionElementBinding, HTMLTemplateElementBinding,
|
||||||
HTMLTimeElementBinding, HTMLTitleElementBinding, HTMLTrackElementBinding,
|
HTMLTextAreaElementBinding, HTMLTimeElementBinding, HTMLTitleElementBinding,
|
||||||
HTMLUListElementBinding, HTMLVideoElementBinding,
|
HTMLTrackElementBinding, HTMLUListElementBinding, HTMLVideoElementBinding,
|
||||||
};
|
};
|
||||||
use crate::dom::bindings::codegen::PrototypeList;
|
use crate::dom::bindings::codegen::PrototypeList;
|
||||||
use crate::dom::bindings::conversions::DerivedFrom;
|
use crate::dom::bindings::conversions::DerivedFrom;
|
||||||
|
@ -54,7 +54,7 @@ use crate::dom::window::Window;
|
||||||
use crate::script_runtime::{CanGc, JSContext, JSContext as SafeJSContext};
|
use crate::script_runtime::{CanGc, JSContext, JSContext as SafeJSContext};
|
||||||
use crate::script_thread::ScriptThread;
|
use crate::script_thread::ScriptThread;
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#htmlconstructor
|
/// <https://html.spec.whatwg.org/multipage/#htmlconstructor>
|
||||||
unsafe fn html_constructor(
|
unsafe fn html_constructor(
|
||||||
cx: JSContext,
|
cx: JSContext,
|
||||||
global: &GlobalScope,
|
global: &GlobalScope,
|
||||||
|
@ -67,7 +67,7 @@ unsafe fn html_constructor(
|
||||||
let window = global.downcast::<Window>().unwrap();
|
let window = global.downcast::<Window>().unwrap();
|
||||||
let document = window.Document();
|
let document = window.Document();
|
||||||
|
|
||||||
// Step 1
|
// Step 1. Let registry be current global object's custom element registry.
|
||||||
let registry = window.CustomElements();
|
let registry = window.CustomElements();
|
||||||
|
|
||||||
// Step 2 https://html.spec.whatwg.org/multipage/#htmlconstructor
|
// Step 2 https://html.spec.whatwg.org/multipage/#htmlconstructor
|
||||||
|
@ -95,7 +95,8 @@ unsafe fn html_constructor(
|
||||||
return Err(());
|
return Err(());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 3
|
// Step 3. Let definition be the item in registry's custom element definition set with constructor
|
||||||
|
// equal to NewTarget. If there is no such item, then throw a TypeError.
|
||||||
rooted!(in(*cx) let new_target = call_args.new_target().to_object());
|
rooted!(in(*cx) let new_target = call_args.new_target().to_object());
|
||||||
let definition = match registry.lookup_definition_by_constructor(new_target.handle()) {
|
let definition = match registry.lookup_definition_by_constructor(new_target.handle()) {
|
||||||
Some(definition) => definition,
|
Some(definition) => definition,
|
||||||
|
@ -110,6 +111,9 @@ unsafe fn html_constructor(
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Step 4. Let isValue be null.
|
||||||
|
let mut is_value = None;
|
||||||
|
|
||||||
rooted!(in(*cx) let callee = UnwrapObjectStatic(call_args.callee()));
|
rooted!(in(*cx) let callee = UnwrapObjectStatic(call_args.callee()));
|
||||||
if callee.is_null() {
|
if callee.is_null() {
|
||||||
throw_dom_exception(cx, global, Error::Security, can_gc);
|
throw_dom_exception(cx, global, Error::Security, can_gc);
|
||||||
|
@ -121,24 +125,28 @@ unsafe fn html_constructor(
|
||||||
rooted!(in(*cx) let mut constructor = ptr::null_mut::<JSObject>());
|
rooted!(in(*cx) let mut constructor = ptr::null_mut::<JSObject>());
|
||||||
rooted!(in(*cx) let global_object = CurrentGlobalOrNull(*cx));
|
rooted!(in(*cx) let global_object = CurrentGlobalOrNull(*cx));
|
||||||
|
|
||||||
|
// Step 5. If definition's local name is equal to definition's name
|
||||||
|
// (i.e., definition is for an autonomous custom element):
|
||||||
if definition.is_autonomous() {
|
if definition.is_autonomous() {
|
||||||
// Step 4
|
|
||||||
// Since this element is autonomous, its active function object must be the HTMLElement
|
// Since this element is autonomous, its active function object must be the HTMLElement
|
||||||
|
|
||||||
// Retrieve the constructor object for HTMLElement
|
// Retrieve the constructor object for HTMLElement
|
||||||
HTMLElementBinding::GetConstructorObject(
|
HTMLElementBinding::GetConstructorObject(
|
||||||
cx,
|
cx,
|
||||||
global_object.handle(),
|
global_object.handle(),
|
||||||
constructor.handle_mut(),
|
constructor.handle_mut(),
|
||||||
);
|
);
|
||||||
} else {
|
}
|
||||||
// Step 5
|
// Step 6. Otherwise (i.e., if definition is for a customized built-in element):
|
||||||
|
else {
|
||||||
get_constructor_object_from_local_name(
|
get_constructor_object_from_local_name(
|
||||||
definition.local_name.clone(),
|
definition.local_name.clone(),
|
||||||
cx,
|
cx,
|
||||||
global_object.handle(),
|
global_object.handle(),
|
||||||
constructor.handle_mut(),
|
constructor.handle_mut(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Step 6.3 Set isValue to definition's name.
|
||||||
|
is_value = Some(definition.name.clone());
|
||||||
}
|
}
|
||||||
// Callee must be the same as the element interface's constructor object.
|
// Callee must be the same as the element interface's constructor object.
|
||||||
if constructor.get() != callee.get() {
|
if constructor.get() != callee.get() {
|
||||||
|
@ -158,9 +166,9 @@ unsafe fn html_constructor(
|
||||||
|
|
||||||
let entry = definition.construction_stack.borrow().last().cloned();
|
let entry = definition.construction_stack.borrow().last().cloned();
|
||||||
let result = match entry {
|
let result = match entry {
|
||||||
// Step 8
|
// Step 7. If definition's construction stack is empty:
|
||||||
None => {
|
None => {
|
||||||
// Step 8.1
|
// Step 7.1
|
||||||
let name = QualName::new(None, ns!(html), definition.local_name.clone());
|
let name = QualName::new(None, ns!(html), definition.local_name.clone());
|
||||||
// Any prototype used to create these elements will be overwritten before returning
|
// Any prototype used to create these elements will be overwritten before returning
|
||||||
// from this function, so we don't bother overwriting the defaults here.
|
// from this function, so we don't bother overwriting the defaults here.
|
||||||
|
@ -176,19 +184,24 @@ unsafe fn html_constructor(
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Step 8.2 is performed in the generated caller code.
|
// Step 7.2-7.5 are performed in the generated caller code.
|
||||||
|
|
||||||
// Step 8.3
|
// Step 7.6 Set element's custom element state to "custom".
|
||||||
element.set_custom_element_state(CustomElementState::Custom);
|
element.set_custom_element_state(CustomElementState::Custom);
|
||||||
|
|
||||||
// Step 8.4
|
// Step 7.7 Set element's custom element definition to definition.
|
||||||
element.set_custom_element_definition(definition.clone());
|
element.set_custom_element_definition(definition.clone());
|
||||||
|
|
||||||
// Step 8.5
|
// Step 7.8 Set element's is value to isValue.
|
||||||
|
if let Some(is_value) = is_value {
|
||||||
|
element.set_is(is_value);
|
||||||
|
}
|
||||||
|
|
||||||
if !check_type(&element) {
|
if !check_type(&element) {
|
||||||
throw_dom_exception(cx, global, Error::InvalidState, can_gc);
|
throw_dom_exception(cx, global, Error::InvalidState, can_gc);
|
||||||
return Err(());
|
return Err(());
|
||||||
} else {
|
} else {
|
||||||
|
// Step 7.9 Return element.
|
||||||
element
|
element
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -339,6 +352,7 @@ fn get_constructor_object_from_local_name(
|
||||||
local_name!("script") => HTMLScriptElementBinding::GetConstructorObject,
|
local_name!("script") => HTMLScriptElementBinding::GetConstructorObject,
|
||||||
local_name!("section") => HTMLElementBinding::GetConstructorObject,
|
local_name!("section") => HTMLElementBinding::GetConstructorObject,
|
||||||
local_name!("select") => HTMLSelectElementBinding::GetConstructorObject,
|
local_name!("select") => HTMLSelectElementBinding::GetConstructorObject,
|
||||||
|
local_name!("slot") => HTMLSlotElementBinding::GetConstructorObject,
|
||||||
local_name!("small") => HTMLElementBinding::GetConstructorObject,
|
local_name!("small") => HTMLElementBinding::GetConstructorObject,
|
||||||
local_name!("source") => HTMLSourceElementBinding::GetConstructorObject,
|
local_name!("source") => HTMLSourceElementBinding::GetConstructorObject,
|
||||||
local_name!("span") => HTMLSpanElementBinding::GetConstructorObject,
|
local_name!("span") => HTMLSpanElementBinding::GetConstructorObject,
|
||||||
|
|
|
@ -119,7 +119,7 @@ fn create_svg_element(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#concept-create-element
|
/// <https://dom.spec.whatwg.org/#concept-create-element>
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn create_html_element(
|
fn create_html_element(
|
||||||
|
|
|
@ -664,25 +664,34 @@ pub(crate) enum ConstructionStackEntry {
|
||||||
/// <https://html.spec.whatwg.org/multipage/#custom-element-definition>
|
/// <https://html.spec.whatwg.org/multipage/#custom-element-definition>
|
||||||
#[derive(Clone, JSTraceable, MallocSizeOf)]
|
#[derive(Clone, JSTraceable, MallocSizeOf)]
|
||||||
pub(crate) struct CustomElementDefinition {
|
pub(crate) struct CustomElementDefinition {
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-name>
|
||||||
#[no_trace]
|
#[no_trace]
|
||||||
pub(crate) name: LocalName,
|
pub(crate) name: LocalName,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-local-name>
|
||||||
#[no_trace]
|
#[no_trace]
|
||||||
pub(crate) local_name: LocalName,
|
pub(crate) local_name: LocalName,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-constructor>
|
||||||
#[ignore_malloc_size_of = "Rc"]
|
#[ignore_malloc_size_of = "Rc"]
|
||||||
pub(crate) constructor: Rc<CustomElementConstructor>,
|
pub(crate) constructor: Rc<CustomElementConstructor>,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-observed-attributes>
|
||||||
pub(crate) observed_attributes: Vec<DOMString>,
|
pub(crate) observed_attributes: Vec<DOMString>,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-lifecycle-callbacks>
|
||||||
pub(crate) callbacks: LifecycleCallbacks,
|
pub(crate) callbacks: LifecycleCallbacks,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-construction-stack>
|
||||||
pub(crate) construction_stack: DomRefCell<Vec<ConstructionStackEntry>>,
|
pub(crate) construction_stack: DomRefCell<Vec<ConstructionStackEntry>>,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-form-associated>
|
||||||
pub(crate) form_associated: bool,
|
pub(crate) form_associated: bool,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-disable-internals>
|
||||||
pub(crate) disable_internals: bool,
|
pub(crate) disable_internals: bool,
|
||||||
|
|
||||||
|
/// <https://html.spec.whatwg.org/multipage/#concept-custom-element-definition-disable-shadow>
|
||||||
pub(crate) disable_shadow: bool,
|
pub(crate) disable_shadow: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -797,19 +806,21 @@ pub(crate) fn upgrade_element(
|
||||||
element: &Element,
|
element: &Element,
|
||||||
can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) {
|
) {
|
||||||
// Step 1
|
// Step 1. If element's custom element state is not "undefined" or "uncustomized", then return.
|
||||||
let state = element.get_custom_element_state();
|
let state = element.get_custom_element_state();
|
||||||
if state != CustomElementState::Undefined && state != CustomElementState::Uncustomized {
|
if state != CustomElementState::Undefined && state != CustomElementState::Uncustomized {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2
|
// Step 2. Set element's custom element definition to definition.
|
||||||
element.set_custom_element_definition(Rc::clone(&definition));
|
element.set_custom_element_definition(Rc::clone(&definition));
|
||||||
|
|
||||||
// Step 3
|
// Step 3. Set element's custom element state to "failed".
|
||||||
element.set_custom_element_state(CustomElementState::Failed);
|
element.set_custom_element_state(CustomElementState::Failed);
|
||||||
|
|
||||||
// Step 4
|
// Step 4. For each attribute in element's attribute list, in order, enqueue a custom element callback reaction
|
||||||
|
// with element, callback name "attributeChangedCallback", and « attribute's local name, null, attribute's value,
|
||||||
|
// attribute's namespace ».
|
||||||
for attr in element.attrs().iter() {
|
for attr in element.attrs().iter() {
|
||||||
let local_name = attr.local_name().clone();
|
let local_name = attr.local_name().clone();
|
||||||
let value = DOMString::from(&**attr.value());
|
let value = DOMString::from(&**attr.value());
|
||||||
|
@ -821,7 +832,8 @@ pub(crate) fn upgrade_element(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 5
|
// Step 5. If element is connected, then enqueue a custom element callback reaction with element,
|
||||||
|
// callback name "connectedCallback", and « ».
|
||||||
if element.is_connected() {
|
if element.is_connected() {
|
||||||
ScriptThread::enqueue_callback_reaction(
|
ScriptThread::enqueue_callback_reaction(
|
||||||
element,
|
element,
|
||||||
|
@ -830,7 +842,7 @@ pub(crate) fn upgrade_element(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 6
|
// Step 6. Add element to the end of definition's construction stack.
|
||||||
definition
|
definition
|
||||||
.construction_stack
|
.construction_stack
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
|
@ -976,7 +988,8 @@ fn run_upgrade_constructor(
|
||||||
|
|
||||||
/// <https://html.spec.whatwg.org/multipage/#concept-try-upgrade>
|
/// <https://html.spec.whatwg.org/multipage/#concept-try-upgrade>
|
||||||
pub(crate) fn try_upgrade_element(element: &Element) {
|
pub(crate) fn try_upgrade_element(element: &Element) {
|
||||||
// Step 1
|
// Step 1. Let definition be the result of looking up a custom element definition given element's node document,
|
||||||
|
// element's namespace, element's local name, and element's is value.
|
||||||
let document = element.owner_document();
|
let document = element.owner_document();
|
||||||
let namespace = element.namespace();
|
let namespace = element.namespace();
|
||||||
let local_name = element.local_name();
|
let local_name = element.local_name();
|
||||||
|
@ -984,7 +997,8 @@ pub(crate) fn try_upgrade_element(element: &Element) {
|
||||||
if let Some(definition) =
|
if let Some(definition) =
|
||||||
document.lookup_custom_element_definition(namespace, local_name, is.as_ref())
|
document.lookup_custom_element_definition(namespace, local_name, is.as_ref())
|
||||||
{
|
{
|
||||||
// Step 2
|
// Step 2. If definition is not null, then enqueue a custom element upgrade reaction given
|
||||||
|
// element and definition.
|
||||||
ScriptThread::enqueue_upgrade_reaction(element, definition);
|
ScriptThread::enqueue_upgrade_reaction(element, definition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1242,9 +1256,11 @@ impl CustomElementReactionStack {
|
||||||
element: &Element,
|
element: &Element,
|
||||||
definition: Rc<CustomElementDefinition>,
|
definition: Rc<CustomElementDefinition>,
|
||||||
) {
|
) {
|
||||||
// Step 1
|
// Step 1. Add a new upgrade reaction to element's custom element reaction queue,
|
||||||
|
// with custom element definition definition.
|
||||||
element.push_upgrade_reaction(definition);
|
element.push_upgrade_reaction(definition);
|
||||||
// Step 2
|
|
||||||
|
// Step 2. Enqueue an element on the appropriate element queue given element.
|
||||||
self.enqueue_element(element);
|
self.enqueue_element(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1449,6 +1465,7 @@ fn is_extendable_element_interface(element: &str) -> bool {
|
||||||
element == "script" ||
|
element == "script" ||
|
||||||
element == "section" ||
|
element == "section" ||
|
||||||
element == "select" ||
|
element == "select" ||
|
||||||
|
element == "slot" ||
|
||||||
element == "small" ||
|
element == "small" ||
|
||||||
element == "source" ||
|
element == "source" ||
|
||||||
element == "span" ||
|
element == "span" ||
|
||||||
|
|
|
@ -174,6 +174,7 @@ pub struct Element {
|
||||||
attrs: DomRefCell<Vec<Dom<Attr>>>,
|
attrs: DomRefCell<Vec<Dom<Attr>>>,
|
||||||
#[no_trace]
|
#[no_trace]
|
||||||
id_attribute: DomRefCell<Option<Atom>>,
|
id_attribute: DomRefCell<Option<Atom>>,
|
||||||
|
/// <https://dom.spec.whatwg.org/#concept-element-is-value>
|
||||||
#[no_trace]
|
#[no_trace]
|
||||||
is: DomRefCell<Option<LocalName>>,
|
is: DomRefCell<Option<LocalName>>,
|
||||||
#[ignore_malloc_size_of = "Arc"]
|
#[ignore_malloc_size_of = "Arc"]
|
||||||
|
@ -344,6 +345,7 @@ impl Element {
|
||||||
*self.is.borrow_mut() = Some(is);
|
*self.is.borrow_mut() = Some(is);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <https://dom.spec.whatwg.org/#concept-element-is-value>
|
||||||
pub(crate) fn get_is(&self) -> Option<LocalName> {
|
pub(crate) fn get_is(&self) -> Option<LocalName> {
|
||||||
self.is.borrow().clone()
|
self.is.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
|
@ -3261,20 +3261,24 @@ impl NodeMethods<crate::DomTypeHolder> for Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <https://dom.spec.whatwg.org/#dom-node-clonenode>
|
/// <https://dom.spec.whatwg.org/#dom-node-clonenode>
|
||||||
fn CloneNode(&self, deep: bool, can_gc: CanGc) -> Fallible<DomRoot<Node>> {
|
fn CloneNode(&self, subtree: bool, can_gc: CanGc) -> Fallible<DomRoot<Node>> {
|
||||||
|
// Step 1. If this is a shadow root, then throw a "NotSupportedError" DOMException.
|
||||||
if self.is::<ShadowRoot>() {
|
if self.is::<ShadowRoot>() {
|
||||||
return Err(Error::NotSupported);
|
return Err(Error::NotSupported);
|
||||||
}
|
}
|
||||||
Ok(Node::clone(
|
|
||||||
|
// Step 2. Return the result of cloning a node given this with subtree set to subtree.
|
||||||
|
let result = Node::clone(
|
||||||
self,
|
self,
|
||||||
None,
|
None,
|
||||||
if deep {
|
if subtree {
|
||||||
CloneChildrenFlag::CloneChildren
|
CloneChildrenFlag::CloneChildren
|
||||||
} else {
|
} else {
|
||||||
CloneChildrenFlag::DoNotCloneChildren
|
CloneChildrenFlag::DoNotCloneChildren
|
||||||
},
|
},
|
||||||
can_gc,
|
can_gc,
|
||||||
))
|
);
|
||||||
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <https://dom.spec.whatwg.org/#dom-node-isequalnode>
|
/// <https://dom.spec.whatwg.org/#dom-node-isequalnode>
|
||||||
|
|
|
@ -1,333 +0,0 @@
|
||||||
[builtin-coverage.html]
|
|
||||||
[a: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[abbr: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[address: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[area: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[article: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[aside: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[audio: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[b: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[base: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[bdi: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[bdo: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[blockquote: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[body: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[br: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[button: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[canvas: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[caption: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[cite: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[code: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[col: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[colgroup: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[data: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[dd: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[del: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[details: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[dfn: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[div: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[dl: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[dt: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[em: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[embed: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[fieldset: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[figcaption: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[figure: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[footer: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[form: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[h1: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[h2: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[h3: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[h4: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[h5: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[h6: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[header: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[hgroup: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[hr: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[html: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[i: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[iframe: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[img: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[input: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[ins: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[kbd: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[label: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[legend: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[li: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[link: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[main: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[map: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[mark: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[menu: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[meta: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[meter: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[nav: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[noscript: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[object: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[ol: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[optgroup: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[option: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[output: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[p: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[param: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[picture: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[pre: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[progress: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[q: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[rp: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[rt: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[ruby: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[s: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[samp: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[script: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[section: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[select: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[small: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[source: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[span: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[strong: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[style: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[sub: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[summary: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[sup: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[table: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[tbody: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[td: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[template: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[textarea: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[tfoot: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[th: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[thead: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[time: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[title: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[tr: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[track: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[u: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[ul: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[var: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[video: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[wbr: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[datalist: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[dialog: Operator 'new' should instantiate a customized built-in element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[slot: Define a customized built-in element]
|
|
||||||
expected: FAIL
|
|
|
@ -1,6 +0,0 @@
|
||||||
[HTMLSlotElement.html]
|
|
||||||
[name on HTMLSlotElement must enqueue an attributeChanged reaction when adding name content attribute]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[name on HTMLSlotElement must enqueue an attributeChanged reaction when replacing an existing attribute]
|
|
||||||
expected: FAIL
|
|
Loading…
Add table
Add a link
Reference in a new issue