aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/create.rs
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2017-07-19 13:34:33 -0600
committerConnor Brewster <connor.brewster@eagles.oc.edu>2017-08-09 14:36:18 -0600
commit6d9d4add617e4e5ad08a65d563e9842b3cde0c7b (patch)
treef8d1b0f2052745035423ec4676e1586bfbfc0ce3 /components/script/dom/create.rs
parent41371208a51661e82d65617e4f6ac221463a9ee7 (diff)
downloadservo-6d9d4add617e4e5ad08a65d563e9842b3cde0c7b.tar.gz
servo-6d9d4add617e4e5ad08a65d563e9842b3cde0c7b.zip
Enqueue upgrades
Diffstat (limited to 'components/script/dom/create.rs')
-rw-r--r--components/script/dom/create.rs20
1 files changed, 16 insertions, 4 deletions
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index f1895e8844e..e70c547e3d3 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -5,7 +5,7 @@
use dom::bindings::error::{report_pending_exception, throw_dom_exception};
use dom::bindings::js::Root;
use dom::bindings::reflector::DomObject;
-use dom::customelementregistry::is_valid_custom_element_name;
+use dom::customelementregistry::{is_valid_custom_element_name, upgrade_element};
use dom::document::Document;
use dom::element::{CustomElementCreationMode, Element, ElementCreator};
use dom::globalscope::GlobalScope;
@@ -81,6 +81,7 @@ use dom::htmlvideoelement::HTMLVideoElement;
use dom::svgsvgelement::SVGSVGElement;
use html5ever::{LocalName, Prefix, QualName};
use js::jsapi::JSAutoCompartment;
+use script_thread::ScriptThread;
use servo_config::prefs::PREFS;
fn create_svg_element(name: QualName,
@@ -127,8 +128,11 @@ fn create_html_element(name: QualName,
if let Some(definition) = definition {
if definition.is_autonomous() {
match mode {
- // TODO: Handle asynchronous CE creation. Relies on CE upgrades.
- CustomElementCreationMode::Asynchronous => {},
+ CustomElementCreationMode::Asynchronous => {
+ let result = Root::upcast(HTMLElement::new(name.local.clone(), prefix.clone(), document));
+ ScriptThread::enqueue_upgrade_reaction(&*result, definition);
+ return result;
+ },
CustomElementCreationMode::Synchronous => {
let local_name = name.local.clone();
return match definition.create_element(document, prefix.clone()) {
@@ -155,9 +159,17 @@ fn create_html_element(name: QualName,
},
}
} else {
+ // Steps 5.1-5.2
let element = create_native_html_element(name, prefix, document, creator);
element.set_is(definition.name.clone());
- // TODO: Enqueue custom element upgrade
+ match mode {
+ // Step 5.3
+ CustomElementCreationMode::Synchronous =>
+ upgrade_element(definition, &*element),
+ // Step 5.4
+ CustomElementCreationMode::Asynchronous =>
+ ScriptThread::enqueue_upgrade_reaction(&*element, definition),
+ }
return element;
}
}