diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index 82f58217ad8..07d121e7a07 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -1965,107 +1965,6 @@ nsJSContext::CallEventHandler(nsISupports* aTarget, JSObject* aScope, return rv; } -nsresult -nsJSContext::CallEventHandler(nsISupports* aTarget, JSObject* aScope, - JSObject* aHandler, nsIArray* aargv, - nsIVariant** arv) -{ - NS_ENSURE_TRUE(mIsInitialized, NS_ERROR_NOT_INITIALIZED); - - if (!mScriptsEnabled) { - return NS_OK; - } - - SAMPLE_LABEL("JS", "CallEventHandler"); - - nsAutoMicroTask mt; - xpc_UnmarkGrayObject(aScope); - xpc_UnmarkGrayObject(aHandler); - - XPCAutoRequest ar(mContext); - JSObject* target = nullptr; - nsresult rv = JSObjectFromInterface(aTarget, aScope, &target); - NS_ENSURE_SUCCESS(rv, rv); - - JS::AutoObjectRooter targetVal(mContext, target); - jsval rval = JSVAL_VOID; - - // This one's a lot easier than EvaluateString because we don't have to - // hassle with principals: they're already compiled into the JS function. - // xxxmarkh - this comment is no longer true - principals are not used at - // all now, and never were in some cases. - - nsCxPusher pusher; - if (!pusher.Push(mContext, true)) - return NS_ERROR_FAILURE; - - // check if the event handler can be run on the object in question - rv = sSecurityManager->CheckFunctionAccess(mContext, aHandler, target); - - nsJSContext::TerminationFuncHolder holder(this); - - if (NS_SUCCEEDED(rv)) { - // Convert args to jsvals. - uint32_t argc = 0; - jsval *argv = nullptr; - - JSObject *funobj = aHandler; - jsval funval = OBJECT_TO_JSVAL(funobj); - JSAutoCompartment ac(mContext, funobj); - if (!JS_WrapObject(mContext, &target)) { - ReportPendingException(); - return NS_ERROR_FAILURE; - } - - Maybe tempStorage; - - // Use |target| as the scope for wrapping the arguments, since aScope is - // the safe scope in many cases, which isn't very useful. Wrapping aTarget - // was OK because those typically have PreCreate methods that give them the - // right scope anyway, and we want to make sure that the arguments end up - // in the same scope as aTarget. - rv = ConvertSupportsTojsvals(aargv, target, &argc, &argv, tempStorage); - NS_ENSURE_SUCCESS(rv, rv); - for (uint32_t i = 0; i < argc; i++) { - if (!JSVAL_IS_PRIMITIVE(argv[i])) { - xpc_UnmarkGrayObject(JSVAL_TO_OBJECT(argv[i])); - } - } - - ++mExecuteDepth; - bool ok = ::JS_CallFunctionValue(mContext, target, - funval, argc, argv, &rval); - --mExecuteDepth; - - if (!ok) { - // Don't pass back results from failed calls. - rval = JSVAL_VOID; - - // Tell the caller that the handler threw an error. - rv = NS_ERROR_FAILURE; - } else if (rval == JSVAL_NULL) { - *arv = nullptr; - } else if (!JS_WrapValue(mContext, &rval)) { - rv = NS_ERROR_FAILURE; - } else { - rv = nsContentUtils::XPConnect()->JSToVariant(mContext, rval, arv); - } - - // Tell XPConnect about any pending exceptions. This is needed - // to avoid dropping JS exceptions in case we got here through - // nested calls through XPConnect. - if (NS_FAILED(rv)) - ReportPendingException(); - } - - pusher.Pop(); - - // ScriptEvaluated needs to come after we pop the stack - ScriptEvaluated(true); - - return rv; -} - nsresult nsJSContext::BindCompiledEventHandler(nsISupports* aTarget, JSObject* aScope, JSObject* aHandler,