gecko-dev/dom/webidl/Window.webidl
Emilio Cobos Álvarez 25e4585462 Bug 1798836 - Improve sizing of the profile manager (again). r=Gijs,webidl,smaug
Instead of imposing the min-width as a max-size, make prefwidth act as
it should (as suggesting a preferred width, but with min-content as a
minimum).

This can be reproduced locally by applying a patch like:

```
diff --git a/toolkit/profile/content/profileSelection.xhtml b/toolkit/profile/content/profileSelection.xhtml
index 3dd1c864f79f1..7e8cbf8ce8c3e 100644
--- a/toolkit/profile/content/profileSelection.xhtml
+++ b/toolkit/profile/content/profileSelection.xhtml
@@ -17,7 +17,7 @@
   data-l10n-id="profile-selection-window"
   orient="vertical"
   prefwidth="min-width"
-  style="min-width: 30em;"
+  style="min-width: 10em;"
   onload="startup();">
 <dialog id="profileWindow"
   buttons="accept,cancel"
```

Before patch, stuff overflowed. This patch guarantees that everything is
on-screen.

Differential Revision: https://phabricator.services.mozilla.com/D161229
2022-11-05 19:24:31 +00:00

833 lines
34 KiB
Plaintext

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/.
*
* The origin of this IDL file is:
* http://www.whatwg.org/specs/web-apps/current-work/
* https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html
* https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html
* http://dev.w3.org/csswg/cssom/
* http://dev.w3.org/csswg/cssom-view/
* https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/RequestAnimationFrame/Overview.html
* https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html
* https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html
* http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html
* https://w3c.github.io/webappsec-secure-contexts/#monkey-patching-global-object
* https://w3c.github.io/requestidlecallback/
* https://drafts.css-houdini.org/css-paint-api-1/#dom-window-paintworklet
* https://wicg.github.io/visual-viewport/#the-visualviewport-interface
*/
interface Principal;
interface nsIBrowserDOMWindow;
interface XULControllers;
interface nsIDOMWindowUtils;
interface nsIPrintSettings;
typedef OfflineResourceList ApplicationCache;
// http://www.whatwg.org/specs/web-apps/current-work/
[Global, LegacyUnenumerableNamedProperties, NeedResolve,
Exposed=Window,
InstrumentedProps=(AbsoluteOrientationSensor,
Accelerometer,
ApplicationCache,
ApplicationCacheErrorEvent,
Atomics,
AudioParamMap,
AudioWorklet,
AudioWorkletNode,
BackgroundFetchManager,
BackgroundFetchRecord,
BackgroundFetchRegistration,
BeforeInstallPromptEvent,
Bluetooth,
BluetoothCharacteristicProperties,
BluetoothDevice,
BluetoothRemoteGATTCharacteristic,
BluetoothRemoteGATTDescriptor,
BluetoothRemoteGATTServer,
BluetoothRemoteGATTService,
BluetoothUUID,
CanvasCaptureMediaStreamTrack,
chrome,
clientInformation,
ClipboardItem,
CSSImageValue,
CSSKeywordValue,
CSSMathInvert,
CSSMathMax,
CSSMathMin,
CSSMathNegate,
CSSMathProduct,
CSSMathSum,
CSSMathValue,
CSSMatrixComponent,
CSSNumericArray,
CSSNumericValue,
CSSPerspective,
CSSPositionValue,
CSSRotate,
CSSScale,
CSSSkew,
CSSSkewX,
CSSSkewY,
CSSStyleValue,
CSSTransformComponent,
CSSTransformValue,
CSSTranslate,
CSSUnitValue,
CSSUnparsedValue,
CSSVariableReferenceValue,
defaultStatus,
// Unfortunately, our telemetry histogram name generator
// (the one that generates TelemetryHistogramEnums.h) can't
// handle two DOM methods with names that only differ in
// case, because it forces everything to uppercase.
//defaultstatus,
DeviceMotionEventAcceleration,
DeviceMotionEventRotationRate,
DOMError,
EnterPictureInPictureEvent,
External,
FederatedCredential,
Gyroscope,
HTMLContentElement,
HTMLDialogElement,
HTMLShadowElement,
ImageCapture,
InputDeviceCapabilities,
InputDeviceInfo,
Keyboard,
KeyboardLayoutMap,
LinearAccelerationSensor,
Lock,
LockManager,
MediaMetadata,
MediaSession,
MediaSettingsRange,
MIDIAccess,
MIDIConnectionEvent,
MIDIInput,
MIDIInputMap,
MIDIMessageEvent,
MIDIOutput,
MIDIOutputMap,
MIDIPort,
NavigationPreloadManager,
NetworkInformation,
offscreenBuffering,
OffscreenCanvas,
OffscreenCanvasRenderingContext2D,
onbeforeinstallprompt,
oncancel,
ondeviceorientationabsolute,
onmousewheel,
onsearch,
onselectionchange,
openDatabase,
OrientationSensor,
OverconstrainedError,
PasswordCredential,
PaymentAddress,
PaymentInstruments,
PaymentManager,
PaymentMethodChangeEvent,
PaymentRequest,
PaymentRequestUpdateEvent,
PaymentResponse,
PerformanceEventTiming,
PerformanceLongTaskTiming,
PerformancePaintTiming,
PhotoCapabilities,
PictureInPictureWindow,
Presentation,
PresentationAvailability,
PresentationConnection,
PresentationConnectionAvailableEvent,
PresentationConnectionCloseEvent,
PresentationConnectionList,
PresentationReceiver,
PresentationRequest,
RelativeOrientationSensor,
RemotePlayback,
ReportingObserver,
RTCDtlsTransport,
RTCError,
RTCErrorEvent,
RTCIceTransport,
RTCSctpTransport,
Sensor,
SensorErrorEvent,
SharedArrayBuffer,
styleMedia,
StylePropertyMap,
StylePropertyMapReadOnly,
SVGDiscardElement,
SyncManager,
TaskAttributionTiming,
TextDecoderStream,
TextEncoderStream,
TextEvent,
Touch,
TouchEvent,
TouchList,
TransformStream,
USB,
USBAlternateInterface,
USBConfiguration,
USBConnectionEvent,
USBDevice,
USBEndpoint,
USBInterface,
USBInTransferResult,
USBIsochronousInTransferPacket,
USBIsochronousInTransferResult,
USBIsochronousOutTransferPacket,
USBIsochronousOutTransferResult,
USBOutTransferResult,
UserActivation,
visualViewport,
webkitCancelAnimationFrame,
webkitMediaStream,
WebKitMutationObserver,
webkitRequestAnimationFrame,
webkitRequestFileSystem,
webkitResolveLocalFileSystemURL,
webkitRTCPeerConnection,
webkitSpeechGrammar,
webkitSpeechGrammarList,
webkitSpeechRecognition,
webkitSpeechRecognitionError,
webkitSpeechRecognitionEvent,
webkitStorageInfo,
Worklet,
WritableStream)]
/*sealed*/ interface Window : EventTarget {
// the current browsing context
[LegacyUnforgeable, Constant, StoreInSlot,
CrossOriginReadable] readonly attribute WindowProxy window;
[Replaceable, Constant, StoreInSlot,
CrossOriginReadable] readonly attribute WindowProxy self;
[LegacyUnforgeable, StoreInSlot, Pure] readonly attribute Document? document;
[Throws] attribute DOMString name;
[PutForwards=href, LegacyUnforgeable, CrossOriginReadable,
CrossOriginWritable] readonly attribute Location location;
[Throws] readonly attribute History history;
readonly attribute CustomElementRegistry customElements;
[Replaceable, Throws] readonly attribute BarProp locationbar;
[Replaceable, Throws] readonly attribute BarProp menubar;
[Replaceable, Throws] readonly attribute BarProp personalbar;
[Replaceable, Throws] readonly attribute BarProp scrollbars;
[Replaceable, Throws] readonly attribute BarProp statusbar;
[Replaceable, Throws] readonly attribute BarProp toolbar;
[Throws] attribute DOMString status;
[Throws, CrossOriginCallable, NeedsCallerType] undefined close();
[Throws, CrossOriginReadable] readonly attribute boolean closed;
[Throws] undefined stop();
[Throws, CrossOriginCallable, NeedsCallerType] undefined focus();
[Throws, CrossOriginCallable, NeedsCallerType] undefined blur();
[Replaceable, Pref="dom.window.event.enabled"] readonly attribute (Event or undefined) event;
// other browsing contexts
[Replaceable, Throws, CrossOriginReadable] readonly attribute WindowProxy frames;
[Replaceable, CrossOriginReadable] readonly attribute unsigned long length;
//[Unforgeable, Throws, CrossOriginReadable] readonly attribute WindowProxy top;
[LegacyUnforgeable, Throws, CrossOriginReadable] readonly attribute WindowProxy? top;
[Throws, CrossOriginReadable] attribute any opener;
//[Throws] readonly attribute WindowProxy parent;
[Replaceable, Throws, CrossOriginReadable] readonly attribute WindowProxy? parent;
[Throws, NeedsSubjectPrincipal] readonly attribute Element? frameElement;
//[Throws] WindowProxy? open(optional USVString url = "about:blank", optional DOMString target = "_blank", [TreatNullAs=EmptyString] optional DOMString features = "");
[Throws] WindowProxy? open(optional USVString url = "", optional DOMString target = "", optional [LegacyNullToEmptyString] DOMString features = "");
getter object (DOMString name);
// the user agent
readonly attribute Navigator navigator;
[Pref="dom.window.clientinformation.enabled", BinaryName="Navigator"]
readonly attribute Navigator clientInformation;
[Replaceable, Throws] readonly attribute External external;
[Throws, SecureContext, Pref="browser.cache.offline.enable"] readonly attribute ApplicationCache applicationCache;
// user prompts
[Throws, NeedsSubjectPrincipal] undefined alert();
[Throws, NeedsSubjectPrincipal] undefined alert(DOMString message);
[Throws, NeedsSubjectPrincipal] boolean confirm(optional DOMString message = "");
[Throws, NeedsSubjectPrincipal] DOMString? prompt(optional DOMString message = "", optional DOMString default = "");
[Throws, Pref="dom.enable_window_print"]
undefined print();
// Returns a window that you can use for a print preview.
//
// This may reuse an existing window if this window is already a print
// preview document, or if you pass a docshell explicitly.
[Throws, Func="nsContentUtils::IsCallerChromeOrFuzzingEnabled"]
WindowProxy? printPreview(optional nsIPrintSettings? settings = null,
optional nsIWebProgressListener? listener = null,
optional nsIDocShell? docShellToPreviewInto = null);
[Throws, CrossOriginCallable, NeedsSubjectPrincipal,
BinaryName="postMessageMoz"]
undefined postMessage(any message, DOMString targetOrigin, optional sequence<object> transfer = []);
[Throws, CrossOriginCallable, NeedsSubjectPrincipal,
BinaryName="postMessageMoz"]
undefined postMessage(any message, optional WindowPostMessageOptions options = {});
// also has obsolete members
};
Window includes GlobalEventHandlers;
Window includes WindowEventHandlers;
// http://www.whatwg.org/specs/web-apps/current-work/
interface mixin WindowSessionStorage {
//[Throws] readonly attribute Storage sessionStorage;
[Throws] readonly attribute Storage? sessionStorage;
};
Window includes WindowSessionStorage;
// http://www.whatwg.org/specs/web-apps/current-work/
interface mixin WindowLocalStorage {
[Throws] readonly attribute Storage? localStorage;
};
Window includes WindowLocalStorage;
// http://www.whatwg.org/specs/web-apps/current-work/
partial interface Window {
undefined captureEvents();
undefined releaseEvents();
};
// https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html
partial interface Window {
//[Throws] Selection getSelection();
[Throws] Selection? getSelection();
};
// https://drafts.csswg.org/cssom/#extensions-to-the-window-interface
partial interface Window {
//[NewObject, Throws] CSSStyleDeclaration getComputedStyle(Element elt, optional DOMString? pseudoElt = "");
[NewObject, Throws] CSSStyleDeclaration? getComputedStyle(Element elt, optional DOMString? pseudoElt = "");
};
// http://dev.w3.org/csswg/cssom-view/
enum ScrollBehavior { "auto", "instant", "smooth" };
dictionary ScrollOptions {
ScrollBehavior behavior = "auto";
};
dictionary ScrollToOptions : ScrollOptions {
unrestricted double left;
unrestricted double top;
};
partial interface Window {
//[Throws, NewObject, NeedsCallerType] MediaQueryList matchMedia(DOMString query);
[Throws, NewObject, NeedsCallerType] MediaQueryList? matchMedia(UTF8String query);
// Per spec, screen is SameObject, but we don't actually guarantee that given
// nsGlobalWindow::Cleanup. :(
//[SameObject, Replaceable, Throws] readonly attribute Screen screen;
[Replaceable, Throws] readonly attribute Screen screen;
// browsing context
//[Throws] undefined moveTo(double x, double y);
//[Throws] undefined moveBy(double x, double y);
//[Throws] undefined resizeTo(double x, double y);
//[Throws] undefined resizeBy(double x, double y);
[Throws, NeedsCallerType] undefined moveTo(long x, long y);
[Throws, NeedsCallerType] undefined moveBy(long x, long y);
[Throws, NeedsCallerType] undefined resizeTo(long x, long y);
[Throws, NeedsCallerType] undefined resizeBy(long x, long y);
// viewport
// These are writable because we allow chrome to write them. And they need
// to use 'any' as the type, because non-chrome writing them needs to act
// like a [Replaceable] attribute would, which needs the original JS value.
//[Replaceable, Throws] readonly attribute double innerWidth;
//[Replaceable, Throws] readonly attribute double innerHeight;
[Throws, NeedsCallerType] attribute any innerWidth;
[Throws, NeedsCallerType] attribute any innerHeight;
// viewport scrolling
undefined scroll(unrestricted double x, unrestricted double y);
undefined scroll(optional ScrollToOptions options = {});
undefined scrollTo(unrestricted double x, unrestricted double y);
undefined scrollTo(optional ScrollToOptions options = {});
undefined scrollBy(unrestricted double x, unrestricted double y);
undefined scrollBy(optional ScrollToOptions options = {});
// mozScrollSnap is used by chrome to perform scroll snapping after the
// user performs actions that may affect scroll position
// mozScrollSnap is deprecated, to be replaced by a web accessible API, such
// as an extension to the ScrollOptions dictionary. See bug 1137937.
[ChromeOnly] undefined mozScrollSnap();
// The four properties below are double per spec at the moment, but whether
// that will continue is unclear.
[Replaceable, Throws] readonly attribute double scrollX;
[Replaceable, Throws] readonly attribute double pageXOffset;
[Replaceable, Throws] readonly attribute double scrollY;
[Replaceable, Throws] readonly attribute double pageYOffset;
// Aliases for screenX / screenY.
[Replaceable, Throws, NeedsCallerType] readonly attribute double screenLeft;
[Replaceable, Throws, NeedsCallerType] readonly attribute double screenTop;
// client
// These are writable because we allow chrome to write them. And they need
// to use 'any' as the type, because non-chrome writing them needs to act
// like a [Replaceable] attribute would, which needs the original JS value.
//[Replaceable, Throws] readonly attribute double screenX;
//[Replaceable, Throws] readonly attribute double screenY;
//[Replaceable, Throws] readonly attribute double outerWidth;
//[Replaceable, Throws] readonly attribute double outerHeight;
[Throws, NeedsCallerType] attribute any screenX;
[Throws, NeedsCallerType] attribute any screenY;
[Throws, NeedsCallerType] attribute any outerWidth;
[Throws, NeedsCallerType] attribute any outerHeight;
};
// https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames
Window includes AnimationFrameProvider;
// https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html
partial interface Window {
[Replaceable, Pure, StoreInSlot] readonly attribute Performance? performance;
};
// https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html
Window includes GlobalCrypto;
// https://fidoalliance.org/specifications/download/
Window includes GlobalU2F;
dictionary SizeToContentConstraints {
long maxWidth = 0;
long maxHeight = 0;
long prefWidth = 0;
};
#ifdef MOZ_WEBSPEECH
// http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html
interface mixin SpeechSynthesisGetter {
[Throws, Pref="media.webspeech.synth.enabled"] readonly attribute SpeechSynthesis speechSynthesis;
};
Window includes SpeechSynthesisGetter;
#endif
// Mozilla-specific stuff
partial interface Window {
//[NewObject, Throws] CSSStyleDeclaration getDefaultComputedStyle(Element elt, optional DOMString pseudoElt = "");
[NewObject, Throws] CSSStyleDeclaration? getDefaultComputedStyle(Element elt, optional DOMString pseudoElt = "");
// Mozilla extensions
/**
* Method for scrolling this window by a number of lines.
*/
undefined scrollByLines(long numLines, optional ScrollOptions options = {});
/**
* Method for scrolling this window by a number of pages.
*/
undefined scrollByPages(long numPages, optional ScrollOptions options = {});
/**
* Method for sizing this window to the content in the window.
*/
[Throws, NeedsCallerType] undefined sizeToContent();
/**
* Chrome-only method for sizing to content with a maximum-size constraint on
* either (or both) directions.
*/
[Throws, ChromeOnly] undefined sizeToContentConstrained(optional SizeToContentConstraints constraints = {});
// XXX Shouldn't this be in nsIDOMChromeWindow?
[ChromeOnly, Replaceable, Throws] readonly attribute XULControllers controllers;
[ChromeOnly, Throws] readonly attribute Element? realFrameElement;
[ChromeOnly] readonly attribute nsIDocShell? docShell;
[ChromeOnly, Constant, CrossOriginReadable, BinaryName="getBrowsingContext"]
readonly attribute BrowsingContext browsingContext;
[Throws, NeedsCallerType]
readonly attribute float mozInnerScreenX;
[Throws, NeedsCallerType]
readonly attribute float mozInnerScreenY;
[Replaceable, Throws, NeedsCallerType]
readonly attribute double devicePixelRatio;
// Allows chrome code to convert desktop pixels to device pixels and vice
// versa. Useful for interacting with the screen manager.
[ChromeOnly, Throws]
readonly attribute double desktopToDeviceScale;
/* The maximum offset that the window can be scrolled to
(i.e., the document width/height minus the scrollport width/height) */
[ChromeOnly, Throws] readonly attribute long scrollMinX;
[ChromeOnly, Throws] readonly attribute long scrollMinY;
[Replaceable, Throws] readonly attribute long scrollMaxX;
[Replaceable, Throws] readonly attribute long scrollMaxY;
[Throws] attribute boolean fullScreen;
// XXX Should this be in nsIDOMChromeWindow?
undefined updateCommands(DOMString action,
optional Selection? sel = null,
optional short reason = 0);
/* Find in page.
* @param str: the search pattern
* @param caseSensitive: is the search caseSensitive
* @param backwards: should we search backwards
* @param wrapAround: should we wrap the search
* @param wholeWord: should we search only for whole words
* @param searchInFrames: should we search through all frames
* @param showDialog: should we show the Find dialog
*/
[Throws] boolean find(optional DOMString str = "",
optional boolean caseSensitive = false,
optional boolean backwards = false,
optional boolean wrapAround = false,
optional boolean wholeWord = false,
optional boolean searchInFrames = false,
optional boolean showDialog = false);
attribute EventHandler ondevicemotion;
attribute EventHandler ondeviceorientation;
attribute EventHandler onabsolutedeviceorientation;
[Pref="device.sensors.proximity.enabled"]
attribute EventHandler onuserproximity;
[Pref="device.sensors.ambientLight.enabled"]
attribute EventHandler ondevicelight;
undefined dump(DOMString str);
/**
* This method is here for backwards compatibility with 4.x only,
* its implementation is a no-op
*/
undefined setResizable(boolean resizable);
/**
* This is the scriptable version of
* nsPIDOMWindow::OpenDialog() that takes 3 optional
* arguments, plus any additional arguments are passed on as
* arguments on the dialog's window object (window.arguments).
*/
[Throws, ChromeOnly] WindowProxy? openDialog(optional DOMString url = "",
optional DOMString name = "",
optional DOMString options = "",
any... extraArguments);
[Func="nsGlobalWindowInner::ContentPropertyEnabled",
NonEnumerable, Replaceable, Throws, NeedsCallerType]
readonly attribute object? content;
[Throws, ChromeOnly] any getInterface(any iid);
/**
* Same as nsIDOMWindow.windowRoot, useful for event listener targeting.
*/
[ChromeOnly, Throws]
readonly attribute WindowRoot? windowRoot;
/**
* ChromeOnly method to determine if a particular window should see console
* reports from service workers of the given scope.
*/
[ChromeOnly]
boolean shouldReportForServiceWorkerScope(USVString aScope);
/**
* InstallTrigger is used for extension installs. Ideally it would
* be something like a WebIDL namespace, but we don't support
* JS-implemented static things yet. See bug 863952.
*/
[Replaceable, Deprecated="InstallTriggerDeprecated", Pref="extensions.InstallTrigger.enabled"]
readonly attribute InstallTriggerImpl? InstallTrigger;
/**
* Get the nsIDOMWindowUtils for this window.
*/
[Constant, Throws, ChromeOnly]
readonly attribute nsIDOMWindowUtils windowUtils;
[Pure, ChromeOnly]
readonly attribute WindowGlobalChild? windowGlobalChild;
/**
* The principal of the client source of the window. This is supposed to be
* used for the service worker.
*
* This is used for APIs like https://w3c.github.io/push-api/ that extend
* ServiceWorkerRegistration and therefore need to operate consistently with
* ServiceWorkers and its Clients API. The client principal is the appropriate
* principal to pass to all nsIServiceWorkerManager APIs.
*
* Note that the client principal will be different from the node principal of
* the window's document if the window is in a third-party context when dFPI
* is enabled. In this case, the client principal will be the partitioned
* principal to support the service worker partitioning.
*/
[ChromeOnly]
readonly attribute Principal? clientPrincipal;
};
Window includes TouchEventHandlers;
Window includes OnErrorEventHandlerForWindow;
#if defined(MOZ_WIDGET_ANDROID)
// https://compat.spec.whatwg.org/#windoworientation-interface
partial interface Window {
[NeedsCallerType]
readonly attribute short orientation;
attribute EventHandler onorientationchange;
};
#endif
// Mozilla extension
// Sidebar is deprecated and it will be removed in the next cycles. See bug 1640138.
partial interface Window {
[Replaceable, Throws, UseCounter, Pref="dom.window.sidebar.enabled"]
readonly attribute (External or WindowProxy) sidebar;
};
[MOZ_CAN_RUN_SCRIPT_BOUNDARY]
callback PromiseDocumentFlushedCallback = any ();
// Mozilla extensions for Chrome windows.
partial interface Window {
// The STATE_* constants need to match the corresponding enum in nsGlobalWindow.cpp.
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
const unsigned short STATE_MAXIMIZED = 1;
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
const unsigned short STATE_MINIMIZED = 2;
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
const unsigned short STATE_NORMAL = 3;
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
const unsigned short STATE_FULLSCREEN = 4;
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
readonly attribute unsigned short windowState;
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
readonly attribute boolean isFullyOccluded;
/**
* browserDOMWindow provides access to yet another layer of
* utility functions implemented by chrome script. It will be null
* for DOMWindows not corresponding to browsers.
*/
[Throws, Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
attribute nsIBrowserDOMWindow? browserDOMWindow;
[Throws, Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined getAttention();
[Throws, Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined getAttentionWithCycleCount(long aCycleCount);
[Throws, Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined setCursor(UTF8String cursor);
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined maximize();
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined minimize();
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined restore();
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
DOMString getWorkspaceID();
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined moveToWorkspace(DOMString workspaceID);
/**
* Notify a default button is loaded on a dialog or a wizard.
* defaultButton is the default button.
*/
[Throws, Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
undefined notifyDefaultButtonLoaded(Element defaultButton);
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
readonly attribute ChromeMessageBroadcaster messageManager;
/**
* Returns the message manager identified by the given group name that
* manages all frame loaders belonging to that group.
*/
[Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
ChromeMessageBroadcaster getGroupMessageManager(DOMString aGroup);
/**
* Calls the given function as soon as a style or layout flush for the
* top-level document is not necessary, and returns a Promise which
* resolves to the callback's return value after it executes.
*
* In the event that the window goes away before a flush can occur, the
* callback will still be called and the Promise resolved as the window
* tears itself down.
*
* The callback _must not modify the DOM for any window in any way_. If it
* does, after finishing executing, the Promise returned by
* promiseDocumentFlushed will reject with
* NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR.
*
* Note that the callback can be called either synchronously or asynchronously
* depending on whether or not flushes are pending:
*
* The callback will be called synchronously when calling
* promiseDocumentFlushed when NO flushes are already pending. This is
* to ensure that no script has a chance to dirty the DOM before the callback
* is called.
*
* The callback will be called asynchronously if a flush is pending.
*
* The expected execution order is that all pending callbacks will
* be fired first (and in the order that they were queued) and then the
* Promise resolution handlers will all be invoked later on during the
* next microtask checkpoint.
*
* Using window.top.promiseDocumentFlushed in combination with a callback
* that is querying items in a window that might be swapped out via
* nsFrameLoader::SwapWithOtherLoader is highly discouraged. For example:
*
* let result = await window.top.promiseDocumentFlushed(() => {
* return window.document.body.getBoundingClientRect();
* });
*
* If "window" might get swapped out via nsFrameLoader::SwapWithOtherLoader
* at any time, then the callback might get called when the new host window
* will still incur layout flushes, since it's only the original host window
* that's being monitored via window.top.promiseDocumentFlushed.
*
* See bug 1519407 for further details.
*
* promiseDocumentFlushed does not support re-entrancy - so calling it from
* within a promiseDocumentFlushed callback will result in the inner call
* throwing an NS_ERROR_FAILURE exception, and the outer Promise rejecting
* with that exception.
*
* The callback function *must not make any changes which would require
* a style or layout flush*.
*
* Also throws NS_ERROR_FAILURE if the window is not in a state where flushes
* can be waited for (for example, the PresShell has not yet been created).
*
* @param {function} callback
* @returns {Promise}
*/
[NewObject, Func="nsGlobalWindowInner::IsPrivilegedChromeWindow"]
Promise<any> promiseDocumentFlushed(PromiseDocumentFlushedCallback callback);
[ChromeOnly]
readonly attribute boolean isChromeWindow;
[ChromeOnly]
readonly attribute GleanImpl Glean;
[ChromeOnly]
readonly attribute GleanPingsImpl GleanPings;
};
partial interface Window {
[Pref="dom.vr.enabled"]
attribute EventHandler onvrdisplayconnect;
[Pref="dom.vr.enabled"]
attribute EventHandler onvrdisplaydisconnect;
[Pref="dom.vr.enabled"]
attribute EventHandler onvrdisplayactivate;
[Pref="dom.vr.enabled"]
attribute EventHandler onvrdisplaydeactivate;
[Pref="dom.vr.enabled"]
attribute EventHandler onvrdisplaypresentchange;
};
#ifndef RELEASE_OR_BETA
// https://drafts.css-houdini.org/css-paint-api-1/#dom-window-paintworklet
partial interface Window {
[Pref="dom.paintWorklet.enabled", Throws]
readonly attribute Worklet paintWorklet;
};
#endif
Window includes WindowOrWorkerGlobalScope;
partial interface Window {
[Throws, Func="nsGlobalWindowInner::IsRequestIdleCallbackEnabled"]
unsigned long requestIdleCallback(IdleRequestCallback callback,
optional IdleRequestOptions options = {});
[Func="nsGlobalWindowInner::IsRequestIdleCallbackEnabled"]
undefined cancelIdleCallback(unsigned long handle);
};
dictionary IdleRequestOptions {
unsigned long timeout;
};
callback IdleRequestCallback = undefined (IdleDeadline deadline);
partial interface Window {
/**
* Returns a list of locales that the internationalization components
* should be localized to.
*
* The function name refers to Regional Preferences which can be either
* fetched from the internal internationalization database (CLDR), or
* from the host environment.
*
* The result is a sorted list of valid locale IDs and it should be
* used for all APIs that accept list of locales, like ECMA402 and L10n APIs.
*
* This API always returns at least one locale.
*
* Example: ["en-US", "de", "pl", "sr-Cyrl", "zh-Hans-HK"]
*/
[Func="IsChromeOrUAWidget"]
sequence<DOMString> getRegionalPrefsLocales();
/**
* Returns a list of locales that the web content would know from the user.
*
* One of the fingerprinting technique is to recognize users from their locales
* exposed to web content. For those components that would be fingerprintable
* from the locale should call this API instead of |getRegionalPrefsLocales()|.
*
* If the pref is set to spoof locale setting, this function will return the
* spoofed locale, otherwise it returns what |getRegionalPrefsLocales()| returns.
*
* This API always returns at least one locale.
*
* Example: ["en-US"]
*/
[Func="IsChromeOrUAWidget"]
sequence<DOMString> getWebExposedLocales();
/**
* Getter funcion for IntlUtils, which provides helper functions for
* localization.
*/
[Throws, Func="IsChromeOrUAWidget"]
readonly attribute IntlUtils intlUtils;
};
partial interface Window {
[SameObject, Pref="dom.visualviewport.enabled", Replaceable]
readonly attribute VisualViewport visualViewport;
};
// Used to assign marks to appear on the scrollbar when
// finding on a page.
partial interface Window {
// The marks are values between 0 and scrollMax{X,Y} - scrollMin{X,Y}.
[ChromeOnly]
undefined setScrollMarks(sequence<unsigned long> marks,
optional boolean onHorizontalScrollbar = false);
};
dictionary WindowPostMessageOptions : StructuredSerializeOptions {
USVString targetOrigin = "/";
};