mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-25 16:47:29 +09:00
No issue - Throw error when resolving or rejecting promise returned by async function with testing function
Based-on: m-c 1418106
This commit is contained in:
parent
531906eb87
commit
0216108195
3 changed files with 20 additions and 0 deletions
|
|
@ -2577,6 +2577,13 @@ js::CreatePromiseObjectForAsync(JSContext* cx, HandleValue generatorVal)
|
||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
js::IsPromiseForAsync(JSObject* promise)
|
||||||
|
{
|
||||||
|
return promise->is<PromiseObject>() &&
|
||||||
|
PromiseHasAnyFlag(promise->as<PromiseObject>(), PROMISE_FLAG_ASYNC);
|
||||||
|
}
|
||||||
|
|
||||||
// ES 2018 draft 25.5.5.2 steps 3.f, 3.g.
|
// ES 2018 draft 25.5.5.2 steps 3.f, 3.g.
|
||||||
MOZ_MUST_USE bool
|
MOZ_MUST_USE bool
|
||||||
js::AsyncFunctionThrown(JSContext* cx, Handle<PromiseObject*> resultPromise)
|
js::AsyncFunctionThrown(JSContext* cx, Handle<PromiseObject*> resultPromise)
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,9 @@ PromiseResolve(JSContext* cx, HandleObject constructor, HandleValue value);
|
||||||
MOZ_MUST_USE PromiseObject*
|
MOZ_MUST_USE PromiseObject*
|
||||||
CreatePromiseObjectForAsync(JSContext* cx, HandleValue generatorVal);
|
CreatePromiseObjectForAsync(JSContext* cx, HandleValue generatorVal);
|
||||||
|
|
||||||
|
MOZ_MUST_USE bool
|
||||||
|
IsPromiseForAsync(JSObject* promise);
|
||||||
|
|
||||||
MOZ_MUST_USE bool
|
MOZ_MUST_USE bool
|
||||||
AsyncFunctionReturned(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue value);
|
AsyncFunctionReturned(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue value);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1398,6 +1398,11 @@ ResolvePromise(JSContext* cx, unsigned argc, Value* vp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IsPromiseForAsync(promise)) {
|
||||||
|
JS_ReportErrorASCII(cx, "async function's promise shouldn't be manually resolved");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool result = JS::ResolvePromise(cx, promise, resolution);
|
bool result = JS::ResolvePromise(cx, promise, resolution);
|
||||||
if (result)
|
if (result)
|
||||||
args.rval().setUndefined();
|
args.rval().setUndefined();
|
||||||
|
|
@ -1425,6 +1430,11 @@ RejectPromise(JSContext* cx, unsigned argc, Value* vp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IsPromiseForAsync(promise)) {
|
||||||
|
JS_ReportErrorASCII(cx, "async function's promise shouldn't be manually rejected");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool result = JS::RejectPromise(cx, promise, reason);
|
bool result = JS::RejectPromise(cx, promise, reason);
|
||||||
if (result)
|
if (result)
|
||||||
args.rval().setUndefined();
|
args.rval().setUndefined();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue