Title: [286904] trunk
Revision
286904
Author
cdu...@apple.com
Date
2021-12-10 23:00:12 -0800 (Fri, 10 Dec 2021)

Log Message

Implement AbortSignal.throwIfAborted
https://bugs.webkit.org/show_bug.cgi?id=234127

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Resync WPT test from upstream to gain test coverage and rebaseline it.

* web-platform-tests/dom/abort/event.any-expected.txt:
* web-platform-tests/dom/abort/event.any.js:
* web-platform-tests/dom/abort/event.any.worker-expected.txt:

Source/WebCore:

Implement AbortSignal.throwIfAborted as per:
- https://dom.spec.whatwg.org/#dom-abortsignal-throwifaborted

No new tests, updated / rebaselined existing test.

* dom/AbortSignal.cpp:
(WebCore::AbortSignal::throwIfAborted):
* dom/AbortSignal.h:
* dom/AbortSignal.idl:

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (286903 => 286904)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-12-11 07:00:12 UTC (rev 286904)
@@ -1,3 +1,16 @@
+2021-12-10  Chris Dumez  <cdu...@apple.com>
+
+        Implement AbortSignal.throwIfAborted
+        https://bugs.webkit.org/show_bug.cgi?id=234127
+
+        Reviewed by Darin Adler.
+
+        Resync WPT test from upstream to gain test coverage and rebaseline it.
+
+        * web-platform-tests/dom/abort/event.any-expected.txt:
+        * web-platform-tests/dom/abort/event.any.js:
+        * web-platform-tests/dom/abort/event.any.worker-expected.txt:
+
 2021-12-10  Alexey Shvayka  <ashva...@apple.com>
 
         Setting "onselectionchange" content attribute should add an event listener

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any-expected.txt (286903 => 286904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any-expected.txt	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any-expected.txt	2021-12-11 07:00:12 UTC (rev 286904)
@@ -7,6 +7,10 @@
 PASS AbortController abort(reason) should set signal.reason
 PASS aborting AbortController without reason creates an "AbortError" DOMException
 PASS AbortController abort(undefined) creates an "AbortError" DOMException
+PASS AbortController abort(null) should set signal.reason
 PASS static aborting signal should have right properties
 PASS static aborting signal with reason should set signal.reason
+PASS throwIfAborted() should throw abort.reason if signal aborted
+PASS throwIfAborted() should throw primitive abort.reason if signal aborted
+PASS throwIfAborted() should not throw if signal not aborted
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any.js (286903 => 286904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any.js	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any.js	2021-12-11 07:00:12 UTC (rev 286904)
@@ -111,6 +111,19 @@
 }, "AbortController abort(undefined) creates an \"AbortError\" DOMException");
 
 test(t => {
+  const controller = new AbortController();
+  const signal = controller.signal;
+
+  assert_true("reason" in signal, "signal has reason property");
+  assert_equals(signal.reason, undefined, "signal.reason is initially undefined");
+
+  controller.abort(null);
+
+  assert_true(signal.aborted, "signal.aborted");
+  assert_equals(signal.reason, null, "signal.reason");
+}, "AbortController abort(null) should set signal.reason");
+
+test(t => {
   const signal = AbortSignal.abort();
 
   assert_true(signal.aborted, "signal.aborted");
@@ -126,4 +139,23 @@
   assert_equals(signal.reason, reason, "signal.reason");
 }, "static aborting signal with reason should set signal.reason");
 
+test(t => {
+  const reason = new Error('boom');
+  const signal = AbortSignal.abort(reason);
+  assert_true(signal.aborted);
+  assert_throws_exactly(reason, () => signal.throwIfAborted());
+}, "throwIfAborted() should throw abort.reason if signal aborted");
+
+test(t => {
+  const signal = AbortSignal.abort('hello');
+  assert_true(signal.aborted);
+  assert_throws_exactly('hello', () => signal.throwIfAborted());
+}, "throwIfAborted() should throw primitive abort.reason if signal aborted");
+
+test(t => {
+  const controller = new AbortController();
+  assert_false(controller.signal.aborted);
+  controller.signal.throwIfAborted();
+}, "throwIfAborted() should not throw if signal not aborted");
+
 done();

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any.worker-expected.txt (286903 => 286904)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any.worker-expected.txt	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/abort/event.any.worker-expected.txt	2021-12-11 07:00:12 UTC (rev 286904)
@@ -7,6 +7,10 @@
 PASS AbortController abort(reason) should set signal.reason
 PASS aborting AbortController without reason creates an "AbortError" DOMException
 PASS AbortController abort(undefined) creates an "AbortError" DOMException
+PASS AbortController abort(null) should set signal.reason
 PASS static aborting signal should have right properties
 PASS static aborting signal with reason should set signal.reason
+PASS throwIfAborted() should throw abort.reason if signal aborted
+PASS throwIfAborted() should throw primitive abort.reason if signal aborted
+PASS throwIfAborted() should not throw if signal not aborted
 

Modified: trunk/Source/WebCore/ChangeLog (286903 => 286904)


--- trunk/Source/WebCore/ChangeLog	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/Source/WebCore/ChangeLog	2021-12-11 07:00:12 UTC (rev 286904)
@@ -1,3 +1,20 @@
+2021-12-10  Chris Dumez  <cdu...@apple.com>
+
+        Implement AbortSignal.throwIfAborted
+        https://bugs.webkit.org/show_bug.cgi?id=234127
+
+        Reviewed by Darin Adler.
+
+        Implement AbortSignal.throwIfAborted as per:
+        - https://dom.spec.whatwg.org/#dom-abortsignal-throwifaborted
+
+        No new tests, updated / rebaselined existing test.
+
+        * dom/AbortSignal.cpp:
+        (WebCore::AbortSignal::throwIfAborted):
+        * dom/AbortSignal.h:
+        * dom/AbortSignal.idl:
+
 2021-12-10  Alexey Shvayka  <ashva...@apple.com>
 
         Setting "onselectionchange" content attribute should add an event listener

Modified: trunk/Source/WebCore/dom/AbortSignal.cpp (286903 => 286904)


--- trunk/Source/WebCore/dom/AbortSignal.cpp	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/Source/WebCore/dom/AbortSignal.cpp	2021-12-11 07:00:12 UTC (rev 286904)
@@ -32,6 +32,7 @@
 #include "EventNames.h"
 #include "JSDOMException.h"
 #include "ScriptExecutionContext.h"
+#include <_javascript_Core/Exception.h>
 #include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
@@ -113,4 +114,14 @@
     return false;
 }
 
+void AbortSignal::throwIfAborted(JSC::JSGlobalObject& lexicalGlobalObject)
+{
+    if (!aborted())
+        return;
+
+    auto& vm = lexicalGlobalObject.vm();
+    auto scope = DECLARE_THROW_SCOPE(vm);
+    throwException(&lexicalGlobalObject, scope, m_reason);
 }
+
+} // namespace WebCore

Modified: trunk/Source/WebCore/dom/AbortSignal.h (286903 => 286904)


--- trunk/Source/WebCore/dom/AbortSignal.h	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/Source/WebCore/dom/AbortSignal.h	2021-12-11 07:00:12 UTC (rev 286904)
@@ -62,6 +62,8 @@
 
     bool isFollowingSignal() const { return !!m_followingSignal; }
 
+    void throwIfAborted(JSC::JSGlobalObject&);
+
 private:
     enum class Aborted : bool { No, Yes };
     explicit AbortSignal(ScriptExecutionContext&, Aborted = Aborted::No, JSC::JSValue reason = JSC::jsUndefined());

Modified: trunk/Source/WebCore/dom/AbortSignal.idl (286903 => 286904)


--- trunk/Source/WebCore/dom/AbortSignal.idl	2021-12-11 06:40:16 UTC (rev 286903)
+++ trunk/Source/WebCore/dom/AbortSignal.idl	2021-12-11 07:00:12 UTC (rev 286904)
@@ -35,6 +35,7 @@
     [NewObject, CallWith=ScriptExecutionContext&GlobalObject] static AbortSignal abort(optional any reason);
     readonly attribute boolean aborted;
     readonly attribute any reason;
+    [CallWith=GlobalObject] undefined throwIfAborted();
 
     attribute EventHandler onabort;
 };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to