nsresult ProxyAutoConfig::SetupJS() { mJSNeedsSetup = false; NS_ABORT_IF_FALSE(!sRunning, "JIT is running"); delete mJSRuntime; mJSRuntime = nullptr; if (mPACScript.IsEmpty()) return NS_ERROR_FAILURE; mJSRuntime = JSRuntimeWrapper::Create(); if (!mJSRuntime) return NS_ERROR_FAILURE; JSAutoRequest ar(mJSRuntime->Context()); JSAutoCompartment ac(mJSRuntime->Context(), mJSRuntime->Global()); sRunning = this; JSScript *script = JS_CompileScript(mJSRuntime->Context(), mJSRuntime->Global(), mPACScript.get(), mPACScript.Length(), mPACURI.get(), 1); if (!script || !JS_ExecuteScript(mJSRuntime->Context(), mJSRuntime->Global(), script, nullptr)) { nsString alertMessage(NS_LITERAL_STRING("PAC file failed to install from ")); alertMessage += NS_ConvertUTF8toUTF16(mPACURI); PACLogToConsole(alertMessage); sRunning = nullptr; return NS_ERROR_FAILURE; } sRunning = nullptr; mJSRuntime->SetOK(); nsString alertMessage(NS_LITERAL_STRING("PAC file installed from ")); alertMessage += NS_ConvertUTF8toUTF16(mPACURI); PACLogToConsole(alertMessage); // we don't need these now mPACScript.Truncate(); mPACURI.Truncate(); return NS_OK; }
nsresult ProxyAutoConfig::SetupJS() { mJSNeedsSetup = false; NS_ABORT_IF_FALSE(!sRunning, "JIT is running"); delete mJSRuntime; mJSRuntime = nullptr; if (mPACScript.IsEmpty()) return NS_ERROR_FAILURE; mJSRuntime = JSRuntimeWrapper::Create(); if (!mJSRuntime) return NS_ERROR_FAILURE; JSAutoRequest ar(mJSRuntime->Context()); JSAutoCompartment ac(mJSRuntime->Context(), mJSRuntime->Global()); // check if this is a data: uri so that we don't spam the js console with // huge meaningless strings. this is not on the main thread, so it can't // use nsIRUI scheme methods bool isDataURI = nsDependentCSubstring(mPACURI, 0, 5).LowerCaseEqualsASCII("data:", 5); sRunning = this; JS::Rooted<JSObject *> global(mJSRuntime->Context(), mJSRuntime->Global()); JS::CompileOptions options(mJSRuntime->Context()); options.setFileAndLine(mPACURI.get(), 1); JSScript *script = JS_CompileScript(mJSRuntime->Context(), global, mPACScript.get(), mPACScript.Length(), options); if (!script || !JS_ExecuteScript(mJSRuntime->Context(), mJSRuntime->Global(), script, nullptr)) { nsString alertMessage(NS_LITERAL_STRING("PAC file failed to install from ")); if (isDataURI) { alertMessage += NS_LITERAL_STRING("data: URI"); } else { alertMessage += NS_ConvertUTF8toUTF16(mPACURI); } PACLogToConsole(alertMessage); sRunning = nullptr; return NS_ERROR_FAILURE; } sRunning = nullptr; mJSRuntime->SetOK(); nsString alertMessage(NS_LITERAL_STRING("PAC file installed from ")); if (isDataURI) { alertMessage += NS_LITERAL_STRING("data: URI"); } else { alertMessage += NS_ConvertUTF8toUTF16(mPACURI); } PACLogToConsole(alertMessage); // we don't need these now mPACScript.Truncate(); mPACURI.Truncate(); return NS_OK; }