Three Cheers for Volunteers! – These Weeks in Firefox: Issue 211
Highlights
- Here are some big-ticket volunteer contributions this week:
- Thank you to volunteer contributor Cornelius, who made console evaluation able to re-declare let and const variables in our DevTools!
- Thank you to F3tch, who landed several patches to allow setting of camera and microphone permissions, reject zero-sized screenshots, and add a vendor-specific WebDriver BiDi command for listing installed extensions, as well as update cookie test expirations.
- Thank you to SMRehan, who landed a (disabled by default) mode that lets Picture-in-Picture open when the browsing window is occluded (as opposed to when changing tabs).
- This can be tested by setting media.videocontrols.picture-in-picture.enable-when-occluded.enabled to true
- In Nightly 160, we have enabled the playback speed feature for Picture-in-Picture by default:
Thank you to volunteer contributor Simon Rosen for the bulk of the initial work on this!
- The custom wallpaper library for newtab is now available, starting in Firefox 158, so you can now store multiple custom wallpapers:
![]()
Friends of the Firefox team
Resolved bugs (excluding employees)
Script to find new contributors from bug list
Volunteers that fixed more than one bug
- :Vincent
- Amadi
- any1here
- Duncan McIntosh [:dmcintosh]
- f3tch [:f3tchcodes]
- ianlewisuk1
- Ivan Smagin
- Khalid AlHaddad
- Logan Rosen [:Logan]
- Mayank Bansal
- Vir Patel
New contributors (🌟 = first patch)
- Ahmed ElGendy: Add a `(inline-)grid-lanes` badge in the markup view for element with display: (inline-)grid-lanes
- Mubashshir: Extension icon missing in old sidebar switcher
- Anton Bershanskyi: Introduce browser.runtime.PlatformArch.ARM64
- Amadi:
- Caleb Pickard: New sidebar revision does not have “By Most Visited” as a sort option for History
- Daniel mungai chege: Add autocomplete for CSS random()
- dchen705: syntax and handling of async runtime.onMessage listeners is confusing
- Diego: Pressing ctrl+shift+numpad1 causes tab to be moved to end of tab list regardless of NumLock
- f3tch [:f3tchcodes]:
- “WebDriver:TakeScreenshot” doens’t throw “unable to capture screen” error if height or width of captured image is 0
- Increase expiry date range for network cookie tests
- [wdspec] ValueError: “list.remove(x): x not in list” for “self.event_listeners[name].remove(fn)”
- [firefox-devtools-mcp] Support webextensions.moz:listExtensions command in WebDriver BiDi
- Allow “permissions.setPermission” and “WebDriver:SetPermission” to set camera and microphone permissions
- Ole Baumann [:darkintaqt]:
- ianlewisuk1:
- Jakub Stasiak [:jstasiak]: Early WebSocket messages can be missing in the Network tab
- Jaron: Show the remote control stripe on the address bar only
- 🌟 Lavindeep: Subprocess fcntl binding is not variadic, causing incorrect pipe flags and possible native-host launch failures on Apple silicon
- 🌟 Sho Sakuma: Fix WP_WIN and WP_MACOSX typos in LaunchChild’s #endif comments
- Raúl: Remove dead PanelUI-fxa-menu-setup-sync-container from the account menu
- 🌟 Jason Salerno: Remove the unused tooltip attribute from the urlbar view markup
- Ivan Smagin:
- Nazeer Ahmed Shaikh: Instrumentation tests on artifact builds do not check `object` metric schema
- Vir Patel:
- Valerie Racine (:v-racine): The corrupt_file telemetry metric counts unrecognised session file read errors as healthy files
- 🌟 Yeet: Saved tab groups not actually saved if browser crashes
Project Updates
Add-ons / Web Extensions
Addon Manager & about:addons
- Removed the colorway migration code and the about:addons UI informing users about colorways on AMO – Bug 1990883
- Thanks to Jason Birchall (from AMO engineering) for collaborating with us on this.
- As part of about:addons Nova restyling followups
- Parameterized the built-in theme preview images, and fixed the default theme previews rendering with the wrong colors when about:addons uses the opposite color scheme (regression introduced and fixed within Firefox 158) – Bug 2070289 / Bug 2074428
- Thanks to Emilio Cobos Álvarez for driving the theme preview parameterization.
- Fixed the Nova theme preview gradients being mirrored in RTL locales – Bug 2073245
- Hid the (non-localized) theme card descriptions in the about:addons themes list view, fixed in Firefox 158 and uplifted to Firefox 157 – Bug 2071337
- Fixed the per-add-on-card message bar styling in about:addons to better match the Nova designs – Bug 2079672
- Parameterized the built-in theme preview images, and fixed the default theme previews rendering with the wrong colors when about:addons uses the opposite color scheme (regression introduced and fixed within Firefox 158) – Bug 2070289 / Bug 2074428
- Avoided redundant AMO metadata update checks when the app locale is unchanged – Bug 2052032
- Added options to AddonManager.getInstallForURL to validate the add-on type, id and/or version before installing – Bug 1973071
- Dictionary add-ons are now required to be signed, starting in Firefox 160 – Bug 1753276
WebExtensions Framework
- As part of work to refactor about:newtab built-in widgets in their own privileged extensions, allowed about:newtab pages to load extension pages as subframes without listing them in web_accessible_resources – Bug 2070235
- Improved pref handling in the test_ext_contentscript_module_import.js xpcshell test by using pref_set – Bug 1986064
- Thanks to Ivan Smagin for the cleanup in the content script module import test.
WebExtension APIs
- Fixed publicSuffix.isKnownSuffix to throw for invalid host names, in line with the API proposal, MDN and Chromium – Bug 2066620
- Added runtime.getVersion() – Bug 1992418
- Thanks to Carlos for implementing the new runtime API method.
- Introduced runtime.PlatformArch.ARM64 (replacing AARCH64) to match Chromium, landing in Firefox 160 – Bug 2080310
- Thanks to Anton Bershanskyi for the runtime.PlatformArch rename.
- Stopped exposing non-browser windows in windows.onFocusChanged, fixing a “gBrowserInit is undefined” error hit through tabs.query – Bug 1634240
- Fixed sessions.forgetClosedTab() forgetting the wrong tab when the window has a closed tab group – Bug 2076684
- Thanks to Dão Gottwald for investigating and fixing this bug hit by the sessions API.
- Fixed extension menu items being unreachable by accesskey, including items with Chinese, Japanese or Korean labels – Bug 2074182 / Bug 2075142
- Thanks to Dão Gottwald for driving these menus accesskey fixes.
- Added a warning when sendResponse is called by an async runtime.onMessage listener, landing in Firefox 160 – Bug 1877223
- Thanks to dchen705 for the runtime.onMessage warning.
DevTools
External contributions
- Jakub Stasiak fixed an issue in the Netmonitor where we could miss early WebSocket messages (#1719394)
- Amadi localized string in Debugger search panel (#2035151)
- Daniel mungai chege added autocomplete in the Rules view for the random() function (#2072513)
- Ahmed ElGendy added (inline-)grid-lanes badges in the markup view for element with display: (inline-)grid-lanes (#2076779)
- Khalid AlHaddad removed an unused argument in the KeyShortcuts constructor (#1979386)
Team/Project Update
- Florian Quèze [:florian] made DevTools splitters keyboard accessible (#1860733) and fixed numerous other accessibility issues across the toolbox (#2071228, #2071230, #2071232, #2071233, #2071236, #2075809, #2075820)
- Leo McArdle [:leo] started modernizing the DevTools Settings panel (#2072146, #2072216, #2074393, #2074399)
- Nicolas Chevobbe [:nchevobbe] Handle percentage in CSS explainers tooltip (#2041621) and show the tooltip for single non-pixels values (#2074405, #2064400)
![]()
-
- (pref: devtools.inspector.css-explainers)
- Hubert Boma Manilla (:bomsy) is working on adding support for speculation rules in DevTools. Prefetched requests can now be identified in the Netmonitor (#2077519) and he plans to add more information about speculations rules in a dedicated tab in the Application panel (#2077995, #2078853)
![]()
WebDriver
- Beatriz Rizental improved the Marionette harness to accept multiple –tag arguments similar to other in-tree harnesses.
- Khalid AlHaddad improved the PollPromise to throw an error by default and not only log a warning when it times out.
- Alexandra Borovova added support for the imageSize argument to the browsingContext.captureScreenshot command, which allows clients to specify the maximum size of the resulting screenshot image.
- Alexandra Borovova added support for the destinationFolder argument to the browsingContext.startScreencast command, which allows clients to choose the folder where the recorded video file is saved.
- Alexandra Borovova implemented the support for the prefers-color-scheme parameter in the emulation.setMediaFeaturesOverride command, which lets clients emulate dark or light mode on a website.
- Henrik Skupin improved the handling of recommended preferences for automation to use the default branch, preventing them from leaking into subsequent Firefox sessions.
- Henrik Skupin fixed a bug where accepted server sockets still had Nagle’s algorithm enabled, causing up to 40ms delays for back-to-back writes on Linux.
- Henrik Skupin improved geckodriver’s shutdown handling by waiting for Firefox’s hang monitor to terminate hung processes before force-killing them.
- Henrik Skupin added a temporary workaround to prevent Glean from causing shutdown hangs for short-lived Firefox processes.
- Holger Benl added machine-readable CDDL for all Firefox WebDriver BiDi vendor extensions (“moz:” commands, events, parameters, capabilities…).
- Privileged context support was added to browsingContext.locateNodes and input.performActions by Holger Benl, and to browsingContext.captureScreenshot by Julian Descottes.
- Julian Descottes fixed the network.getData command to handle 304 – Not Modified responses with no timeouts.
Fluent
- Shout out to flod who’s started to chip away again at migrating .properties files to Fluent!
- For the first time since we started tracking, there are fewer than 4000 .properties strings in the Firefox source code!
Migration Improvements
- spohl is working on a stack of patches that’ll update the migration workflow for macOS 27 to reduce the number of data access permission warnings that users see
New Tab Page
- We’re testing a few different layout variations in the wild – one of them is a few different takes on “spaces”:
![]()
- The MCAB search input is currently being deployed to a small population in the wild to see how it works / is received
![]()
- A train-hop is scheduled to be deployed this week which should make widgets available for all users (though for most users, these will be disabled by default – they’ll be available to enable in the customize panel).
![]()
- Reem Hamoui removed the Enzyme/Karma test infrastructure from the New Tab Page, which is a CI/dev tooling change with no direct runtime user impact but should reduce test maintenance and flakiness for future user-facing fixes.
- Jack Brown switched New Tab message visibility checks to an IntersectionObserver so messages below the fold are no longer marked as activeNotifications, preventing offscreen messages from being targeted and avoiding unnecessary JS evaluation when not visible.
- Jack Brown cleared activeNotification targeting when navigating away from about:newtab so message targeting no longer persists after leaving the page, preventing carry‑over interactions and incorrect metrics attribution.
- akulyk [a11y] fixed dialog focus containment on the New Tab Page by enforcing a focus trap and proper Tab/Shift-Tab handling, restoring expected keyboard and screenreader workflows for modal dialogs.
- Scott fixed pocket.click and topsite.click to trigger context menus correctly, restoring right-click/long-press context menus on Pocket tiles and Top Sites so users can access actions like open-in-new-window and remove.
- Maxx Crawford updated per-widget Jest fixtures for Stocks, Privacy and Picture of the Day to omit the widgets.enabled flag in test setups Per-widget Jest fixtures for Stocks, Privacy and Picture of the Day omit widgets.enabled, which aligns test fixtures with runtime enablement behavior and reduces CI flakes and regression risk for those widgets; there is no runtime UI change for end users but widget rendering tests should be more reliable.
- Maxx Crawford removed the Sports widget from the New Tab Page and widget picker, which directly removes sports headline/cards from users’ NTP experience (users who had Sports selected will no longer see it) and slightly reduces client-side DOM/paint work and widget surface area for future NTP changes. It also removed about 1MB of image / video assets from the omni.ja / newtab XPI.
- Maxx Crawford added region/locales dynamic control for the Weather widget, allowing users to change the Weather card’s region/locale on New Tab so forecasts and localized labels update immediately.
- Herraj Luhano updated the POTD API contract to return the previous day’s POTD, enabling the New Tab image module to fetch and display yesterday’s Picture of the Day to avoid empty or stale image slots.
- Nina Pypchenko [:nina-py] re-ordered New Tab settings in about:preferences, improving discoverability by placing New Tab controls in a more consistent, prominent location for users managing Start Page options.
- Dre standardized context menu button UI across all widgets, unifying markup, CSS variables and ARIA to make context-menu hit areas and keyboard focus consistent across widget surfaces.
- Dre standardized header typography across all widgets, aligning font sizes, line-heights and tokens so widget headers render consistently on New Tab pages.
- Maxx Crawford updated WallpaperFeatureHighlight to allow for alternate strings to be injected so the New Tab wallpaper feature highlight UI can show injected copy variants (for localization or experiments), which directly changes the text users see in the wallpaper picker/highlight flow and should be monitored for clarification/regression in impressions and CTA click rates.
- David Durfee landed a meta change to enable score-based selection for sponsored tiles in the New Tab experiment, which replaces the previous selection heuristic with a ranking/scoring pipeline so experiment cohorts may see different sponsored tiles on New Tab (affects which ads/content are shown, sponsored impressions/CTR, and A/B metrics for desktop and mobile New Tab surfaces).
- Nina Pypchenko renamed the Stocks widget to “Finance” on the New Tab Page, updating the activity-stream UI/i18n label users see in the widget header.
- Brendan Birdsong adjusted the newtab score-based selection to sum day counts from remote-settings config, which can change which cards/tiles are selected and their ordering for users depending on remote config values.
- Scott Downe removed the discoverystream.optIn-region-weather-config pref from newtab, a config cleanup that does not change runtime New Tab UI or user-visible weather opt-in behavior.
- Irene Ni normalized the layout_name value in New Tab DSCard impression telemetry, ensuring consistent impression records for analytics and A/B experiments without altering the UI seen by users.
- Scott Downe removed the telemetry.structuredIngestion.endpoint pref from newtab, removing a pref-based override for structured-ingestion endpoints (affects developer/testing overrides, not regular user behavior).
- Irene Ni removed unused ImpressionStats dispatches from New Tab DSCard clicks, eliminating redundant telemetry dispatches on DSCard click paths with no UI change.
- Irene Ni normalized Top Sites telemetry keys to their Glean extra names, stabilizing telemetry naming for Top Sites without changing user-visible behavior.
- Dre fixed a slight flash when reusing a previously uploaded wallpaper in the New Tab Page, removing a visible flicker for users who set custom uploaded wallpapers.
- Maxx Crawford added a debug pref/setting to revert region controls, enabling targeted rollbacks/enabled testing for affected-region UI behaviors when the pref is toggled.
- Jared Wein fixed TypeScript errors in newtab/lib blocking inclusion in newtab’s tsconfig.json, resolving a build/tooling blocker (developer-only change; no direct user impact).
- Irene Ni made the Spaces arrow-buttons variant background panel occupy the full page height on the New Tab Page, removing a visual gap and ensuring arrow controls stay aligned with page scroll.
- Alexandre Hanot fixed Ads client initialization on Firefox 157 and older so the Ads client now initializes instead of throwing errors on legacy builds, restoring ad content on affected users’ New Tab Pages.
- Dre prevented the Clocks widget menu button from overlapping clocks on hover by adjusting z-index and hover layout, restoring visibility and correct hit targets on the New Tab Page.
- Irene Ni enabled a widget in the first content position of New Tab sections, updating New Tab rendering logic so a prioritized widget slot is populated in the first content position and becomes visible by default to users.
- Jared Wein enabled type checking for newtab/lib with exception for failing files, adding incremental static-analysis/CI checks to catch regressions in newtab code without changing UI behavior today.
- Maxx Crawford set default enabled value to false for all existing widgets, changing widget metadata/prefs so existing widgets are opt-in and will no longer render for users unless explicitly enabled.
- David Durfee added differential privacy noise to scores in newtab score-based selection, anonymizing per-user signals which will alter ranking/discovery behavior on the New Tab page while underscoring privacy guarantees.
- Brendan Birdsong moved newtab score storage to PersistentCache, persisting scores across sessions and reducing recompute/lookup latency so personalized selections are more stable and faster to load.
- Jared Wein fixed more newtab/lib TypeScript errors so 11 more files can be type-checked, enabling type-checking across newtab/lib (11 files) and lowering regression risk for New Tab Page behavior.
- Dre used useWidgetTelemetry in the Weather widget to standardize telemetry for the Weather widget (New Tab Page), improving diagnostic signals that help us find and fix user-facing widget issues faster.
- Maxx Crawford turned off all New Tab widgets in automation with one pref, allowing automation to run with widgets disabled to reduce flakiness in tests that interact with New Tab UI.
- Dre updated the Focus Timer widget to use useWidgetTelemetry, so Focus Timer telemetry now respects widget-level prefs and will avoid sending unguarded pings—privacy impact only, no UI change.
- Nina Pypchenko [:nina-py] fixed transparent New Tab dialogs when the train-hop is applied to Firefox 158 and 159, restoring dialog opacity/CSS so newtab overlays are readable again when train-hop is enabled on those releases.
Picture-in-Picture
- kpatenio fixed a bug on Windows and Linux where clicking a previous control overrides the Space play/pause shortcut.
- kpatenio landed a few patches to make keyboard navigation better when the playback speed control is enabled (Bug 2055070, Bug 2074319).
- As of Nightly 159, the PiP player UI has been updated for Nova. Aside from being visually consistent with Nova, scrubbers and settings panels now have better contrast on High Contrast Mode.
Search and Urlbar
Urlbar
- Dao landed a patch to show the “Search tabs” keyboard shortcut in the search mode switcher menu: 2078113
![]()
- Logan Rosen changed the Accel+Shift+A shortcut from the Add-ons Manager to Search Tabs: 1666654. Dao followed up by notifying people who used the old shortcut that it moved and revised the wording of that message: 2077823, 2079208
- James added an option to skip the menu when tabbing through the address bar, in both the address bar and the preferences page: 2064708, 2068609
- Dao fixed a bug so that entering an address in search mode now navigates to that URL: 2036347
- Dao fixed two urlbar.bounce telemetry bugs: 2069403, 2076827
- Caleb fixed a bug where the address bar results dropdown covered the calculator tail150 game: 2077358
- Daisuke fixed a bug where search terms in the address bar moved when pressing Enter or when edited: 2074921
- Dao fixed the search engine button being cut off in the Search dropdown with Nova enabled: 2074871
- Daisuke fixed the search switcher’s active button color being too strong with low text contrast in Nova: 2068504
- Emilio fixed the Quick Actions background button missing in the Light theme on Ubuntu in Nova: 2076191
- Moritz continued with MCAB (multi-context address bar) follow-on work: 2078231, 2078658, 2078672.
- Moritz also enabled TypeScript type checking for UrlbarView and UrlbarBaseInput: 2077545, 2077543
- Dao significantly improved the address bar docs, including how to add a new search surface end to end, how results and providers work across the process boundary, and how to debug and log the address bar:
Search
- Caleb fixed a bug where the address bar swallowed the first character typed into it if you typed too quickly: 1953361
- Mark continued working on the new search config, search-config-v3: 2063279, 2063264
Places
- Dao fixed a bug where the bookmark creation/editing panel had no keyboard shortcut mnemonic for the Save button: 1877510
Storybook/Reusable Components/Acorn Design System
- Dialogs in about: pages now match Nova designs more closely
- Moz- widgets should now have types found when querying the element with document.querySelector(“moz-button”) and TS is configured
- A11y fixes for profiles dialog, page nav keyboard handling (no longer steals Ctrl+arrows)