mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-26 09:18:37 +09:00
Issue #2089 - Only create result Promises in Promise#then and Promise#catch if it's used or the creation is otherwise observable
Based-on: m-c 1342070
This commit is contained in:
parent
ed8af362be
commit
6e2201d3a8
4 changed files with 147 additions and 29 deletions
|
|
@ -4994,7 +4994,8 @@ JS::RejectPromise(JSContext* cx, JS::HandleObject promiseObj, JS::HandleValue re
|
|||
static bool
|
||||
CallOriginalPromiseThenImpl(JSContext* cx, JS::HandleObject promiseObj,
|
||||
JS::HandleObject onResolvedObj_, JS::HandleObject onRejectedObj_,
|
||||
JS::MutableHandleObject resultObj, bool createDependent)
|
||||
JS::MutableHandleObject resultObj,
|
||||
CreateDependentPromise createDependent)
|
||||
{
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
|
|
@ -5044,8 +5045,11 @@ JS::CallOriginalPromiseThen(JSContext* cx, JS::HandleObject promiseObj,
|
|||
JS::HandleObject onResolvedObj, JS::HandleObject onRejectedObj)
|
||||
{
|
||||
RootedObject resultPromise(cx);
|
||||
if (!CallOriginalPromiseThenImpl(cx, promiseObj, onResolvedObj, onRejectedObj, &resultPromise, true))
|
||||
if (!CallOriginalPromiseThenImpl(cx, promiseObj, onResolvedObj, onRejectedObj, &resultPromise,
|
||||
CreateDependentPromise::Always))
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
return resultPromise;
|
||||
}
|
||||
|
||||
|
|
@ -5054,7 +5058,8 @@ JS::AddPromiseReactions(JSContext* cx, JS::HandleObject promiseObj,
|
|||
JS::HandleObject onResolvedObj, JS::HandleObject onRejectedObj)
|
||||
{
|
||||
RootedObject resultPromise(cx);
|
||||
bool result = CallOriginalPromiseThenImpl(cx, promiseObj, onResolvedObj, onRejectedObj, &resultPromise, false);
|
||||
bool result = CallOriginalPromiseThenImpl(cx, promiseObj, onResolvedObj, onRejectedObj,
|
||||
&resultPromise, CreateDependentPromise::Never);
|
||||
MOZ_ASSERT(!resultPromise);
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue