From f7df8046304cf1ca8f1512d49e34b2255c3a1818 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 20 Jan 2017 15:25:24 +0100 Subject: [PATCH] Simplify the processing of asap scripts --- components/script/dom/document.rs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 65f106192bd..604fe0e16a5 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -229,7 +229,7 @@ pub struct Document { /// https://html.spec.whatwg.org/multipage/#list-of-scripts-that-will-execute-in-order-as-soon-as-possible asap_in_order_scripts_list: PendingInOrderScriptVec, /// https://html.spec.whatwg.org/multipage/#set-of-scripts-that-will-execute-as-soon-as-possible - asap_scripts_set: DOMRefCell>, + asap_scripts_set: DOMRefCell>>, /// https://html.spec.whatwg.org/multipage/#concept-n-noscript /// True if scripting is enabled for all scripts in this document scripting_enabled: Cell, @@ -1549,7 +1549,7 @@ impl Document { if let LoadType::Script(_) = load { self.process_deferred_scripts(); - self.process_asap_scripts(); + self.process_asap_scripts_in_order(); } if let Some(parser) = self.get_current_parser() { @@ -1601,16 +1601,18 @@ impl Document { } pub fn add_asap_script(&self, script: &HTMLScriptElement) { - self.asap_scripts_set.borrow_mut().push_back(PendingScript::new(script)); + self.asap_scripts_set.borrow_mut().push(JS::from_ref(script)); } /// https://html.spec.whatwg.org/multipage/#the-end step 3. /// https://html.spec.whatwg.org/multipage/#prepare-a-script step 22.d. pub fn asap_script_loaded(&self, element: &HTMLScriptElement, result: ScriptResult) { - let mut scripts = self.asap_scripts_set.borrow_mut(); - let idx = scripts.iter().position(|entry| &*entry.element == element).unwrap(); - scripts.swap(0, idx); - scripts[0].loaded(result); + { + let mut scripts = self.asap_scripts_set.borrow_mut(); + let idx = scripts.iter().position(|entry| &**entry == element).unwrap(); + scripts.swap_remove(idx); + } + element.execute(result); } pub fn push_asap_in_order_script(&self, script: &HTMLScriptElement) { @@ -1625,12 +1627,7 @@ impl Document { self.asap_in_order_scripts_list.loaded(element, result); } - fn process_asap_scripts(&self) { - let pair = self.asap_scripts_set.borrow_mut().front_mut().and_then(PendingScript::take_result); - if let Some((element, result)) = pair { - self.asap_scripts_set.borrow_mut().pop_front(); - element.execute(result); - } + fn process_asap_scripts_in_order(&self) { while let Some((element, result)) = self.asap_in_order_scripts_list.take_next_ready_to_be_executed() { element.execute(result); }