Bug 262743
| Summary: | Have the ability to dispatch NativePromise directly to an EventLoop | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Jean-Yves Avenard [:jya] <jean-yves.avenard> |
| Component: | DOM | Assignee: | Jean-Yves Avenard [:jya] <jean-yves.avenard> |
| Status: | NEW | ||
| Severity: | Normal | CC: | webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | WebKit Nightly Build | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
Jean-Yves Avenard [:jya]
Currently, a NativePromise takes a SerialFunctionDispatcher.
There are cases where we want when the NativePromise settle to resolve the DOMPromise on a particular event loop.
Right now, this requires to call `queueTaskKeepingObjectAlive` within the resolve/reject callback like so
https://searchfox.org/wubkat/rev/ba90462eb61f1fb629a567d01716a8e20c261060/Source/WebCore/Modules/webaudio/BaseAudioContext.cpp#303-318
```
p->whenSettled(RunLoop::main(), [this, activity = makePendingActivity(*this), successCallback = WTFMove(successCallback), errorCallback = WTFMove(errorCallback), promise = WTFMove(promise)] (DecodingTaskPromise::Result&& result) mutable {
queueTaskKeepingObjectAlive(*this, TaskSource::InternalAsyncTask, [successCallback = WTFMove(successCallback), errorCallback = WTFMove(errorCallback), promise = WTFMove(promise), result = WTFMove(result)]() mutable {
if (!result) {
if (promise)
promise.value()->reject(Exception { result.error(), "Decoding failed"_s });
if (errorCallback)
errorCallback->handleEvent(nullptr);
return;
}
auto audioBuffer = WTFMove(result.value());
if (promise)
promise.value()->resolve<IDLInterface<AudioBuffer>>(audioBuffer.get());
if (successCallback)
successCallback->handleEvent(audioBuffer.ptr());
});
});
```
`
Ideally, you would be able to get a ref-counted SerialFunctionDispatcher from the ActiveDOMOBject where the dispatch method would perform the same as `queueTaskKeepingObjectAlive` (wrap the dispatched runnable into a EventLoopTask and dispatch it.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/116548105>