Firefox 69 for developers
=========================

This article provides information about the changes in Firefox 69 that will affect developers. Firefox 69 was released on September 3, 2019.

Changes for web developers
--------------------------

### Developer tools

#### Debugger

* Event Listener Breakpoints let you diagnose which code a page executes in response to browser events. You can pick specific types, such as `click` or `keydown`, or whole categories of events, like all mouse input events. (Firefox bug 1526082).
* Scripts shown in the debugger's source list pane can now be saved via the *Download file* context menu option (Firefox bug 888161).
* In the debugger's source list pane, loaded extensions are listed with their name, rather than just their UUID (Firefox bug 1486416), making it much easier to find the extension code you want to debug.
* The debugger now loads significantly faster via lazy-loading scripts (Firefox bug 1527488).

#### Console

* Browser Console messages from tracking protection errors, CSP errors, and CORS errors are grouped automatically to reduce noise from repeated blocked resources and storage access (Firefox bug 1522396).
* All visible logs in the console can shared by saving to a file or copying to clipboard via a new *Export visible messages to* context menu item (Firefox bug 1517728).
* The console's toolbar now responsively reduces its height into a single row to save vertical space (Firefox bug 972530).
* Messages from content can now be hidden in the console to focus on logs from the Firefox UI (Firefox bug 1523842).

#### Network

* Resources that got blocked because of CSP or Mixed Content are now shown in the Network panel, with details of the reason (Firefox bug 1556451).
* A new optional *URL* column in the Network panel can be enabled to show the full URL for resources (Firefox bug 1341155).

#### Inspector

* When you hover over an element in the Page Inspector, the infobar that appears now includes the fact that an element is a flex container, or flex item (Firefox bug 1521188).
* When inspecting a page containing a grid with a subgrid, the parent grid's overlay lines are displayed whenever the subgrid's lines are displayed; if the parent grid's overlay checkbox is unselected, then its lines are translucent (Firefox bug 1550519).

#### Remote debugging

* For our mobile web developers, we have migrated remote debugging from the old WebIDE into a re-designed about:debugging, making the experience of debugging GeckoView on remote devices via USB much better (Firefox bug 1462208).

#### General

* The DevTools panel order has been changed to reflect popularity (Firefox bug 1558630).
### HTML

* In order to align more closely to the specification, the text track associated with a `<track>` element no longer loads the WebVTT file containing the text cues if the element is created in its default `disabled` `mode`. To access or manipulate the cues when the `mode` is `disabled`, change the `mode` to either `started` or `hidden`; this will trigger loading of the WebVTT data (Firefox bug 1550633).

#### Removals

* The HTML `<keygen>` element has been removed from Firefox. It was deprecated some time ago, and its purpose has generally been supplanted by other technologies (Firefox bug 1315460).
### CSS

* We implemented the `break-spaces` value of the `white-space` property (Firefox bug 1351432).
* The SVG geometry attributes (such as `width` and `height`) can now also be defined as CSS properties (Firefox bug 1383650).
* The `::cue` selector — used to style the captions ("cues") displayed by WebVTT — now enforces the limitations on which CSS properties may be used within cues, as per the specification (Firefox bug 1321488).
* We've restricted the properties that may apply to `::marker` as per the specification (Firefox bug 1552578)
* The `overflow-block` and `overflow-inline` properties have been implemented (Firefox bug 1470695).
* We added the ability to test for support of a selector when using CSS Feature Queries (`@supports`), with the `selector()` method (Firefox bug 1513643).
* The `user-select` property — which specifies whether or not the user is able to select text in the affected element — has been unprefixed (Firefox bug 1492739).
* We implemented local-specific casing behavior for Lithuanian (Firefox bug 1322992), as seen in this example.
* We've implemented the `line-break` property of CSS Text (Firefox bug 1011369 and Firefox bug 1531715).
* The `contain` property — which allows developers to define that an element and its contents are mostly independent of the rest of the DOM tree — got implemented Firefox bug 1487493.
### SVG

* We've added support for gzip-compressed SVG-in-OpenType (Firefox bug 1359240).
* The `SVGGeometryElement.isPointInFill()` and `SVGGeometryElement.isPointInStroke()` methods have been implemented (Firefox bug 1325319).
### JavaScript

* Public class fields are enabled by default (Firefox bug 1555464). See also Class fields for more information.
* The promise rejection events `unhandledrejection` and `rejectionhandled` are now enabled by default (Firefox bug 1362272). To learn more about how these work, see Promise rejection events.
### HTTP

* The HTTP headers `Access-Control-Expose-Headers`, `Access-Control-Allow-Methods`, and `Access-Control-Allow-Headers` now accept a wildcard value "`*`" for requests without credentials (Firefox bug 1309358). This change has also been uplifted to Firefox 68 ESR.
### APIs

#### New APIs

* The Resize Observer API is supported by default (Firefox bug 1543839).
* The Microtask API (`queueMicrotask()`) has been implemented (Firefox bug 1480236).

#### DOM

* The `DOMMatrix`, `DOMPoint`, and related objects are now supported in workers (Firefox bug 1420580).
* The `pageX` and `pageY` properties have been moved from `UIEvent` to `MouseEvent`, for better spec compliance (Firefox bug 1178763). These properties are no longer exposed to the `CompositionEvent`, `FocusEvent`, `InputEvent`, `KeyboardEvent`, and `TouchEvent` interfaces, which all inherit from `UIEvent`.
* The `Blob.text()`, `Blob.arrayBuffer()`, and `Blob.stream()` methods are now implemented (Firefox bug 1557121).
* `DOMMatrix.fromMatrix()` has been implemented (Firefox bug 1560462).
* We now support the six-parameter version of the `DOMMatrix.scale()` method (Firefox bug 1397945).
* The arguments for `DOMMatrix.translate()`, `DOMMatrix.skewX()`, and `DOMMatrix.skewY()` are now all optional, as per spec (Firefox bug 1397949).
* The `Navigator.userAgent`, `Navigator.platform`, and `Navigator.oscpu` properties no longer reveal whether a user is running 32-bit Firefox on a 64-bit OS (Firefox bug 1559747). They now say `Linux x86_64` instead of `Linux i686 on x86_64`, and `Win64` instead of `WOW64`.
* The remaining methods of `HTMLDocument` have been moved to `Document`. This should have no appreciable impact on your work in most cases. In particular, the `close()`, `open()`, and `write()` methods have been moved. So have the various editor related methods, including `execCommand()` as well as various properties (Firefox bug 1549560).
* We have implemented `AbstractRange` and `StaticRange` (Firefox bug 1444847).

#### Media, Web Audio, and WebRTC

* For improved user security, and in-keeping with the latest versions of the Media Capture and Streams specification, the `navigator.mediaDevices` property is no longer present if the context is insecure. To use `getUserMedia()`, `getDisplayMedia()`, `enumerateDevices()`, and so forth, be sure your content is loaded using HTTPS (Firefox bug 1528031).
* The Web Audio API's `AudioParam.value` property now returns the actual value of the property at the current time, taking into account all scheduled or graduated value changes. Previously, Firefox only returned the most recent explicitly-set value (as through using the `value` setter) (Firefox bug 893020).
* We've updated `MediaStreamAudioSourceNode` to use the new, lexicographical, ordering for tracks. Previously, track ordering was up to the individual browser, and could even change arbitrarily. In addition, attempting to create a `MediaStreamAudioSourceNode` using a stream that has no audio tracks now throws an `InvalidStateError` exception (Firefox bug 1553215).
* The `facingMode`, `deviceId`, and `groupId` settings are now included as members of the `MediaTrackSettings` object returned by calls to `MediaStreamTrack.getSettings()` (Firefox bug 1537986).

#### Removals

* The `DOMMatrix.scaleNonUniformSelf()` method has been removed (Firefox bug 1560119).
### WebDriver conformance (Marionette)

#### Other

* Marionette now dynamically handles the opening and closing of modal dialogs and user prompts (Firefox bug 1477977), which also means that multiple open prompts will be handled (Firefox bug 1487358).
* Tracking protection and DOM push features are now disabled by default to avoid the removal of parts of the DOM, and extra notifications (Firefox bug 1542244).
* Automatic unloading of background tabs if Firefox runs into a low memory condition is now disabled — this badly interacts with automation when switching between tabs (Firefox bug 1553748).
Changes for add-on developers
-----------------------------

### API changes

* The UserScripts API is now enabled by default.
* The `topSites.get()` method now has new options available — `includePinned` and `includeSearchShortcuts` (Firefox bug 1547669).
### Other changes

* There are now Group Policy options to blacklist all extensions except the ones that have been whitelisted (Firefox bug 1522823).
See also
--------

* Hacks release post: Firefox 69 — a tale of Resize Observer, microtasks, CSS, and DevTools
Older versions
--------------

* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers
* Firefox 59 for developers
* Firefox 58 for developers
* Firefox 57 for developers
* Firefox 56 for developers
* Firefox 55 for developers
* Firefox 54 for developers
* Firefox 53 for developers
* Firefox 52 for developers
* Firefox 51 for developers
* Firefox 50 for developers
* Firefox 49 for developers
* Firefox 48 for developers
* Firefox 47 for developers
* Firefox 46 for developers
* Firefox 45 for developers
* Firefox 44 for developers
* Firefox 43 for developers
* Firefox 42 for developers
* Firefox 41 for developers
* Firefox 40 for developers
* Firefox 39 for developers
* Firefox 38 for developers