From 2aa4a82499d4becd2284cdb482213d541b8804dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 16:29:10 +0200 Subject: Adding upstream version 86.0.1. Signed-off-by: Daniel Baumann --- xpcom/build/nsXULAppAPI.h | 501 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 501 insertions(+) create mode 100644 xpcom/build/nsXULAppAPI.h (limited to 'xpcom/build/nsXULAppAPI.h') diff --git a/xpcom/build/nsXULAppAPI.h b/xpcom/build/nsXULAppAPI.h new file mode 100644 index 0000000000..a143bb10be --- /dev/null +++ b/xpcom/build/nsXULAppAPI.h @@ -0,0 +1,501 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef _nsXULAppAPI_h__ +#define _nsXULAppAPI_h__ + +#include "js/TypeDecls.h" +#include "mozilla/ArrayUtils.h" +#include "mozilla/TimeStamp.h" +#include "nscore.h" +#include "xrecore.h" + +#if defined(MOZ_WIDGET_ANDROID) +# include +#endif + +class JSString; +class MessageLoop; +class nsIDirectoryServiceProvider; +class nsIFile; +class nsISupports; +struct JSContext; +struct XREChildData; +struct XREShellData; + +namespace mozilla { +class XREAppData; +struct BootstrapConfig; +struct Module; +} // namespace mozilla + +/** + * A directory service key which provides the platform-correct "application + * data" directory as follows, where $name and $vendor are as defined above and + * $vendor is optional: + * + * Windows: + * HOME = Documents and Settings\$USER\Application Data + * UAppData = $HOME[\$vendor]\$name + * + * Unix: + * HOME = ~ + * UAppData = $HOME/.[$vendor/]$name + * + * Mac: + * HOME = ~ + * UAppData = $HOME/Library/Application Support/$name + * + * Note that the "profile" member above will change the value of UAppData as + * follows: + * + * Windows: + * UAppData = $HOME\$profile + * + * Unix: + * UAppData = $HOME/.$profile + * + * Mac: + * UAppData = $HOME/Library/Application Support/$profile + */ +#define XRE_USER_APP_DATA_DIR "UAppData" + +/** + * A directory service key which provides the executable file used to + * launch the current process. This is the same value returned by the + * XRE_GetBinaryPath function defined below. + */ +#define XRE_EXECUTABLE_FILE "XREExeF" + +/** + * A directory service key which specifies the profile + * directory. Unlike the NS_APP_USER_PROFILE_50_DIR key, this key may + * be available when the profile hasn't been "started", or after is + * has been shut down. If the application is running without a + * profile, such as when showing the profile manager UI, this key will + * not be available. This key is provided by the XUL apprunner or by + * the aAppDirProvider object passed to XRE_InitEmbedding. + */ +#define NS_APP_PROFILE_DIR_STARTUP "ProfDS" + +/** + * A directory service key which specifies the profile + * directory. Unlike the NS_APP_USER_PROFILE_LOCAL_50_DIR key, this key may + * be available when the profile hasn't been "started", or after is + * has been shut down. If the application is running without a + * profile, such as when showing the profile manager UI, this key will + * not be available. This key is provided by the XUL apprunner or by + * the aAppDirProvider object passed to XRE_InitEmbedding. + */ +#define NS_APP_PROFILE_LOCAL_DIR_STARTUP "ProfLDS" + +/** + * A directory service key which specifies the system extension + * parent directory containing platform-specific extensions. + * This key may not be available on all platforms. + */ +#define XRE_SYS_LOCAL_EXTENSION_PARENT_DIR "XRESysLExtPD" + +/** + * A directory service key which specifies the system extension + * parent directory containing platform-independent extensions. + * This key may not be available on all platforms. + * Additionally, the directory may be equal to that returned by + * XRE_SYS_LOCAL_EXTENSION_PARENT_DIR on some platforms. + */ +#define XRE_SYS_SHARE_EXTENSION_PARENT_DIR "XRESysSExtPD" + +#if defined(XP_UNIX) || defined(XP_MACOSX) +/** + * Directory service keys for the system-wide and user-specific + * directories where native manifests used by the WebExtensions + * native messaging and managed storage features are found. + */ +# define XRE_SYS_NATIVE_MANIFESTS "XRESysNativeManifests" +# define XRE_USER_NATIVE_MANIFESTS "XREUserNativeManifests" +#endif + +/** + * A directory service key which specifies the user system extension + * parent directory. + */ +#define XRE_USER_SYS_EXTENSION_DIR "XREUSysExt" + +/** + * A directory service key which specifies a directory where temporary + * system extensions can be loaded from during development. + */ +#define XRE_USER_SYS_EXTENSION_DEV_DIR "XRESysExtDev" + +/** + * A directory service key which specifies the distribution specific files for + * the application. + */ +#define XRE_APP_DISTRIBUTION_DIR "XREAppDist" + +/** + * A directory service key which specifies the location for system add-ons. + */ +#define XRE_APP_FEATURES_DIR "XREAppFeat" + +/** + * A directory service key which specifies the location for app dir add-ons. + * Should be a synonym for XCurProcD everywhere except in tests. + */ +#define XRE_ADDON_APP_DIR "XREAddonAppDir" + +/** + * A directory service key which specifies the distribution specific files for + * the application unique for each user. + * It's located at /run/user/$UID// + */ +#define XRE_USER_RUNTIME_DIR "XREUserRunTimeDir" + +/** + * A directory service key which provides the update directory. Callers should + * fall back to appDir. + * Windows: If vendor name exists: + * ProgramData\\updates\ + * + * + * If vendor name doesn't exist, but product name exists: + * ProgramData\\updates\ + * + * + * If neither vendor nor product name exists: + * ProgramData\Mozilla\updates + * + * Mac: ~/Library/Caches/Mozilla/updates/ + * + * All others: Parent directory of XRE_EXECUTABLE_FILE. + */ +#define XRE_UPDATE_ROOT_DIR "UpdRootD" + +/** + * A directory service key which provides the *old* update directory. This + * path should only be used when data needs to be migrated from the old update + * directory. + * Windows: If vendor name exists: + * Documents and Settings\\Local Settings\Application Data\ + * \updates\ + * + * + * If vendor name doesn't exist, but product name exists: + * Documents and Settings\\Local Settings\Application Data\ + * \updates\ + * + * + * If neither vendor nor product name exists: + * Documents and Settings\\Local Settings\Application Data\ + * Mozilla\updates + * + * This path does not exist on other operating systems + */ +#define XRE_OLD_UPDATE_ROOT_DIR "OldUpdRootD" + +/** + * Begin an XUL application. Does not return until the user exits the + * application. + * + * @param argc/argv Command-line parameters to pass to the application. On + * Windows, these should be in UTF8. On unix-like platforms + * these are in the "native" character set. + * + * @param aConfig Information about the application to be run. + * + * @return A native result code suitable for returning from main(). + * + * @note If the binary is linked against the standalone XPCOM glue, + * XPCOMGlueStartup() should be called before this method. + */ +XRE_API(int, XRE_main, + (int argc, char* argv[], const mozilla::BootstrapConfig& aConfig)) + +/** + * Given a path relative to the current working directory (or an absolute + * path), return an appropriate nsIFile object. + * + * @note Pass UTF8 strings on Windows... native charset on other platforms. + */ +XRE_API(nsresult, XRE_GetFileFromPath, (const char* aPath, nsIFile** aResult)) + +/** + * Get the path of the running application binary and store it in aResult. + */ +XRE_API(nsresult, XRE_GetBinaryPath, (nsIFile * *aResult)) + +/** + * Get the static module built in to libxul. + */ +XRE_API(const mozilla::Module*, XRE_GetStaticModule, ()) + +/** + * Lock a profile directory using platform-specific semantics. + * + * @param aDirectory The profile directory to lock. + * @param aLockObject An opaque lock object. The directory will remain locked + * as long as the XPCOM reference is held. + */ +XRE_API(nsresult, XRE_LockProfileDirectory, + (nsIFile * aDirectory, nsISupports** aLockObject)) + +/** + * Initialize libXUL for embedding purposes. + * + * @param aLibXULDirectory The directory in which the libXUL shared library + * was found. + * @param aAppDirectory The directory in which the application components + * and resources can be found. This will map to + * the NS_OS_CURRENT_PROCESS_DIR directory service + * key. + * @param aAppDirProvider A directory provider for the application. This + * provider will be aggregated by a libxul provider + * which will provide the base required GRE keys. + * + * @note This function must be called from the "main" thread. + * + * @note At the present time, this function may only be called once in + * a given process. Use XRE_TermEmbedding to clean up and free + * resources allocated by XRE_InitEmbedding. + */ + +XRE_API(nsresult, XRE_InitEmbedding2, + (nsIFile * aLibXULDirectory, nsIFile* aAppDirectory, + nsIDirectoryServiceProvider* aAppDirProvider)) + +/** + * Register static XPCOM component information. + * This method may be called at any time before or after XRE_main or + * XRE_InitEmbedding. + */ +XRE_API(nsresult, XRE_AddStaticComponent, (const mozilla::Module* aComponent)) + +/** + * Register XPCOM components found in an array of files/directories. + * This method may be called at any time before or after XRE_main or + * XRE_InitEmbedding. + * + * @param aFiles An array of files or directories. + * @param aFileCount the number of items in the aFiles array. + * @note appdir/components is registered automatically. + * + * NS_APP_LOCATION specifies a location to search for binary XPCOM + * components as well as component/chrome manifest files. + * + * NS_EXTENSION_LOCATION excludes binary XPCOM components but allows other + * manifest instructions. + * + * NS_SKIN_LOCATION specifies a location to search for chrome manifest files + * which are only allowed to register skin packages. + */ +enum NSLocationType { + NS_APP_LOCATION, + NS_EXTENSION_LOCATION, + NS_SKIN_LOCATION, + NS_BOOTSTRAPPED_LOCATION +}; + +XRE_API(nsresult, XRE_AddManifestLocation, + (NSLocationType aType, nsIFile* aLocation)) + +/** + * Register XPCOM components found in a JAR. + * This is similar to XRE_AddManifestLocation except the file specified + * must be a zip archive with a manifest named chrome.manifest + * This method may be called at any time before or after XRE_main or + * XRE_InitEmbedding. + * + * @param aFiles An array of files or directories. + * @param aFileCount the number of items in the aFiles array. + * @note appdir/components is registered automatically. + * + * NS_COMPONENT_LOCATION specifies a location to search for binary XPCOM + * components as well as component/chrome manifest files. + * + * NS_SKIN_LOCATION specifies a location to search for chrome manifest files + * which are only allowed to register skin packages. + */ +XRE_API(nsresult, XRE_AddJarManifestLocation, + (NSLocationType aType, nsIFile* aLocation)) + +/** + * Fire notifications to inform the toolkit about a new profile. This + * method should be called after XRE_InitEmbedding if the embedder + * wishes to run with a profile. Normally the embedder should call + * XRE_LockProfileDirectory to lock the directory before calling this + * method. + * + * @note There are two possibilities for selecting a profile: + * + * 1) Select the profile before calling XRE_InitEmbedding. The aAppDirProvider + * object passed to XRE_InitEmbedding should provide the + * NS_APP_USER_PROFILE_50_DIR key, and may also provide the following keys: + * - NS_APP_USER_PROFILE_LOCAL_50_DIR + * - NS_APP_PROFILE_DIR_STARTUP + * - NS_APP_PROFILE_LOCAL_DIR_STARTUP + * In this scenario XRE_NotifyProfile should be called immediately after + * XRE_InitEmbedding. Component registration information will be stored in + * the profile and JS components may be stored in the fastload cache. + * + * 2) Select a profile some time after calling XRE_InitEmbedding. In this case + * the embedder must install a directory service provider which provides + * NS_APP_USER_PROFILE_50_DIR and optionally + * NS_APP_USER_PROFILE_LOCAL_50_DIR. Component registration information + * will be stored in the application directory and JS components will not + * fastload. + */ +XRE_API(void, XRE_NotifyProfile, ()) + +/** + * Terminate embedding started with XRE_InitEmbedding or XRE_InitEmbedding2 + */ +XRE_API(void, XRE_TermEmbedding, ()) + +/** + * Parse an INI file (application.ini or override.ini) into an existing + * nsXREAppData structure. + * + * @param aINIFile The INI file to parse + * @param aAppData The nsXREAppData structure to fill. + */ +XRE_API(nsresult, XRE_ParseAppData, + (nsIFile * aINIFile, mozilla::XREAppData& aAppData)) + +enum GeckoProcessType { +#define GECKO_PROCESS_TYPE(enum_name, string_name, xre_name, bin_type) \ + GeckoProcessType_##enum_name, +#include "mozilla/GeckoProcessTypes.h" +#undef GECKO_PROCESS_TYPE + GeckoProcessType_End, + GeckoProcessType_Invalid = GeckoProcessType_End +}; + +static const char* const kGeckoProcessTypeString[] = { +#define GECKO_PROCESS_TYPE(enum_name, string_name, xre_name, bin_type) \ + string_name, +#include "mozilla/GeckoProcessTypes.h" +#undef GECKO_PROCESS_TYPE +}; + +static_assert(MOZ_ARRAY_LENGTH(kGeckoProcessTypeString) == GeckoProcessType_End, + "Array length mismatch"); + +XRE_API(const char*, XRE_GeckoProcessTypeToString, + (GeckoProcessType aProcessType)) +XRE_API(const char*, XRE_ChildProcessTypeToAnnotation, + (GeckoProcessType aProcessType)) + +#if defined(MOZ_WIDGET_ANDROID) +struct XRE_AndroidChildFds { + int mPrefsFd; + int mPrefMapFd; + int mIpcFd; + int mCrashFd; + int mCrashAnnotationFd; +}; + +XRE_API(void, XRE_SetAndroidChildFds, + (JNIEnv * env, const XRE_AndroidChildFds& fds)) +#endif // defined(MOZ_WIDGET_ANDROID) + +XRE_API(void, XRE_SetProcessType, (const char* aProcessTypeString)) + +XRE_API(nsresult, XRE_InitChildProcess, + (int aArgc, char* aArgv[], const XREChildData* aChildData)) + +/** + * Return the GeckoProcessType of the current process. + */ +XRE_API(GeckoProcessType, XRE_GetProcessType, ()) + +/** + * Return the string representation of the GeckoProcessType of the current + * process. + */ +XRE_API(const char*, XRE_GetProcessTypeString, ()) + +/** + * Returns true when called in the e10s parent process. Does *NOT* return true + * when called in the main process if e10s is disabled. + */ +XRE_API(bool, XRE_IsE10sParentProcess, ()) + +/** + * Defines XRE_IsParentProcess, XRE_IsContentProcess, etc. + * + * XRE_IsParentProcess is unique in that it returns true when called in + * the e10s parent process or called in the main process when e10s is + * disabled. + */ +#define GECKO_PROCESS_TYPE(enum_name, string_name, xre_name, bin_type) \ + XRE_API(bool, XRE_Is##xre_name##Process, ()) +#include "mozilla/GeckoProcessTypes.h" +#undef GECKO_PROCESS_TYPE + +XRE_API(bool, XRE_IsSocketProcess, ()) + +/** + * Returns true if the appshell should run its own native event loop. Returns + * false if we should rely solely on the Gecko event loop. + */ +XRE_API(bool, XRE_UseNativeEventProcessing, ()) + +typedef void (*MainFunction)(void* aData); + +XRE_API(nsresult, XRE_InitParentProcess, + (int aArgc, char* aArgv[], MainFunction aMainFunction, + void* aMainFunctionExtraData)) + +XRE_API(int, XRE_RunIPDLTest, (int aArgc, char* aArgv[])) + +XRE_API(nsresult, XRE_RunAppShell, ()) + +XRE_API(nsresult, XRE_InitCommandLine, (int aArgc, char* aArgv[])) + +XRE_API(nsresult, XRE_DeinitCommandLine, ()) + +XRE_API(void, XRE_ShutdownChildProcess, ()) + +XRE_API(MessageLoop*, XRE_GetIOMessageLoop, ()) + +XRE_API(bool, XRE_SendTestShellCommand, + (JSContext * aCx, JSString* aCommand, JS::Value* aCallback)) +XRE_API(bool, XRE_ShutdownTestShell, ()) + +XRE_API(void, XRE_InstallX11ErrorHandler, ()) + +XRE_API(void, XRE_TelemetryAccumulate, (int aID, uint32_t aSample)) + +XRE_API(void, XRE_StartupTimelineRecord, (int aEvent, mozilla::TimeStamp aWhen)) + +XRE_API(void, XRE_InitOmnijar, (nsIFile * aGreOmni, nsIFile* aAppOmni)) +XRE_API(void, XRE_StopLateWriteChecks, (void)) + +XRE_API(void, XRE_EnableSameExecutableForContentProc, ()) + +namespace mozilla { +enum class BinPathType { Self, PluginContainer }; +} +XRE_API(mozilla::BinPathType, XRE_GetChildProcBinPathType, + (GeckoProcessType aProcessType)); + +XRE_API(int, XRE_XPCShellMain, + (int argc, char** argv, char** envp, const XREShellData* aShellData)) + +#ifdef LIBFUZZER +# include "FuzzerRegistry.h" + +XRE_API(void, XRE_LibFuzzerSetDriver, (LibFuzzerDriver)) + +#endif // LIBFUZZER + +#ifdef MOZ_ENABLE_FORKSERVER + +XRE_API(int, XRE_ForkServer, (int* aArgc, char*** aArgv)) + +#endif // MOZ_ENABLE_FORKSERVER + +#endif // _nsXULAppAPI_h__ -- cgit v1.2.3