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/customelementregistry.rs | |
parent | e700006fb218f04cdfdfab0d6c4e07d6901ab94d (diff) | |
download | servo-9f51c7df21b9a03c40235cbccd1b7930528f23a2.tar.gz servo-9f51c7df21b9a03c40235cbccd1b7930528f23a2.zip |
Track custom element state
Diffstat (limited to 'components/script/dom/customelementregistry.rs')
-rw-r--r-- | components/script/dom/customelementregistry.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index 100aae7cae3..a625d464129 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -18,7 +18,7 @@ use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use dom::document::Document; use dom::domexception::{DOMErrorName, DOMException}; -use dom::element::Element; +use dom::element::{CustomElementState, Element}; use dom::globalscope::GlobalScope; use dom::htmlelement::HTMLElement; use dom::node::{document_from_node, Node, window_from_node}; @@ -477,8 +477,11 @@ impl CustomElementDefinition { /// https://html.spec.whatwg.org/multipage/#concept-upgrade-an-element #[allow(unsafe_code)] pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Element) { - // TODO: Steps 1-2 - // Track custom element state + // Steps 1-2 + let state = element.get_custom_element_state(); + if state == CustomElementState::Custom || state == CustomElementState::Failed { + return; + } // Step 3 for attr in element.attrs().iter() { @@ -504,8 +507,8 @@ pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Elemen // Step 7 exception handling if let Err(error) = result { - // TODO: Step 7.1 - // Track custom element state + // Step 7.1 + element.set_custom_element_state(CustomElementState::Failed); // Step 7.2 element.clear_reaction_queue(); @@ -520,6 +523,10 @@ pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Elemen return; } + // Step 8 + element.set_custom_element_state(CustomElementState::Custom); + + // Step 9 element.set_custom_element_definition(definition); } |