diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/customelementregistry.rs | 22 | ||||
-rw-r--r-- | components/script/dom/element.rs | 4 |
2 files changed, 14 insertions, 12 deletions
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index 12a6e744a5e..77d4e10fa01 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -595,13 +595,17 @@ impl CustomElementDefinition { /// <https://html.spec.whatwg.org/multipage/#concept-upgrade-an-element> #[allow(unsafe_code)] pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Element) { - // Steps 1-2 + // Step 1 let state = element.get_custom_element_state(); - if state == CustomElementState::Custom || state == CustomElementState::Failed { + if state != CustomElementState::Undefined && state != CustomElementState::Uncustomized { return; } - // Step 3 happens later to save having to undo it in an exception + // Step 2 + element.set_custom_element_definition(Rc::clone(&definition)); + + // Step 3 + element.set_custom_element_state(CustomElementState::Failed); // Step 4 for attr in element.attrs().iter() { @@ -639,14 +643,12 @@ pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Elemen // Step 8 exception handling if let Err(error) = result { // Step 8.exception.1 - element.set_custom_element_state(CustomElementState::Failed); + element.clear_custom_element_definition(); - // Step 8.exception.2 isn't needed since step 3 hasn't happened yet - - // Step 8.exception.3 + // Step 8.exception.2 element.clear_reaction_queue(); - // Step 8.exception.4 + // Step 8.exception.3 let global = GlobalScope::current().expect("No current global"); let cx = global.get_cx(); unsafe { @@ -660,11 +662,7 @@ pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Elemen // TODO Step 9: "If element is a form-associated custom element..." // Step 10 - element.set_custom_element_state(CustomElementState::Custom); - - // Step 3 - element.set_custom_element_definition(definition); } /// <https://html.spec.whatwg.org/multipage/#concept-upgrade-an-element> diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index cb7d339a78e..29bdaf2f3bf 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -342,6 +342,10 @@ impl Element { self.rare_data().as_ref()?.custom_element_definition.clone() } + pub fn clear_custom_element_definition(&self) { + self.ensure_rare_data().custom_element_definition = None; + } + pub fn push_callback_reaction(&self, function: Rc<Function>, args: Box<[Heap<JSVal>]>) { self.ensure_rare_data() .custom_element_reaction_queue |