1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
|
/* 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() 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 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;
/**
* Temporary, do not use. Indicates if an incompat version of JAWS
* screen reader software is loaded in our process space.
*/
readonly attribute boolean shouldBlockIncompatJaws;
/**
* 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;
/**
* 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();
}
%}
|