haikuwebkit/LayoutTests/js/dom/unhandled-promise-rejection...

15 lines
331 B
HTML
Raw Permalink Normal View History

Worker should support unhandled promise rejections https://bugs.webkit.org/show_bug.cgi?id=188265 Reviewed by Darin Adler. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker-expected.txt: * web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker-expected.txt: * web-platform-tests/streams/readable-streams/tee.dedicatedworker-expected.txt: * web-platform-tests/streams/readable-streams/tee.serviceworker.https-expected.txt: * web-platform-tests/workers/interfaces.worker-expected.txt: * web-platform-tests/workers/semantics/interface-objects/001.worker-expected.txt: Source/WebCore: This patch adds PromiseRejectionEvent support in workers. * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * bindings/js/JSDOMGlobalObject.cpp: (WebCore::JSDOMGlobalObject::promiseRejectionTracker): Move promiseRejectionTracker handler from JSDOMWindowBase to JSDOMGlobalObject to share it with WorkerGlobalScope. * bindings/js/JSDOMGlobalObject.h: * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::promiseRejectionTracker): Deleted. Moved to JSDOMGlobalObject. * bindings/js/JSDOMWindowBase.h: * bindings/js/JSExecState.cpp: (WebCore::JSExecState::didLeaveScriptContext): PromiseRejectionTracker is driven in workers too. * bindings/js/JSPromiseRejectionEventCustom.cpp: Added. (WebCore::JSPromiseRejectionEvent::visitAdditionalChildren): Marking PromiseRejectionEvent::m_reason. * bindings/js/JSWorkerGlobalScopeBase.cpp: Configure promiseRejectionTracker. * dom/Microtasks.cpp: (WebCore::MicrotaskQueue::contextQueue): * dom/Microtasks.h: * dom/PromiseRejectionEvent.cpp: (WebCore::PromiseRejectionEvent::PromiseRejectionEvent): * dom/PromiseRejectionEvent.h: * dom/PromiseRejectionEvent.idl: Expose it to worker scope. The custom mark function is required since we start using JSValueInWrappedObject. And the constructor no longer requires ExecState. * dom/RejectedPromiseTracker.cpp: (WebCore::RejectedPromiseTracker::reportUnhandledRejections): (WebCore::RejectedPromiseTracker::reportRejectionHandled): Remove state argument for PromiseRejectionEvent::create. * dom/ScriptExecutionContext.cpp: (WebCore::ScriptExecutionContext::removeRejectedPromiseTracker): * dom/ScriptExecutionContext.h: In worker thread, we should delete PromiseRejectionTracker before destroying VM because PromiseRejectionTracker's destruction requires VM. If we destroy VM first, PromiseRejectionTracker's destruction causes crashing. In main thread, we do not need to handle this case since we never destroy VM. * workers/WorkerGlobalScope.cpp: (WebCore::WorkerGlobalScope::prepareForTermination): (WebCore::WorkerGlobalScope::removeMicrotaskQueue): Deleted. * workers/WorkerGlobalScope.h: * workers/WorkerGlobalScope.idl: Add onunhandledrejection and onrejectionhandled event handler attributes. * workers/WorkerThread.cpp: (WebCore::WorkerThread::stop): We call WorkerGlobalScope::prepareForTermination, which cleans up Worker's objects touching VM. LayoutTests: * fast/dom/reference-cycle-leaks-expected.txt: * http/wpt/workers/promise-unhandled-rejection.any-expected.txt: Added. * http/wpt/workers/promise-unhandled-rejection.any.html: Added. * http/wpt/workers/promise-unhandled-rejection.any.js: Added. (promise_test): * http/wpt/workers/promise-unhandled-rejection.any.worker-expected.txt: Added. * http/wpt/workers/promise-unhandled-rejection.any.worker.html: Added. * js/dom/unhandled-promise-rejection-basic-in-workers-expected.txt: Added. * js/dom/unhandled-promise-rejection-basic-in-workers.html: Added. * js/dom/unhandled-promise-rejection-bindings-type-error-in-workers-expected.txt: Added. * js/dom/unhandled-promise-rejection-bindings-type-error-in-workers.html: Added. * js/dom/unhandled-promise-rejection-handle-during-event-in-workers-expected.txt: Added. * js/dom/unhandled-promise-rejection-handle-during-event-in-workers.html: Added. * js/dom/unhandled-promise-rejection-handle-in-handler-in-workers-expected.txt: Added. * js/dom/unhandled-promise-rejection-handle-in-handler-in-workers.html: Added. * js/dom/unhandled-promise-rejection-handle-in-workers-expected.txt: Added. * js/dom/unhandled-promise-rejection-handle-in-workers.html: Added. * js/dom/unhandled-promise-rejection-order-in-workers-expected.txt: Added. * js/dom/unhandled-promise-rejection-order-in-workers.html: Added. * js/resources/unhandled-promise-rejection-basic-in-workers.js: Added. (global.onunhandledrejection): * js/resources/unhandled-promise-rejection-bindings-type-error-in-workers.js: Added. (global.onunhandledrejection): (catch): (setTimeout): * js/resources/unhandled-promise-rejection-handle-during-event-in-workers.js: Added. (global.onunhandledrejection): * js/resources/unhandled-promise-rejection-handle-in-handler-in-workers.js: Added. (global.onunhandledrejection): (global.onrejectionhandled): * js/resources/unhandled-promise-rejection-handle-in-workers.js: Added. (global.onunhandledrejection): (global.onrejectionhandled): * js/resources/unhandled-promise-rejection-order-in-workers.js: Added. (global.onunhandledrejection): Canonical link: https://commits.webkit.org/203641@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234846 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-08-14 13:04:43 +00:00
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
worker = startWorker('../resources/unhandled-promise-rejection-order-in-workers.js');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>