aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/customelementregistry.rs22
-rw-r--r--components/script/dom/element.rs4
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