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