Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
#include "nsISupports.idl"
%{C++
namespace mozilla {
// Simple C++ getter for nsIXULRuntime::browserTabsRemoteAutostart
// This getter is a temporary function that checks for special
// conditions in which e10s support is not great yet, and should
// therefore be disabled. Bug 1065561 tracks its removal.
bool BrowserTabsRemoteAutostart();
uint32_t GetMaxWebProcessCount();
// Returns the value of the fission.autostart pref. Since fission can be
// disabled on a per-window basis, this should only be used when you need the
// global value of the pref. For other use cases, you should use
// nsILoadContext::UseRemoteSubframes instead. This will also check for special
// conditions, like safe mode, which may require fission to be disabled, or
// environment variables MOZ_FORCE_ENABLE_FISSION and MOZ_FORCE_DISABLE_FISSION,
// used by mach run to enable/disable fission regardless of pref settings.
bool FissionAutostart();
// Returns whether or not we are currently enrolled in the fission experiment.
bool FissionExperimentEnrolled();
// Returns true if FissionAutostart() is true or
// fission.disableSessionHistoryInParent is false.
bool SessionHistoryInParent();
// Returns true if SessionHistoryInParent() is true and
// browser.sessionstore.disable_platform_collection is false.
bool SessionStorePlatformCollection();
// Returns true if SessionHistoryInParent() returns true and
// fission.bfcacheInParent is true.
bool BFCacheInParent();
}
%}
/**
* Provides information about the XUL runtime.
* @status UNSTABLE - This interface is not frozen and will probably change in
* future releases. If you need this functionality to be
* stable/frozen, please contact Benjamin Smedberg.
*/
[scriptable, uuid(03602fac-fa3f-4a50-9baa-b88456fb4a0f)]
interface nsIXULRuntime : nsISupports
{
/**
* Whether the application was launched in safe mode.
*/
readonly attribute boolean inSafeMode;
/**
* The status of a given normandy experiment.
*/
cenum ExperimentStatus : 8 {
// The user is not actively enrolled in the experiment.
eExperimentStatusUnenrolled = 0,
// The user is enrolled in the control group, and should see the default
// behavior.
eExperimentStatusControl = 1,
// The user is enrolled in the treatment group, and should see the
// experimental behavior which is being tested.
eExperimentStatusTreatment = 2,
// The user was enrolled in the experiment, but became ineligible due to
// manually modifying a relevant preference.
eExperimentStatusDisqualified = 3,
// The user was selected for the phased Fission rollout.
eExperimentStatusRollout = 4,
eExperimentStatusCount,
};
// If you update this enum, don't forget to raise the limit in
// TelemetryEnvironmentTesting.sys.mjs and record the new value in
// environment.rst
cenum ContentWin32kLockdownState : 8 {
LockdownEnabled = 1, // no longer used
MissingWebRender = 2,
OperatingSystemNotSupported = 3,
PrefNotSet = 4, // no longer used
MissingRemoteWebGL = 5,
MissingNonNativeTheming = 6,
DisabledByEnvVar = 7, // - MOZ_ENABLE_WIN32K is set
DisabledBySafeMode = 8,
DisabledByE10S = 9, // - E10S is disabled for whatever reason
DisabledByUserPref = 10, // - The user manually set
// security.sandbox.content.win32k-disable to false
EnabledByUserPref = 11, // The user manually set
// security.sandbox.content.win32k-disable to true
DisabledByControlGroup =
12, // The user is in the Control Group, so it is disabled
EnabledByTreatmentGroup =
13, // The user is in the Treatment Group, so it is enabled
DisabledByDefault = 14, // The default value of the pref is false
EnabledByDefault = 15, // The default value of the pref is true
DecodersArentRemote = 16,
IncompatibleMitigationPolicy = 17, // Some incompatible Windows Exploit Mitigation policies are enabled
};
// This is the current value of the experiment for the session
readonly attribute nsIXULRuntime_ExperimentStatus win32kExperimentStatus;
// This will return what the browser thinks is the _current_ status of win32k lockdown
// but this should only be used for testing
readonly attribute nsIXULRuntime_ContentWin32kLockdownState win32kLiveStatusTestingOnly;
// This is the current value of win32k lockdown for the session. It is set at startup,
// and never changed.
readonly attribute nsIXULRuntime_ContentWin32kLockdownState win32kSessionStatus;
// NOTE: Please do not add new values to this enum without also updating the
// mapping in aboutSupport.js
cenum FissionDecisionStatus : 8 {
eFissionStatusUnknown = 0,
// Fission is disabled because the user is in the control group of a
// Normandy experiment.
eFissionExperimentControl = 1,
// Fission is enabled because the user is in the treatment group of a
// Normandy experiment.
eFissionExperimentTreatment = 2,
// Fission is disabled because the `MOZ_FORCE_DISABLE_E10S` environment
// variable is set.
eFissionDisabledByE10sEnv = 3,
// Fission is enabled because the `MOZ_FORCE_ENABLE_FISSION` environment
// variable is set.
eFissionEnabledByEnv = 4,
// Fission is disabled because the `MOZ_FORCE_DISABLE_FISSION` environment
// variable is set.
eFissionDisabledByEnv = 5,
// Fission is enabled because the "fission.autostart" preference is true
// by default.
eFissionEnabledByDefault = 7,
// Fission is disabled because the "fission.autostart" preference is false
// by default.
eFissionDisabledByDefault = 8,
// Fission is enabled because the "fission.autostart" preference was
// turned on by the user.
eFissionEnabledByUserPref = 9,
// Fission is enabled because the "fission.autostart" preference was
// turned on by the user.
eFissionDisabledByUserPref = 10,
// Fission is disabled because e10s is disabled for some other reason.
eFissionDisabledByE10sOther = 11,
// Fission is enabled by a Normandy phased rollout.
eFissionEnabledByRollout = 12,
};
/**
* Whether Fission should be automatically enabled for new browser windows.
* This may not match the value of the 'fission.autostart' pref.
*
* This value is guaranteed to remain constant for the length of a browser
* session.
*/
readonly attribute boolean fissionAutostart;
/**
* The deciding factor which caused Fission to be enabled or disabled in
* this session. The string version is the same of the name of the constant,
* without the leading `eFission`, and with an initial lower-case letter.
*/
readonly attribute nsIXULRuntime_FissionDecisionStatus fissionDecisionStatus;
readonly attribute ACString fissionDecisionStatusString;
/**
* Whether session history is stored in the parent process.
*/
readonly attribute boolean sessionHistoryInParent;
/**
* Whether Gecko code drives session store collection data.
*/
readonly attribute boolean sessionStorePlatformCollection;
/**
* Whether to write console errors to a log file. If a component
* encounters startup errors that might prevent the app from showing
* proper UI, it should set this flag to "true".
*/
attribute boolean logConsoleErrors;
/**
* A string tag identifying the current operating system. This is taken
* from the OS_TARGET configure variable. It will always be available.
*/
readonly attribute AUTF8String OS;
/**
* A string tag identifying the binary ABI of the current processor and
* compiler vtable. This is taken from the TARGET_XPCOM_ABI configure
* variable. It may not be available on all platforms, especially
* unusual processor or compiler combinations.
*
* The result takes the form <processor>-<compilerABI>, for example:
* x86-msvc
* ppc-gcc3
*
* This value should almost always be used in combination with "OS".
*
* @throw NS_ERROR_NOT_AVAILABLE if not available.
*/
readonly attribute AUTF8String XPCOMABI;
/**
* A string tag identifying the target widget toolkit in use.
* This is taken from the MOZ_WIDGET_TOOLKIT configure variable.
*/
readonly attribute AUTF8String widgetToolkit;
/**
* The legal values of processType.
*/
const unsigned long PROCESS_TYPE_DEFAULT = 0;
const unsigned long PROCESS_TYPE_CONTENT = 2;
const unsigned long PROCESS_TYPE_IPDLUNITTEST = 3;
const unsigned long PROCESS_TYPE_GMPLUGIN = 4;
const unsigned long PROCESS_TYPE_GPU = 5;
const unsigned long PROCESS_TYPE_VR = 6;
const unsigned long PROCESS_TYPE_RDD = 7;
const unsigned long PROCESS_TYPE_SOCKET = 8;
const unsigned long PROCESS_TYPE_REMOTESANDBOXBROKER = 9;
const unsigned long PROCESS_TYPE_FORKSERVER = 10;
const unsigned long PROCESS_TYPE_UTILITY = 11;
/**
* The type of the caller's process. Returns one of the values above.
*/
readonly attribute unsigned long processType;
/**
* The system process ID of the caller's process.
*/
readonly attribute unsigned long processID;
/**
* A globally unique and non-recycled ID of the caller's process.
*/
readonly attribute uint64_t uniqueProcessID;
/**
* The type of remote content process we're running in.
* null if we're in the parent/chrome process. This can contain
* a URI if Fission is enabled, so don't use it for any kind of
* telemetry.
*/
readonly attribute AUTF8String remoteType;
/**
* If true, browser tabs may be opened by default in a different process
* from the main browser UI.
*/
readonly attribute boolean browserTabsRemoteAutostart;
/**
* Returns the number of content processes to use for normal web pages. If
* this value is > 1, then e10s-multi should be considered to be "on".
*
* NB: If browserTabsRemoteAutostart is false, then this value has no
* meaning and e10s should be considered to be "off"!
*/
readonly attribute uint32_t maxWebProcessCount;
/**
* The current e10s-multi experiment number. Set dom.ipc.multiOptOut to (at
* least) this to disable it until the next experiment.
*/
const uint32_t E10S_MULTI_EXPERIMENT = 1;
/**
* If true, the accessibility service is running.
*/
readonly attribute boolean accessibilityEnabled;
/**
* Executable of Windows service that activated accessibility.
*/
readonly attribute AString accessibilityInstantiator;
/**
* Indicates whether the current Firefox build is 64-bit.
*/
readonly attribute boolean is64Bit;
/**
* Indicates whether or not text recognition of images supported by the OS.
*/
readonly attribute boolean isTextRecognitionSupported;
/**
* Signal the apprunner to invalidate caches on the next restart.
* This will cause components to be autoregistered and all
* fastload data to be re-created.
*/
void invalidateCachesOnRestart();
/**
* Starts a child process. This method is intented to pre-start a
* content child process so that when it is actually needed, it is
* ready to go.
*
* @throw NS_ERROR_NOT_AVAILABLE if not available.
*/
void ensureContentProcess();
/**
* Modification time of the profile lock before the profile was locked on
* this startup. Used to know the last time the profile was used and not
* closed cleanly. This is set to 0 if there was no existing profile lock.
*/
readonly attribute PRTime replacedLockTime;
/**
* The default update channel (MOZ_UPDATE_CHANNEL).
*/
readonly attribute AUTF8String defaultUpdateChannel;
/**
* The distribution ID for this build (MOZ_DISTRIBUTION_ID).
*/
readonly attribute AUTF8String distributionID;
/**
* True if Windows DLL blocklist initialized correctly. This is
* primarily for automated testing purposes.
*/
readonly attribute boolean windowsDLLBlocklistStatus;
/**
* True if this application was started by the OS as part of an automatic
* restart mechanism (such as RegisterApplicationRestart on Windows).
*/
readonly attribute boolean restartedByOS;
/** Whether the chrome color-scheme is dark */
readonly attribute boolean chromeColorSchemeIsDark;
/** Whether the content color-scheme derived from the app theme is dark */
readonly attribute boolean contentThemeDerivedColorSchemeIsDark;
/** Whether the user prefers reduced motion */
readonly attribute boolean prefersReducedMotion;
/** Whether we should draw over the titlebar */
readonly attribute boolean drawInTitlebar;
/** Returns the desktop environment identifier. Only meaningful on GTK */
readonly attribute ACString desktopEnvironment;
/** Whether we use Wayland. Only meaningful on GTK */
readonly attribute boolean isWayland;
/**
* The path of the shortcut used to start the current process, or "" if none.
*
* Windows Main process only, otherwise throws NS_ERROR_NOT_AVAILABLE
*
* May be mising in some cases where the user did launch from a shortcut:
* - If the updater ran on startup
* - If the AUMID was set before the shortcut could be saved
*
* @throw NS_ERROR_NOT_AVAILABLE if not available.
*/
readonly attribute AString processStartupShortcut;
/**
* Returns a value corresponding to one of the
* |mozilla::LauncherRegistryInfo::EnabledState| values.
*/
readonly attribute uint32_t launcherProcessState;
/**
* Returns the last application version that used the current profile or null
* if the last version could not be found (compatibility.ini was either
* missing or invalid). Throws NS_ERROR_UNAVAILABLE if called from a content
* process.
*/
readonly attribute ACString lastAppVersion;
/**
* Returns the last application build ID that used the current profile or null
* if the last build ID could not be found (compatibility.ini was either
* missing or invalid). Throws NS_ERROR_UNAVAILABLE if called from a content
* process.
*/
readonly attribute ACString lastAppBuildID;
};
%{C++
namespace mozilla {
nsIXULRuntime::ContentWin32kLockdownState GetWin32kLockdownState();
}
%}