aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2017-07-07 15:18:23 -0600
committerConnor Brewster <connor.brewster@eagles.oc.edu>2017-07-17 22:23:47 -0600
commit9b587a4f2d1d8abc70fa6d6220ac31e6dac32c72 (patch)
tree56b448f2841d0dd44cf8ce34fc063fae88d85737
parent46659915036bb44e73e7ef2696ea9f35105f1659 (diff)
downloadservo-9b587a4f2d1d8abc70fa6d6220ac31e6dac32c72.tar.gz
servo-9b587a4f2d1d8abc70fa6d6220ac31e6dac32c72.zip
Invoke backup element queue via a microtask
-rw-r--r--components/script/dom/customelementregistry.rs11
-rw-r--r--components/script/microtask.rs5
-rw-r--r--components/script/script_thread.rs9
-rw-r--r--tests/wpt/metadata/custom-elements/adopted-callback.html.ini45
-rw-r--r--tests/wpt/metadata/custom-elements/connected-callbacks.html.ini24
-rw-r--r--tests/wpt/metadata/custom-elements/disconnected-callbacks.html.ini48
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/ChildNode.html.ini23
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/Document.html.ini12
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/Element.html.ini12
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/HTMLOptionsCollection.html.ini9
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini6
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/HTMLTitleElement.html.ini5
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/Node.html.ini21
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/ParentNode.html.ini14
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/Range.html.ini15
15 files changed, 252 insertions, 7 deletions
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 6077130c6c4..0d151abb127 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -29,6 +29,8 @@ use js::conversions::ToJSValConvertible;
use js::jsapi::{Construct1, IsCallable, IsConstructor, HandleValueArray, HandleObject, MutableHandleValue};
use js::jsapi::{Heap, JS_GetProperty, JSAutoCompartment, JSContext};
use js::jsval::{JSVal, NullValue, ObjectValue, UndefinedValue};
+use microtask::Microtask;
+use script_thread::ScriptThread;
use std::cell::Cell;
use std::collections::{HashMap, VecDeque};
use std::ops::Deref;
@@ -532,13 +534,7 @@ impl CustomElementReactionStack {
self.processing_backup_element_queue.set(BackupElementQueueFlag::Processing);
// Step 4
- // TODO: Invoke Microtask
-
- // Step 4.1
- self.backup_queue.invoke_reactions();
-
- // Step 4.2
- self.processing_backup_element_queue.set(BackupElementQueueFlag::NotProcessing);
+ ScriptThread::enqueue_microtask(Microtask::CustomElementReaction);
}
/// https://html.spec.whatwg.org/multipage/#enqueue-a-custom-element-callback-reaction
@@ -630,6 +626,7 @@ impl ElementQueue {
while let Some(element) = self.next_element() {
element.invoke_reactions()
}
+ self.queue.borrow_mut().clear();
}
fn next_element(&self) -> Option<Root<Element>> {
diff --git a/components/script/microtask.rs b/components/script/microtask.rs
index 5028f2849da..a25b7ff3719 100644
--- a/components/script/microtask.rs
+++ b/components/script/microtask.rs
@@ -15,6 +15,7 @@ use dom::htmlimageelement::ImageElementMicrotask;
use dom::htmlmediaelement::MediaElementMicrotask;
use dom::mutationobserver::MutationObserver;
use msg::constellation_msg::PipelineId;
+use script_thread::ScriptThread;
use std::cell::Cell;
use std::mem;
use std::rc::Rc;
@@ -33,6 +34,7 @@ pub enum Microtask {
Promise(EnqueuedPromiseCallback),
MediaElement(MediaElementMicrotask),
ImageElement(ImageElementMicrotask),
+ CustomElementReaction,
NotifyMutationObservers,
}
@@ -87,6 +89,9 @@ impl MicrotaskQueue {
Microtask::ImageElement(ref task) => {
task.handler();
},
+ Microtask::CustomElementReaction => {
+ ScriptThread::invoke_backup_element_queue();
+ },
Microtask::NotifyMutationObservers => {
MutationObserver::notify_mutation_observers();
}
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 1953f5691bd..7e171a1f048 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -755,6 +755,15 @@ impl ScriptThread {
})
}
+ pub fn invoke_backup_element_queue() {
+ SCRIPT_THREAD_ROOT.with(|root| {
+ if let Some(script_thread) = root.get() {
+ let script_thread = unsafe { &*script_thread };
+ script_thread.custom_element_reaction_stack.invoke_backup_element_queue();
+ }
+ })
+ }
+
/// Creates a new script thread.
pub fn new(state: InitialScriptState,
port: Receiver<MainThreadScriptMsg>,
diff --git a/tests/wpt/metadata/custom-elements/adopted-callback.html.ini b/tests/wpt/metadata/custom-elements/adopted-callback.html.ini
index c823a05e4ec..7d4f4439a5b 100644
--- a/tests/wpt/metadata/custom-elements/adopted-callback.html.ini
+++ b/tests/wpt/metadata/custom-elements/adopted-callback.html.ini
@@ -129,3 +129,48 @@
[Custom Elements: adoptedCallback]
expected: FAIL
+ [Inserting a custom element into the owner document must not enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into the document of the template elements must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into the document of the template elements must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into a new document must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into a new document must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into a cloned document must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into a cloned document must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into a document created by createHTMLDocument must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into a document created by createHTMLDocument must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into an HTML document created by createDocument must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into an HTML document created by createDocument must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into the document of an iframe must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into the document of an iframe must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into an HTML document fetched by XHR must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
+ [Moving a custom element from the owner document into an HTML document fetched by XHR must enqueue and invoke adoptedCallback]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/connected-callbacks.html.ini b/tests/wpt/metadata/custom-elements/connected-callbacks.html.ini
index 656964b574c..457ec15b357 100644
--- a/tests/wpt/metadata/custom-elements/connected-callbacks.html.ini
+++ b/tests/wpt/metadata/custom-elements/connected-callbacks.html.ini
@@ -99,3 +99,27 @@
[Custom Elements: connectedCallback]
expected: FAIL
+ [Inserting a custom element into the document must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into the document of the template elements must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into a new document must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into a cloned document must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into a document created by createHTMLDocument must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into an HTML document created by createDocument must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into the document of an iframe must enqueue and invoke connectedCallback]
+ expected: FAIL
+
+ [Inserting a custom element into an HTML document fetched by XHR must enqueue and invoke connectedCallback]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/disconnected-callbacks.html.ini b/tests/wpt/metadata/custom-elements/disconnected-callbacks.html.ini
index 55ac810a899..caa481be682 100644
--- a/tests/wpt/metadata/custom-elements/disconnected-callbacks.html.ini
+++ b/tests/wpt/metadata/custom-elements/disconnected-callbacks.html.ini
@@ -75,3 +75,51 @@
[Custom Elements: disconnectedCallback]
expected: FAIL
+ [Removing a custom element from the document must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from the document must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from the document of the template elements must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from the document of the template elements must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from a new document must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from a new document must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from a cloned document must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from a cloned document must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from a document created by createHTMLDocument must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from a document created by createHTMLDocument must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from an HTML document created by createDocument must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from an HTML document created by createDocument must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from the document of an iframe must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from the document of an iframe must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing a custom element from an HTML document fetched by XHR must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
+ [Removing an ancestor of custom element from an HTML document fetched by XHR must enqueue and invoke disconnectedCallback]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/ChildNode.html.ini b/tests/wpt/metadata/custom-elements/reactions/ChildNode.html.ini
new file mode 100644
index 00000000000..4265435e3b6
--- /dev/null
+++ b/tests/wpt/metadata/custom-elements/reactions/ChildNode.html.ini
@@ -0,0 +1,23 @@
+[ChildNode.html]
+ type: testharness
+ [before on ChildNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [before on ChildNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [after on ChildNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [after on ChildNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [replaceWith on ChildNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [replaceWith on ChildNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [replaceWith on ChildNode must enqueue a disconnected reaction]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/Document.html.ini b/tests/wpt/metadata/custom-elements/reactions/Document.html.ini
index 10b24674200..bf986fdbca0 100644
--- a/tests/wpt/metadata/custom-elements/reactions/Document.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/Document.html.ini
@@ -21,3 +21,15 @@
[importNode on Document must construct a new custom element when importing a custom element from a template]
expected: FAIL
+ [adoptNode on Document must enqueue an adopted reaction when importing a custom element]
+ expected: FAIL
+
+ [title on Document must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
+ [write on Document must enqueue connectedCallback after constructing a custom element]
+ expected: FAIL
+
+ [writeln on Document must enqueue connectedCallback after constructing a custom element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/Element.html.ini b/tests/wpt/metadata/custom-elements/reactions/Element.html.ini
index bf8e6529090..d6e6402eece 100644
--- a/tests/wpt/metadata/custom-elements/reactions/Element.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/Element.html.ini
@@ -69,3 +69,15 @@
[insertAdjacentHTML on Element must enqueue a attributeChanged reaction for a newly constructed custom element]
expected: FAIL
+ [insertAdjacentElement on Element must enqueue a connected reaction]
+ expected: FAIL
+
+ [insertAdjacentElement on Element must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [innerHTML on Element must enqueue a disconnected reaction]
+ expected: FAIL
+
+ [outerHTML on Element must enqueue a disconnected reaction]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLOptionsCollection.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLOptionsCollection.html.ini
index 88525dabcb3..1a1f74719e6 100644
--- a/tests/wpt/metadata/custom-elements/reactions/HTMLOptionsCollection.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/HTMLOptionsCollection.html.ini
@@ -6,3 +6,12 @@
[add on HTMLOptionsCollection must enqueue connectedCallback when inserting a custom element]
expected: FAIL
+ [length on HTMLOptionsCollection must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
+ [The indexed setter on HTMLOptionsCollection must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
+ [remove on HTMLOptionsCollection must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini
index a7965cea05f..517deb05807 100644
--- a/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini
@@ -9,3 +9,9 @@
[add on HTMLSelectElement must enqueue connectedCallback when inserting a custom element]
expected: FAIL
+ [length on HTMLSelectElement must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
+ [remove on HTMLSelectElement must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLTitleElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLTitleElement.html.ini
new file mode 100644
index 00000000000..07e9cb95fc1
--- /dev/null
+++ b/tests/wpt/metadata/custom-elements/reactions/HTMLTitleElement.html.ini
@@ -0,0 +1,5 @@
+[HTMLTitleElement.html]
+ type: testharness
+ [text on HTMLTitleElement must enqueue disconnectedCallback when removing a custom element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/Node.html.ini b/tests/wpt/metadata/custom-elements/reactions/Node.html.ini
index 19256a1f7b7..a5be84ba635 100644
--- a/tests/wpt/metadata/custom-elements/reactions/Node.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/Node.html.ini
@@ -15,3 +15,24 @@
[cloneNode on Node must enqueue an attributeChanged reaction when cloning an element only for observed attributes]
expected: FAIL
+ [insertBefore on ChildNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [insertBefore on ChildNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [appendChild on ChildNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [appendChild on ChildNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [replaceChild on ChildNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [replaceChild on ChildNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [removeChild on ChildNode must enqueue a disconnected reaction]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/ParentNode.html.ini b/tests/wpt/metadata/custom-elements/reactions/ParentNode.html.ini
new file mode 100644
index 00000000000..ccdf5de7cf0
--- /dev/null
+++ b/tests/wpt/metadata/custom-elements/reactions/ParentNode.html.ini
@@ -0,0 +1,14 @@
+[ParentNode.html]
+ type: testharness
+ [prepend on ParentNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [prepend on ParentNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [append on ParentNode must enqueue a connected reaction]
+ expected: FAIL
+
+ [append on ParentNode must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/reactions/Range.html.ini b/tests/wpt/metadata/custom-elements/reactions/Range.html.ini
index 662e10a7c43..64c174992a5 100644
--- a/tests/wpt/metadata/custom-elements/reactions/Range.html.ini
+++ b/tests/wpt/metadata/custom-elements/reactions/Range.html.ini
@@ -15,3 +15,18 @@
[createContextualFragment on Range must construct a custom element]
expected: FAIL
+ [deleteContents on Range must enqueue a disconnected reaction]
+ expected: FAIL
+
+ [insertNode on Range must enqueue a connected reaction]
+ expected: FAIL
+
+ [insertNode on Range must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+
+ [surroundContents on Range must enqueue a connected reaction]
+ expected: FAIL
+
+ [surroundContents on Range must enqueue a disconnected reaction, an adopted reaction, and a connected reaction when the custom element was in another document]
+ expected: FAIL
+