diff options
author | Connor Brewster <connor.brewster@eagles.oc.edu> | 2017-08-01 12:20:31 -0600 |
---|---|---|
committer | Connor Brewster <connor.brewster@eagles.oc.edu> | 2017-08-09 14:36:22 -0600 |
commit | 9f51c7df21b9a03c40235cbccd1b7930528f23a2 (patch) | |
tree | dc4a777b268ce2d6bb7000caac1d0a26e9119f6a /components/script/dom/create.rs | |
parent | e700006fb218f04cdfdfab0d6c4e07d6901ab94d (diff) | |
download | servo-9f51c7df21b9a03c40235cbccd1b7930528f23a2.tar.gz servo-9f51c7df21b9a03c40235cbccd1b7930528f23a2.zip |
Track custom element state
Diffstat (limited to 'components/script/dom/create.rs')
-rw-r--r-- | components/script/dom/create.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs index e70c547e3d3..922757593f3 100644 --- a/components/script/dom/create.rs +++ b/components/script/dom/create.rs @@ -7,7 +7,7 @@ use dom::bindings::js::Root; use dom::bindings::reflector::DomObject; use dom::customelementregistry::{is_valid_custom_element_name, upgrade_element}; use dom::document::Document; -use dom::element::{CustomElementCreationMode, Element, ElementCreator}; +use dom::element::{CustomElementCreationMode, CustomElementState, Element, ElementCreator}; use dom::globalscope::GlobalScope; use dom::htmlanchorelement::HTMLAnchorElement; use dom::htmlappletelement::HTMLAppletElement; @@ -129,7 +129,9 @@ fn create_html_element(name: QualName, if definition.is_autonomous() { match mode { CustomElementCreationMode::Asynchronous => { - let result = Root::upcast(HTMLElement::new(name.local.clone(), prefix.clone(), document)); + let result = Root::upcast::<Element>( + HTMLElement::new(name.local.clone(), prefix.clone(), document)); + result.set_custom_element_state(CustomElementState::Undefined); ScriptThread::enqueue_upgrade_reaction(&*result, definition); return result; }, @@ -153,7 +155,10 @@ fn create_html_element(name: QualName, } // Step 6.1.2 - Root::upcast(HTMLUnknownElement::new(local_name, prefix, document)) + let element = Root::upcast::<Element>( + HTMLUnknownElement::new(local_name, prefix, document)); + element.set_custom_element_state(CustomElementState::Failed); + element }, }; }, @@ -162,6 +167,7 @@ fn create_html_element(name: QualName, // Steps 5.1-5.2 let element = create_native_html_element(name, prefix, document, creator); element.set_is(definition.name.clone()); + element.set_custom_element_state(CustomElementState::Undefined); match mode { // Step 5.3 CustomElementCreationMode::Synchronous => @@ -174,7 +180,15 @@ fn create_html_element(name: QualName, } } - create_native_html_element(name, prefix, document, creator) + // Steps 7.1-7.2 + let result = create_native_html_element(name.clone(), prefix, document, creator); + + // Step 7.3 + if is_valid_custom_element_name(&*name.local) || is.is_some() { + result.set_custom_element_state(CustomElementState::Undefined); + } + + result } pub fn create_native_html_element(name: QualName, |