tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mdom/bindings/CallbackObject.cpp | 35+++++++++++++++++++++++++++++++++++
Mdom/bindings/CallbackObject.h | 8++++++++
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; }