diff --git a/ext/web/03_abort_signal.js b/ext/web/03_abort_signal.js
index 81844d53fc..ae0701451b 100644
--- a/ext/web/03_abort_signal.js
+++ b/ext/web/03_abort_signal.js
@@ -71,6 +71,7 @@ class WeakRefSet {
const add = Symbol("[[add]]");
const signalAbort = Symbol("[[signalAbort]]");
const remove = Symbol("[[remove]]");
+const runAbortSteps = Symbol("[[runAbortSteps]]");
const abortReason = Symbol("[[abortReason]]");
const abortAlgos = Symbol("[[abortAlgos]]");
const dependent = Symbol("[[dependent]]");
@@ -149,26 +150,43 @@ class AbortSignal extends EventTarget {
return;
}
this[abortReason] = reason;
+
+ const dependentSignalsToAbort = [];
+ if (this[dependentSignals] !== null) {
+ const dependentSignalArray = this[dependentSignals].toArray();
+ for (let i = 0; i < dependentSignalArray.length; ++i) {
+ const dependentSignal = dependentSignalArray[i];
+ if (dependentSignal[abortReason] === undefined) {
+ dependentSignal[abortReason] = this[abortReason];
+ ArrayPrototypePush(dependentSignalsToAbort, dependentSignal);
+ }
+ }
+ }
+
+ this[runAbortSteps]();
+
+ if (dependentSignalsToAbort.length !== 0) {
+ for (let i = 0; i < dependentSignalsToAbort.length; ++i) {
+ const dependentSignal = dependentSignalsToAbort[i];
+ dependentSignal[runAbortSteps]();
+ }
+ }
+ }
+
+ [runAbortSteps]() {
const algos = this[abortAlgos];
this[abortAlgos] = null;
- if (listenerCount(this, "abort") > 0) {
- const event = new Event("abort");
- setIsTrusted(event, true);
- super.dispatchEvent(event);
- }
if (algos !== null) {
for (const algorithm of new SafeSetIterator(algos)) {
algorithm();
}
}
- if (this[dependentSignals] !== null) {
- const dependentSignalArray = this[dependentSignals].toArray();
- for (let i = 0; i < dependentSignalArray.length; ++i) {
- const dependentSignal = dependentSignalArray[i];
- dependentSignal[signalAbort](reason);
- }
+ if (listenerCount(this, "abort") > 0) {
+ const event = new Event("abort");
+ setIsTrusted(event, true);
+ super.dispatchEvent(event);
}
}
diff --git a/tests/wpt/runner/expectation.json b/tests/wpt/runner/expectation.json
index 6dfcccf164..ef22d1dd79 100644
--- a/tests/wpt/runner/expectation.json
+++ b/tests/wpt/runner/expectation.json
@@ -2554,9 +2554,9 @@
"Document interface: attribute firstElementChild",
"Document interface: attribute lastElementChild",
"Document interface: attribute childElementCount",
- "Document interface: operation prepend((Node or TrustedScript or DOMString)...)",
- "Document interface: operation append((Node or TrustedScript or DOMString)...)",
- "Document interface: operation replaceChildren((Node or TrustedScript or DOMString)...)",
+ "Document interface: operation prepend((Node or DOMString)...)",
+ "Document interface: operation append((Node or DOMString)...)",
+ "Document interface: operation replaceChildren((Node or DOMString)...)",
"Document interface: operation querySelector(DOMString)",
"Document interface: operation querySelectorAll(DOMString)",
"Document interface: operation createExpression(DOMString, optional XPathNSResolver?)",
@@ -2587,9 +2587,9 @@
"DocumentType interface: attribute name",
"DocumentType interface: attribute publicId",
"DocumentType interface: attribute systemId",
- "DocumentType interface: operation before((Node or TrustedScript or DOMString)...)",
- "DocumentType interface: operation after((Node or TrustedScript or DOMString)...)",
- "DocumentType interface: operation replaceWith((Node or TrustedScript or DOMString)...)",
+ "DocumentType interface: operation before((Node or DOMString)...)",
+ "DocumentType interface: operation after((Node or DOMString)...)",
+ "DocumentType interface: operation replaceWith((Node or DOMString)...)",
"DocumentType interface: operation remove()",
"DocumentFragment interface: existence and properties of interface object",
"DocumentFragment interface object length",
@@ -2602,9 +2602,9 @@
"DocumentFragment interface: attribute firstElementChild",
"DocumentFragment interface: attribute lastElementChild",
"DocumentFragment interface: attribute childElementCount",
- "DocumentFragment interface: operation prepend((Node or TrustedScript or DOMString)...)",
- "DocumentFragment interface: operation append((Node or TrustedScript or DOMString)...)",
- "DocumentFragment interface: operation replaceChildren((Node or TrustedScript or DOMString)...)",
+ "DocumentFragment interface: operation prepend((Node or DOMString)...)",
+ "DocumentFragment interface: operation append((Node or DOMString)...)",
+ "DocumentFragment interface: operation replaceChildren((Node or DOMString)...)",
"DocumentFragment interface: operation querySelector(DOMString)",
"DocumentFragment interface: operation querySelectorAll(DOMString)",
"ShadowRoot interface: existence and properties of interface object",
@@ -2669,16 +2669,16 @@
"Element interface: attribute firstElementChild",
"Element interface: attribute lastElementChild",
"Element interface: attribute childElementCount",
- "Element interface: operation prepend((Node or TrustedScript or DOMString)...)",
- "Element interface: operation append((Node or TrustedScript or DOMString)...)",
- "Element interface: operation replaceChildren((Node or TrustedScript or DOMString)...)",
+ "Element interface: operation prepend((Node or DOMString)...)",
+ "Element interface: operation append((Node or DOMString)...)",
+ "Element interface: operation replaceChildren((Node or DOMString)...)",
"Element interface: operation querySelector(DOMString)",
"Element interface: operation querySelectorAll(DOMString)",
"Element interface: attribute previousElementSibling",
"Element interface: attribute nextElementSibling",
- "Element interface: operation before((Node or TrustedScript or DOMString)...)",
- "Element interface: operation after((Node or TrustedScript or DOMString)...)",
- "Element interface: operation replaceWith((Node or TrustedScript or DOMString)...)",
+ "Element interface: operation before((Node or DOMString)...)",
+ "Element interface: operation after((Node or DOMString)...)",
+ "Element interface: operation replaceWith((Node or DOMString)...)",
"Element interface: operation remove()",
"Element interface: attribute assignedSlot",
"NamedNodeMap interface: existence and properties of interface object",
@@ -2723,9 +2723,9 @@
"CharacterData interface: operation replaceData(unsigned long, unsigned long, DOMString)",
"CharacterData interface: attribute previousElementSibling",
"CharacterData interface: attribute nextElementSibling",
- "CharacterData interface: operation before((Node or TrustedScript or DOMString)...)",
- "CharacterData interface: operation after((Node or TrustedScript or DOMString)...)",
- "CharacterData interface: operation replaceWith((Node or TrustedScript or DOMString)...)",
+ "CharacterData interface: operation before((Node or DOMString)...)",
+ "CharacterData interface: operation after((Node or DOMString)...)",
+ "CharacterData interface: operation replaceWith((Node or DOMString)...)",
"CharacterData interface: operation remove()",
"Text interface: existence and properties of interface object",
"Text interface object length",
@@ -3089,7 +3089,16 @@
"Node member must be removed: getFeature",
"Node member must be removed: getUserData",
"Node member must be removed: setUserData",
- "Node member must be removed: rootNode"
+ "Node member must be removed: rootNode",
+ "The DOMSubtreeModified mutation event must not be fired.",
+ "The DOMNodeInserted mutation event must not be fired.",
+ "The DOMNodeRemoved mutation event must not be fired.",
+ "The DOMNodeRemovedFromDocument mutation event must not be fired.",
+ "The DOMNodeInsertedIntoDocument mutation event must not be fired.",
+ "The DOMCharacterDataModified mutation event must not be fired.",
+ "The DOMAttrModified mutation event must not be fired.",
+ "The DOMAttributeNameChanged mutation event must not be fired.",
+ "The DOMElementNameChanged mutation event must not be fired."
],
"idlharness.any.serviceworker.html": false,
"idlharness.any.sharedworker.html": false,
@@ -4577,7 +4586,31 @@
"≯ (using .host)",
"≯ (using .hostname)",
"≯ (using .host)",
- "≯ (using .hostname)"
+ "≯ (using .hostname)",
+ "≠ (using .host)",
+ "≠ (using .hostname)",
+ "≠ (using .host)",
+ "≠ (using .hostname)",
+ "≮ (using .host)",
+ "≮ (using .hostname)",
+ "≮ (using .host)",
+ "≮ (using .hostname)",
+ "≯ (using .host)",
+ "≯ (using .hostname)",
+ "≯ (using .host)",
+ "≯ (using .hostname)",
+ "≠ (using .host)",
+ "≠ (using .hostname)",
+ "≠ (using .host)",
+ "≠ (using .hostname)",
+ "≮ (using .host)",
+ "≮ (using .hostname)",
+ "≮ (using .host)",
+ "≮ (using .hostname)",
+ "≯ (using .host)",
+ "≯ (using .hostname)",
+ "≯ (using .host)",
+ "≯ (using .hostname)"
],
"url-origin.any.html": [
"Origin parsing: without base",
@@ -4850,6 +4883,7 @@
"Parsing: //example.org/../path/../../path> against "
],
"url-constructor.any.html?include=file": [
+ "Parsing: without base",
"Parsing: > against ",
"Parsing: without base",
"Parsing: without base",
@@ -4912,6 +4946,7 @@
"Parsing: //example.org/../path/../../path> against "
],
"url-constructor.any.worker.html?include=file": [
+ "Parsing: without base",
"Parsing: > against ",
"Parsing: without base",
"Parsing: without base",
@@ -5790,7 +5825,6 @@
"Parsing origin: against ",
"Parsing origin: against ",
"Parsing origin: against ",
- "Parsing origin: against ",
"Parsing origin: against ",
"Parsing origin: against ",
"Parsing origin: against ",
@@ -5891,7 +5925,21 @@
"Parsing origin: against ",
"Parsing origin: against ",
"Parsing origin: against ",
- "Parsing origin: against "
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against ",
+ "Parsing origin: against "
],
"a-element.html?exclude=(file|javascript|mailto)": [
"Test that embedded 0x0A is stripped",
@@ -6222,7 +6270,6 @@
"Parsing: against ",
"Parsing: against ",
"Parsing: against ",
- "Parsing: against ",
"Parsing: against ",
"Parsing: against ",
"Parsing: against ",
@@ -6568,6 +6615,19 @@
"Parsing: against ",
"Parsing: against ",
"Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
"Parsing: //test> against ",
"Parsing: //\\//\\//test> against ",
"Parsing: //example.org/path> against ",
@@ -6575,7 +6635,8 @@
"Parsing: //example.org/../../> against ",
"Parsing: //example.org/../path/../../> against ",
"Parsing: //example.org/../path/../../path> against ",
- "Parsing: \\/\\//example.org/../path> against "
+ "Parsing: \\/\\//example.org/../path> against ",
+ "Parsing: against "
],
"a-element.html?include=file": [
"Test that embedded 0x0A is stripped",
@@ -6603,6 +6664,11 @@
"Parsing: against ",
"Parsing: against ",
"Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
+ "Parsing: against ",
"Parsing: against ",
"Parsing: against ",
"Parsing: against ",
@@ -10323,9 +10389,9 @@
"import() should not drain the microtask queue if it fails during specifier resolution",
"import() should not drain the microtask queue when loading an already loaded module"
],
- "css-import-in-worker.any.worker.html": false,
- "with-import-assertions.any.html": false,
- "with-import-assertions.any.worker.html": false
+ "css-import-in-worker.any.worker.html": true,
+ "with-import-assertions.any.html": true,
+ "with-import-assertions.any.worker.html": true
}
},
"import-meta": {
diff --git a/tests/wpt/suite b/tests/wpt/suite
index a7b5eac8f2..e78446e34a 160000
--- a/tests/wpt/suite
+++ b/tests/wpt/suite
@@ -1 +1 @@
-Subproject commit a7b5eac8f2cfac28bb12beeea15a9e2b126a568e
+Subproject commit e78446e34a1921371658a5df08c71d83f50a2a2f