aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2017-12-02 18:18:35 -0600
committerJosh Matthews <josh@joshmatthews.net>2018-01-11 11:14:10 -0500
commit43526c80bb09ff2f2ea152dfd99ce6e0314a4a46 (patch)
tree0c796db43867bb75a2f159114cdbd46c1ed4b457
parent87475b11d344c2bfdfbed4d48495ecedec34bac8 (diff)
downloadservo-43526c80bb09ff2f2ea152dfd99ce6e0314a4a46.tar.gz
servo-43526c80bb09ff2f2ea152dfd99ce6e0314a4a46.zip
Add a check for when the js execution stack is empty
-rw-r--r--components/script/dom/bindings/settings_stack.rs6
-rw-r--r--components/script/dom/servoparser/mod.rs5
2 files changed, 10 insertions, 1 deletions
diff --git a/components/script/dom/bindings/settings_stack.rs b/components/script/dom/bindings/settings_stack.rs
index b540b989bc4..f9438f17065 100644
--- a/components/script/dom/bindings/settings_stack.rs
+++ b/components/script/dom/bindings/settings_stack.rs
@@ -35,6 +35,12 @@ pub unsafe fn trace(tracer: *mut JSTracer) {
})
}
+pub fn is_execution_stack_empty() -> bool {
+ STACK.with(|stack| {
+ stack.borrow().is_empty()
+ })
+}
+
/// RAII struct that pushes and pops entries from the script settings stack.
pub struct AutoEntryScript {
global: DomRoot<GlobalScope>,
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs
index 988e549d309..25539925e17 100644
--- a/components/script/dom/servoparser/mod.rs
+++ b/components/script/dom/servoparser/mod.rs
@@ -13,6 +13,7 @@ use dom::bindings::inheritance::Castable;
use dom::bindings::refcounted::Trusted;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::root::{Dom, DomRoot, MutNullableDom, RootedReference};
+use dom::bindings::settings_stack::is_execution_stack_empty;
use dom::bindings::str::DOMString;
use dom::characterdata::CharacterData;
use dom::comment::Comment;
@@ -1001,7 +1002,9 @@ fn create_element_for_token(
// Step 6.1.
// TODO: handle throw-on-dynamic-markup-insertion counter.
// Step 6.2
- // TODO: If the JavaScript execution context stack is empty, then perform a microtask checkpoint.
+ if is_execution_stack_empty() {
+ document.window().upcast::<GlobalScope>().perform_a_microtask_checkpoint();
+ }
// Step 6.3
ScriptThread::push_new_element_queue()
}