Skip to content

Latest commit

 

History

History
178 lines (111 loc) · 15.1 KB

File metadata and controls

178 lines (111 loc) · 15.1 KB
title Firefox 149 release notes for developers (Beta)
short-title Firefox 149 (Beta)
slug Mozilla/Firefox/Releases/149
page-type firefox-release-notes-active
sidebar firefox

This article provides information about the changes in Firefox 149 that affect developers. Firefox 149 is the current Beta version of Firefox and ships on March 24, 2026.

Note

The release notes for this Firefox version are still a work in progress.

Changes for web developers

HTML

  • The popover global attribute now supports the hint value. Popovers with the hint value will not close auto popovers when they are displayed, but will close other hint popovers. (Firefox bug 1867743).

MathML

  • The CSS font-family: math property is now supported, and applied to {{mathmlelement('math')}} elements by default. This ensures that websites can use an appropriate math font and/or MathML without having to know what fonts are present on the underlying OS. (Firefox bug 2014703).

CSS

  • The {{CSSXRef("shape-outside")}} CSS property now supports the xywh() function as a value. This allows you to define a shape for inline content to wrap around, using distances from the left (x) and top (y) edges of the containing block and a width (w) and height (h). (Firefox bug 1983187).

  • The {{CSSXRef("vertical-align")}} CSS property is now a shorthand property for {{CSSXRef("alignment-baseline")}}, {{CSSXRef("baseline-shift")}} and {{CSSXRef("baseline-source")}} properties. (Firefox bug 1830771).

  • The <container-query> part of the {{cssxref("@container")}} at-rule condition is now optional. This allows matching against containers based solely on their names. (Firefox bug 2016474).

APIs

DOM

  • The HTMLSelectElement.showPicker() method is now supported for a list of options defined in a {{htmlelement("datalist")}}. This allows the browser picker for a <datalist> to be programmatically launched when triggered by user interaction (Firefox bug 1998668).

  • The {{domxref("CloseWatcher")}} interface is now supported. This allows developers to implement components that can be closed using device-native mechanisms, such as the Esc on Windows or the Back key on Android, in the same way as built-in components such as dialogs and popovers. (Firefox bug 1966073).

  • DOM methods now allow wider range of characters for element and attribute names. Previously, DOM methods were far more restrictive, but now they allow the same set of characters as the HTML parser. The affected methods are: {{domxref("Document/createAttribute","createAttribute()")}}, {{domxref("Document/createAttributeNS","createAttributeNS()")}}, {{domxref("Document/createElement","createElement()")}} and {{domxref("Document/createElementNS","createElementNS()")}} of the {{domxref("Document")}} interface, {{domxref("Element/toggleAttribute","toggleAttribute()")}}, {{domxref("Element/setAttribute","setAttribute()")}}, {{domxref("Element/setAttributeNS","setAttributeNS()")}} of the {{domxref("Element")}} interface, {{domxref("DOMImplementation/createDocument","createDocument()")}} of the {{domxref("DOMImplementation")}} interface, and {{domxref("CustomElementRegistry/define","define()")}} and {{domxref("CustomElementRegistry/whenDefined","whenDefined()")}} of the {{domxref("CustomElementRegistry/whenDefined","whenDefined()")}} interface. (Firefox bug 1773312).

Media, WebRTC, and Web Audio

  • The {{domxref("HTMLMediaElement.captureStream()")}} method is now supported. This returns an object that streams the real-time capture of the content in the element. The stream can be used, for example, as a source for a WebRTC {{domxref("RTCPeerConnection")}}. Previously, captureStream() was available only as the non-standard mozCaptureStream() method. (Firefox bug 2017708).

  • {{domxref("MediaElementAudioSourceNode")}} now respects the media element's volume when capturing audio for all types of sources (as required by the specification). Previously, setting the volume of the element did not affect the captured audio for {{domxref("MediaStream")}} sources. (Firefox bug 2010427).

  • The {{domxref("HTMLMediaElement.captureStream()", "HTMLMediaElement.mozCaptureStream()")}} method now captures raw audio from the source without applying the media element's volume, regardless of the type of source the media element is playing (as required by the specification). Prior to this change, the media element's volume affected the volume of the captured stream. (Firefox bug 2010427).

WebDriver conformance (WebDriver BiDi, Marionette)

General

  • Updated the screenshot implementations for both the WebDriver BiDi and WebDriver classic protocols to correctly return an error when the requested screenshot area exceeds the maximum supported dimensions, rather than silently clipping it. (Firefox bug 1994148).
  • Updated the Actions implementation for both the WebDriver BiDi and WebDriver classic protocols to allow a scroll action of input source type wheel to scroll more than the visual viewport dimensions. (Firefox bug 1962355).

WebDriver BiDi

  • Added support for automatic user prompt handling, which can be configured through capabilities with the session.new command. (Firefox bug 1905086).
  • Added the browser.setDownloadBehavior command, which lets clients allow or prohibit the downloads and also set a custom download folder. This behavior can be configured per session or per user contexts. (Firefox bug 1989022).
  • Added the script.realmCreated and script.realmDestroyed events for worker realms (for dedicated, shared and service workers). (Firefox bug 1936770).
  • Fixed an issue where the browsingContext.userPromptOpened and browsingContext.userPromptClosed events incorrectly reported the top-level context ID instead of the iframe's context ID on Android. (Firefox bug 2007385).
  • Fixed the serialization for DOM nodes to stop exposing User Agent specific shadow roots. (Firefox bug 2016673).
  • Updated the logic of applying different settings to new browsing contexts to make sure that in the case of creating a browsing context with the window.open command, emulations, viewport overrides and preload scripts apply before the command returns. (Firefox bug 1985997, Firefox bug 2005546, and Firefox bug 2005558).

Marionette

  • Improved several WebDriver classic commands to handle implicit and pageLoad timeouts in line with the script timeout, allowing null values to disable the timeouts. (Firefox bug 2008345).

Changes for add-on developers

  • Adds initial support for split view. This support covers:
    • Inclusion of the split view ID in {{WebExtAPIRef("tabs.query")}}, {{WebExtAPIRef("tabs.onUpdated")}}, and {{WebExtAPIRef("tabs.Tab")}}
    • Documentation of the behavior when {{WebExtAPIRef("tabs.move")}} or {{WebExtAPIRef("tabs.remove")}} include tabs in a split view. (Firefox bug 1993037)
  • Adds support for tabId as a top-level parameter in {{WebExtAPIRef("action.isEnabled")}} and {{WebExtAPIRef("browserAction.isEnabled")}}. This change provides for compatibility with the Chrome implementation of action.isEnabled. (Firefox bug 2013477)
  • A user gesture is no longer required for {{WebExtAPIRef("action.openPopup")}} and {{WebExtAPIRef("browserAction.openPopup")}} to open a popup. This feature was available behind the extensions.openPopupWithoutUserGesture.enabled preference from Firefox 108. This change aligns Firefox's behavior with Chrome and Safari. (Firefox bug 1799344)
  • If windowId is passed in {{WebExtAPIRef("action.openPopup")}} or {{WebExtAPIRef("browserAction.openPopup")}}, the window must be focused (active) for the popup to open. To open a popup in an unfocused window {{WebExtAPIRef("windows.update","windows.update(windowId, { focused: true })")}} must be called first. This change aligns Firefox behavior with Chrome. (Firefox bug 2011516)
  • The ability of extensions to dynamically execute code in their moz-extension: documents with {{WebExtAPIRef("tabs.executeScript")}}, {{WebExtAPIRef("tabs.insertCSS")}}, {{WebExtAPIRef("tabs.removeCSS")}}, {{WebExtAPIRef("scripting.executeScript")}}, {{WebExtAPIRef("scripting.insertCSS")}}, and {{WebExtAPIRef("scripting.removeCSS")}} is deprecated. (Firefox bug 2011234) The feature is no longer available in Firefox Nightly, and the beta and release versions of Firefox provide a warning in the tab's console. This restriction will apply to all versions of Firefox 152 and later. (Firefox bug 2015559) As an alternative, an extension can run code in its documents dynamically by registering a {{WebExtAPIRef("runtime.onMessage")}} listener in the document's script, then sending a message to trigger execution of the required code.
  • The implicit CSS filter applied to page action SVG icons on dark themes is deactivated in Nightly builds (Firefox bug 2001318) and will be deactivated in other Firefox editions from version 152 (Firefox bug 2016509). You can test page action SVG icons with the CSS filter disabled in other Firefox editions by creating a boolean about:config preference called extensions.webextensions.pageActionIconDarkModeFilter.enabled and setting it to false.

Experimental web features

These features are shipping in Firefox 149 but are disabled by default. To experiment with them, search for the appropriate preference on the about:config page and set it to true. You can find more such features on the Experimental features page.

  • <attr-type> values in attr() CSS function: layout.css.attr.enabled

    The {{cssxref("attr")}} CSS function now supports <attr-type> values. This allows you to specify how an attribute value is parsed into a CSS value and take those values directly from data-*. (Firefox bug 1986631 & Firefox bug 1998245).

  • color-mix() accepts multiple color arguments: layout.css.color-mix-multi-color.enabled

    The color-mix() CSS function now supports multiple <color> values, rather than just two. This allows you to mix many colors and set the percentages of each. (Firefox bug 2007772).

  • Media-based pseudo-classes: dom.media.pseudo-classes.enabled

    The media-based pseudo-classes {{cssxref(":buffering")}}, {{cssxref(":muted")}}, {{cssxref(":paused")}}, {{cssxref(":playing")}}, {{cssxref(":seeking")}}, {{cssxref(":stalled")}}, and {{cssxref(":volume-locked")}} allow you to style {{htmlelement("audio")}} and {{htmlelement("video")}} elements based on their current state, such as playing or paused. (Firefox bug 1707584, Firefox bug 2014512).

  • alpha & colorspace attributes in color input elements (Nightly only): dom.forms.html_color_picker.enabled

    The HTML <input type="color"> element supports alpha & colorspace attributes. (Firefox bug 1919718).

  • @container style() queries (Nightly): layout.css.style-queries.enabled

    The @container CSS at-rule supports style() queries. This allows you to check if a container has a valid CSS declaration, a CSS property, or a custom property, and apply styles to its children accordingly. (Firefox bug 2014404).

  • CSS Typed Object Model Level 1: layout.css.typed-om.enabled

    The CSS Typed Object Model Level 1 specification is being implemented. In this release, support for the {{domxref("CSSNumericValue/to","to()")}} method of the {{domxref("CSSNumericValue")}} interface was added, allowing the conversion of a CSS numeric value from one unit to another. (Firefox bug 1278697).

  • JPEG XL image support: Rust-based decoder: image.jxl.enabled

    The previous C++ JPEG XL image decoder has been replaced with a new Rust-based implementation that uses the jxl-rs library. (Firefox bug 1986393).