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;
};