aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/create.rs
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2017-08-01 12:20:31 -0600
committerConnor Brewster <connor.brewster@eagles.oc.edu>2017-08-09 14:36:22 -0600
commit9f51c7df21b9a03c40235cbccd1b7930528f23a2 (patch)
treedc4a777b268ce2d6bb7000caac1d0a26e9119f6a /components/script/dom/create.rs
parente700006fb218f04cdfdfab0d6c4e07d6901ab94d (diff)
downloadservo-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.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,