nsresult XRE_InitParentProcess(int aArgc, char* aArgv[], MainFunction aMainFunction, void* aMainFunctionData) { NS_ENSURE_ARG_MIN(aArgc, 1); NS_ENSURE_ARG_POINTER(aArgv); NS_ENSURE_ARG_POINTER(aArgv[0]); // Set main thread before we initialize the profiler NS_SetMainThread(); mozilla::LogModule::Init(); AUTO_PROFILER_INIT; ScopedXREEmbed embed; gArgc = aArgc; gArgv = aArgv; nsresult rv = XRE_InitCommandLine(gArgc, gArgv); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; { embed.Start(); nsCOMPtr<nsIAppShell> appShell(do_GetService(kAppShellCID)); NS_ENSURE_TRUE(appShell, NS_ERROR_FAILURE); if (aMainFunction) { nsCOMPtr<nsIRunnable> runnable = new MainFunctionRunnable(aMainFunction, aMainFunctionData); NS_ENSURE_TRUE(runnable, NS_ERROR_OUT_OF_MEMORY); nsresult rv = NS_DispatchToCurrentThread(runnable); NS_ENSURE_SUCCESS(rv, rv); } // Do event loop if (NS_FAILED(appShell->Run())) { NS_WARNING("Failed to run appshell"); return NS_ERROR_FAILURE; } } return XRE_DeinitCommandLine(); }
nsresult XRE_InitParentProcess(int aArgc, char* aArgv[], MainFunction aMainFunction, void* aMainFunctionData) { NS_ENSURE_ARG_MIN(aArgc, 1); NS_ENSURE_ARG_POINTER(aArgv); NS_ENSURE_ARG_POINTER(aArgv[0]); int rv = XRE_InitCommandLine(aArgc, aArgv); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; ScopedXREEmbed embed; { embed.Start(); nsCOMPtr<nsIAppShell> appShell(do_GetService(kAppShellCID)); NS_ENSURE_TRUE(appShell, NS_ERROR_FAILURE); if (aMainFunction) { nsCOMPtr<nsIRunnable> runnable = new MainFunctionRunnable(aMainFunction, aMainFunctionData); NS_ENSURE_TRUE(runnable, NS_ERROR_OUT_OF_MEMORY); nsresult rv = NS_DispatchToCurrentThread(runnable); NS_ENSURE_SUCCESS(rv, rv); } // Do event loop if (NS_FAILED(appShell->Run())) { NS_WARNING("Failed to run appshell"); return NS_ERROR_FAILURE; } } return XRE_DeinitCommandLine(); }