|
| 1 | +--- |
| 2 | +title: Firefox 139 for developers |
| 3 | +slug: Mozilla/Firefox/Releases/139 |
| 4 | +page-type: firefox-release-notes |
| 5 | +sidebar: firefoxsidebar |
| 6 | +--- |
| 7 | + |
| 8 | +This article provides information about the changes in Firefox 139 that affect developers. Firefox 139 was released on [May 27, 2025](https://whattrainisitnow.com/release/?version=139). |
| 9 | + |
| 10 | +## Changes for web developers |
| 11 | + |
| 12 | +### Developer Tools |
| 13 | + |
| 14 | +### HTML |
| 15 | + |
| 16 | +- The [`hidden=until-found`](/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#the_hidden_until_found_state) HTML attribute and the [`beforematch` event](/en-US/docs/Web/API/Element/beforematch_event) are now supported. |
| 17 | + The _hidden until found_ state allows you to hide the contents of an element until it is found by user search (for example, using "Find in page") or by fragment navigation. |
| 18 | + The `beforematch` event fires just before the `hidden` attribute is removed ([Firefox bug 1761043](https://bugzil.la/1761043) and [Firefox bug 1955379](https://bugzil.la/1955379)). |
| 19 | + |
| 20 | +#### Removals |
| 21 | + |
| 22 | +### CSS |
| 23 | + |
| 24 | +#### Removals |
| 25 | + |
| 26 | +### JavaScript |
| 27 | + |
| 28 | +- The Temporal API is now supported, this aims to simplify working with dates and times in various scenarios, with built-in time zone and calendar representations ([Firefox bug 1912511](https://bugzil.la/1912511) and [Firefox bug 1954138](https://bugzil.la/1954138)). |
| 29 | + This includes: |
| 30 | + - A **duration** (difference between two time points): {{jsxref("Temporal.Duration")}} |
| 31 | + - **Points in time**: |
| 32 | + - As a unique instant in history: |
| 33 | + - A timestamp: {{jsxref("Temporal.Instant")}} |
| 34 | + - A date-time with a time zone: {{jsxref("Temporal.ZonedDateTime")}} |
| 35 | + - **Time-zone-unaware date/time ("Plain")**: |
| 36 | + - Date (year, month, day) + time (hour, minute, second, millisecond, nanosecond): {{jsxref("Temporal.PlainDateTime")}} |
| 37 | + - Date (year, month, day): {{jsxref("Temporal.PlainDate")}} |
| 38 | + - Year, month: {{jsxref("Temporal.PlainYearMonth")}} |
| 39 | + - Month, day: {{jsxref("Temporal.PlainMonthDay")}} |
| 40 | + - Time (hour, minute, second, millisecond, nanosecond): {{jsxref("Temporal.PlainTime")}} |
| 41 | + - **Now** (current time) as various class instances, or in a specific format: {{jsxref("Temporal.Now")}} |
| 42 | +- Currently the following calendar types are disabled for the `withCalendar()` method for [`PlainDate`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/withCalendar), [`PlainDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/withCalendar), and [`ZonedDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/withCalendar) objects: |
| 43 | + - `islamic` |
| 44 | + - `islamic-rgsa` |
| 45 | + - `islamic-umalqura` |
| 46 | + |
| 47 | +#### Removals |
| 48 | + |
| 49 | +### SVG |
| 50 | + |
| 51 | +#### Removals |
| 52 | + |
| 53 | +### HTTP |
| 54 | + |
| 55 | +#### Removals |
| 56 | + |
| 57 | +### Security |
| 58 | + |
| 59 | +#### Removals |
| 60 | + |
| 61 | +### APIs |
| 62 | + |
| 63 | +#### DOM |
| 64 | + |
| 65 | +- The {{domxref("HTMLDialogElement/requestClose", "requestClose()")}} method of the {{domxref("HTMLDialogElement")}} interface is now supported. |
| 66 | + This allows developers to conditionally prevent a dialog from closing by providing a [`cancel` event](/en-US/docs/Web/API/HTMLDialogElement/cancel_event) handler. |
| 67 | + ([Firefox bug 1960556](https://bugzil.la/1960556)). |
| 68 | +- The [`largeBlob`](/en-US/docs/Web/API/Web_Authentication_API/WebAuthn_extensions#largeblob) and [`credProps`](/en-US/docs/Web/API/Web_Authentication_API/WebAuthn_extensions#credprops) Web Authentication extensions are now supported, while the [`prf`](/en-US/docs/Web/API/Web_Authentication_API/WebAuthn_extensions#prf) extension is supported on all desktop platforms. |
| 69 | + These respectively provide support for large blob storage associated with a credential, additional information about a credential, and a mechanism for generating a random number associated with a credential and a particular input. |
| 70 | + ([Firefox bug 1795020](https://bugzil.la/1795020), [Firefox bug 1844449](https://bugzil.la/1844449), [Firefox bug 1935280](https://bugzil.la/1935280)). |
| 71 | + |
| 72 | +#### Media, WebRTC, and Web Audio |
| 73 | + |
| 74 | +#### Removals |
| 75 | + |
| 76 | +### WebAssembly |
| 77 | + |
| 78 | +#### Removals |
| 79 | + |
| 80 | +### WebDriver conformance (WebDriver BiDi, Marionette) |
| 81 | + |
| 82 | +#### General |
| 83 | + |
| 84 | +- The priority manager (on macOS, the background QoS manager) in Firefox, which manages IPC message prioritization between the parent and content processes, has been temporarily disabled for all supported Remote Protocols. This change resolves an issue where, under high system load, initial page loads in newly opened background tabs were not being scheduled, resulting in certain commands hanging ([Firefox bug 1960734](https://bugzil.la/1960734)). |
| 85 | + |
| 86 | +#### WebDriver BiDi |
| 87 | + |
| 88 | +- Implemented the `emulation.setGeolocationOverride` command, allowing tests and automation tools to simulate geographic locations across specified browsing contexts or user contexts. This enables consumers to test location-aware features such as geofencing for local recommendations ([Firefox bug 1954992](https://bugzil.la/1954992)). |
| 89 | + |
| 90 | +## Changes for add-on developers |
| 91 | + |
| 92 | +- Localized extensions now cascade through locale subtags to find translations before reverting to the extension's default language. Previously, the extension used the extension default if a translation couldn't be found for a language with subtags. See [Localized string selection](/en-US/docs/Mozilla/Add-ons/WebExtensions/Internationalization#localized_string_selection) in the Internationalization article for more details of the new behavior. ([Firefox bug 1381580](https://bugzil.la/1381580)) |
| 93 | +- Content scripts and styles are now guaranteed to execute in the order of registration (i.e., their order in the [`content_scripts` manifest key array](/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts)). Previously, the order was only guaranteed for scripts within the same `js` array. ([Firefox bug 1792685](https://bugzil.la/1792685)) |
| 94 | +- The {{WebExtAPIRef("tabGroups")}} API is now available. This API enables extensions to modify and rearrange [tab groups](https://support.mozilla.org/en-US/kb/tab-groups). For more information, see [WebExtensions Support for Tab Groups](https://blog.mozilla.org/addons/2025/04/30/webextensions-support-for-tab-groups/). ([Firefox bug 1940631](https://bugzil.la/1940631)) |
| 95 | + |
| 96 | +### Removals |
| 97 | + |
| 98 | +### Other |
| 99 | + |
| 100 | +## Experimental web features |
| 101 | + |
| 102 | +These features are newly shipped in Firefox 139 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](/en-US/docs/Mozilla/Firefox/Experimental_features) page. |
| 103 | + |
| 104 | +- **Prioritized Task Scheduling API** (Nightly release). |
| 105 | + The [Prioritized Task Scheduling API](/en-US/docs/Web/API/Prioritized_Task_Scheduling_API) provides a standardized way to prioritize all tasks belonging to an application, whether they are defined in a website developer's code, or in third-party libraries and frameworks. |
| 106 | + This adds support for the {{domxref("scheduler.yield()")}} method and re-enables the whole API in the Nightly release. |
| 107 | + ([Firefox bug 1958943](https://bugzil.la/1958943), [Firefox bug 1920115](https://bugzil.la/1920115)). |
| 108 | +- **View Transition API** (Nightly release). |
| 109 | + The [View Transition API](/en-US/docs/Web/API/View_Transition_API) has been enabled for [SPAs (single-page applications)](/en-US/docs/Glossary/SPA). It provides a mechanism for easily creating animated transitions between different website views. ([Firefox bug 1950759](https://bugzil.la/1950759)). |
| 110 | +- **Support for escaping `<` and `>` in attributes when serializing HTML**: `dom.security.html_serialization_escape_lt_gt`. |
| 111 | + Firefox now replaces the `<` and `>` characters with `<` and `>`, respectively, in attributes when serializing HTML. This helps prevent certain exploits where HTML is serialized and then injected back into the DOM. |
| 112 | + The affected methods and properties are: {{domxref("Element.innerHTML")}}, {{domxref("Element.outerHTML")}}, {{domxref("Element.getHTML()")}}, {{domxref("ShadowRoot.innerHTML")}}, and {{domxref("ShadowRoot.getHTML()")}}. ([Firefox bug 1941347](https://bugzil.la/1941347)). |
| 113 | +- **Disable non-standard `beforescriptexecute` and `afterscriptexecute`**: `dom.events.script_execute.enabled`. |
| 114 | + The events have been disabled on Nightly only, allowing browser testing prior to their removal. |
| 115 | + The affected events are: [`beforescriptexecute`](/en-US/docs/Web/API/Document/beforescriptexecute_event) and [`afterscriptexecute`](/en-US/docs/Web/API/Document/afterscriptexecute_event) on the {{domxref("Document")}} interface, and [`afterscriptexecute`](/en-US/docs/Web/API/Element/afterscriptexecute_event) and [`beforescriptexecute`](/en-US/docs/Web/API/Element/beforescriptexecute_event) on the {{domxref("Element")}} interface. ([Firefox bug 1954685](https://bugzil.la/1954685)). |
| 116 | + |
| 117 | +## Older versions |
| 118 | + |
| 119 | +{{Firefox_for_developers}} |
0 commit comments