commit fad341dfd267d8beca199ed0561e1bee4fee3af2
parent fa35c395d66b02787a6eef65e478a37f34e7fc9d
Author: Matthew Gaudet <mgaudet@mozilla.com>
Date: Wed, 1 Oct 2025 21:38:49 +0000
Bug 1983154 - Add CallSetup that doesn't take a CallbackObjectBase r=smaug
Instead, get required information directly.
Differential Revision: https://phabricator.services.mozilla.com/D261175
Diffstat:
2 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/dom/bindings/CallbackObject.cpp b/dom/bindings/CallbackObject.cpp
@@ -368,6 +368,41 @@ CallSetup::CallSetup(CallbackObjectBase* aCallback, ErrorResult& aRv,
webIDLCallerPrincipal, aExecutionReason, aRv);
}
+CallSetup::CallSetup(JS::Handle<JSObject*> aCallbackGlobal,
+ nsIGlobalObject* aIncumbentGlobal,
+ JS::Handle<JSObject*> aCreationStack, ErrorResult& aRv,
+ const char* aExecutionReason,
+ CallbackObjectBase::ExceptionHandling aExceptionHandling,
+ JS::Realm* aRealm)
+ : mCx(nullptr),
+ mRealm(aRealm),
+ mErrorResult(aRv),
+ mExceptionHandling(aExceptionHandling),
+ mIsMainThread(NS_IsMainThread()) {
+ MOZ_ASSERT_IF(aExceptionHandling == CallbackFunction::eReportExceptions ||
+ aExceptionHandling == CallbackFunction::eRethrowExceptions,
+ !aRealm);
+
+ MOZ_RELEASE_ASSERT(aCallbackGlobal);
+ nsIGlobalObject* globalObject = GetActiveGlobalObjectForCall(
+ aCallbackGlobal, mIsMainThread, /*aIsJSImplementedWebIDL=*/false, aRv);
+ if (!globalObject) {
+ MOZ_ASSERT(aRv.Failed());
+ return;
+ }
+
+ // Initial Validation Pass
+ if (!CheckBeforeExecution(globalObject, aCallbackGlobal,
+ /*aIsJSImplementedWebIDL=*/false, aRv)) {
+ return;
+ }
+
+ // Start the execution setup -- if it succeeds, this will set mCx
+ SetupForExecution(globalObject, aIncumbentGlobal, aCallbackGlobal,
+ aCallbackGlobal, aCreationStack,
+ /*aWebIDLCallerPrincipal=*/nullptr, aExecutionReason, aRv);
+}
+
bool CallSetup::ShouldRethrowException(JS::Handle<JS::Value> aException) {
if (mExceptionHandling == CallbackObjectBase::eRethrowExceptions) {
MOZ_ASSERT(!mRealm);
diff --git a/dom/bindings/CallbackObject.h b/dom/bindings/CallbackObject.h
@@ -257,6 +257,14 @@ class MOZ_STACK_CLASS CallSetup {
const char* aExecutionReason,
CallbackObjectBase::ExceptionHandling aExceptionHandling,
JS::Realm* aRealm = nullptr, bool aIsJSImplementedWebIDL = false);
+
+ CallSetup(JS::Handle<JSObject*> aCallbackGlobal,
+ nsIGlobalObject* aIncumbentGlobal,
+ JS::Handle<JSObject*> aCreationStack, ErrorResult& aRv,
+ const char* aExecutionReason,
+ CallbackObjectBase::ExceptionHandling aExceptionHandling,
+ JS::Realm* aRealm = nullptr);
+
MOZ_CAN_RUN_SCRIPT ~CallSetup();
JSContext* GetContext() const { return mCx; }