305 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	| layout | title | permalink | 
|---|---|---|
| page | Changelog | /changelog/ | 
126.0 (In Development)
125.0
- 
concept-toolabar: - Added a new method for ActionButtonto update the contentDescription and the iconTint, see Bug 1875817.
 
- Added a new method for 
- 
concept-engine - Added onLocationChange#hasUserGestureparameter. This indicates if a location change was requested while a user gesture was active. bug #1804636
 
- Added 
- 
lib-dataprotect - Remove unused KeyUtils.generateEncryptionKeyfunction.
 
- Remove unused 
124.0
- 
feature-prompts: - Added FileUploadsDirCleanerdeletes temporary stale uploaded files, see Bug 1860472.
- ⚠️ This is a breaking change: PromptFeaturenow requires aFileUploadsDirCleanerto be constructed
 
- Added 
- 
browser-state - BrowserStoreand the- TabListReducerwill no longer automatically select a normal tab when all private tabs are removed. Bug 1861459
 
- 
all components - All new usages of the concept-fetchcomponent to make fetch requests now have conservative-mode off by default. Current features will continue to use conservative mode until individually updated.
 
- All new usages of the 
- 
browser-toolbar - Add showMenuButtonandhideMenuButtonAPI toBrowserToolbarandDisplayToolbarto allow hiding and showing of the menu button in theBrowserToolbarBug 1864760
 
- Add 
- 
feature-customtabs - Fallback behaviour when failing to open a new window in custom tab will now be loading the URL directly in the same custom tab. Bug 1832357
 
- 
feature-session - Update URL in the store immediately when using the optimized load URL code path.
 
- 
tooling-lint - Added a lint rule to detect when Response#closemay not have been called. Note: Currently, this rule only runs on Android Components.
 
- Added a lint rule to detect when 
123.0
- 
feature-customtabs - Sharing a URL from a custom tab always uses the current url of the session. Bug 1831803
 
122.0
- 
concept-engine - Add reportBackInStockAPI toEngineSessionto allow reporting a shopping product is back in stock. Bug 1858947
- Add emailTrackerBlockingPrivateBrowsingAPI toSettingsto toggle Email Tracker Blocking in Private Browsing Mode Bug 1866927
 
- Add 
- 
feature-media - Added FOREGROUND_SERVICE_MEDIA_PLAYBACKpermission to theAndroidManifest.xml.
 
- Added 
- 
support-utils - Recognize IPv6 literals in the address bar. Bug 1803465
 
- 
browser-engine-gecko - Enable nested scrolling on GeckoEngineViewas required byNestedGeckoView. Bug 1847305
- NestedGeckoViewnow disallows touch interception until we receive a response from- GeckoView#onTouchEventForDetailResult. Bug 1847305
- Add globalPrivacyControlEnabledsetting to allow enabling Global Privacy Control in normal browsing. This is always enabled in private browsing. Bug 1865357
- Adds support to toggle Email Tracker Blocking in Private Mode with new emailTrackerBlockingPrivateBrowsingAPI Bug 1866927
 
- Enable nested scrolling on 
- 
samples-browser - Use VerticalSwipeRefreshLayoutfrom AndroidComponents instead of AndroidXSwipeRefreshLayoutto represent better Fenix behavior
 
- Use 
- 
places-bookmark-storage: - Added countBookmarksInTreesto more efficiently determine how many bookmarks exist under part or parts of a bookmarks tree, which is taken advantage of byDesktopFolders.
 
- Added 
- 
support-base - Make messageparam non optional for the Logging APIs. Bug 1867606
 
- Make 
- 
nimbus - Add nimbus-is-readyfeature and call Nimbus'recordIsReadywhen the Nimbus API is ready Bug 1875515.
 
- Add 
121.0
- 
browser-state: - Added TranslationsStateto track translation and translation restoration status. Bug 1844523
 
- Added 
- 
browser-engine-gecko: - Added support for translating and restoring a translated page on the engine. Bug 1844523
 
- 
service-location - Added a cache lifetime to MozillaLocationService. Bug 1855562
 
- Added a cache lifetime to 
- 
feature-search - RegionManagernow uses the cached result from it's- LocationService. Bug 1854988
 
120.0
- 
feature-tabs - Adds parameter to TabCounterToolbarButtonto show the mask while in private browsing mode.
 
- Adds parameter to 
- 
feature-readerview - Adds UUIDCreatortoReaderViewFeatureto create UUIDs for cache keys.
- Moves the implementation of presenting Reader Mode from the content scripts to ReaderViewFeature
 
- Adds 
- 
browser-state - SessionState.isProductUrlis not affected for private tabs as shopping mode is disabled in private tabs. Bug 1847063
- SessionState.isProductUrlhas been moved to- ContentState.isProductUrl. Bug 1857287
 
119.0
- 
feature-tabs - Removed deprecated TabsUseCases.AddNewPrivateTabUseCase. Bug 1853070
 
- Removed deprecated 
- 
lib-crash-sentry - SentryService.initIfNeededis now public. Bug 1851676
 
- 
feature-downloads - Added a custom permission ${applicationId}.permission.RECEIVE_DOWNLOAD_BROADCASTthat needs to be used by apps in order to receive download related broadcasts
 
- Added a custom permission 
- 
ui-tabcounter - Adds a mask overlay to the tabcounter that can be shown with toggleCounterMask.
 
- Adds a mask overlay to the tabcounter that can be shown with 
- 
feature-push - We will no longer report RecordNotFoundExceptionto theCrashReporteras it's largely a (web) application side reason why these messages are still trying to be delivered.
 
- We will no longer report 
- 
feature-awesomebar - Search engine suggestions will only be displayed if the user inputs at least 2 characters and matches the starting characters of the search engine name. Bug 1851012
 
- 
logins-storage - Removed SQLCipher logins migration path for users from v95 and below
- ⚠️ This will cause a loss to existing logins if:
- User is using the logins feature and has a version of v95 or below
- User is NOT syncing their logins with another device
- User plans to upgrade from v95 to v119 or above
 
 
- 
support-webextensions - ⚠️ This is a breaking change: Renamed WebExtensionPopupFeaturetoWebExtensionPopupObserverBug 1852335
- Added ExtensionProcessDisabledPopupObserverto display to the user a dialog when the extensions process spawning has been disabled. Bug 1846979
 
- ⚠️ This is a breaking change: Renamed 
- 
concept-engine - 🌟️️ Add reanalyzeProductAPI toEngineSessionto allow reanalyzing product from the engine. See more on Bug 1853309.
- 🌟️️ Add requestAnalysisStatusAPI toEngineSessionto allow request product analysis status from the engine. See more on Bug 1853309.
- 🌟️️ Add sendClickAttributionEventandsendImpressionAttributionEventAPI toEngineSessionto allow sending attribution events. See more on Bug 1853309.
- 🌟️️ Add sendPlacementAttributionEventAPI toEngineSessionto allow sending placement attribution events. See more on Bug 1875106.
 
- 🌟️️ Add 
- 
support-ktx - ⚠️ This is a breaking change: the enterToImmersiveMode()inActivity.kthas been renamed toenterImmersiveMode().
- ⚠️ This is a breaking change: the getWindowInsetsController()inWindow.kthas been renamed tocreateWindowInsetsController().
 
- ⚠️ This is a breaking change: the 
118.0
- 
browser-state 🌟️️ Add isProductUrltoSessionStateinstance to indicate whether or not a product page of a given session state is being displayed. See more on Bug 1842638.
- 
concept-engine - 🌟️️ Add requestProductAnalysisAPI toEngineSessionto allow request product analysis result from the engine. See more on Bug 1840692.
- 🌟️️ Add requestProductRecommendationsAPI toEngineSessionto allow request product recommendations from the engine. See more on Bug 1840693.
 
- 🌟️️ Add 
- 
feature-addons - ⚠️ This is a breaking change: the method getAvailableAddons()inAddonsProviderhas been renamed togetFeaturedAddons().
- ⚠️ This is a breaking change: the AddonCollectionProviderhas been renamed toAMOAddonsProvider.
- ⚠️ This is a breaking change: add new method getAddonIconBitmap()toAddonsProvider.
- ⚠️ This is a breaking change: added getAddonsByGUIDs()method toAddonsProvider.
 
- ⚠️ This is a breaking change: the method 
- 
support-ktx - 🌟Activity.enterToImmersiveMode()now extends the full screen view into the notch area. See more on Bug 1849009
 
- 🌟
- 
browser-engine-gecko: 
- 
Implemented new NimbusExperimentDelegateto allow GeckoView to send and receive Nimbus experiment information. Bug 1843592
- 
Removed deprecated ContentDelegate.onGetNimbusFeature. Please useExperimentDelegate.onGetExperimentFeature. Bug 1843592
117.0
- 
service-nimbus - Add allow-coenrollmentto themessagingfeature, making it possible to enroll in multiple experiments involving messaging.- Modified the mechanism that ties a message back to experiment, to make sure we record exposure events correctly.
 
 
- Add 
- 
ui-icons: - Renamed icons to align with the naming used in the Acorn design system for Firefox. Bug 1840210
- Rename mozac_ic_storage to mozac_ic_storage_24.
- Rename mozac_ic_shield_disabled to mozac_ic_shield_slash_24
- Rename mozac_ic_settings to mozac_ic_settings_24
- Rename mozac_ic_pin_filled_2 to mozac_ic_pin_fill_24
- Rename mozac_ic_warning to mozac_ic_warning_fill_24
- Rename mozac_ic_shield to mozac_ic_shield_24
- Rename mozac_ic_video to mozac_ic_camera_24
- Rename mozac_ic_share to mozac_ic_share_android_24
- Rename mozac_ic_search to mozac_ic_search_24
- Rename mozac_ic_refresh to mozac_ic_arrow_clockwise_24
- Rename mozac_ic_reader_mode to mozac_ic_reader_view_24
- Rename mozac_ic_quit to mozac_ic_cross_circle_24
- Rename mozac_ic_private_browsing to mozac_ic_private_mode_24
- Rename mozac_ic_pin_remove to mozac_ic_pin_slash_24
- Rename mozac_ic_pin to mozac_ic_pin_24
- Rename mozac_ic_password_reveal to mozac_ic_eye_24
- Rename mozac_ic_password_hide to mozac_ic_eye_slash_24
- Rename mozac_ic_notification to mozac_ic_notification_24
- Rename mozac_ic_new to mozac_ic_plus_24
- Rename mozac_ic_microphone to mozac_ic_microphone_24
- Rename mozac_ic_menu to mozac_ic_ellipsis_vertical_24
- Rename mozac_ic_login to mozac_ic_login_24
- Rename mozac_ic_lock to mozac_ic_lock_24
- Rename mozac_ic_location to mozac_ic_location_24
- Rename mozac_ic_close_20 to mozac_ic_cross_20
- Rename mozac_ic_link to mozac_ic_link_24
- Rename mozac_ic_information to mozac_ic_information_24
- Rename mozac_ic_info to mozac_ic_information_fill_24
- Rename mozac_ic_home to mozac_ic_home_24
- Rename mozac_ic_help to mozac_ic_help_circle_24
- Rename mozac_ic_globe to mozac_ic_globe_24
- Rename mozac_ic_forward to mozac_ic_forward_24
- Rename mozac_ic_fingerprint to mozac_ic_fingerprinter_24
- Rename mozac_ic_extensions to mozac_ic_extension_24
- Rename mozac_ic_edit_suggestion to mozac_ic_append_up_24
- Rename mozac_ic_download to mozac_ic_download_24
- Rename mozac_ic_device_mobile to mozac_ic_device_mobile_24
- Rename mozac_ic_device_desktop to mozac_ic_device_desktop_24
- Rename mozac_ic_delete to mozac_ic_delete_24
- Rename mozac_ic_clear to mozac_ic_cross_circle_fill_24
- Rename mozac_ic_back to mozac_ic_back_24
- Rename mozac_ic_autoplay_blocked to mozac_ic_autoplay_slash_24
- Rename mozac_ic_check to mozac_ic_checkmark_24
- Rename mozac_ic_arrowhead_up to mozac_ic_chevron_up_24
- Rename mozac_ic_arrowhead_right to mozac_ic_chevron_right_24
- Rename mozac_ic_arrowhead_down to mozac_ic_chevron_down_24
- Rename mozac_ic_close to mozac_ic_cross_24
- Rename mozac_ic_add_to_homescreen to mozac_ic_add_to_homescreen_24
- Rename mozac_ic_cookies to mozac_ic_cookies_24
- Rename mozac_ic_sync to mozac_ic_sync_24
 
 
- Renamed icons to align with the naming used in the Acorn design system for Firefox. Bug 1840210
116.0
- 
support-base - Adds NotificationManangerCompatextension functionsareNotificationsEnabledSafe()andisNotificationChannelEnabled().
- Removes deprecated BackHandler, useUserInteractionHandlerinstead.
 
- Adds 
- 
feature-pwa - Adds WebAppContentFeatureto set the "display" mode from the web app manifest on theEngineSession.
 
- Adds 
- 
browser-engine-gecko: - Added support for Printing on the Engine.
- Add support for checkForPdfViewerAPI for checking whether a PDF viewer is loaded on the current session or not.
 
- 
concept-engine: - Added new requestPrintContentAPI inEngine. This is currently only supported in the Gecko Engine.
 
- Added new 
- 
share: - Added 'Print' as an option on the share menu
 
- 
browser-menu: - Added 'Print' as an option on the toolbar menu
 
- 
support-ktx - Removes ifChanged Flow extension functions in favour of distintUntilChangedanddistintUntilChangedByinkotlin.coroutines.flow.
 
- Removes ifChanged Flow extension functions in favour of 
- 
lib-crash - Bug 1839697. Report Java exceptions in the GleanCrashReporterService.
 
115.0
- 
lib-crash - Log exceptions that crash the CrashReporterto avoid silent failurs. See Bug 1826591.
 
- Log exceptions that crash the 
- 
crash-sentry - Sends exceptions with an attached Mechanismto signal to Sentry that it was an uncaught exception. See Bug 1835107
 
- Sends exceptions with an attached 
- 
concept-sync - Bug Fixed Bug 1804274 Passes an entrypoint url parameter to FxA when logging-in, that represents the context which the app launches the Firefox Accounts web channel.
 
- 
feature-push - Refactored Bug 1829982 Refactors push to remove the RustConnection layer, and instead use the underlying Rust layer directly.
 
114.0
- 
- browser-state
- 🌟 Added DownloadState.openInAppto indicate whether or not the file associated with the download should be opened in a third party app after downloaded successfully, for more information see Bug 1829371 and Bug 1829372.
 
113.0.0
- 
compose-cfr - 🚒 Bug fixed Bug 1819950. Ensure CFRs are automatically dismissed on screen rotation on all Android versions.
 
- 
concept-sync, service-firefox-accounts - Removed unused AccountSharingfrom sync and accounts.
 
- Removed unused 
- 
support-license - 🆕 New component to display generated license information.
 
112.0
- 
service-pocket - 🌟 ⚠️ This is a breaking change: Use idinstead offlight_idto identify a Pocket sponsored story. Bug 1820967.
 
- 🌟 ⚠️ This is a breaking change: Use 
- 
feature-prompts: - 🚒 Bug fixed Bug 1819254. Don't exit fullscreen for user input prompts.
 
- 
service-contile - ⚠️ This is a breaking change: Added support for sponsored tiles maximum age specified by the server when a Contile outage is detected. maxCacheAgeInMinuteschanged tomaxCacheAgeInSeconds. Bug 1811175
 
- ⚠️ This is a breaking change: Added support for sponsored tiles maximum age specified by the server when a Contile outage is detected. 
- 
tooling-glean-gradle: - ⚠️ This is a breaking change: This wrapper of the Glean plugin is no longer needed and has been removed. Consuming applications can directly depend on the Glean Gradle plugin.
 
- 
lib-crash-sentry-legacy - ⚠️ This is a breaking change: This component has been removed. Consumers should use the newer lib-crash-sentrycomponent instead.
 
- ⚠️ This is a breaking change: This component has been removed. Consumers should use the newer 
- 
lib-crash - 🚒 Bug fixed Bug 1822148. Ensure proguard rules retain serialization classes.
 
- 
browser-engine-gecko: - Add support for hasCookieBannerRuleForSessionAPI for checking whether a cookie banner from the current website in the session can be handled.
 
- Add support for 
- 
concept-engine: - Add new hasCookieBannerRuleForSessionAPI inEngine. This is currently only supported in the Gecko Engine.
 
- Add new 
111.0
- 
compose-cfr - 🚒 Bug fixed Bug 1809592. Improve screen alignment for Contextual Feature Recommendation popups.
 
- 
service-pocket - 🌟 Added countryandcityparameters to Pocket sponsored stories fetch request. These can be overwritten usingPocketStoriesConfig, allowing clients to specify a location and receive sponsored stories when outside countries where Pocket is enabled based on IP location. Bug 1811537.
 
- 🌟 Added 
- 
service-pocket - 🌟 Added siteparameter to Pocket sponsored stories requests. It can be overwritten usingPocketStoriesConfig, allowing clients to customize spoc content. Bug 1811531.
 
- 🌟 Added 
- 
browser-storage-sync: 
- 
feature-awesomebar 
- 
feature-syncedtabs - 🆕 Bug 1800268 New autocomplete providers for bookmarks, local tabs or synced tabs that can be set for ToolbarAutocompleteFeature.
 
- 🆕 Bug 1800268 New autocomplete providers for bookmarks, local tabs or synced tabs that can be set for 
- 
feature-toolbar - ⚠️ Bug 1800268 This is a breaking change: ToolbarAutocompleteFeaturehas a new API for updating at any timeAutocompleteProvider(add or remove any of them) individually or in bulk. This change allows supporting any instance and any number of autocomplete providers and optionally query for new autocomplete results when providers change.
 
- ⚠️ Bug 1800268 This is a breaking change: 
- 
feature-awesomebar - 🆕 Bug 1800268 A new optional lambda resultsHostFilterhas been added to the constructors of some AwesomeBar suggestions providers. This will allow for external url filtering of the provided suggestions.
 
- 🆕 Bug 1800268 A new optional lambda 
- 
feature-awesomebar - 🆕 New SearchTermSuggestionsProviderthat will show by default up to 2 search suggestions based on past searches the user has done with the current search engine. These suggestions will appear between the search action ones and the search suggestion ones. Bug 1804258.
 
- 🆕 New 
- 
feature-downloads: - 🌟️ DownloadsFeaturenow allows passing a download dialog delegate for 1st party downloads through a newcustomDownloadDialogparameter. Bug 1812518
- 🌟 DownloadsFeaturenow allows passing a download dialog delegate for 3rd party downloads through a newcustomThirdPartyDownloadDialogparameter. Bug 1812518
 
- 🌟️ 
- 
browser-toolbar - ⚠️ This is a breaking change: BrowserToolbarBehaviorwill not position theSnackbar.SnackbarLayoutanymore. The ownership for the positioning behavior should be reversed with the snackbar choosing whether it want to be shown above the toolbar and exactly how. Bug 1812518
 
- ⚠️ This is a breaking change: 
- 
browser-engine-gecko - 🚒 Bug fixed Bug 1811183. Handles non-digit values for DateTimePrompt.stepValue.
 
- 🚒 Bug fixed Bug 1811183. Handles non-digit values for 
- 
concept-engine - 🌟 Expose the release channel of GeckoView through a new releaseChannelproperty ofEngineVersion. Bug 1811448.
 
- 🌟 Expose the release channel of GeckoView through a new 
- 
concept-engine - 🆕 Added Settings.cookieBannerHandlingDetectOnlyModewhich helps to detect cookie banner events without handle the banners + indicating the mode of the events, see Bug 1810743
- ⚠️ This is a breaking change: Removed CookieBannerMode.MODE_DETECT_ONLYuseSettings.cookieBannerHandlingDetectOnlyModeinstead.
 
- 🆕 Added 
- 
feature-webnotifications - 🌟 Added support for silent web notifications. Default importance level for web notifications was set to IMPORTANCE_DEFAULT. Bug 1796766.
 
- 🌟 Added support for silent web notifications. Default importance level for web notifications was set to 
- 
feature-media - 🚒 Bug fixed Bug 1802620. Handles ForegroundServiceStartNotAllowedException.
- 🚒 Bug fixed Bug 1813416. Clear FLAG_KEEP_SCREEN_ONwhen playing media is finished.
 
- 🚒 Bug fixed Bug 1802620. Handles 
- 
lib-crash - 🌟 Added support for Glean crash pings in the GleanCrashReporterService. Bug 1810951
 
- 🌟 Added support for Glean crash pings in the 
110.0
- 
support-telemetry-sync - 🚒 Bug fixed Bug 1804996. Removed fpsa, ftas, ftsa and ffos DDG type tags and replaced them with fpas.
 
- 
lib-crash - 🚒 Bug fixed Bug 1802975. Allow crash dumps to be shared using a11y services.
 
- 
concept-engine - 🌟️️ Add CookieBannerHandlingStatustoSessionStateinstance to indicate the status of the given session state see more on Bug 1797568.
 
- 🌟️️ Add 
- 
feature-share - 🚒 Bug fixed Bug 1806411. Remove image link from share message when sharing an image.
 
- 
concept-engine 
- 
🆕 Added CookieBannerMode.MODE_DETECT_ONLY, this help to dected cookie banner events without handle the banners see Bug 1806435
- 
browser-state, feature-search - Added a new parameter isGeneraltoSearchEngineto specify whether or not the search engine is a general search engine (eg, provides broad search results). Search engines read from storage will now have this parameter set based on a list of general search engines. Bug 1804594
- Added Selector BrowserState.findNormalOrPrivateTabByUrlIgnoringFragmentto match urls ignoring the fragment/anchor of the url, allowingSelectorAddUseCaseto use this functionality.
 
- Added a new parameter 
- 
feature-tabs - Added ignoreFragmentparam inSelectOrAddUseCaseto match urls ignoring the anchor/fragment. This sets the the foundation to fix Bug 1796319.
 
- Added 
- 
lib-crash-sentry - 🚒 Bug fixed Bug 1801349. Properly synchronize access to the crash reporter breadcrumb list.
 
- 
feature-prompts: - Added permission requests for accessing media files (READ_MEDIA_AUDIO,READ_MEDIA_AUDIO,READ_MEDIA_AUDIO) when uploading files on devices with Android 13 and later.
 
- Added permission requests for accessing media files (
- 
feature-awesomebar - SuggestionProviderGroupnow has a new parameter- prioritythat decides the order of this group in the AwesomeBar suggestions. Priority is same as the- scoreof- AwesomeBar.Suggestions. Group having the highest integer value will have the highest priority.
 
- 
concept-toolbar - Added optional parameter cursorPlacementtoeditModewhich allows cursor placement to be specified when switching to edit mode.
 
- Added optional parameter 
- 
feature-toolbar - 🆕 Added a new parameter shouldDisplaySearchTermstoToolbarFeaturewhich allows clients to specify if the search terms should be shown instead of the URL when the toolbar is in display mode. Bug 1805164
 
- 🆕 Added a new parameter 
- 
browser-engine-gecko - 🆕 Added GeckoCookieBannersStorage.addPersistentExceptionInPrivateModeto allow to add persistent cookie banner exceptions in private browsing Bug 1797605.
 
- 🆕 Added 
109.0.0
- 
support-ktx, feature-contextmenu - 🚒 Bug fixed Bug 1798873 Added a way to exclude current app from share targets. Used when sharing text.
 
- 
feature-top-sites - 🆕 A new filter hasHostwas added when getting top frecent sites in order to remove duplicate frecent top sites that have same host/domain as provided top sites. For more references see Bug 1801285.
 
- 🆕 A new filter 
- 
browser-menu: - 🚒 Bug Fixed Bug 1800885 Increase touch target of Add/Edit checkbox from mozac_browser_menu_item_image_text_checkbox_button.xmlto improve accessibility.
 
- 🚒 Bug Fixed Bug 1800885 Increase touch target of Add/Edit checkbox from 
- 
All components - ⚠️Increased compileSdkVersionto 33 (Android 13)
 
- ⚠️Increased 
- 
feature-awesomebar - SearchSuggestionProviderand- SearchActionProvidernow have a new parameter- suggestionsHeader, to add title to suggestions.
 
- 
support-ktx: - Added String.toShortUrlextension that allows making URLs more user friendly #1796379
 
- Added 
- 
browser-engine-gecko - 🆕 Added GeckoCookieBannersStorage.ktto manage cookie banner exceptions Bug 1797605.
 
- 🆕 Added 
- 
concept-engine - 🚒 Bug fixed Bug 1801648. Fix autoplay settings are not getting updated in private mode.
 
- 
browser-storage-sync - Removed Fennec to Fenix migration code. Deleted the importVisitsFromFennec,importBookmarksFromFennecandreadPinnedSitesFromFennecfunctions. Bug 1803632
 
- Removed Fennec to Fenix migration code. Deleted the 
- 
service-sync-logins - Removed Fennec to Fenix migration code. Deleted importLoginsAsyncfunction. Bug 1803632
 
- Removed Fennec to Fenix migration code. Deleted 
- 
lib-crash-sentry - 🚒 Bug fixed Bug 1801349. Copy the breadcrumb date to the Sentry breadcrumb.
 
108.0.0
- 
feature-search - 🆕 A new action RefreshSearchEnginesActionwas added to theBrowserActionto allow for refreshing search engines when app locale is changed. For more references see Bug 1800209.
 
- 🆕 A new action 
- 
feature-readerview: - Bug 1798672 Reader view font controls have adaptive font sizes to support smaller width devices.
 
- 
ui-autocomplete - 🚒 Bug fixed Bug 1794933 Immediately remove autocomplete when not applicable anymore.
 
- 
concept-engine - Bug 1798359 Set Total Cookie Protection as the default cookie policy for all Tracking Protection modes. Read more about Total Cookie Protection here.
- Renamed EngineSession.onSaveToPdfErrortoEngineSession.onSaveToPdfException.
 
- 
browser-engine-gecko - 🆕 A new action SaveToPdfExceptionActionwas added to theEngineActionto allow for notifying consumers on unsuccessful Save to PDF requests. For more references see Bug 1796482.
- ⚠️ When using the save to pdf feature, now it's required have a middleware that handles the SaveToPdfExceptionAction, or your application will crash when an error happens when requesting a page to be saved as PDF.
 
- 🆕 A new action 
- 
compose-cfr - 🆕 New composable popup allowing to offer more context about a specific View anchor on the screen. Supports RTL along with many other customizations and anchorings.
 
- 
feature-qr - QRFeature now allows querying if scanning is in progress with a new isScanInProgressproperty. This helps deciding on whether to resume scanning by callingscanin a newQRFeatureinstance as it can happen if the process is restarted as a followup to the user updating system permissions for the app.
 
- QRFeature now allows querying if scanning is in progress with a new 
- 
concept-engine: - Added support for changing the cookie banner handling setting in regular and private browsing. Bugzilla
 
- 
concept-storage: - 🆕 New API: StorageMaintenanceRegistryinconcept-storagethat deals with registering/unregistering storage maintenance workers.
- ⚠️ This is a breaking change: Added a new parameter dbSizeLimittoStorage.runMaintenanceAPI to indicate Maximum DB size to aim for, in bytes.
 
- 🆕 New API: 
- 
browser-storage-sync: - 🆕 New: An abstract WorkManager Worker class StorageMaintenanceWorkeris introduced. Bugzilla
- 🆕 New: A Kotlin object GlobalPlacesDependencyProvideris introduced to provideplacesStorage: PlacesStorageglobally when needed.
- ⚠️ This is a breaking change: PlacesStorage.runMaintenanceAPI has changed. Now it needsdbSizeLimitparameter as it implements new version ofStorageAPI.
 
- 🆕 New: An abstract WorkManager Worker class 
- 
support-ktx: - The colors of the icons from the status bar should be in contrast with the status bar background color #1795650
 
- 
service-glean - Re-export TextMetricType, RateMetricType, DenominatorMetricType, NumeratorMetricType to make them usable by applications #13010
 
- 
browser-state: - UpdateThumbnailActionand- RemoveThumbnailActionnow throw an exception if those actions are not handled with a middleware.
- See BrowserThumbnailsandThumbnailsMiddlewarefor example usages within other features.
- Removed handling of LowMemoryActioninSystemReduceron in-memory thumbnails.
 
- 
browser-tabstray: - TabViewHolderno longer checks if a thumbnail is in memory before retrieving a thumbnail from the- ImageLoader.
 
107.0.0
- 
feature-syncedtabs - 🚒 Bug fixed issue #12930 Ensure DefaultPresenterwill unregister it'sFxaAccountManagerobservers when it'slifecycleOwneris stopped to prevent memory leaks.
 
- 🚒 Bug fixed issue #12930 Ensure 
- 
feature-app-links - 🚒 Bug fixed issue #12804 Speculative fix for a TransactionTooLargeException or RuntimeException when querying activities.
 
- 
all modules - Updated the locally published artifacts to use a single timestamp rather than many #12902
 
- 
nimbus-gradle-plugin: - Updated the plugin to use the version of application services defined in the buildSrc Dependencies.
 
- 
browser-engine-gecko: - Canceling the "Open in app?" displays an empty page #12894
 
- 
feature-readerview: - 🌟 Reader Mode now defers to the active dark mode for the default color scheme.
 
106.0.0
- 
concept-engine, feature-sitepermissions - 🆕 New nameproperty for Permission which allows to easily identify and differentiate Permissions.
- Use the permission name when reporting telemetry for the permission dialogs. #12683.
 
- 🆕 New 
- 
browser-engine-gecko - 🚒 Bug fixed fenix issue #16943 - Prevent crashes when accessing a time picker with blank step value.
 
- 
browser-storage-sync: - 🚒 Bug fixed issue #12689 Decouple autocomplete suggestions from history search suggestions by using a separate reader which allows for separate management.
 
- 
support-ktx - 🚒 Bug fixed issue #12689  Make Context.shareMediawork with Android Direct Share.
 
- 🚒 Bug fixed issue #12689  Make 
- 
feature-accounts-push: - ⚠️ This is a breaking change: FxaPushSupportFeaturenow requires to be explicitly started withinitialize.
- The constructor for FxaPushSupportFeaturehas acoroutineScopeparameter that defaults to aCoroutineScope(Dispatchers.IO).
 
- ⚠️ This is a breaking change: 
105.0.0
- 
feature-search: - Allow the search widget to match the resized width #12676.
 
- 
feature-findinpage: - 🚒 Bug fixed issue #12637 Disable find in page previous and forward buttons if the query is empty
 
- 
feature-search: - Implement the common part of search widget in Android Components #12565.
 
- 
feature-prompts: - Added prompt dismiss listener to ChoicePromptDelegate. #12562
 
- Added prompt dismiss listener to 
- 
browser-engine-gecko: - Add support for Save to PDF in the
 
- 
concept-engine: - Add new requestPdfToDownloadAPI inEngine. This is currently only supported in the Gecko Engine.
 
- Add new 
- 
browser-storage-sync: 
- 
support-migration - ⚠️ This is a breaking change: This component was removed since the Fennec -> Fenix migration is no longer supported (https://github.com/mozilla-mobile/fenix/pull/23651/)
 
- 
nimbus-gradle-plugin - ⚠️ This is a breaking change: Updated the NimbusGradlePlugin to use the new nimbus cli commands.
 
104.0.0
- 
feature-media: - 🚒 Bug fixed issue #12433 Prevent media notifications updates that would cause it to flicker or loose the action button.
 
- 
browser-awesomebar: - 🚒 Bug fixed issue #12469 Cancel previous queries from the application-services persistence layer before new suggestions requests.
 
- 
service-firefox-accounts - SyncStatuscan now be- LoggedOut.
- SyncStoreSupportwill update the- SyncStorewith- LoggedOutwhen observed.
 
- 
browser-toolbar - 🚒 Bug fixed issue #12497 - Set the same margin to toolbar background for display as for edit
 
- 
feature-recentlyclosed - 🚒 Bug fixed issue #12470 - Set autoMirrored to true to fix RTL issues
 
- 
browser-awesomebar: - 🚒 Bug fixed issue #12469 Cancel previous queries before new suggestions requests.
 
- 
service-pocket - Add an index for sponsored stories foreign key to resolve a compilation warning. #12406
 
- 
service-pocket - Fix recent breakage of the sponsored stories feature and allow to dynamically make requests to either the development server or the production one. Issue #12432
 
- 
feature-top-sites - Replaced frecencyConfigfromTopSitesConfigwithTopSitesFrecencyConfig, which specifies theFrecencyTresholdOptionand the frecency filter, an optional function used to filter the top frecent sites. [#12384] (https://github.com/mozilla-mobile/android-components/issues/12384)
 
- Replaced 
- 
browser-storage-sync: - Added exception handling for all places history and bookmark calls. This prevents the app from crashing on SQL errors. #12300
 
103.0.0
- 
site-permission-feature - 🆕 issue #12345
- 
- Add an id for all site permissions allowing to easily identify with what permissions the user interacts.
 
- 
- Emit facts for when a permission prompt is shown/allowed/denied.
 
 
- 
site-permission-feature - 🆕 issue #12338 - Add support for setting a custom text for the negative button of the site permission prompts. Use "Block" for the storage access prompt.
 
- 
feature-recentlyclosed - 🚒 Bug fixed issue #12310 - Catch all database exceptions thrown when querying recently closed tabs and clean the storage for corrupted data.
 
- 
feature-media - App should not be locked in landscape when a tab or custom tab loads while in pip mode. [#12298] (https://github.com/mozilla-mobile/android-components/issues/12298)
 
- 
browser-toolbar - Expand toolbar when url changes. #12215
 
- 
service-pocket - Ensure sponsored stories profile deletion is retried in background until successful or the feature is re-enabled. #12258
 
- 
feature-prompts: - Added optional addressPickerViewandonManageAddressesparameters throughAddressDelegatetoPromptFeaturefor a newAddressPickerto display a view for selecting addresses to autofill into a site. #12061
- ⚠️ This is a breaking change: PromptFeatureconstructor now takesLoginDelegateandCreditCardDelegateinstead of login picker and credit card picker parameters. #12257
 
- Added optional 
- 
service-glean - 🆙 Updated Glean to version 50.0.1 (changelog)
- This is a breaking change. See https://github.com/mozilla/glean/releases/tag/v50.0.0) for full details.
Notable breakage:
- testGetValueon all metric types now returns- nullwhen no data is recorded instead of throwing an exception.
- testGetValueon metrics with more complex data now return new objects for inspection.
- testHasValueon all metric types is deprecated.
- On TimingDistributionMetric,CustomDistributionMetric,MemoryDistributionMetrictheaccumulateSamplesmethod now takes aList<Long>instead ofLongArray. UselistOfinstead oflongArrayOfor call.toList
- TimingDistributionMetricType.startnow always returns a valid- TimerId,- TimingDistributionMetricType.stopAndAccumulatealways requires a- TimerId.
 
 
- This is a breaking change. See https://github.com/mozilla/glean/releases/tag/v50.0.0) for full details.
Notable breakage:
 
- 🆙 Updated Glean to version 50.0.1 (changelog)
- 
support-rusterrors - 🆕 New component to report Rust errors
 
- 
lib-auth - Added new lib-authcomponent for various forms of authentication.
- Adds a new BiometricPromptAuthfor authenticating with biometrics or PIN. issue # 12289
 
- Added new 
102.0.0
- 
service-firefox-accounts - 🆕 SyncStore to abstract account and Sync details.
 
- 
browser-state: - 🌟️ Add support for tab prioritization via SessionPrioritizationMiddlewarefor more information see #12190.
 
- 🌟️ Add support for tab prioritization via 
- 
service-pocket 
- 
support-ktx - 🌟️ Add support for optionally persisting the default value when stringPreferenceis used to read a string from SharedPreferences. issue #12207.
 
- 🌟️ Add support for optionally persisting the default value when 
- 
service-pocket - ⚠️ This is a breaking change: Add a new PocketStorysupertype for all Pocket stories. #12171
 
- ⚠️ This is a breaking change: Add a new 
- 
service-pocket - 🌟️ Add support for Pocket sponsored stories.
- See component's README to get more info.
 
- 
support-test - ⚠️ This is a breaking change: MainCoroutineRuleconstructor now takes aTestDispatcherinstead of deprecatedTestCoroutineDispatcher. Default isUnconfinedTestDispatcher.
- ⚠️ This is a breaking change: MainCoroutineRule.runBlockingTestis replaced with arunTestOnMaintop level function. . This method is preferred over the globalrunTestbecause it reparents new child coroutines to the test coroutine context.
 
- ⚠️ This is a breaking change: 
- 
concept-engine: 
- 
feature-autofill - 🚒 Bug fixed issue #11893 - Fix issue with autofilling in 3rd party applications not being immediately available after unlocking the autofill service.
 
- 
feature-contextmenu - 🌟 Add new additionalValidationparameter to context menu options builders allowing clients to know when these options to be shown and potentially block showing them.
 
- 🌟 Add new 
- 
feature-pwa - [TrustedWebActivityIntentProcessor] is now deprecated. See issue #12024.
 
- 
feature-top-sites - Added providerFiltertoTopSitesProviderConfig, allowing the client to filter the provided top sites.
 
- Added 
- 
feature-prompts: - Add a CreditCardSaveDialogFragmentthat is displayed for aSaveCreditCardprompt request to handle saving and updating a credit card. #11338
 
- Add a 
- 
feature-media - Set default screen orientation if playing media in pip issue # 12118
 
- 
concept-storage: - Added CreditCardValidationDelegatewhich is a delegate that will check against theCreditCardsAddressesStorageto determine if aCreditCardcan be persisted in storage. #9838
- Refactors CreditCardfromconcept-enginetoCreditCardEntryinconcept-storageso that it can validated with theCreditCardValidationDelegate. #9838
 
- Added 
- 
browser-storage-sync - ⚠️ This is a breaking change: When constructing a RemoteTabsStorageobject you must now aContextwhich is used to determine the location of the sqlite database which is used to persist the remote tabs #11799.
- Fixed a low frequency crash that might occur when the app attempts to delete all history. #12112
 
- ⚠️ This is a breaking change: When constructing a 
- 
feature-syncedtabs - ⚠️ This is a breaking change: When constructing a SyncedTabsStorage, thetabsStorage: RemoteTabsStorageparameter is no longer optional so must be supplied #11799.
 
- ⚠️ This is a breaking change: When constructing a 
101.0.0
- 
feature-media - Support reverse landscape orientation for fullscreen videos issue # 12034
 
- 
feature-downloads: - 🚒 Bug fixed issue #11259 - Improved mime type inference for when sharing images from the contextual menu.
 
- 
feature-webnotifications - 🌟 The Engine notification (WebNotification) is now persisted in the native notification, transparent to the consuming app which can delegate the native notification click to a new WebNotificationIntentProcessorto actually check and trigger a WebNotification click when appropriate.
 
- 🌟 The Engine notification (WebNotification) is now persisted in the native notification, transparent to the consuming app which can delegate the native notification click to a new 
- 
feature-media - Media playback is now paused when AudioManager.ACTION_AUDIO_BECOMING_NOISY is broadcast by the system.
 
100.0.0
- 
browser-errorpages - 🌟 The https-only error page will now show also an image.
 
- 
service-pocket - 🚒 Bug fixed issue #11905 - Delete existing stories when their imageUrlis updated allowing those stories to be replaced.
 
- 🚒 Bug fixed issue #11905 - Delete existing stories when their 
- 
feature-serviceworker - 🆕 New ServiceWorkerSupportcomponent for handling all service workers' events and callbacks. Currently this is supported only for usingGeckoEngine.
 
- 🆕 New 
- 
feature-autofill - ⚠️ This is a breaking change: Removed unused contextparameter inFxaWebChannelFeature. #11864.
 
- ⚠️ This is a breaking change: Removed unused 
- 
feature-autofill - 🚒 Bug fixed issue #11869 - Fix regression causing autofill to not work after unlocking the app doing the autofill or after accepting that the authenticity of the autofill target could not be verified.
 
- 
feature-tab-collections - ⚠️ This is a breaking change: Removed unused readerparameter inTabCollectionStorage. #11864.
 
- ⚠️ This is a breaking change: Removed unused 
- 
feature-contextmenu - 🚒 Bug fixed issue #11829 - To make the additional note visible in landscape mode.
 
- 
feature-intent - ⚠️ This is a breaking change: Removed unused loadUrlUseCaseparameter inTabIntentProcessor. #11864.
 
- ⚠️ This is a breaking change: Removed unused 
- 
browser-toolbar - Removed reflective access to non-public SDK APIs controlling the sensitivity of the gesture detector following which sparingly and for very short time a pinch/spread to zoom gesture might be identified first as a scroll gesture and move the toolbar a little before snapping to it's original position.
- ⚠️ This is a breaking change: Replaced addEditActioninBrowserToolbarwithaddEditActionStartandaddEditActionEndto add actions to the left and right of the URL in edit mode. #11890
 
- 
feature-session - 🆕 New ScreenOrientationFeatureto enable support for setting a requested screen orientation as part of supporting the ScreenOrientation web APIs.
 
- 🆕 New 
- 
concept-sync - 🌟️️ Add onReadymethod toAccountObserver, allowing consumers to know when they can start querying account state.
 
- 🌟️️ Add 
- 
service-firefox-accounts - ⚠️ This is a breaking change: fetchProfilewas removed fromFxaAccountManager.
 
- ⚠️ This is a breaking change: 
- 
lib-crash-sentry - 🌟️️ Add sendCaughtExceptionsconfig flag toSentryService, allowing consumers to disable submitting caught exceptions. By default it's enabled, maintaining prior behaviour. Useful in projects with high volumes of caught exceptions and multiple release channels.
 
- 🌟️️ Add 
- 
site-permission-feature - 🆕 New Add to SitePermissionsFeature a property to set visibility for NotAskAgainCheckBox
 
- 
feature-search - 🆕 Update search Engines and Search Engine Icons
 
99.0.0
- 
feature-top-sites - ⚠️ This is a breaking change: This changes fetchProvidedTopSitesinTopSitesConfiginto a data classTopSitesProviderConfigthat specifies whether or not to display the top sites from the provider. #11654
 
- ⚠️ This is a breaking change: This changes 
- 
support-base - ⚠️ This is a breaking change: Refactor Frequencyout of feature-addons and service-pocket #11732.
 
- ⚠️ This is a breaking change: Refactor 
- 
support-utils - 🌟️️ **Added new Browsers constant for Fennec Browsers.FIREFOX_FENNEC_NIGHTLY.
- ⚠️ This is a breaking change: Browsers.FIREFOX_NIGHTLYnow points toorg.mozilla.fenix, for fennec nightly useBrowsers.FIREFOX_FENNEC_NIGHTLY#11682.
 
- 🌟️️ **Added new Browsers constant for Fennec 
- 
feature-downloads: - 🚒 Bug fixed issue #8567 - Prevent crashes when trying to add to the system databases.
 
- 
concept-engine - 🌟️️ Add EngineSessionStateStorage, describing a storage ofEngineSessionStateinstances.
 
- 🌟️️ Add 
- 
browser-session-storage - 🌟️️ Add FileEngineSessionStateStorage, an implementation ofEngineSessionStateStoragefor persisting engine state outside of the regular RecoverableBrowserState flow.
 
- 🌟️️ Add 
- 
browser-state - ⚠️ This is a breaking change: Shape of RecoverableTabchanged. There's now a tab-state wrapper calledTabState; use it whenengineSessionStateisn't necessary right away.
 
- ⚠️ This is a breaking change: Shape of 
- 
feature-recentlyclosed - 🌟️️ Add RecentlyClosedTabsStorage, which knows how to write/read recently closed tabs.
 
- 🌟️️ Add 
- 
feature-tabs - ⚠️ This is a breaking change: RestoreUseCaseimplementation responsible for restoringRecoverableTabinstances now takes aTabStateand aEngineSessionStateStorageinstead (and will read/rehydrate an EngineSessionState prior to restoring).
 
- ⚠️ This is a breaking change: 
98.0.0
- 
support-utils - 🌟️️ Add a PendingUtils.defaultFlagsproperty to ease setting PendingIntent mutability as required for Android 31+.
 
- 🌟️️ Add a 
- 
feature-prompts: - More prompts are dismissable.
- ⚠️ This is a breaking change: Success / dismiss callbacks are now consistently ordered.
 
- 
feature-search - Adds the extraAdServersRegexpsof Baidu to help sending the baidu search telemetry of ads. #11582
 
- Adds the 
- 
browser-toolbar - 🚒 Bug fixed issue #11499 - Update tracking protection icon state even when is not displayed
 
- 
browser-toolbar - 🚒 Bug fixed issue #11545 - clearColorFilterdoesn't work on Api 21, 22, so the default white filter remains set.UseclearColorFilteronly when the version of API is bigger than 22
 
- 🚒 Bug fixed issue #11545 - 
- 
support-ktx - 🚒 Bug fixed issue #11527 - Fix some situations in which the immersive mode wasn't properly applied.
 
- 
lib-crash - 🚒 Bug fixed issue #11627 - Firefox crash notification is not displayed on devices with Android 11/Android 12
 
- 
lib-publicsuffixlist - ⚠️ This is a breaking change: Removed String.urlToTrimmedHostextension method.
 
- ⚠️ This is a breaking change: Removed 
- 
feature-top-sites - ⚠️ This is a breaking change: The existing data class TopSitehas been converted into a sealed class. #11483
- Extend DefaultTopSitesStorageto accept aTopSitesProviderfor fetching top sites. #11483
- ⚠️ This is a breaking change: Added a new parameter fetchProvidedTopSitestoTopSitesConfigto specify whether or not to fetch top sites from theTopSitesProvider. #11605
 
- ⚠️ This is a breaking change: The existing data class 
- 
concept-storage - ⚠️ This is a breaking change: Adds a new isRemoteproperty inVisitInfowhich distinguishes visits made on the device and those that come from Sync.
 
- ⚠️ This is a breaking change: Adds a new 
- 
service-contile - Adds a ContileTopSitesProviderthat implementsTopSitesProviderfor returning top sites from the Contile services API. #11483
 
- Adds a 
- 
service-glean - 🆙 Updated Glean to version 43.0.2 (changelog)
- Includes new build_datemetric
 
- Includes new 
 
- 🆙 Updated Glean to version 43.0.2 (changelog)
- 
lib-push-amazon - ❌ This is a breaking change: This component is now removed since we no longer support it.
 
97.0.0
- 
support-ktx - 🚒 Bug fixed issue #11374 - Restore immersive mode after interacting with other Windows.
- ⚠️ This is a breaking change: OnWindowFocusChangeListenerparameter is removed fromActivity.enterToImmersiveMode(). There was no way to guarantee that the argument knew to handle immersive mode. Now everything is handled internally.
 
- 
feature-prompts: - Removes deprecated constructor in PromptFeature.
 
- Removes deprecated constructor in 
- 
- browser-engine, concept-engine* feature-sitepermissions
- 🌟️️ **Add support for a new storage_accessAPI prompt.
 
- 
concept-storage: - ⚠️ This is a breaking change: KeyProvider#keyhas been renamed toKeyProvider#getOrGenerateKeyand is nowsuspend.
- ⚠️ This is a breaking change: KeyRecoveryHandlerhas been removed.
- ⚠️ This is a breaking change: CreditCardsAddressesStoragegained a new method -scrubEncryptedData.
- 🌟️️ **Add an abstract KeyManagerwhich implementsKeyProviderand knows how to store, retrieve and verify managed keys.
 
- ⚠️ This is a breaking change: 
- 
service-sync-logins: - LoginsCryptois now using- concept-storage@- KeyManageras its basis.
 
- 
service-sync-autofill: - AutofillCryptois now using- concept-storage@- KeyManageras its basis.
- AutofillCryptois now able to recover from key loss (by scrubbing encrypted credit card data).
 
- 
browser-errorpages - ErrorPages.createUrlEncodedErrorPage()allows overriding the title or description for specific error types now.
 
- 
browser-engine-gecko - Added EngineSession.goBack(boolean)andEngineSession.goForward(boolean)for user interaction based navigation.
 
- Added 
- 
feature-session - Added support in SessionUseCases.GoBackUseCaseandSessionUseCases.GoForwardUseCaseto support optionaluserInteractionparameter in the Gecko engine.
 
- Added support in 
- 
service-glean - 🆙 Updated Glean to version 42.3.0 (changelog)
- Includes automatic detection of tags.yaml files
 
 
- 🆙 Updated Glean to version 42.3.0 (changelog)
96.0.0
- 
browser-engine-gecko: 
- 
support-utils - 🌟️ Add String.toCreditCardNumberfor removing characters other than digits from a credit card string number.
- 🚒 Bug fixed issue #11360 - Crash when saving credit cards
 
- 🌟️ Add 
95.0.0
- 
feature-session - 🌟️️ **Add callback as a parameter to RemoveAllExceptionsUseCase which will be called after exceptions removing
 
- 
concept-toolbar - 🌟️️ **Add removeNavigationAction method which removes a previously added navigation action
 
- 
support-utils - 🌟️️ **Add Firefox Focus packages to known browsers list
 
- 
concept-tabstray - ⚠️ This is a breaking change: This component will be removed in future release.
- Instead use the TabsTrayinterface frombrowser-tabstray.
 
- Instead use the 
 
- ⚠️ This is a breaking change: This component will be removed in future release.
- 
feature-session - 
- 🌟️ Adds a new TrackingProtectionUseCases.addException: Now allows to persist the exception in private mode using the parameterpersistInPrivateMode.
 
- 🌟️ Adds a new 
 
- 
- 
browser-state: - 🌟️ Adds a new previewImageUrlinContentStatewhich provides a preview image of the page (e.g. the hero image), if available.
 
- 🌟️ Adds a new 
- 
compose-awesomebar - AwesomeBartakes an optional- Profiler. If passed in, two new profiler markers will be added:- SuggestionFetcher.fetchand- Suggestion update.
 
94.0.0
- 
browser-awesomebar - BrowserAwesomeBaris now deprecated in favor of using the- AwesomeBar()composable from the- compose-awesomebarcomponent.
 
- 
BrowserAction, TabListReducer, TabsUseCases: - 🌟️ Adds MoveTabs (reordering) Action and UseCase
 
- 
feature-contextmenu: - 🚒 Bug fixed issue #10982 - Add ScrollView as a main container in mozac_feature_context_dialog in order to see the entire image context menu on small screens
 
- 
concept-storage, browser-storage-sync - 🌟️ New API: HistoryMetadataStorage.deleteHistoryMetadata, allows removing specific metadata entries either by key or search term.
 
- 🌟️ New API: 
- 
browser-engine-gecko: - Switch to the geckoview-omnireleases.-omnipackages also ship the Glean Core native code.
 
- Switch to the 
- 
service-glean - 🆙 Updated Glean to version 41.1.0 (changelog)
- The Glean Core native code is now shipped through GeckoView
- ⚠️ This is a breaking change: Glean.initializenow requires abuildInfoparameter to pass in build time version information. A suitable instance is generated byglean_parserin${PACKAGE_ROOT}.GleanMetrics.GleanBuildInfo.buildInfo. Support for not passing in abuildInfoobject has been removed.
 
 
- 🆙 Updated Glean to version 41.1.0 (changelog)
93.0.0
- 
concept-toolbar, concept-engine, browser-engine-gecko, browser-state, feature-toolbar, browser-toolbar, - 🌟️ The toolbar now supports two new methods: expandandcollapseto immediately execute this actions if the toolbar is dynamic.expandis used as of now as a callback for when GeckoView needs the toolbar to be shown depending on tab content changes.
 
- 🌟️ The toolbar now supports two new methods: 
- 
ui-icons: - 🌟️ Adds icons: mozac_ic_add_to_home_screen, mozac_ic_help, mozac_ic_shield, mozac_ic_shield_disabled
- 🌟️ Update icons: mozac_ic_home, mozac_ic_settings, mozac_ic_clear
 
- 
feature-contextmenu: - 🌟️ Adds additionalNotewhich it will be attached to the bottom of context menu but for a specificHitResult
 
- 🌟️ Adds 
92.0.0
- 
browser-feature-awesomebar: - 🌟️ Adds CombinedHistorySuggestionProviderthat combines the results fromHistoryMetadataSuggestionProviderandHistoryStorageSuggestionProviderso that if not enough metadata history results are available then storage history results are added to return the requested maxNumberOfSuggestions of awesomeBar suggestions.
 
- 🌟️ Adds 
- 
browser-toolbar - 🚒 Bug fixed issue #10555 - Prevent new touches from expanding a collapsed toolbar. Wait until there's a response from GeckoView on how the touch was handled to expand/collapse the toolbar.
- 🌟️ Adds Long-click support to Buttonand givesTwoStateButtonall the features ofBrowserMenuItemToolbar.TwoStateButton
 
- 
support-test - ⚠️  Deprecation: createTestCoroutinesDispatcher()should be replaced with the preferredTestCoroutineDispatcher()from thekotlinx-coroutines-testlibrary.
- ⚠️ This is a breaking change: MainCoroutineRule's constructor takes a more strictTestCoroutineDispatcherinstead of aCoroutineDispatcher
- 🌟️ Adds MainCoroutineRule.runBlockingTest, which is a convenience method forMainCoroutineRule.testDispatcher.runBlockingTest. These methods are preferred over the globalrunBlockingTestbecause they reparent new child coroutines to the test coroutine context.
 
- ⚠️  Deprecation: 
- 
feature-search - 🌟️ New AdsTelemetrybased on a web extension that identify whether there are ads in search results of particular providers for which a (Component.FEATURE_SEARCH to SERP_SHOWN_WITH_ADDS) Fact will be emitted and whether an ad was clicked for which a (Component.FEATURE_SEARCH to SERP_ADD_CLICKED) Fact will be emitted if theAdsTelemetryMiddlewareis set forBrowserStore.
- 🌟️ New InContentTelemetrybased on a web extension that identify follow-on and organic web searches for which a (Component.FEATURE_SEARCH to IN_CONTENT_SEARCH) Fact will be emitted.
 
- 🌟️ New 
- 
feature-tabs - Adds lastAccessto theTabdata class that is used inTabsTray.
- Adds a new SelectOrAddUseCase for reopening existing tab with matching HistoryMetadataKey. #10611
- Adds recoverableparameter toRemoveAllTabsUseCase.invoke()to specify whetherUndoMiddlewareshould make the removed tabs recoverable.
- Applies createdAtproperty fromTabSessionStatewhen filtering tabs inRestoreUseCasewith timeout.
 
- Adds 
- 
browser-store - Adds createdAtproperpty to the theBrowserStoreto know when a tab is first created.
 
- Adds 
91.0.0
- 
browser-errorpages: - ErrorType.ERROR_SECURITY_SSLwill now no longer display- Advancedbutton on the SSL Error Page.
 
- 
browser-state: - 🌟️ Adds a new lastMediaAccessinTabSessionStateas an easy way to check the timestamp of when media last started playing on a particular webpage. The value will be 0 if no media was started. To observe the media playback and updating this property one needs to add a newLastMediaAccessMiddlewaretoBrowserStore.
 
- 🌟️ Adds a new 
- 
feature-search - Updated the icon of the bing search engine.
 
- 
browser-menu - Adds showAddonsInMenuin WebExtensionBrowserMenuBuilder to allow the option of removingAdd-onsitem even if another extensions are displayed
 
- Adds 
- 
feature-privatemode - Adds clearFlagOnStop = truein SecureWindowFeature to allow the option of keepingFLAG_SECUREwhen callingstop()
 
- Adds 
- 
browser-feature-awesomebar: - 🌟️ Adds a new maxNumberOfSuggestionsparameter toHistoryStorageSuggestionProvideras a way to specify a different number than the default of 20 for how many history results to be returned.
- 🌟️ Adds a new maxNumberOfSuggestionsparameter toHistoryMetadataSuggestionProvideras a way to specify a different number than the default of 5 for how many history results to be returned.
- HistoryMetadataSuggestionProvider - only return pages user spent time on.
- AwesomeBarFeature.addHistoryProviderallows specifying a positive value for- maxNumberOfSuggestions. If zero or a negative value is used the default number of history suggestions will be returned.
 
- 🌟️ Adds a new 
- 
browser-storage-sync - Adds CrashReportingto theRemoteTabsStorage.
 
- Adds 
- 
concept-engine - 🌟️ Adds a new SitePermissionsStorageinterface that represents a common API to store site permissions.
 
- 🌟️ Adds a new 
- 
browser-engine-gecko: - ⚠️ This is a breaking change: GeckoPermissionRequest.Contentchanged its signature fromGeckoPermissionRequest.Content(uri: String, type: Int, callback: PermissionDelegate.Callback)toGeckoPermissionRequest.Content(uri: String, type: Int, geckoPermission: PermissionDelegate.ContentPermission, geckoResult: GeckoResult<Int>).
- 🌟️ Adds a new GeckoSitePermissionsStoragethis allows to store permissions using the GV APIs for more information see the geckoView ticket.
- 🌟️ Integrated the new GeckoView permissions APIs that will bring many improvements in how site permissions are handled, see the API abstract document for more information.
- 🌟️ Tracking protection exceptions have been migrated to the GeckoView storage see #10245, for more details.
 
- ⚠️ This is a breaking change: 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsStoragehas been renamed toOnDiskSitePermissionsStorage.
- ⚠️ This is a breaking change: The SitePermissionshas been moved to the packagemozilla.components.concept.engine.permission.SitePermissions.
 
- ⚠️ This is a breaking change: The 
90.0.0
- 
lib-crash: - 🚒 Bug fixed issue #10515 - Populate the crash reporter view.
 
- 
feature-prompts: - ⚠️ This is a breaking change: #8989 - Add support for multiple prompts in ContentState and help avoid some Exceptions.
 
- 
concept-engine and browser-engine-gecko - 🌟️ Added TrackingProtectionPolicy.cookiePolicyPrivateModeit allows to control how cookies should behave in private mode, if not specified it defaults to the value ofTrackingProtectionPolicy.cookiePolicyPrivateMode.
 
- 🌟️ Added 
- 
feature-prompts browser-storage-sync - ⚠️ A new isCreditCardAutofillEnabledcallback is available inPromptFeatureandGeckoCreditCardsAddressesStorageDelegateto allow clients controlling whether credit cards should be autofilled or not. Default is false*
 
- ⚠️ A new 
- 
service-pocket - ⚠️ This is a breaking change: Rebuilt from the ground up to better support offering to clients Pocket recommended articles.
- See component's README to get more info.
 
- 
feature-contextmenu: - ⚠️ Long pressing on web content won't show a contextual menu if the URL of the touch target is one blocked from loading in the browser.
 
- 
feature-prompts: - Refactor LoginPickerViewinto a more generic viewSelectablePromptViewthat can be reused by any prompts that displays a list of selectable options. #10216
- Added optional creditCardPickerView,onManageCreditCardsandonSelectCreditCardparameters toPromptFeaturefor a newCreditCardPickerto display a view for selecting credit cards to autofill into a site. #9457, #10369
- Added handling of biometric authentication for a credit card selection prompt request. #10369
 
- Refactor 
- 
concept-engine - 🌟️ getBlockedSchemes()now exposes the list of url schemes that the engine won't load.
- Adds a new CreditCarddata class which is a parallel of GeckoView'sAutocomplete.CreditCard. #10205
- Adds a new SelectCreditCardinPromptRequestto display a prompt for selecting a credit card to autocomplete. #10205
 
- 🌟️ 
- 
browser-menu: - 🚒 Bug fixed issue #10133 - A BrowserMenuCompoundButton used in our BrowserMenu setup with a DynamicWidthRecyclerView is not clipped anymore.
 
- 
browser-engine-gecko: - Implements the new GeckoView Autocomplete.StorageDelegateinterface inGeckoStorageDelegateWrapper. This will replace the deprecatedGeckoLoginDelegateWrapperand provide additional autocomplete support for credit cards. #10140
 
- Implements the new GeckoView 
- 
feature-downloads: - ⚠️ This is a breaking change: AbstractFetchDownloadService.openFile()changed its signature fromAbstractFetchDownloadService.openFile(context: Context, filePath: String, contentType: String?)toAbstractFetchDownloadService.openFile(applicationContext: Context, download: DownloadState).
- 🚒 Bug fixed issue #10138 - The downloaded files cannot be seen.
- 🚒 Bug fixed issue #10157 - Crash on startup when tying to restore data URLs from the db.
 
- ⚠️ This is a breaking change: 
- 
browser-engine-gecko(-nightly/beta) - ⚠️ From now on there will be only one concept-engineimplementation using GeckoView. Onmainthis will be the Nightly version. In release versions it will be the corresponding Beta or Release version. More about this in RFC 7.
- Implements onCreditCardSelectinGeckoPromptDelegateto handle a credit card selection prompt request. #10205
 
- ⚠️ From now on there will be only one 
- 
concept-sync, browser-storage-sync - ⚠️ This is a breaking change: SyncableStorenow has aregisterWithSyncManagermethod for use in newer storage layers.
 
- ⚠️ This is a breaking change: 
- 
concept-storage, service-sync-autofill - ⚠️ This is a breaking change: Update and add APIs now take specific UpdatableCreditCardFieldsandNewCreditCardFieldsdata classes as arguments.
- ⚠️ This is a breaking change: CreditCard's number field changed toencryptedCardNumber,cardNumberLast4added.
- New CreditCardNumberclass, which encapsulate either an encrypted or plaintext versions of credit cards.
- AutofillCreditCardsAddressesStoragereflects these breaking changes.
- Introduced a new CreditCardCryptointerface for for encrypting and decrypting a credit card number. #10140
- 🌟️ New APIs for managing keys - ManagedKey,KeyProviderandKeyRecoveryHandler.AutofillCreditCardsAddressesStorageimplements these APIs for managing keys for credit card storage.
- 🌟️ New support for bookmarks to retrieve latest added bookmark nodes. PlacesBookmarksStoragenow implementsgetRecentBookmarks.
 
- ⚠️ This is a breaking change: Update and add APIs now take specific 
- 
service-firefox-accounts - 🌟️ When configuring syncable storage layers, SyncManagernow takes an optionalKeyProviderto handle encryption/decryption of protected values.
- 🌟️ Support for syncing Address and Credit Cards
 
- 🌟️ When configuring syncable storage layers, 
- 
service-glean - ConceptFetchHttpUploaderadds support for private requests. By default, all requests are non-private.
- 🆙 Updated Glean to version 39.0.0 (changelog)
- Also includes v38.0.0 (changelog)
- ⚠️ Deprecation: The old event recording API is replaced by a new one, accepting a typed object. See the event documentation for details.
- Skip build info generation for libraries.
 
 
- 
lib-state - 🌟️ Added AbstractBindingfor simple features that want to observe changes to theStatein aStorewithout needing to manually manage the CoroutineScope. This can now be handled like otherLifecycleAwareFeatureimplementations:class SimpleFeature(store: BrowserStore) : AbstractBinding<BrowserState>(store) { override suspend fun onState(flow: Flow<BrowserState>) { // Interact with flowable state. } }
 
- 🌟️ Added 
- 
feature-tab-collections: - [addTabsToCollection] now returns the id of the collection which the tabs were added to.
 
- 
service-nimbus - Added UI components for displaying a list of branches and the selected branch related to a Nimbus experiments.
 
- 
support-utils: - Added CreditCardUtilswhich provides methods for retrieving the credit card issuer network from a provided card number. #9813
 
- Added 
75.0.0
- 
browser-menu: - 🌟️ New StickyHeaderLinearLayoutManager and StickyFooterLinearLayoutManager that can be used to keep an item from being scrolled off-screen.
- To use this set isSticky = truefor any menu item of the menu. Since only one sticky item is supported if more items have this property the sticky item will be the one closest to the top the menu anchor.
- 🚒 Bug fixed issue #10032 - Fix a recent issue with ExpandableLayout - user touches on an expanded menu might not have any effect on Samsung devices.
- 🚒 Bug fixed issue #10005 - Fix a recent issue with BrowserMenu#show() - endOfMenuAlwaysVisible not being applied.
- 🚒 Bug fixed issue #9922 - The browser menu will have it's dynamic width calculated only once, before the first layout.
- 🌟️ BrowserMenu support a bottom collapsed/expandable layout through a new ExpandableLayout that will wrap a menu layout before being used in a PopupWindow and automatically allow the collapse/expand behaviors.
- To use this set isCollapsingMenuLimit = truefor any menu item of a bottom anchored menu.
- 🌟️ WebExtensionBrowserMenuBuilderprovide a new way to customize how items look like viaStyle()where thetintColor,backPressDrawableandaddonsManagerDrawablecan be customized.
- ⚠️ This is a breaking change: WebExtensionBrowserMenuBuilder.webExtIconTintColorResourceconstructor parameter has been removed, please useWebExtensionBrowserMenuBuilder.Styleinstead. For more details see issue #9787.
 
- 
browser-toolbar 
- 
feature-session - 🚒️ **Various issues related to the dynamic toolbar and pull to refresh will be fixed with with GeckoView offering more details about how the touch event will be handled.
 
- 
concept-engine - ⚠️ **EngineView#InputResult is deprecated in favor of InputResultDetail which offers more details about how a touch event will be handled.
 
- 
feature-downloads: - 🚒 Bug fixed issue #9964 - Downloads notification strings are not localized.
 
- 
service-nimbus - Added getExperimentBranchesmethod toNimbusfor retrieving a list of experiment branches for a given experiment. issue #9895
 
- Added 
- 
feature-tabs - Added usecase for duplicating tabs to TabsUseCases.
 
- Added usecase for duplicating tabs to 
74.0.0
- 
feature-downloads: - 🚒 Bug fixed issue #9821 - Crash for downloads inferred empty mime types.
 
- 
intent-processing - 🌟️ Added support for opening links from ACTION_MAIN Intents. This Intents could the result of Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER)calls.
 
- 🌟️ Added support for opening links from ACTION_MAIN Intents. This Intents could the result of 
- 
browser-toolbar - 🌟️ Added ToolbarBehaviorControllerto automatically block theBrowserToolbarbeing animated by theBrowserToolbarBehaviorwhile the tab is loading. This new class just has to be initialized by AC clients, similar toToolbarPresenter.
 
- 🌟️ Added 
- 
feature-downloads: - 🚒 Bug fixed issue #9757 - Remove downloads notification when private tabs are closed.
- 🚒 Bug fixed issue #9789 - Canceled first PDF download prevents following attempts from downloading.
- 🚒 Bug fixed issue #9823 - Downloads prompts do not show again when a user denies system permission twice.
 
- 
concept-engine,browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly, browser-engine-system - ⚠️ This is a breaking change: EngineSession.enableTrackingProtection()andEngineSession.disableTrackingProtection()have been removed, please useEngineSession.updateTrackingProtection()instead , for more details see issue #9787.
 
- ⚠️ This is a breaking change: 
- 
feature-push - ⚠️ This is a breaking change: Removed databasePathfromRustPushConnectionconstructor and addedcontext. The file path is now queries lazily.
 
- ⚠️ This is a breaking change: Removed 
- 
feature-top-sites - ⚠️ This is a breaking change: Replace TopSitesUseCases.renameTopSiteswithTopSitesUseCases.updateTopSiteswhich allows for updating the title and the url of a top site. #9599
 
- ⚠️ This is a breaking change: Replace 
- 
service-sync-autofill - Refactors AutofillCreditCardsAddressesStoragefrom browser-storage-sync into its own component. #9801
 
- Refactors 
- 
service-firefox-accounts,browser-storage-sync,service-nimbus,service-sync-logins - Due to a temporary build issue in the Application Services project, it is not currently
possible to run some service-related unittests on a Windows host. #9731
- Work on restoring this capability will be tracked in application-services#3917.
 
 
- Due to a temporary build issue in the Application Services project, it is not currently
possible to run some service-related unittests on a Windows host. #9731
- 
service-firefox-accounts - ⚠️ This is a breaking change: Removed the currently unused authorizeOAuthCodefrom FirefoxAccount API surface.
 
- ⚠️ This is a breaking change: Removed the currently unused 
- 
service-nimbus - Added UI components for displaying a list of active Nimbus experiments.
 
- 
support-locale - ⚠️ This is a breaking change: Extended support for locale changes. The LocaleManagercan now handle notifications aboutLocalechanges throughLocaleUseCases, which are then reflected in theBrowserStore.
- 🚒 Bug fixed issue #17190 - Private browsing notifications are updated with the correct language when the app locale is changed.
 
- ⚠️ This is a breaking change: Extended support for locale changes. The 
73.0.0
- 
All components - ⚠️Increased targetSdkVersionto 30 (Android R)
 
- ⚠️Increased 
- 
browser-toolbar - 🌟 Added BrowserToolbarBehavior#forceCollapseto easily collapse the top/bottom toolbar.
 
- 🌟 Added 
- 
browser-toolbar - ⚠️ This is a breaking change: BrowserToolbarBottomBehavioris renamed toBrowserToolbarBehavioras it is now a common behavior for toolbars be them placed at the bottom or at the top of the screen.
 
- ⚠️ This is a breaking change: 
- 
feature-session - ⚠️ This is a breaking change: EngineViewBottomBehavioris renamed toEngineViewBrowserToolbarBehavioras it is now the glue betweenEngineViewandBrowserToolbarirrespective of if the toolbar is placed at the bottom oir at the top of theEngineView.
 
- ⚠️ This is a breaking change: 
- 
feature-downloads: - 🌟 New ShareDownloadFeaturewill listen forAddShareActionand download, cache locally and then share internet resources.
- ⚠️ This is a breaking change: This is a breaking change with clients expected to create and register a new instance of the this new feature otherwise the "Share image" from the browser contextual menu will do nothing.
 
- 🌟 New 
- 
support-ktx - 🌟 Added Context.shareMediathat allows to easily share a specific locally stored file through the Android share menu.
 
- 🌟 Added 
- 
feature-downloads: - 🚒 Bug fixed issue #9441 - Don't ask for redundant system files permission if not required.
- 🚒 Bug fixed issue #9526 - Downloads with generic content types use the correct file extension.
- 🚒 Bug fixed issue #9553 - Multiple files were unable to be opened after being download.
 
- 
feature-webauthn - 🆕 New component to enable support for WebAuthn specification with WebAuthnFeature.
 
- 🆕 New component to enable support for WebAuthn specification with 
- 
feature-awesomebar - added SearchEngineSuggestionProviderthat offers suggestion(s) for search engines based on user search engine list
 
- added 
- 
browser-storage-sync - Added AutofillCreditCardsAddressesStorageimplementation of theCreditCardsAddressesStorageinterface back by the application-services'autofilllibrary.
 
- Added 
- 
concept-engine - Added defaultSettings: Settings?parameter to registerTabHandler to supply a default Tracking Policy when opening a new extension tab.
- When calling onNewTabinregisterTabHandlerfromGeckoWebExtension.kta defaultTrackingProtectionPolicy.strict()is supplied to the newGeckoEngineSession. This was added in to avoid WebExtension tabs without any ETP settings.
 
- Added 
- 
concept-storage - Introduced CreditCardsAddressesStorageinterface for describing credit card and address storage.
 
- Introduced 
- 
support-base - Add NamedThreadFactory, aThreadFactorythat names its threads with the given argument.
 
- Add 
- 
lib-state - Add threadNamePrefixparameter toStoreto give threads created by theStorea specific name.
 
- Add 
- 
service-glean - 🆙 Updated Glean to version 35.0.0 (changelog)
 
72.0.0
- 
feature-prompts: - 🚒 Bug fixed issue #9471 - Confirm and alert js dialogs don't show "OK" and "Cancel" buttons when the message is too long.
 
- 
support-base - ⚠️ This is a breaking change: Update the signature of ActivityResultHandler.onActivityResultto avoid conflict with internal Android APIs.
 
- ⚠️ This is a breaking change: Update the signature of 
- 
feature-addons - 🚒 Bug fixed [issue #9484] https://github.com/mozilla-mobile/android-components/issues/9484) - Handle multiple add-ons update that require new permissions.
 
- 
feature-top-sites - ⚠️ This is a breaking change: Replaces includeFrecentwith an optionalfrecencyConfiginTopSitesConfigandTopSitesStorage.getTopSitesto specify the frecency threshold for the returned list of top frecent sites see #8690.
 
- ⚠️ This is a breaking change: Replaces 
- 
service-nimbus 
- 
Upgraded nimbus-sdk to enable getExperimentBranch()(and friends) to be callable from the main thread.
- 
Split up updateExperiments()in to two methods:fetchExperiments()andapplyPendingExperiments().
- 
Exposed setExperimentsLocally()for testing and startup.
71.0.0
- 
feature-prompts: - 🚒 Bug fixed [issue #9351] Camera images are available even with "Don't keep activities" enabled.
 
- 
ui-autocomplete: - Pasting from the clipboard now cleans up any unwanted uri schemes.
 
- 
support-utils: - 🌟 Added SafeUrl#stripUnsafeUrlSchemes that can cleanup unwanted uri schemes. Interested clients can specify what these are by overwriting "mozac_url_schemes_blocklist".
 
- 
concept-fetch: - 🌟 Added Request#privateto allow requests to be performed in a private context, the feature is not support in allClients check support before using.
 
- 🌟 Added 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - 🌟 Added support for Request#private.
 
- 🌟 Added support for 
- 
feature-prompts: - 🚒 Bug fixed issue #9229 - Dismiss SelectLoginPrompt from the current tab when opening a new one ensuring the new one can show it's own. When returning to the previous tab users should focus a login field to see the SelectLoginPrompt again.
- PromptFeature now implements UserInteractionHandler.onBackPressed to dismiss loginPicker.
 
- 
browser-session - 🚒 Bug fixed issue #9445 - LinkEngineSessionAction does not consider restoreState result.
 
- 
feature-contextmenu - 🌟 New functionality issue #9392 - Add share and copy link context menu options to images.
 
- 
feature-customtabs - ⚠️ This is a breaking change: Multiple breaking changes after migrating feature-customtabsto use the browser store,CustomTabIntentProcessorrequiresAddCustomTabUseCase,CustomTabsToolbarFeaturerequires theBrowserStoreandCustomTabsUseCasesfor more details see issue #4257.
 
- ⚠️ This is a breaking change: Multiple breaking changes after migrating 
- 
feature-intent - ⚠️ This is a breaking change: Multiple breaking changes after migrating feature-intentto use the browser store,TabIntentProcessorrequiresTabsUseCasesand removes theopenNewTabparameter, for more details see issue #4279.
 
- ⚠️ This is a breaking change: Multiple breaking changes after migrating 
- 
feature-tabs - ⚠️ This is a breaking change: TabsUseCasesnow requiresSessionStoragefor more info see issue #9323.
 
- ⚠️ This is a breaking change: 
- 
browser-icons - 🚒 Bug fixed issue #7888 - Fixed crash when fetching icon with invalid URI scheme.
 
- 
feature-media - 🚒 Bug fixed issue #9243 - Pausing YouTube Video for A While Causes Media Notification to Disappear.
- 🚒 Bug fixed issue #9254 - Headphone control does not pause or play video.
 
- 
support-webextensions - 🚒 Bug fixed issue #9210 - White page shown in custom tab when ublock blocks page.
 
- 
feature-downloads: - Allow browsers to change the download notification accent color by providing Style()inAbstractFetchDownloadService, for more information see #9299.
 
- Allow browsers to change the download notification accent color by providing 
- 
feature-accounts-push - Rolling back to previous behaviour of renewing push registration token when the subscriptionExpiredflag is observed.
 
- Rolling back to previous behaviour of renewing push registration token when the 
- 
browser-icons - Catch IOExceptionthat may be thrown when deleting icon caches.
 
- Catch 
- 
feature-qr - QR Scanner can now scan inverted QR codes, by decoding inverted source when the decoding the original source fails.
 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsconstructor, now parameter types forautoplayAudibleandautoplayInaudiblehave changed toAutoplayStatusas autoplay permissions only support two statusALLOWEDandBLOCKED.
 
- ⚠️ This is a breaking change: The 
- 
feature-app-links - ⚠️ This is a breaking change: Migrated this component to use browser-stateinstead ofbrowser-session. It is now required to pass aBrowserStoreinstance (instead ofSessionManager) toAppLinksFeature.
 
- ⚠️ This is a breaking change: Migrated this component to use 
- 
browser-toolbar - ⚠️ This is a breaking change: The API for showing the site permission indicators has been replaced to API to show an dot notification instead, for more information see #9378.
 
- 
service-nimbus - Added a NimbusDisabledclass to provide implementers who are not able to use Nimbus yet.
 
- Added a 
- 
support-base - 🌟 Add an ActivityResultHandlerfor features that want to consume the result.
 
- 🌟 Add an 
- 
concept-engine,browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - 🌟 Added a new ActivityDelegatefor handling intent requests from the engine.
- ⚠️ This is a breaking change: EngineSessionState.toJSON()has been removed for more details see issue #8370.
 
- 🌟 Added a new 
- 
browser-engine-gecko(-nightly) - Added GeckoActivityDelegatefor the GeckoViewactivityDelegate.
 
- Added 
- 
feature-tabs - ⚠️ This is a breaking change: Removed the TabCounterToolbarButton#privateColorattribute which are replaced by thetabCounterTintColorAndroid styleable attribute.
 
- ⚠️ This is a breaking change: Removed the 
- 
lib-nearby, feature-p2p, samples-nearby - ⚠️ This is a breaking change: Removed Nearby component and related samples.
 
70.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 84.0
- browser-engine-gecko-beta: GeckoView 85.0
- browser-engine-gecko-nightly: GeckoView 86.0
 
 
- Merge day!
- 
browser-toolbar - 🌟 Added API to show site permission indicators for more information see #9131.
 
- 
browser-awesomebar: - Awesomebar can now be customized for bottom toolbar using the [customizeForBottomToolbar] property
 
- 
service-numbus - Added a NimbusDisabledclass to provide implementers who are not able to use Nimbus yet.
 
- Added a 
69.0.0
- 
browser-session - ⚠️ This is a breaking change: Session.searchTermshas been removed. UseContentState.searchTerms(browser-state) instead.
- ⚠️ This is a breaking change: Session.desktopModehas been removed. UseContentState.desktopMode(browser-state) instead.
 
- ⚠️ This is a breaking change: 
- 
feature-search - ⚠️ This is a breaking change: Use cases in SearchUseCasesnow take the ID of s session/tab as parameter instead of aSessioninstance.
- ⚠️ This is a breaking change: SearchUseCasesno longer depends onSessionManagerand requires aTabsUseCasesinstance now.
 
- ⚠️ This is a breaking change: Use cases in 
- 
feature-tabs - ⚠️ This is a breaking change: Use cases in TabsUseCasesthat previously returned aSessioninstance now return the ID of theSession.
 
- ⚠️ This is a breaking change: Use cases in 
- 
support-test-libstate - Added CaptureActionsMiddleware: AMiddlewareimplementation for unit tests that want to inspect actions dispatched on aStore.
 
- Added 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsRulesconstructor, now requires a new parametermediaKeySystemAccess.
- 🌟 Added support for EME permission prompts, see #7121.
 
- ⚠️ This is a breaking change: The 
- 
browser-thumbnail - Catch IOExceptionthat may be thrown when deleting thumbnails.
 
- Catch 
- 
browser-tabstray - ⚠️ This is a breaking change: Support temporary hiding if a tab is selected. For this you should use partial bindings with PAYLOAD_(DONT_)HIGHLIGHT_SELECTED_ITEM; override TabsAdapter#isTabSelected for new item bindings; override TabViewHolder#updateSelectedTabIndicator.
 
- 
concept-tabstray: - ⚠️ This is a breaking change: A new method - isTabSelectedwas added that exposes to clients an easy way to change what a "selected" tab means.
 
- ⚠️ This is a breaking change: A new method - 
68.0.0
- 
ℹ️ Note that various AndroidX dependencies have been updated in this release. 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - 🚒 Bug fixed issue #8464 - Crash when confirming a prompt that was already confirmed
 
- 
feature-downloads - 🚒 Bug fixed issue #9033 - Fix resuming downloads in slow networks more details see the Fenix issue.
- 🚒 Bug fixed issue #9073 - Fix crash downloading a file with multiple dots on it, for more details see the Fenix issue.
 
- 
feature-session - 🚒 Bug fixed issue #9109 - Tracking protection shield not getting updated after deleting exception by url Fenix issue.
 
- 
feature-app-links - Added handling of PackageItemInfo.packageName NullPointerException on some Xiaomi and TCL devices
 
- 
service-glean - 🆙 Updated Glean to version 33.1.2 (changelog)
 
- 
feature-tab-collections: - [createCollection] now returns the id of the newly created collection
 
- 
browser-errorpages: - ⚠️ The url encoded error page - error_page_jsis now clean of inline code. Clients should not rely on inlined code anymore.
- ⚠️ This is a breaking change: Removed the data url encoded error page - error_pageswhich was already deprecated byerror_page_js.
 
- ⚠️ The url encoded error page - 
67.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 83.0
- browser-engine-gecko-beta: GeckoView 84.0
- browser-engine-gecko-nightly: GeckoView 85.0
 
 
- Merge day!
- 
feature-sitepermissions - 🚒 Bug fixed issue #8943 Refactor SwipeRefreshFeatureto not useEngineSession.Observer, this result in multiple site permissions bugs getting fixed see fenix#8987 and fenix#16411.
 
- 🚒 Bug fixed issue #8943 Refactor 
- 
feature-prompts - 🚒 Bug fixed issue #8967 Crash when trying to upload a file see fenix#16537, for more information.
- 🚒 Bug fixed issue #8953 - Scroll to selected prompt choice if one exists.
 
- 
feature-accounts-push - ⚠️ FxaPushSupportFeaturenow re-subscribes to push instead of triggering the registration renewal process - this is a temporary workaround and will be removed in the future, see #7143.
- FxaPushSupportFeaturenow takes an optional crash reporter in the constructor.
 
- ⚠️ 
66.0.0
- 
accounts-push - 🚒 Bug fixed issue #8745 - Remove OneTimeFxaPushReset from FxaPushSupportFeature
- ⚠️ This is a breaking change because the public API changes with the removal of the class.
 
 
- 🚒 Bug fixed issue #8745 - Remove OneTimeFxaPushReset from FxaPushSupportFeature
- 
feature-downloads - 🚒 Bug fixed issue #8904 - Fix resuming downloads in nightly/beta more details see the Fenix issue.
 
- 
feature-search - ⚠️ This is a breaking change: SearchUseCasesno longer requires aContextparameter in the constructor.
 
- ⚠️ This is a breaking change: 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsFeature's constructor does not requires asessionManagerparameter anymore pass astoreinstead.
 
- ⚠️ This is a breaking change: The 
- 
browser-session - SelectionAwareSessionObserveris now deprecated. All session state changes can be observed using the browser store (- browser-statemodule).
 
- 
feature-addons - AddonManager.getAddons()now accepts a new (optional)- allowCacheparameter to configure whether or not a cached response may be returned. This is useful in case a UI flow needs the most up-to-date addons list, or to support "refresh" functionality. By default, cached responses are allowed.
 
- 
service-nimbus - Added new Nimbus rapid experiment library component. This is a Rust based component that is delivered to A-C through the appservices megazord. See the nimbus-sdk repo for more info.
 
65.0.0
- 
feature-tabs - Added TabsUseCases.RemoveTabsUseCasefor removing an arbitrary list of tabs.
 
- Added 
- 
browser-state - Added TabListAction.RemoveTabsActiontoBrowserAction.
 
- Added 
- 
feature-downloads - 🚒 Bug fixed issue #8823 Downloads for data URLs were failing on nightly and beta more details in the Fenix issue.
- 🚒 Bug fixed issue #8847 crash when trying to download a file and switching from a normal to a private mode.
- 🚒 Bug fixed issue #8857 Sometimes it is not possible to dismiss download notifications see Fenix#15527 for more information.
 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsFeature's constructor, now requires a new parameterBrowserStoreobject.
- 🌟 Moved sitePermissionsFeature from using session to using kotlin flow for observing content and app permission requests#8554
 
- ⚠️ This is a breaking change: The 
- 
feature-addons - 🌟️ Added dividers for sections in add-ons list, see #8703.
 
- 
feature-top-sites - Added RenameTopSiteUseCaseto rename pinned site entries. #8751
 
- Added 
- 
browser-engine-gecko-nightly - Adds optional PreferredColorSchemeparam toGeckoEngineView
- On GeckoViewinit callcoverUntilFirstPaint()withPreferredColorScheme
 
- Adds optional 
- 
feature-push - Added disableRateLimittoPushConfigto allow for easier debugging of push during development.
- Made AutoPushFeatureaware of thePushConfig.disableRateLimitflag.
 
- Added 
- 
feature-accounts-push - Made FxaPushSupportFeatureaware of thePushConfig.disableRateLimitflag.
 
- Made 
- 
support-base - Add LazyComponent, a wrapper aroundlazythat avoids initializing recursive dependencies until component use.
 
- Add 
64.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Exposes GeckoView CompositorController#ClearColoras Setting
 
- Exposes GeckoView 
- 
browser-engine-system - ⚠️ This is a breaking change: Renames blackListFiletoblocklistFile.
- ⚠️ This is a breaking change: Renames whiteListFiletosafelistFile.
 
- ⚠️ This is a breaking change: Renames 
- 
feature-addons - 🚒 Bug fixed issue #7879 Crash when the default locale is not part of the translations fields of an add-on
- ⚠️ Removed Addon.translatedName,Addon.translatedSummaryandAddon.translatedDescriptionand addedAddon.translateName(context: Context),Addon.translateSummary(context: Context)andAddon.translateDescription(context: Context)
 
- 
concept-engine - ⚠️ Removed TrackingCategory.SHIMMED, for user usability reasons, we are going to mark SHIMMED categories as blocked, to follow the same pattern as Firefox desktop for more information see #8769
 
- ⚠️ Removed 
- 
feature-downloads - 🚒 Bug fixed issue #8585 create download directory when it doesn't exists for more information see mozilla-mobile/fenix#15527.
 
63.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 82.0
- browser-engine-gecko-beta: GeckoView 83.0
- browser-engine-gecko-nightly: GeckoView 84.0
 
 
- Merge day!
- 
feature-addons - 🚒 Bug fixed issue #8681 Fenix was consuming a lot of extra space on disk, when an add-on update requires a new permission, more info can be found here
 
- 
All components 
- 
Updated to Kotlin 1.4.10 and Coroutines 1.3.9. 
- 
Updated to Android Gradle plugin 4.0.1 (downstream projects need to update too). 
- 
service-glean - Glean was upgraded to v33.0.0
- ⚠️ This is a breaking change: Updated to the Android Gradle Plugin v4.0.1 and Gradle 6.5.1. Projects using older versions of these components will need to update in order to use newer versions of the Glean SDK.
 
 
- Glean was upgraded to v33.0.0
- 
browser-toolbar - Clear tint of tracking protection icon when animatable
 
- 
concept-engine - Added MediaSessionfor the media session API.
- 🌟 Added a new TrackingCategory.SHIMMEDto indicate that content that would have been blocked has instead been replaced with a shimmed file. See more on Fenix #14071
 
- Added 
- 
browser-engine-gecko(-nightly) - Added GeckoMediaSessionControllerandGeckoMediaSessionDelegatefor the media session API.
 
- Added 
- 
browser-state - Added MediaSessionStatetoSessionState.
- Added MediaSessionActiontoBrowserAction.
 
- Added 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsRules's constructor, now requires a new parameterpersistentStorage.
- 🌟 Added support for the local storage site permission see #3153.
 
- ⚠️ This is a breaking change: The 
- 
browser-toolbar - 🌟 Added API to add a click listener to the iconView.
 
- 
feature-prompts - The repost prompt now has different text and will also dismiss the pull to refresh throbber.
 
- 
lib-push-firebase - Upgrade Firebase Cloud Messaging to v20.3.0.
- ⚠️ This is a breaking change: RemoteMessageis now non-null inonMessageReceived.
 
- ⚠️ This is a breaking change: 
 
- Upgrade Firebase Cloud Messaging to v20.3.0.
62.0.0
- 
browser-state - ⚠️ This is a breaking change: DownloadStatedoesn't support Parcelable anymore.
 
- ⚠️ This is a breaking change: 
- 
feature-downloads - 🚒 Bug fixed issue #8585 fixed regression files not been added to the downloads database system.
- 🌟 Added new use cases for removing individual downloads (removeDownload) and all downloads (removeAllDownloads).
- 🌟 Added support for new download GeckoView API.
 
- 
service-glean - Glean was upgraded to v32.4.1
- Update glean_parserto 1.28.6- BUGFIX: Ensure Kotlin arguments are deterministically ordered
 
- BUGFIX: Transform ping directory size from bytes to kilobytes before accumulating to glean.upload.pending_pings_directory_size
 
- Update 
 
- Glean was upgraded to v32.4.1
- 
feature-customtabs - The drawable for the Action button icon in custom tabs is now scaled to 24dp width an 24dp height.
 
- 
support-images - ⚠️ This is a breaking change: ImageLoaderandImageRequesthave moved to theconcept-basecomponent.
 
- ⚠️ This is a breaking change: 
- 
browser-session 
- 
browser-toolbar - 🚒 Bug fixed: Crash IllegalArgumentException BrowserGestureDetector$CustomScrollDetectorListener see more on #8356
 
- 
feature-qr - 🚒 Bug fixed: Pair message show at every scan after you try to login using scan qr see #8537
 
- 
feature-addons - ⚠️ This is a breaking change for call sites that don't rely on named arguments:
- AddonCollectionProvidernow supports configuring a custom collection owner (via AMO user ID or name).
- AddonCollectionProvidernow supports configuring the sort order of recommended collections, defaulting to sorting descending by popularity
 
 val addonCollectionProvider by lazy { AddonCollectionProvider( applicationContext, client, collectionUser = "16314372" collectionName = "myCollection", sortOption = SortOption.NAME maxCacheAgeInMinutes = DAY_IN_MINUTES ) } * Temporary add-ons installed via web-ext are no longer displayed as unsupported.
- ⚠️ This is a breaking change for call sites that don't rely on named arguments:
61.0.0
- 
browser-session - Added "undo" functionality via UndoMiddleware.
 
- Added "undo" functionality via 
- 
feature-tabs - Added TabsUseCases.UndoTabRemovalUseCasefor undoing the removal of tabs.
 
- Added 
- 
feature-webcompat-reporter - Added the ability to automatically add a screenshot as well as more technical details when submitting a WebCompat report.
 
- 
feature-addons - Temporary add-ons installed via web-ext are no longer displayed as unsupported.
- 🚒 Bug fixed issue #8267 Devtools permission had wrong translation.
 
- 
concept-menu - 🌟 Added AsyncDrawableMenuIconclass to use icons in a menu that will be loaded later.
 
- 🌟 Added 
60.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - 🚒 Bug fixed issue #8431 update Session.trackerBlockingEnabledandSessionState#trackingProtection#enabledwith the initial tracking protection state.
 
- 🚒 Bug fixed issue #8431 update 
- 
feature-tabs - Added TabsUseCases.removeNormalTabs()andTabsUseCases.removePrivateTabs().
- ⚠️ This is a breaking change: Removed TabsUseCases.removeAllTabsOfType().
 
- Added 
- 
browser-session - Added SessionManager.removeNormalSessions()andSessionManager.removePrivateSessions().
 
- Added 
- 
feature-downloads - 🚒 Bug fixed issue #8456 Crash SQLiteConstraintException UNIQUE constraint failed: downloads.id (code 1555).
 
- 
service-glean - Glean was upgraded to v32.4.0
- Allow using quantity metric type outside of Gecko (#1198)
- Update glean_parserto 1.28.5- The SUPERFLUOUS_NO_LINTwarning has been removed from the glinter. It likely did more harm than good, and makes it hard to make metrics.yaml files that pass across different versions ofglean_parser.
- Expired metrics will now produce a linter warning, EXPIRED_METRIC.
- Expiry dates that are more than 730 days (~2 years) in the future will produce a linter warning, EXPIRATION_DATE_TOO_FAR.
- Allow using the Quantity metric type outside of Gecko.
- New parser configs custom_is_expiredandcustom_validate_expiresadded. These are both functions that take the expires value of the metric and return a bool. (SeeMetric.is_expiredandMetric.validate_expires). These will allow FOG to provide custom validation for its version-basedexpiresvalues.
 
- The 
- Add a limit of 250 pending ping files. (#1217).
- Don't retry the ping uploader when waiting, sleep instead. This avoids a never-ending increase of the backoff time (#1217).
 
 
- Glean was upgraded to v32.4.0
59.0.0
- 
feature-downloads - 🚒 Bug fixed issue #8354 Do not restart FAILED downloads.
 
- 
browser-tabstray - Removed the BrowserTabsTraythat was deprecated in previous releases.
 
- Removed the 
- 
service-telemetry - This library has been removed. Please use service-gleaninstead.
 
- This library has been removed. Please use 
- 
service-glean - Glean was upgraded to v32.3.2
- Track the size of the database file at startup (#1141).
- Submitting a ping with upload disabled no longer shows an error message (#1201).
- BUGFIX: scan the pending pings directories after dealing with upload status on initialization. This is important, because in case upload is disabled we delete any outstanding non-deletion ping file, and if we scan the pending pings folder before doing that we may end up sending pings that should have been discarded. (#1205)
- Move logic to limit the number of retries on ping uploading "recoverable failures" to glean-core. (#1120)
- The functionality to limit the number of retries in these cases was introduced to the Glean SDK in v31.1.0. The work done now was to move that logic to the glean-core in order to avoid code duplication throughout the language bindings.
- Update glean_parsertov1.28.3- BUGFIX: Generate valid C# code when using Labeled metric types.
- BUGFIX: Support HashSetandDictionaryin the C# generated code.
 
- Add a 10MB quota to the pending pings storage. (#1100)
- Handle ping registration off the main thread. This removes a potential blocking call (#1132).
 
 
- Glean was upgraded to v32.3.2
- 
feature-syncedtabs - Added support for indicators to synced tabs AwesomeBarsuggestions.
 
- Added support for indicators to synced tabs 
- 
feature-addons - ⚠️ This is a breaking change: The Addon.translatePermissionsnow requires acontextobject and returns a list of localized strings instead of a list of id string resources.
- 🚒 Bug fixed issue #8323 Add-on permission dialog does not prompt for host permissions.
 
- ⚠️ This is a breaking change: The 
58.0.0
- 
feature-recentlyclosed - Added a new [RecentlyClosedTabsStorage] and a [RecentlyClosedMiddleware] to maintain a list of restorable recently closed tabs.
 
57.0.0
- 
feature-search - ⚠️ This is a breaking change: SearchFeature.performSearchnow takes a second parameter.
- BrowserStoreSearchAdapterand- SearchFeaturecan now take a- tabIdparameter.
 
- ⚠️ This is a breaking change: 
- 
feature-top-sites - ⚠️ This is a breaking change: Renames TopSiteStoragetoPinnedSitesStorage.
- ⚠️ This is a breaking change: Renames TopSiteDaotoPinnedSiteDao.
- ⚠️ This is a breaking change: Renames TopSiteEntitytoPinnedSiteEntity.
- ⚠️ This is a breaking change: Replaces TopSiteinterface with a new genericTopSitedata class.
- Implements TopSitesFeature based on the RFC 0006-top-sites-feature.md.
- Downloads, redirect targets, reloads, embedded resources, and frames are no longer considered for inclusion in top sites. Please see this Application Services PR for more details.
 
- ⚠️ This is a breaking change: Renames 
- 
lib-push-firebase - Removed non-essential dependency on com.google.firebase:firebase-core.
 
- Removed non-essential dependency on 
- 
lib-crash - Crash report timestamp is now set to when the crash occurred.
- When breadcrumbs limit is reached, oldest breadcrumbs are dropped.
 
- 
feature-toolbar - Added ContainerToolbarFeatureto update the toolbar with the container page action whenever the selected tab changes.
 
- Added 
- 
browser-state - Added LastAccessMiddlewareto dispatchTabSessionAction.UpdateLastAccessActionwhen a tab is selected.
 
- Added 
- 
feature-prompts - Replaced generic icon in LoginDialogFragmentwith site icon (keep the generic one as fallback)
 
- Replaced generic icon in 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - 🚒 Bug fixed issue #8240 Crash when dismissing Share dialog.
 
- 
feature-downloads - ⚠️ This is a breaking change: AndroidDownloadManager.downloadreturns aStrings,AndroidDownloadManager.tryAgainrequires aStringsidparameter.
- ⚠️ This is a breaking change: ConsumeDownloadActionrequires aStringsidparameter.
- ⚠️ This is a breaking change: DownloadManager#onDownloadStoppedrequires aStrings(DownloadState, Long, Status) -> Unit.
- ⚠️ This is a breaking change: DownloadsUseCases.invokerequires anStringsdownloadIdparameter.
- ⚠️ This is a breaking change: DownloadState.idhas changed its type fromLongtoString.
- ⚠️ This is a breaking change: BrowserState.downloadshas changed it's type fromMap<Long, DownloadState>toMap<String, DownloadState>.
- 🌟 Added support for persisting/restoring downloads see issue #7762.
- 🌟 Added DownloadStoragefor querying stored download metadata.
- 🚒 Bug issue #8190 ArithmeticException: divide by zero in Download notification.
- 🚒 Bug issue #8363 IllegalStateException: Not allowed to start service Intent.
 
- ⚠️ This is a breaking change: 
- 
ui-widgets - 🆕 New VerticalSwipeRefreshLayout that comes to resolve many of the issues of the platform SwipeRefreshLayout and filters out other gestures than swipe down/up.
 
56.0.0
- 
feature-prompts - 🌟 Added optional LoginPickerViewandonManageLoginsparams toPromptFeaturefor a new [LoginPicker] to display a view for selecting one of multiple matching saved logins to fill into a site.
 
- 🌟 Added optional 
- 
concept-tabstray - 🌟 Added onTabsUpdatedtoTabsTray.Observerfor notifying observers when one or more tabs have been added/removed.
 
- 🌟 Added 
- 
browser-tabstray - 🌟 Added the convenience function TabsAdapter.doOnTabsUpdatedfor performing actions only once when the tabs are updated.
 
- 🌟 Added the convenience function 
- 
feature-app-links - 🚒 Bug fixed issue #8169 App links dialog will now call showNowto immediately show the dialog.
 
- 🚒 Bug fixed issue #8169 App links dialog will now call 
- 
browser-thumbnails - 🌟 Exposed BrowserThumbnail.requestThumbnailAPI for consumers.
 
- 🌟 Exposed 
- 
browser-engine-gecko-nightly - 🌟 Added onPaintStatusResetwhen a session's paint has been reset.
- 🚒 Bug fixed issue #8123 Fix history title crash.
 
- 🌟 Added 
- 
**browser-engine-gecko-beta and **browser-engine-gecko ** - 🚒 Bug fixed issue #8123 Fix history title crash.
 
- 
concept-menu - 🌟 Added MenuStyleclass to set menu background and width.
 
- 🌟 Added 
- 
browser-menu - 🌟 Added styleparameter toBrowserMenu.show.
- 🚒 Bug fixed issue #8223: Fix compound drawable position for RTL.
 
- 🌟 Added 
- 
browser-menu2 - 🌟 Added styleparameter toBrowserMenuController.
 
- 🌟 Added 
- 
ui-widgets - 🌟 Added widget for showing a website in a list, such as in bookmarks or history. The mozac_primary_text_colorandmozac_caption_text_colorattributes should be set.
 
- 🌟 Added widget for showing a website in a list, such as in bookmarks or history. The 
- 
browser-icons - 🌟 Expose BrowserIcons.clear()as a public API to remove all saved data from disk and memory caches.
 
- 🌟 Expose 
- 
feature-downloads - 🚒 Bug fixed issue #8202: Download's ui were always showing failed status.
 
- 
feature-pwa - ⚠️ This is a breaking change: The SiteControlsBuilderinterface has changed.buildNotificationnow takes two parameters:ContextandNotification.Builder.
- WebAppSiteControlsFeaturenow supports displaying monochrome icons.
 
- ⚠️ This is a breaking change: The 
- 
service-glean - Glean was updated to v32.1.1
- Support installing glean_parser in offline mode.
- Fix a startup crash on some Android 8 (SDK=25) devices, due to a bug in the Java compiler.
 
 
- Glean was updated to v32.1.1
- 
feature-readerview - 🚒 Bug fixed issue #8208: Add a link to the original page in Reader Mode.
 
- 
feature-addons - 🌟 Feature issue #8200: "users" in add-ons manager should be renamed to "reviews".
 
55.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Fixed issue #7983, crash when a file name wasn't provided when uploading a file.
 
- 
service-glean - Glean was updated to v32.1.0
- The rate limiter now allows 15, rather than 10, pings per minute.
 
 
- Glean was updated to v32.1.0
- 
storage-sync - Fixed issue #8011 PlacesConnectionBusy: Error executing SQL: database is locked.
 
- 
feature-app-links - Fixed issue #8122 App link redirecting to Play Store, rather than to installed app.
 
54.0.0
- 
concept-menu - Added orientationparameter toMenuController.show. Passing null (the default) tells the menu to determine the best orientation itself.
 
- Added 
- 
browser-menu2 - ⚠️ This is a breaking change: BrowserMenuController.showno longer supports the width parameter.
 
- ⚠️ This is a breaking change: 
- 
feature-app-links - Added loadUrlUseCaseas a parameter forAppLinksFeature. This is used to load the URL if the user decides to not launch the link in the external app.
 
- Added 
- 
concept-awesomebar - Added AwesomeBar.setOnEditSuggestionListener()to register a callback when a search term is selected to be edited further.
 
- Added 
- 
browser-toolbar - BrowserToolbar.setSearchTerms()can now be called during- State.EDIT
 
- 
browser-awesomebar - The view of DefaultSuggestionViewHoldernow contains a button to select a search term for further editing. Clicking it will invoke the callback registered inBrowserAwesomeBar.setOnEditSuggestionListener()
 
- The view of 
- 
browser-menu - ⚠️ This is a breaking change: Removed SimpleBrowserMenuHighlightableItem.itemType. Use a WeakMap instead if you need to attach private data.
 
- ⚠️ This is a breaking change: Removed 
- 
browser-menu - For a11y, BrowserMenuImageSwitchnow highlights the entire row, not just the switch
 
- For a11y, 
- 
concept-engine - Added the cookiePurgingproperty toTrackingProtectionPolicyandTrackingProtectionPolicyForSessionTypesconstructors to enable/disable cookie purging feature read more about it here.
 
- Added the 
- 
browser-engine-nightly - Added cookiePurgingtoTrackingProtectionPolicy.toContentBlockingSetting.
 
- Added 
- 
feature-addons - ⚠️ This is a breaking change: Unified addons icons design with the one of favicons used all throughout the app. Specifying a different background is not possible anymore.
 
53.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko: GeckoView 79.0
- browser-engine-gecko-beta: GeckoView 80.0
- browser-engine-gecko-nightly: GeckoView 81.0
 
 
- Merge day!
- 
feature-downloads - ⚠️ This is a breaking change: Removed the following properties from DownloadJobStateinAbstractFetchDownloadServiceand added toDownloadState:DownloadJobStatus(now renamed toDownloadStatus) andcurrentBytesCopied. These properties can now be read fromDownloadState.
- ⚠️ This is a breaking change: Removed the enum class DownloadJobStatusfromAbstractFetchDownloadServiceand moved intoDownloadState, and removed theACTIVEstate while introducing two new states calledINITIATEDandDOWNLOADING.
- ⚠️ This is a breaking change: Renamed the following data classes from BrowserAction:QueuedDownloadActiontoAddDownloadAction,RemoveQueuedDownloadActiontoRemoveDownloadAction,RemoveAllQueuedDownloadsActiontoRemoveAllDownloadsAction, andUpdateQueuedDownloadActiontoUpdateDownloadAction.
- ⚠️ This is a breaking change: Renamed queuedDownloadsfromBrowserStatetodownloads.
- Removed automatic deletion of downloadsupon a completed download.
- 🆕 Added support for choosing a third party app to perform a download.
 
- ⚠️ This is a breaking change: Removed the following properties from 
- 
browser-menu - ⚠️ This is a breaking change: BrowserMenuItemToolbar.Button.longClickListeneris now nullable and defaults to null.
 
- ⚠️ This is a breaking change: 
- 
concept-menu - Added SmallMenuCandidate.onLongClickto handle long click of row menu buttons.
 
- Added 
- 
service-glean - Glean was updated to v31.6.0
- Limit ping request body size to 1MB. (#1098)
- BUGFIX: Require activities executed via GleanDebugViewto be exported.
 
 
- Glean was updated to v31.6.0
- 
feature-downloads - ⚠️ This is a breaking change: DownloadsFeatureis no longer accepting a custom download dialog but supporting customizations via thepromptStylingparameter. Thedialogparameter was unused so far. If it's required in the future it will need to be replaced with a lambda or factory so that the feature can create instances of the dialog itself, as needed.
 
- ⚠️ This is a breaking change: 
- 
feature-webcompat-reporter - Added a second parameter to the installmethod:productNameallows to provide a unique product name per usage for automatic product-labelling on webcompat.com
 
- Added a second parameter to the 
- 
feature-contextmenu - Do not show the "Download link" option for html URLs.
- Uses a speculative check, may not work in all cases.
 
- 
ui-widgets - Added shared ImageView style for favicons. The mozac_widget_favicon_background_colorandmozac_widget_favicon_border_colorattributes should be set, thenstyle="@style/Mozac.Widgets.Favicon"can be added to an ImageView.
 
- Added shared ImageView style for favicons. The 
52.0.0
- 
browser-icons - Added BrowserIcons.clear()to remove all saved data from disk and memory caches.
 
- Added 
- 
support-images - ⚠️ This is a breaking change: Removed ImageLoader.loadIntoView(view: ImageView, id: String)extension function.
 
- ⚠️ This is a breaking change: Removed 
- 
service-glean - Glean was updated to v31.6.0
- Implement ping tagging (i.e. the X-Source-Tagsheader) (#1074). Note that this is not yet implemented for iOS.
- String values that are too long now record invalid_overflowrather thaninvalid_valuethrough the Glean error reporting mechanism. This affects the string, event and string list metrics.
- metrics.yamlfiles now support a- data_sensitivityfield to all metrics for specifying the type of data collected in the field.
- Allow defining which Activityto run next when using theGleanDebugActivity.
- Implement JWE metric type (#1073, #1062).
- DEPRECATION: getUploadEnabledis deprecated (respectivelyget_upload_enabledin Python) (#1046)- Due to Glean's asynchronous initialization the return value can be incorrect. Applications should not rely on Glean's internal state. Upload enabled status should be tracked by the application and communicated to Glean if it changes. Note: The method was removed from the C# and Python implementation.
 
- Update glean_parsertov1.28.1- The glean_parserlinting was leading consumers astray by incorrectly suggesting thatdeletion-requestbe insteaddeletion_requestwhen used forsend_in_pings. This was causing metrics intended for thedeletion-requestping to not be included when it was collected and submitted. Consumers that are sending metrics in thedeletion-requestping will need to update thesend_in_pingsvalue in their metrics.yaml to correct this.
- Fixes a bug in doc rendering.
 
- The 
 
- Implement ping tagging (i.e. the 
 
- Glean was updated to v31.6.0
- 
feature-syncedtabs - ⚠️ This is a breaking change: Adds context to the constructor of SyncedTabsFeature.
 
- ⚠️ This is a breaking change: Adds context to the constructor of 
- 
browser-tabstray - ⚠️ This is a breaking change: The BrowserTabsTrayis now deprecated. Using aRecyclerViewdirectly is now recommended.
- ⚠️ This is a breaking change: ViewHolderProviderno longer has a second param.
- ⚠️ This is a breaking change: TabsAdapterhas astylingfieldTabsTrayStyling.
 
- ⚠️ This is a breaking change: The 
- 
browser-menu2 - Added new component to replace browser-menu. menu2 uses immutable data types and better integrates with BrowserStore.
 
- Added new component to replace browser-menu. menu2 uses immutable data types and better integrates with 
- 
concept-menu - Added concept component to contain data classes for menu items and interfaces for menu controllers.
 
- 
browser-toolbar - Added support for the new MenuControllerinterface for menu2. When a menu controller is added to a toolbar, it will be used in place of theBrowserMenuBuilder. The builder will supply items to theMenuControllerininvalidateMenuif it is kept.
 
- Added support for the new 
- 
feature-containers - Adds a ContainerMiddlewarethat connects container browser actions with theContainerStorage.
 
- Adds a 
- 
feature-app-links - ⚠️ This is a breaking change: add lastUrias a parameter forAppLinksInterceptor.
 
- ⚠️ This is a breaking change: add 
- 
concept-engine, browser-engine-* - ⚠️ This is a breaking change: add lastUrias a parameter forRequestInterceptor.onLoadRequest.
 
- ⚠️ This is a breaking change: add 
- 
support-ktx - Added Vibrator.vibrateOneShotcompat method.
 
- Added 
51.0.0
- 
browser-session - ⚠️ This is a breaking change: Removed the following properties from Session:findResults,hitResult,fullScreenModeandlayoutInDisplayCutoutMode. The values still exist inBrowserStateand can be read from there.
 
- ⚠️ This is a breaking change: Removed the following properties from 
- 
support-images - ⚠️ This is a breaking change: Removed ImageRequestin favor ofImageSaveRequestandImageLoadRequestto separate the information passed to methods that load and save images.
- ⚠️ This is a breaking change: ImageLoader.loadIntoView()now takes anImageSaveRequestinstead of anImageRequest.
 
- ⚠️ This is a breaking change: Removed 
- 
browser-thumbnails - ⚠️ This is a breaking change: ThumbnailStorage.saveThumbnail()now takes anImageSaveRequestinstead of anImageRequest.
- ⚠️ This is a breaking change: ThumbnailStorage.loadThumbnail()now takes anImageLoadRequestinstead of anImageRequest.
 
- ⚠️ This is a breaking change: 
- 
feature-addons - AddonManager now receives a WebExtensionRuntimeinstead of anEngine. This has no impact to consumers offeature-addonsasEnginealready implementsWebExtensionRuntime.
 
- AddonManager now receives a 
- 
browser-session - ⚠️ This is a breaking change: Session.Sourcewas moved to browser-state and is nowSessionState.Source. No change is required other than fixing imports.
 
- ⚠️ This is a breaking change: 
- 
browser-engine-beta - Added TrackingProtectionPolicy.toContentBlockingSettingextension methods to convert a policy to GeckoView'sContentBlocking.Setting.
 
- Added 
- 
browser-engine-nightly - Added TrackingProtectionPolicy.toContentBlockingSettingextension methods to convert a policy to GeckoView'sContentBlocking.Setting.
- Added checks to not apply the same policy twice if they are the same as already on the engine.
 
- Added 
- 
feature-pwa - Added ManifestStorage.loadShareableManifeststo get manifest with aWebAppManifest.ShareTarget.
 
- Added 
- 
support-ktx - Add Activity.reportFullyDrawnSafe, a function to callActivity.reportFullyDrawnwhile catching crashes under some circumstances.
 
- Add 
50.0.0
- 
feature-session - Added SessionFeature.release(): Calling this method stops the feature from rendering sessions on theEngineView(until explicitly started again) and releases an already rendering session from theEngineView.
- Added SessionUseCases.goToHistoryIndexto allow consumers to jump to a specific index in a session's history.
- Added flagsparameter toReloadUrlUseCase.
 
- Added 
- 
support-ktx - Adds Bundle.contentEqualsfunction to check if two bundles are equal.
 
- Adds 
- 
concept-engine - Added EngineSession.goToHistoryIndexto jump to a specific index in a session's history.
- Adds flagsparameter toreload.
 
- Added 
- 
service-glean - Glean was updated to v31.4.1
- Remove locale from baseline ping. (1609968, #1016)
- Persist X-Debug-ID header on store ping. (1605097, #1042)
- BUGFIX: raise an error if Glean is initialized with an empty string as the application_id(#1043).
- Enable debugging features through environment variables. (#1058)
- BUGFIX: fix int32toErrorTypemapping. TheInvalidOverflowhad a value mismatch between glean-core and the bindings. This would only be a problem in unit tests. (#1063)
- Enable propagating options to the main product Activity when using the GleanDebugActivity.
- BUGFIX: Fix the metrics ping collection for startup pings such as reason=upgradeto occur in the same thread/task as Glean initialize. Otherwise, it gets collected after the application lifetime metrics are cleared such as experiments that should be in the ping. (#1069)
 
 
- Glean was updated to v31.4.1
- 
service-location - LocationService.hasRegionCached()is introduced to query if the region is already cached and a long running operation to fetch the region is not needed.
 
- 
browser-state - Added map of SessionState.contextIdand their respectiveContainerStateinBrowserStateto track the state of a container.
 
- Added map of 
- 
browser-menu - Added an optional longClickListenerparameter toBrowserMenuItemToolbar.ButtonandBrowserMenuItemToolbar.TwoStateButtonto handle long click events.
 
- Added an optional 
49.0.0
- 
feature-session - ⚠️ This is a breaking change: FullScreenFeature,SettingsUseCases,SwipeRefreshFeatureandSessionFeaturenow require aBrowserStoreinstead of aSessionManager.
- ⚠️ This is a breaking change: SessionFeaturenow requires anEngineSessionUseCasesinstance.
- ⚠️ This is a breaking change: TrackingProtectionUseCasesnow requires aBrowserStoreinstead of aSessionManager.
 
- ⚠️ This is a breaking change: 
- 
feature-tabs - ⚠️ This is a breaking change: TabsUseCases.AddNewTabUseCaseandTabsUseCases.AddNewPrivateTabUseCasenow require aBrowserStoreinstead of aSessionManager.
 
- ⚠️ This is a breaking change: 
- 
browser-session - SessionManager.getEngineSession()is now deprecated. From now on please read- EngineSessioninstances of tabs from- BrowserState.
 
- 
service-sync-logins - ⚠️ This is a breaking change: removed isAutofillEnabledlambda fromGeckoLoginStorageDelegatebecause setting has been exposed through GV
 
- ⚠️ This is a breaking change: removed 
- 
concept-engine - Adds profilerproperty withisProfilerActive,getProfilerTimeandaddMarkerFirefox Profiler APIs. These will allow to add profiler markers.
 
- Adds 
- 
support-ktx - Adds Resources.getSpannedto format strings using style spans.
- Adds Resources.localeto get the corresponding locale on all SDK versions.
 
- Adds 
- 
feature-logins - 🆕 New component for logins related features.
- Adds LoginExceptionStoragefor storing and accessing save login prompt exceptions.
 
- 
feature-prompts - Added an optional LoginExceptionsparam that a storage layer can implement to check for exceptions before showing a save login prompt.
 
- Added an optional 
48.0.0
- 
feature-intent - ⚠️ This is a breaking change: IntentProcessor.processis not a suspend function anymore.
 
- ⚠️ This is a breaking change: 
- 
feature-search - Adds optional parentSessionto attach to a new search session inSearchUseCases
 
- Adds optional 
- 
feature-contextmenu - Add "Share image" to context menu.
 
- 
feature-session - ⚠️ This is a breaking change: AbstractCustomTabsServicenow requiresCustomTabsServiceStore.
- ⚠️ This is a breaking change: httpClientandapiKeyhave been removed fromAbstractCustomTabsService. They should be replaced with buildingDigitalAssetLinksApiand passing it torelationChecker.
- Added relationCheckerto customize Digital Asset Links handling.
 
- ⚠️ This is a breaking change: 
- 
feature-pwa - ⚠️ This is a breaking change: TrustedWebActivityIntentProcessornow requires aRelationCheckerinstead ofhttpClientandapiKey.
- ⚠️ This is a breaking change: Removed unused API from WebAppShortcutManager: uninstallShortcuts
- WebAppShortcutManagergained a new API: recentlyUsedWebAppsCount. Allows counting recently used web apps.
 
- ⚠️ This is a breaking change: 
- 
browser-thumbnails - The ThumbnailMiddlewaredeletes the tab's thumbnail from the storage when the sessions are removed.
- BrowserThumbnailswaits for the- firstContentfulPaintbefore requesting a screenshot.
 
- The 
- 
feature-tabs - ⚠️ This is a breaking change: Removes unused ThumbnailsUseCasessince we now load thumbnails viaThumbnailLoader. See #7313.
- ⚠️ This is a breaking change: Removes ThumbnailsUseCasesas a parameter inTabsFeatureandTabsTrayPresenter.
- ⚠️ This is a breaking change: Change the id parameter to accept a new ImageRequestinImageLoader, which allows consumers ofThumbnailLoaderto specify the preferred image size along with the id when loading an image.
 
- ⚠️ This is a breaking change: Removes unused 
- 
feature-privatemode - Add PrivateNotificationFeatureto display a notification when private sessions are open.
 
- Add 
- 
service-glean - Glean was updated to v31.2.3
- BUGFIX: Correctly format the date and time in the Date header
- Feature: Add rate limiting capabilities to the upload manager
- BUGFIX: baseline pings with reason "dirty startup" are no longer sent if Glean did not full initialize in the previous run
- BUGFIX: Compile dependencies with NDEBUGto avoid linking unavailable symbols. This fixes a crash due to a missingstderrsymbol on older Android.
- BUGFIX: Fix mismatch in events keys and values by using glean_parser version 1.23.0.
 
 
- Glean was updated to v31.2.3
- 
feature-webnotifications - WebNotificationFeaturechecks the site permissions first before showing a notification.
- Notifications with a long text body are now expandable to show the full text.
 
- 
feature-addons - Add Addon.createdAtDateandAddon.updatedAtDateextensions to getAddon.createdAtandAddon.updatedAtas aDate.
 
- Add 
47.0.0
- 
service-digitalassetlinks - Added new component for listing and checking Digital Asset Links. Contains a local checker and a version that uses Google's API.
 
46.0.0
- 
concept-engine - Exposed GeckoRuntimeSettings#setLoginAutofillEnabledto control whether login forms should be automatically filled in suitable situations
 
- Exposed 
- 
browser-icons - Fixed issue #7142
 
- 
feature-downloads - On devices older than Q we were not adding downloads to the system download database for more information see #7230
 
- 
browser-storage-sync - Added getTopFrecentSitestoPlacesHistoryStorage, which returns a list of the top frecent site infos sorted by most to least frecent.
 
- Added 
- 
local development - Enable local Gradle Build Cache to speed-up local builds. Build cache is located in .build-cache/, clear it if you run into strange problems and please file an issue.
 
- Enable local Gradle Build Cache to speed-up local builds. Build cache is located in 
- 
support-rustlog - RustLog.enablenow takes an optional [CrashReporting] instance which is used to submit error-level log messages as- RustErrorExceptions.
 
- 
feature-push - Fixed a bug where we do not verify subscriptions on first attempt.
 
- 
feature-prompts - Select a regular tab first if that exists before checking custom tabs.
 
- 
feature-session - ⚠️ This is a breaking change: SettingsUseCasesnow requires an engine reference, to clear speculative sessions if engine settings change.
- ⚠️ This is a breaking change: PictureInPictureFeaturenow takesBrowserStoreinstead ofSessionManager.
- ⚠️ This is a breaking change: The pipChangedcallback has been removed. You should now observeContentState.pictureInPictureEnabledinstead.
 
- ⚠️ This is a breaking change: 
- 
feature-containers - Adds a new storage component to store containers (contextual identities) in a Room database and provides the necessary APIs to get, add and remove containers.
 
- 
feature-webnotifications - Adds support for displaying the sourceURL the WebNotification originated from.
 
- Adds support for displaying the 
- 
feature-tabs - ⚠️ This is a breaking change: TabsFeaturenow supports providing custom use case implementations. Therefore, an instance ofSelectTabUseCaseandRemoveTabUseCasehave to be provided.
 
- ⚠️ This is a breaking change: 
- 
support-ktx - Added Uri.sameHostAsto check if two Uris have the same host (both http/https, both same domain).
- Added Uri.sameOriginAsto check if two Uris have the same origin (same host, same port).
- Added Uri.isInScopeto check if a Uri is within one of the given scopes.
 
- Added 
- 
browser-state - Added ContentState.pictureInPictureEnabledto track if Picture in Picture mode is in use.
 
- Added 
- 
feature-pwa - ⚠️ This is a breaking change: WebAppHideToolbarFeaturenow takesBrowserStoreinstead ofSessionManager.trustedScopesis now derived fromCustomTabsServiceStoreandWebAppManifest.setToolbarVisibilityshould now be used set the visibility of the toolbar.
- ⚠️ This is a breaking change: onToolbarVisibilityChangehas been removed. You should now observeBrowserStoreinstead.
 
- ⚠️ This is a breaking change: 
- 
feature-tab-collections: - ⚠️ This is a breaking change: TabCollectionStorage.getCollectionsnow returnsFlowinstead ofLiveData. UseFlow.asLiveDatato convert the result into aLiveDataagain.
 
- ⚠️ This is a breaking change: 
- 
feature-top-sites: - ⚠️ This is a breaking change: TopSiteStorage.getTopSitesnow returnsFlowinstead ofLiveData. UseFlow.asLiveDatato convert the result into aLiveDataagain.
 
- ⚠️ This is a breaking change: 
- 
service-glean - Glean was updated to v31.1.1
- Smaller binary library after a big dependency was dropped
- Limit the number of upload retries in all implementations
 
 
- Glean was updated to v31.1.1
- 
support-images: - Added ImageLoaderAPI for loading images directly into anImageView.
 
- Added 
- 
browser-tabstray: - ⚠️ This is a breaking change: TabsAdapterandDefaultTabViewHoldertake an optionalImageLoaderfor loading browser thumbnails.
- Fixed a bug in TabsThumbnailViewwhere thescaleFactorwas not applied all the time when expected.
 
- ⚠️ This is a breaking change: 
- 
browser-menu: - DynamicWidthRecyclerView will still be able to have a dynamic width between xml set minWidth and maxWidth attributes but we'll now enforce the following:
- minimum width 112 dp
- maximum width - screen width minus a 48dp tappable “exit area”
 
 
- DynamicWidthRecyclerView will still be able to have a dynamic width between xml set minWidth and maxWidth attributes but we'll now enforce the following:
45.0.0
- ⚠️ This release can't be used due to a bad build.
44.0.0
- 
browser-engine-gecko-nightly - Added support for onbeforeunload prompt
 
- 
feature-tabs - Added an optional ThumbnailsUseCasestoTabsFeatureandTabsTrayPresenterfor loading a tab's thumbnail.
 
- Added an optional 
- 
browser-thumbnails - Adds LoadThumbnailUseCaseinThumbnailsUseCasesfor loading the thumbnail of a tab.
- Adds ThumbnailStorageas a storage layer for handling saving and loading a thumbnail from the disk cache.
 
- Adds 
- 
feature-push - Adds the getSubscriptioncall to check if a subscription exists.
 
- Adds the 
- 
browser-engine-gecko-* - Fixes GeckoWebPushDelegate to gracefully return when a subscription is not available.
 
- 
feature-session - Removes unused ThumbnailsFeaturesince this has been refactored into its own browser-thumbnails component in #6827.
 
- Removes unused 
- 
browser-state - Adds BrowserState.getNormalOrPrivateTabs(private: Boolean)to getnormalTabsorprivateTabsbased on a boolean condition.
 
- Adds 
- 
support-utils - URLStringUtils.isURLLikeStrict, deprecated in 40.0.0, was now removed due to performance issues. Use the less strict and much faster- isURLLikeinstead or customize based on- :lib-publicsuffixlist.
 
- 
support-ktx - String.isUrlStrict, deprecated in 40.0.0, was now removed due to performance issues. Use the less strict- isURLinstead or customize based on- :lib-publicsuffixlist.
 
- 
service-glean - Glean was updated to v31.0.2
- Provide a new upload mechanism, now driven by internals. This has no impact to consumers of service-glean.
- Automatically Gzip-compress ping payloads before upload
- Upgrade glean_parserto v1.22.0
 
 
- Glean was updated to v31.0.2
43.0.0
- 
feature-downloads - ⚠️ This is a breaking change: DownloadManager and DownloadService are now using the browser store to keep track of queued downloads. Therefore, an instance of the store needs to be provided when constructing manager and service. There's also a new DownloadMiddleware which needs to be provided to the store.
 val store by lazy { BrowserStore(middleware = listOf( MediaMiddleware(applicationContext, MediaService::class.java), DownloadMiddleware(applicationContext, DownloadService::class.java), ... )) } ) val feature = DownloadsFeature( requireContext().applicationContext, store = components.store, useCases = components.downloadsUseCases, fragmentManager = childFragmentManager, onDownloadStopped = { download, id, status -> Logger.debug("Download done. ID#$id $download with status $status") }, downloadManager = FetchDownloadManager( requireContext().applicationContext, components.store, // Store needs to be provided now DownloadService::class ), tabId = sessionId, onNeedToRequestPermissions = { permissions -> requestPermissions(permissions, REQUEST_CODE_DOWNLOAD_PERMISSIONS) } ) class DownloadService : AbstractFetchDownloadService() { override val httpClient by lazy { components.core.client } override val store: BrowserStore by lazy { components.core.store } // Store needs to be provided now }
- 
feature-tabs - Makes TabsAdapteropen to subclassing.
 
- Makes 
- 
feature-intent - Select existing tab by url when trying to open a new tab in TabIntentProcessor
 
- Select existing tab by url when trying to open a new tab in 
- 
feature-media - Adds MediaFullscreenOrientationFeatureto autorotate activity while in fullscreen based on media aspect ratio.
 
- Adds 
- 
support-images - ⚠️ This is a breaking change: Extracts AndroidIconDecoder,IconDecoderandDesiredSizeout ofbrowser-iconsinto a new componentsupport-images, which provides helpers for handling images.AndroidIconDecoderandIconDecoderare renamed toAndroidImageDecoderandImageDecoderinsupport-images.
 
- ⚠️ This is a breaking change: Extracts 
- 
support-utils - URLStringUtils.isURLLike()will now consider URLs containing double dash ("--") as valid.
 
- 
browser-thumbnails - Adds ThumbnailDiskCachefor storing and restoring thumbnail bitmaps into a disk cache.
 
- Adds 
- 
concept-engine - Adds onHistoryStateChangedmethod and correspondingHistoryItemdata class.
 
- Adds 
- 
browser-state - Adds historytoContentStateto check the back and forward history list.
 
- Adds 
- 
service-glean - BUGFIX: Fix a race condition that leads to a ConcurrentModificationException. Bug 1635865
 
- BUGFIX: Fix a race condition that leads to a 
- 
browser-menu - Added AbstractParentBrowserMenuItemandParentBrowserMenuItemfor handling nested sub menu items on view click.
- ⚠️ This is a breaking change: WebExtensionBrowserMenuBuildernow returns as a sub menu entry for add-ons. The sub menu also contains an access entry for Add-ons Manager, for whichonAddonsManagerTappedneeds to be passed in the constructor.
 
- Added 
- 
feature-syncedtabs - When the SyncedTabsFeature is started it syncs the devices and account first.
 
42.0.0
- 
browser-state - Adds firstContentfulPainttoContentStateto know if first contentful paint has happened.
 
- Adds 
- 
service-glean - ⚠️ This is a breaking change: Glean's configuration now requires explicitly setting an http client. Users need to pass one at construction.
A default lib-fetch-httpurlconnectionimplementation is available. Add it to the configuration object like this:val config = Configuration(httpClient = ConceptFetchHttpUploader(lazy { HttpURLConnectionClient() as Client })). See PR #6875 for details and full code examples.
 
- ⚠️ This is a breaking change: Glean's configuration now requires explicitly setting an http client. Users need to pass one at construction.
A default 
- 
browser-store - Added webAppManifestproperty toContentState.
 
- Added 
- 
feature-qr - Added CustomViewFinder, aViewthat shows a ViewFinder positioned in center of the camera view and draws an Overlay
- Added optional String resource scanMessageparam toQrFeaturefor adding a message below the viewfinder
 
- Added 
- 
service-experiments - ⚠️ This is a breaking change: Mako's configuration now requires explicitly setting an http client. Users need to pass one at construction.
 
- 
feature-prompts - Added mozacPromptLoginEditTextCursorColorattribute to be able to change cursor color of TextInputEditTexts frommozac_feature_prompt_login_prompt.
 
- Added 
41.0.0
- 
feature-tabs - Fixed issue #6907. Uses MediaState when mapping BrowserState to tabs.
 
- 
concept-tabstray - For issue #6907. Adds Media.StatetoTab
 
- For issue #6907. Adds 
- 
feature-session - ⚠️ This is a breaking change: Added optional crashReportingparam to [PictureInPictureFeature] so we can record caught exceptions.
 
- ⚠️ This is a breaking change: Added optional 
- 
feature-downloads - Fixed issue #6881.
 
- 
feature-addons - Added optional addonAllowPrivateBrowsingLabelDrawableResDrawableRes parameter toAddonPermissionsAdapter.Styleconstructor to allow the clients to add their own drawable. This is used to clearly label the WebExtensions that run in private browsing.
 
- Added optional 
- 
browser-menu - BrowserMenu will now support dynamic width based on two new attributes: mozac_browser_menu_width_minandmozac_browser_menu_width_max.
 
- BrowserMenu will now support dynamic width based on two new attributes: 
- 
browser-tabstray - Added optional itemDecorationDividerItemDecoration parameter toBrowserTabsTrayconstructor to allow the clients to add their own dividers. This is used to ensure setting divider item decoration after setAdapter() is called.
 
- Added optional 
- 
service-glean - Glean was updated to v29.1.0
- ⚠️ This is a breaking change: glinter errors found during code generation will now return an error code.
- The minimum and maximum values of a timing distribution can now be controlled by the time_unitparameter. See Bug 1630997 for more details.
 
 
- Glean was updated to v29.1.0
- 
feature-accounts - ⚠️ This is a breaking change: Refactored component to use browser-stateinstead ofbrowser-session. TheFxaWebChannelFeaturenow requires aBrowserStoreinstance instead of aSessionManager.
 
- ⚠️ This is a breaking change: Refactored component to use 
- 
lib-push-fcm, lib-push-adm, concept-push - Allow nullable encoding values in push messages. If they are null, we attempt to use aes128gcmfor encoding.
 
- Allow nullable encoding values in push messages. If they are null, we attempt to use 
- 
browser-toolbar - It will only be animated for vertical scrolls inside the EngineView. Not for horizontal scrolls. Not for zoom gestures.
 
- 
browser-thumbnails - ⚠️ This is a breaking change: Migrated this component to use browser-stateinstead ofbrowser-session. It is now required to pass aBrowserStoreinstance (instead ofSessionManager) toBrowserThumnails.
 
- ⚠️ This is a breaking change: Migrated this component to use 
40.0.0
- 
browser-tabstray - Converts TabViewHolderto an abstract class withDefaultTabViewHolderas the default implementation.
- Replaces layoutIdwithviewHolderProviderin theTabsAdapterfor allowing tab customization.
 
- Converts 
- 
concept-engine - Adds Fingerprinter to the recommended Tracking protection policy.
 
- 
support-locale - Adds Android 8.1 to the check in setLayoutDirectionIfNeededinsideLocaleAwareAppCompatActivity
 
- Adds Android 8.1 to the check in 
- 
feature-top-sites - ⚠️ This is a breaking change: Added isDefaultto the top site entity, which allows application to specify a default top site that is added by the application. This is called throughTopSiteStorage.addTopSite.- If your application is using Nightly Snapshots of v40.0.0, please test that the Top Sites feature still works and update to the latest v40.0.0 if any schema errors are encountered.
 
 
- ⚠️ This is a breaking change: Added 
- 
feature-push - Simplified error handling and reduced non-fatal exception reporting.
 
- 
support-base - ⚠️ This is a breaking change: CrashReportingallowing adding support forrecordCrashBreadcrumbwithoutlib-crashdependency.
- ⚠️ This is a breaking change: Breadcrumbhas moved fromlib-crashto this component.
 
- ⚠️ This is a breaking change: 
- 
support-utils - URLStringUtils.isURLLikeStrictis now deprecated due to performance issues. Consider using the less strict- isURLLikeinstead or creating a new method using- :lib-publicsuffixlist.
 
- 
support-ktx - String.isUrlStrictis now deprecated due to performance issues. Consider using the less strict- isURLinstead or creating a new method using- :lib-publicsuffixlist.
 
- 
browser-menu - Added SimpleBrowserMenuHighlightableItemwhich is a simple menu highlightable item (no images/icons).
 
- Added 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Improve social trackers categorization see ac#6851 and fenix#5921
 
- 
service-firefox-accounts - ⚠️ This is a breaking change: FxaAccountManager.withConstellationputs theDeviceConstellationwithin the same scope as the block so you no longer need to use theitreference.
 
- ⚠️ This is a breaking change: 
- 
feature-syncedtabs - Moved SyncedTabsFeaturetoSyncedTabsStorage.
- ⚠️ This is a breaking change: The new SyncedTabsFeaturenow orchestrates the correct state needed for consumers to handle by implementing theSyncedTabsView.
 
- Moved 
- 
browser-thumbnails - 🆕 New component for capturing browser thumbnails.
- ThumbnailsFeaturewill be deprecated for the new- BrowserThumbnailsin a future.
 
39.0.0
- 
All components - Increased targetSdkVersionto 29 (Android Q)
 
- Increased 
- 
browser-session - SnapshotSerializerno longer restores source of a- Session, added- Session.Source.RESTORED
 
- 
feature-downloads - Fixed issue #6764.
 
- 
support-locale - Added fix for respecting RTL/LTR changes when activity is recreated in Android 8
 
- 
feature-sitepermissions - ⚠️ This is a breaking change: The SitePermissionsFeature's constructor, now requires a new parameteronShouldShowRequestPermissionRationalea lambda to allow the feature to query ActivityCompat.shouldShowRequestPermissionRationale or Fragment.shouldShowRequestPermissionRationale. This allows theSitePermissionsFeatureto handle when a user clicks "Deny & don't ask again" button in a system permission dialog, for more information see issue #6565.
 
- ⚠️ This is a breaking change: The 
- 
ui-widgets - 🆕 New component for standardized Mozilla widgets and styles. A living style guide will be published soon that helps explain design choices made.
- First version includes styling for buttons: NeutralButton,PositiveButton, andDestructiveButton
 
- 
feature-addons - Added AddonsManagerAdapter.updateAddonandAddonsManagerAdapter.updateAddonsto allow partial updates.
- ⚠️ This is a breaking change: AddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: ArrayList<Addon>)is changed toAddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: List<Addon>).
- Fixed issue #6685, now DefaultSupportedAddonsCheckerwill marked any newly supported add-on as enabled.
- Added Addon.translatedSummaryandAddon.translatedDescriptionto ease add-on translations.
- Added Addon.defaultLocaleIndicates which locale will be always available to display translatable fields.
- ⚠️ This is a breaking change: AddonManager.enableAddonandAddonManager.disableAddonhave a new optional parametersourcethat indicates why the extension is enabled/disabled.
- ⚠️ This is a breaking change: Map<String, String>.translatenow is marked as internal, if you are trying to translate the summary or the description of an add-on, useAddon.translatedSummaryandAddon.translatedDescription.
 
- Added 
- 
feature-toolbar - Disabled autocompleting when updating url upon entering edit mode in BrowserToolbar.
 
- 
feature-media - Muted media will not start the media service anymore, causing no media notification to be shown and no audio focus getting requested.
 
- 
feature-fullscreen - 
⚠️ This is a breaking change: Added viewportFitChangedto support Android display cutouts.
- 
feature-qr - Moved AutoFitTextureViewfromsupport-basetofeature-qr.
 
- Moved 
 
- 
- 
feature-session - ⚠️ This is a breaking change: Added viewportFitChangedtoFullScreenFeaturefor supporting Android display cutouts.
 
- ⚠️ This is a breaking change: Added 
- 
feature-qr - Moved AutoFitTextureViewfromsupport-basetofeature-qr.
 
- Moved 
- 
service-sync-logins - Adds fun LoginsStorage.getPotentialDupesIgnoringUsernamefor fetching list of potential duplicate logins from the underlying storage layer, ignoring username.
 
- Adds fun 
- 
feature-customtabs - ⚠️ This is a breaking change: Removed handleErrorinCustomTabWindowFeatureconstructor
- ⚠️ This is a breaking change: Added onLaunchUrlFallbacktoCustomTabWindowFeatureconstructor
 
- ⚠️ This is a breaking change: Removed 
- 
browser-tabstray - The iconView is no longer required in the template.
- The URL text for items may be styled.
 
- 
service-glean - Glean was updated to v28.0.0
- The baseline ping is now sent when the application goes to foreground, in addition to background and dirty-startup.
 
 
- Glean was updated to v28.0.0
- 
Developer ergonomics - Improved autoPublication workflow. See https://mozac.org/contributing/testing-components-inside-app for updated documentation.
 
- 
browser-search - Added getSearchTemplateto reconstruct the user-entered search engine url template
 
- Added 
38.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 75.0
- browser-engine-gecko-beta: GeckoView 76.0
- browser-engine-gecko-nightly: GeckoView 77.0
 
 
- Merge day!
- 
feature-session - ⚠️ This is a breaking change: Added optional customTabSessionIdparam to [PictureInPictureFeature] so consumers can use this feature for custom tab sessions.
 
- ⚠️ This is a breaking change: Added optional 
- 
support-locale - Updates updateResourcesto always update the context configuration
 
- Updates 
- 
feature-toolbar - Added forceExpandto [BrowserToolbarBottomBehavior] so consumers can expand the BrowserToolbar on demand.
 
- Added 
- 
feature-addons - Added AddonPermissionsAdapter.StyleandAddonsManagerAdapter.Styleclasses to allow UI customization.
 
- Added 
- 
service-accounts-push - Fixed a bug where the push subscription was incorrectly cached and caused some GeneralErrors.
 
- Fixed a bug where the push subscription was incorrectly cached and caused some 
- 
feature-addons - Added DefaultAddonUpdater.UpdateAttemptStorageallows to query the last known state for a previous attempt to update an add-on.
 
- Added 
- 
feature-accounts-push - Re-subscribe for Sync push support when notified by onSubscriptionChangedevents.
 
- Re-subscribe for Sync push support when notified by 
- 
support-migration - ⚠️ This is a breaking change: FennecMigratornow takesLazyreferences to storage layers.
 
- ⚠️ This is a breaking change: 
- 
concept-storage, service-sync-logins - 🆕 New API: PlacesStorage#warmUp,SyncableLoginsStorage#warmUp- allows consumers to ensure that underlying storage database connections are fully established.
 
- 🆕 New API: 
- 
feature-customtabs - ⚠️ This is a breaking change: add parameter handleErrortoCustomTabWindowFeatureconstructor- This is used to show an error when the url can't be handled
 
- CustomTabIntentProcessorto support- Browser.EXTRA_HEADERS.
 
- ⚠️ This is a breaking change: add parameter 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Fixed a memory leak when using a SelectionActionDelegateonGeckoEngineView.
 
- Fixed a memory leak when using a 
- 
feature-share - Added RecentAppsStorage.deleteRecentAppandRecentAppsDao.deleteRecentAppto allow deleting aRecentAppEntity
 
- Added 
- 
feature-p2p - Add new P2PFeatureto send URLs and web pages through peer-to-peer networking.
 
- Add new 
- 
browser-engine-gecko, browser-engine-gecko-beta, **browser-engine-gecko-nightly, browser-engine-system - Added GeckoEngineView#getInputResult()to return an EngineView.InputResult indicating how a MotionEvent was handled by an EngineView.
 
- Added 
- 
concept-engine - Will expose a new InputResultenum throughgetInputResult()indicating how an EngineView handled user's MotionEvent.
- See above changes to browser-engine-*.
 
- Will expose a new 
- 
browser-toolbar - BrowserToolbarBottomBehavioris now solely responsible to decide if the dynamic nav bar should animate or not.
- See above changes to browser-engine-*, concept-engine.
 
- 
feature-session - SwipeRefreshLayoutwill now trigger pull down to refresh only if the website is scrolled to top and it itself did not consume the swype event.
- See above changes to browser-engine-*, concept-engine.
- Added androidx_swiperefreshlayout as a dependency because google_materials dependency was incremented to version 1.1.0 which no longer includes SwipeRefreshLayout
 
- 
lib-crash - ⚠️ This is a breaking change: added support-basedependency.
 
- ⚠️ This is a breaking change: added 
- 
support-base - CrashReportingallowing adding support for- submitCaughtExceptionwithout- lib-crashdependency.
 
- 
browser-tabstray 
- 
Added ability to let consumers pass a custom layout of TabViewHolderin order to control layout inflation and view binding.
- 
Added an optional URL view to the TabViewHolderto display the URL.
- 
Will expose a new layoutparameter which allows consumers to change the tabs tray layout.
- 
Will only display a URL's hostname instead of the entire URL 
- 
browser-session - ⚠️ This is a breaking change: SessionManager.runWithSessionIdOrSelectednow returns the result from theblockit executes. This is consistent withrunWithSession.
 
- ⚠️ This is a breaking change: 
- 
feature-push - Allow nullable AutoPush messages to be delivered to observers.
 
- 
service-glean - Glean was updated to v27.1.0
- Breaking change: The regular expression used to validate labels is stricter and more correct.
- BUGFIX: baseline pings sent at startup with the dirty_startupreason will now include application lifetime metrics (#810)
- Add more information about pings to markdown documentation:
- State whether the ping includes client id;
- Add list of data review links;
- Add list of related bugs links.
 
- gradlew cleanwill no longer remove the Miniconda installation in- ~/.gradle/glean. Therefore- cleancan be used without reinstalling Miniconda afterward every time.
- Glean will now detect when the upload enabled flag changes outside of the application, for example due to a change in a config file. This means that if upload is disabled while the application wasn't running (e.g. between the runs of a Python command using the Glean SDK), the database is correctly cleared and a deletion request ping is sent. See #791.
- The eventsping now includes a reason code:startup,backgroundormax_capacity.
 
 
- Glean was updated to v27.1.0
37.0.0
- 
lib-state, browser-state - Added the ability to add Middlewareinstances to aStore. AMiddlewarecan rewrite or intercept anAction, as well as dispatch additionalActions or perform side-effects when anActiongets dispatched.
 
- Added the ability to add 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Updated removeAll()fromTrackingProtectionExceptionFileStorageto notify active sessions when all exceptions are removed.
- Added GeckoPort.senderUrlwhich returns the associated content URL.
 
- Updated 
- 
feature-accounts - It should now be possible to log-in on stable, stage and china FxA servers using a WebChannel flow.
- ⚠️ This is a breaking change: FxaWebChannelFeaturetakes aServerConfigas 4th parameter to ensure incoming WebChannel messages are sent by the expected FxA host.
 
- 
feature-sitepermissions - Fixed issue #6299, from now on, any media requests like a microphone or a camera permission will require the system permissions to be granted before a dialog can be shown.
 
- 
service-sync-logins - ⚠️ This is a breaking change: DefaultLoginValidationDelegate,GeckoLoginStorageDelegateconstructors changed to takeLazy<LoginsStorage>instead ofLoginsStorage, to facilitate late initialization.
 
- ⚠️ This is a breaking change: 
- 
service-firefox-accounts - ⚠️ This is a breaking change: GlobalSyncableStoreProvider#configureStorechanged to takeLazy<SyncableStore>instead ofSyncableStore, to facilitate late initialization.
 
- ⚠️ This is a breaking change: 
- 
feature-session - ⚠️ This is a breaking change: HistoryDelegateconstructor changed to takeLazy<HistoryStorage>instead ofHistoryStorage, to facilitate late initialization.
 
- ⚠️ This is a breaking change: 
- 
concept-engine - Added: DataCleanablea new interface that decouples the behavior of clearing browser data from theEngineandEngineSession.
 
- Added: 
- 
feature-sitepermissions - Fixed #6322, now  SitePermissionsStorageallows to indicate an optional reference toDataCleanable.
 
- Fixed #6322, now  
- 
browser-menu - Added canPropagateparam to allBrowserMenuHighlights, making it optional to be displayed in other components
- Changed BrowserMenuItem.getHighlightto filter the highlights which should not propagate.
 
- Added 
- 
feature-share - Changed primary key of RecentAppEntity to activityName instead of packageName
- ⚠️ This is a breaking change: all calls to app.packageName should now use app.activityName
 
 
- Changed primary key of RecentAppEntity to activityName instead of packageName
36.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 74.0
- browser-engine-gecko-beta: GeckoView 75.0
- browser-engine-gecko-nightly: GeckoView 76.0
 
 
- Merge day!
- 
feature-addons - Added DefaultSupportedAddonsCheckerwhich checks for add-ons that were previously unsupported, and creates a notification to let the user known when they are available to be used.
 
- Added 
- 
feature-push - AutoPushFeaturenow properly notifies observers that they have changed by the- Observer.onSubscriptionChangedcallback.
- ⚠️ This is a breaking change: RustPushConnection.verifyConnectionnow returns a list of subscriptions that have changed.
 
35.0.0
- 
feature-sitepermissions - Fixed #5616 issue now when a new exception is added if the sitePermissionsRules object is present its values are going to be taken into consideration as default values for the new exception.
 
- 
feature-awesomebar - ⚠️ This is a breaking change: Refactored component to use browser-stateinstead ofbrowser-session. Feature andSuggestionProviderimplementations may require aBrowserStoreinstance instead of aSessionManagernow.
 
- ⚠️ This is a breaking change: Refactored component to use 
- 
feature-intent - ⚠️ This is a breaking change: Removed IntentProcessor.matches()method from interface. Callingprocess()and examining the boolean return value is enough to know whether anIntentmatched.
 
- ⚠️ This is a breaking change: Removed 
- 
feature-downloads - Fixed APK downloads not prompting to install when the notification is clicked.
 
- 
service-location - Created LocationServiceinterface and madeMozillaLocationServiceimplement it.
- RegionSearchLocalizationProvidernow accepts any- LocationServiceimplementation.
- Added LocationService.dummy()which creates a dummyLocationServiceimplementation that always returnsnullwhen asked for aLocationService.Region.
 
- Created 
- 
feature-accounts-push - Add known prefix to FxA push scope.
 
- 
browser-toolbar - Add the possibility to listen to menu dismissal through setMenuDismissActioninDisplayToolbar
 
- Add the possibility to listen to menu dismissal through 
- 
concept-storage - New interface: LoginsStorage, describes a logins storage. A slightly cleaned-up version of what was in theservice-sync-logins.
 
- New interface: 
- 
service-sync-logins - ⚠️ This is a breaking change: Refactored AsyncLoginsStorage, which is now calledSyncableLoginsStorage. New class caches the db connection, and removes lock/unlock operations from the public API.
 
- ⚠️ This is a breaking change: Refactored 
- 
feature-tabs - Fixed close tabs callback incorrectly invoked on start.
- ⚠️ This is a breaking change: Added defaultTabsFiltertoTabsFeaturefor initial presenting of tabs.- TabsFeature.filterTabsalso uses the same filter if no new filter is provided.
 
 
- 
browser-session - SessionManager will now close internal EngineSessioninstances on memory pressure whenonTrimMemory()gets called
- SessionManager.onLowMemory()is now deprecated and- SessionManager.onTrimMemory(level)should be used instead.
 
- SessionManager will now close internal 
- 
browser-engine-system - Updated tracking protection lists for more details see #6163.
 
- 
concent-engine, browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly, browser-engine-system - Add additional HTTP header support for EngineSession.loadUrl().
 
- Add additional HTTP header support for 
34.0.0
- 
concept-tabstray - ⚠️ This is a breaking change: Removed dependency on browser-sessionand introduced tabs tray specific data classes.
 
- ⚠️ This is a breaking change: Removed dependency on 
- 
browser-tabstray - ⚠️ This is a breaking change: Refactored component to implement updated concept-tabstrayinterfaces.
 
- ⚠️ This is a breaking change: Refactored component to implement updated 
- 
feature-tabs - ⚠️ This is a breaking change: Refactored component to use browser-stateinstead ofbrowser-session.
- Added additional method to TabsUseCasesto select a tab based on its id.
 
- ⚠️ This is a breaking change: Refactored component to use 
- 
feature-contextmenu - Adds optional shareTextClickedlambda toDefaultSelectionActionDelegatewhich allows adding and dispatching a text selection share action
 
- Adds optional 
- 
browser-icons - ⚠️ This is a breaking change: Migrated this component to use browser-stateinstead ofbrowser-session. It is now required to pass aBrowserStoreinstance (instead ofSessionManager) toBrowserIcons.install().
 
- ⚠️ This is a breaking change: Migrated this component to use 
- 
support-webextensions - Emit facts on installed and enabled addon ids after web extension is initialized.
 
- 
feature-app-links - ⚠️ This is a breaking change: alwaysAllowedSchemesis removed as a parameter forAppLinksInterceptor.
- Added engineSupportedSchemesas a parameter forAppLinksInterceptor. This allows the caller to specify which protocol is supported by the engine.- Using this information, app links can decide if a protocol should be launched in a third party app or not regardless of user preference.
 
 
- ⚠️ This is a breaking change: 
- 
feature-sitepermissions - ⚠️ This is a breaking change: add parameters autoplayAudibleandautoplayInaudibletoSitePermissionsRules.- This allows autoplay settings to be controlled for specific sites, rather than globally.
 
 
- ⚠️ This is a breaking change: add parameters 
- 
concept-engine - ⚠️ This is a breaking change: remove deprecated GeckoView setting allowAutoplayMedia- This should now be controlled for individual sites via SitePermissionsRules
 
- This should now be controlled for individual sites via 
- Fixed a bug that would cause TrackingProtectionPolicyForSessionTypesto lose some information during transformations.
 
- ⚠️ This is a breaking change: remove deprecated GeckoView setting 
- 
feature-downloads - ⚠️ This is a breaking change: customTabIdis renamed totabId.
 
- ⚠️ This is a breaking change: 
- 
feature-contextmenu - ⚠️ This is a breaking change: customTabIdis renamed totabId.
 
- ⚠️ This is a breaking change: 
- 
browser-menu - Emit fact on the web extension id when a web extension menu item is clicked.
 
- 
feature-push - ⚠️ This is a breaking change:
- Removed APIs from AutoPushFeature: subscribeForType,unsubscribeForType,subscribeAll.
- Removed PushTypeenum and it's internal uses.
- Use the new ✨ subscribeandunsubscribeAPIs.
 
- Removed APIs from AutoPushFeature: 
 
- ⚠️ This is a breaking change:
- 
feature-accounts-push - Updated FxaPushSupportFeatureto use the newAutoPushFeatureAPIs.
 
- Updated 
- 
concept-sync 
- 
⚠️ This is a breaking change: 
- 
DeviceEventand related classes were expanded/refactored, and renamed toAccountEvent.
- 
DeviceConstellation"event" related APIs were renamed to be "command"-centric.
- 
service-firefox-accounts 
- 
⚠️ This is a breaking change: 
- 
FxaAccountManager.registerForDeviceEventsrenamed toFxaAccountManager.registerForAccountEvents.
33.0.0
- 
feature-share - Added database to store recent apps
- Added RecentAppsStorageto handle storing and retrieving most-recent apps
 
- 
service-glean - Glean was updated to v25.0.0:
- General:
- ping_typeis not included in the- ping_infoany more (#653), the pipeline takes the value from the submission URL.
- The version of glean_parserhas been upgraded to 1.18.2:- Breaking Change (Java API) Have the metrics names in Java match the names in Kotlin. See Bug 1588060.
- The reasons a ping are sent are now included in the generated markdown documentation.
 
 
- Android:
- The Glean.initializemethod runs mostly off the main thread (#672).
- Labels in labeled metrics now have a correct, and slightly stricter, regular expression. See label format for more information.
 
- The 
 
- General:
 
- Glean was updated to v25.0.0:
32.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 73.0
- browser-engine-gecko-beta: GeckoView 74.0
- browser-engine-gecko-nightly: GeckoView 75.0
 
 
- Merge day!
- 
browser-engine-gecko-nightly, concept-engine - Updated WebPushHandlerandGeckoWebPushHandlerto accept push scopes foronSubscriptionChangedevents.
 
- Updated 
- 
WebExtensions refactor - The Web Extensions related methods have been refactored from Engineinto a newWebExtensionRuntimeinterface.
- The Engineinterface now implements theWebExtensionRuntimeinterface.
- WebCompatFeaturehas been updated to receive a- WebExtensionRuntimeinstead of a- Engineas- installmethod parameter.
 
- The Web Extensions related methods have been refactored from 
- 
lib-crash - Now supports adding telemetry crash reporting services. Telemetry services will not require to prompt
- the user since it is restricted by the telemetry preference of the user.
 CrashReporter( services = services, telemetryServices = telemetryServices, shouldPrompt = CrashReporter.Prompt.ALWAYS, promptConfiguration = CrashReporter.PromptConfiguration( appName = context.getString(R.string.app_name), organizationName = "Mozilla" ), enabled = true, nonFatalCrashIntent = pendingIntent )
- 
feature-search - Adds DefaultSelectionActionDelegate, which may be used to add new actions to text selection context menus.- It currently adds "Firefox Search" or "Firefox Private Search", depending on whether the selected tab is private.
 
- Adds SearchFeature, which consumes search requests made by other components.
 // Example usage // Attach `DefaultSelectionActionDelegate` to the `EngineView` override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? = when (name) { EngineView::class.java.name -> components.engine.createView(context, attrs).apply { selectionActionDelegate = DefaultSelectionActionDelegate( components.store, context, "My App Name" ) }.asView() } // Use `SearchFeature` to attach search requests to your own code private val searchFeature = ViewBoundFeatureWrapper<SearchFeature>() // ... searchFeature.set( feature = SearchFeature(components.store) { when (it.isPrivate) { false -> components.searchUseCases.newTabSearch.invoke(it.query) true -> components.searchUseCases.newPrivateTabSearch.invoke(it.query) } }, owner = this, view = layout )
- Adds 
- 
service-glean - Glean was updated to v24.2.0:
- Add localetoclient_infosection.
- Deprecation Warning Since localeis now in theclient_infosection, the one in the baseline ping (glean.baseline.locale) is redundant and will be removed by the end of the quarter.
- Drop the Glean handle and move state into glean-core (#664)
- If an experiment includes no extrafields, it will no longer include{"extra": null}in the JSON payload.
- Support for ping reasoncodes was added.- The metrics ping will now include reasoncodes that indicate why it was submitted.
- The baseline ping will now include reasoncodes that indicate why it was submitted. If an unclean shutdown is detected (e.g. due to force-close), this ping will be sent at startup withreason: dirty_startup.
 
- The metrics ping will now include 
- The version of glean_parserhas been upgraded to 1.17.3
- Collections performed before initialization (preinit tasks) are now dispatched off the main thread during initialization.
 
- Add 
 
- Glean was updated to v24.2.0:
- 
feature-awesomebar - Added showDescriptionparameter (default totrue) toSearchSuggestionProviderconstructors to add the possibility of removing search suggestion description.
 
- Added 
- 
support-migration - Emit facts during migration.
 
31.0.0
- 
feature-awesomebar - ⚠️ This is a breaking change: Added resources parameter to addSessionProvidermethod fromAwesomeBarFeatureand toSessionSuggestionProviderconstructor for accessing strings.
 
- ⚠️ This is a breaking change: Added resources parameter to 
30.0.0
29.0.0
- 
feature-error-pages - ⚠️ This is a breaking change: ErrorResponse now has two data classes: Content (for data URI's) and Uri (for encoded URL's)
- This will require a change in RequestInterceptors that override onErrorRequest.
- Return the corresponding ErrorResponse (ErrorResponse.Content or ErrorResponse.Uri) as ErrorResponse can no longer be directly instantiated.
 
- This will require a change in RequestInterceptors that override 
- Added support for loading images into error pages with createUrlEncodedErrorPage. These error pages load dynamically with javascript by parsing params in the URL
- ⚠️ To use custom HTML & CSS with image error pages, resources must be located in the assets folder
 
- ⚠️ This is a breaking change: ErrorResponse now has two data classes: Content (for data URI's) and Uri (for encoded URL's)
- 
feature-prompts - Save login prompts will no longer be closed on page load
 
- 
lib-crash - Glean reports now distinguishes between fatal and non-fatal native code crashes.
 
- 
feature-pwa - Added ability to query install state of an url.
- Added ability load all manifests that apply to a certain url.
- Added ability to track if an PWA is actively used.
 
28.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 72.0
- browser-engine-gecko-beta: GeckoView 73.0
- browser-engine-gecko-nightly: GeckoView 74.0
 
 
- Merge day!
- 
feature-session - 
- ⚠️ This is a breaking change: TrackingProtectionUseCases.fetchExceptions: now receives a(List<TrackingProtectionException>) -> Unitinstead of a(List<String>) -> Unitto add support for deleting individual exceptions.
- Added: TrackingProtectionUseCases.removeException(exception: TrackingProtectionException): now you can delete an exception without the need of having aSessionby callingremoveException(trackingProtectionException).
 
- ⚠️ This is a breaking change: 
 
- 
- 
service-glean - Glean was updated to v24.1.0:
- Breaking Change An enableUploadparameter has been added to theinitialize()function. This removes the requirement to callsetUploadEnabled()prior to calling theinitialize()function.
- A new metric glean.error.preinit_tasks_overflowwas added to report when the preinit task queue overruns, leading to data loss. See Bug 1609482
- The metrics ping scheduler will now only send metrics pings while the application is running. The application will no longer "wake up" at 4am using the Work Manager.
- The code for migrating data from Glean SDK before version 19 was removed.
- When using the GleanTestLocalServerrule in instrumented tests, pings are immediately flushed by theWorkManagerand will reach the test endpoint as soon as possible.
- The Glean Gradle Plugin correctly triggers docs and API updates when registry files change, without requiring them to be deleted.
- parseISOTimeStringhas been made 4x faster. This had an impact on Glean migration and initialization.
- Metrics with lifetime: applicationare now cleared when the application is started, after startup Glean SDK pings are generated.
- ⚠️ This is a breaking change:
- The public method PingType.send()(in all platforms) have been deprecated and renamed toPingType.submit().
 
- The public method 
- Rename deletion_requestping todeletion-requestping after glean_parser update
- BUGFIX: The Glean Gradle plugin will now work if an app or library doesn't have a metrics.yaml or pings.yaml file.
 
- Breaking Change An 
 
- Glean was updated to v24.1.0:
- 
feature-app-links - AppLinksInterceptor can now be used without the AppLinksFeature. Set the new parameter launchFromInterceptor = true
 AppLinksInterceptor( applicationContext, interceptLinkClicks = true, launchInApp = { true }, launchFromInterceptor = true )- Introduce a ContextMenuCandidateto open links in the corresponding external app, if installed
 
- 
concept-storage - Added classes related to login autofill
- LoginStorageDelegatemay be attached to an- Engine, where it can be used to save logins.
- LoginValidationDelegatemay be used to read and update currently saved logins.
 
 
- Added classes related to login autofill
- 
feature-prompts - PromptFeaturemay now optionally accept a- LoginValidationDelegate. If present, it users will be prompted to save their information after logging in to a website.
- PromptFeaturenow accepts a false by default- isSaveLoginEnabledlambda to be invoked before showing prompts. If true, users will be prompted to save their information after logging in to a website.
- Prompts will now be closed automatically when pages have mostly loaded
 
- 
service-sync-logins - Added GeckoLoginStorageDelegate. This can be attached to a GeckoEngine, where it will be used to save user login credentials.
- GeckoLoginStorageDelegatenow accepts a false by default- isAutofillEnabledlambda to be invoked before fetching logins. If false, logins will not be fetched to autofill.
 
- Added 
- 
service-firefox-accounts - signInWithShareableAccountAsyncnow takes a- reuseAccountparameter, allowing consumers to reuse existing session token (and FxA device) associated with the passed-in account.
 
- 
support-migration - New Telemetry Notice
- Added a 'migration' ping, which contains telemetry data about migration via Glean. It's emitted whenever a migration is executed.
- Added MigrationIntentProcessorfor handling incoming intents when migration is in progress.
- Added AbstractMigrationProgressActivityas a base activity to block user interactions during migration.
 
- 
browser-menu - Added MenuButtonto let the browser menu be used outside ofBrowserToolbar.
 
- Added 
- 
browser-menu - Added new MenuControllerandMenuCandidateitems that replaceBrowserMenuBuilderandBrowserMenuItem.- Menu candidates are pure data classes and state changes are done by submitting a new list of menu candidates, rather than mutating menu items.
- The current state of a BrowserMenuItemcan be converted to a menu candidate withasCandidate(Context).
- MenuControllerreplaces both- BrowserMenuBuilderand- BrowserMenu, and handles showing the menu and adjusting the displayed items.
- MenuViewlets the menu be used outside of popups.
- Menu candidates add support for buttons inside menu options, text to the side of a menu option, and improved a11y.
 
- ⚠️ This is a breaking change: Added asCandidatemethod toBrowserMenuIteminterface.
 
- Added new 
- 
browser-toolbar - Added support for the new menu controller through the DisplayToolbar.menuControllerproperty.
 
- Added support for the new menu controller through the 
27.0.0
- 
feature-remotetabs was renamed to feature-syncedtabs - ⚠️ This is a breaking change:
- RemoteTabsFeatureis now- SyncedTabsFeature, and some method names have corresponding changes.
- RemoteTabsStorageSuggestionProvideris now- SyncedTabsStorageSuggestionProvider.
 
- 
service-glean - Glean was updated to v22.1.0 (Full changelog)
- Attempt to re-send the deletion ping on init even if upload is disabled.
- Introduce the InvalidOverflowerror forTimingDistributions.
 
- Glean now provides a Gradle plugin for automating the conversion from metrics.yamlandpings.yamlfiles to Kotlin code. This should be used instead of the deprecated Gradle script. See integrating with the build system docs for more information.
 
- Glean was updated to v22.1.0 (Full changelog)
- 
feature-app-links - ⚠️ This is a breaking change:
- Feature now contains two parts. One part is the AppLinksFeature, the other part is RequestInterceptor.
 // add this call in the RequestInterceptor context.components.appLinksInterceptor.onLaunchIntentRequest(engineSession, uri, hasUserGesture, isSameDomain)
- 
support-telemetry-sync - Added new telemetry ping, to support password sync: passwords_sync.
 
- Added new telemetry ping, to support password sync: 
- 
service-firefox-accounts - 🕵️ New Telemetry Notice
- Added telemetry for password sync, via the new passwords_syncin support-telemetry-sync
 
- 
sync-logins - 🕵️ New Telemetry Notice
- Added telemetry for password sync, via the new passwords_syncin support-telemetry-sync
- The service-sync-loginscomponent now collects some basic performance and quality metrics via Glean. Applications that send telemetry via Glean must ensure they have received appropriate data-review before integrating this component.
- ⚠️ This is a breaking change: The ServerPasswordfieldsusername,usernameFieldandpasswordFieldcan no longer bynull. Use the empty string to indicate an absent value for these fields.
- ⚠️ This is a breaking change: The AsyncLoginsStorageAdapter.inMemorymethod has been removed. UseAsyncLoginsStorageAdapter.forDatabase(":memory:")instead.
 
- 
samples-sync - Added support for password synchronization (not reflected in the UI, but demonstrates how to integrate the component).
 
- 
browser-menu - Added BrowserMenuHighlightableSwitchto represent a highlightable item with a toggle switch.
 
- Added 
- 
lib-crash - Now supports performing action after submitting crash report.
 crashReporter.submitReport(Crash.fromIntent(intent)) { stopSelf() }
- 
support-ktx - Added Context.getDrawableWithTintextension method to get a drawable resource with a tint applied.- String.isUrlis now using a more lenient check for improved performance. Strictly checking whether a string is a URL or not is supported through the new- String.isUrlStrictmethod.
 
 
- Added 
- 
support-base - ⚠️ This is a breaking change:
- Removed helper for unique notification id.
- Added helper for providing unique stable Intids based on aStringtag to avoid id conflicts between components and app code. This is now for any id, not just notification id.
- Added new API that allows user to request for the next available id using the same tag.
 // Get a unique id for the provided tag val id = SharedIdsHelper.getIdForTag(context, "mozac.my.feature") // Get the next unique id for the provided tag val id = SharedIdsHelper.getNextIdForTag(context, "mozac.my.feature")
- 
browser-errorpages - Added support for bypassing invalid SSL certification.
 
26.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko: GeckoView 71.0
- browser-engine-gecko-beta: GeckoView 72.0
- browser-engine-gecko-nightly: GeckoView 73.0
 
 
- Merge day!
- 
browser-engine-system and browser-engine-gecko-nightly - Added EngineView.canClearSelection()andEngineView.clearSelection()for clearing the selection.
 
- Added 
- 
feature-accounts - ⚠️ This is a breaking change: Migrated FxaPushSupportFeatureto thefeature-accounts-pushcomponent.
 
- ⚠️ This is a breaking change: Migrated 
- 
feature-sendtab - ⚠️ This is a breaking change: This component is now deprecated. See feature-accounts-push.
 
- ⚠️ This is a breaking change: This component is now deprecated. See 
- 
feature-accounts-push - 🆕 New component for features that need Firefox Accounts and Push, e.g. Send Tab.
- SendTabFeatureand- SendTabUseCaseshave been migrated here.
- ⚠️ This is a breaking change: SendTabFeatureno longer takes an instance ofAutoPushFeature.- FxaPushSupportFeatureis now needed for integrating Firefox Accounts with Push support.
 
 
- 
support-test-libstate - 🆕 New component providing utilities to test functionality that relies on lib-state.
 
- 
browser-errorpages - Removed list items semantics to improve a11y for unordered lists, preventing items being read twice.
 
- 
support-locale - Add resetToSystemDefaultandgetSystemDefaultmethod toLocaleManager
 
- Add 
25.0.0
- 
feature-downloads - Makes DownloadStateparcelizable so that it can be passed toFetchDownloadManagerwhen completed
 
- Makes 
- 
feature-remotetabs - Add new RemoteTabsFeatureto view tabs from other synced devices and upload our own.
- Add RemoteTabsStorageSuggestionProviderclass to match remote tabs in awesomebar suggestions.
 
- Add new 
- 
support-migration - Added Fennec login migration logic.
 
- 
service-sync-logins - AsyncLoginsStorageinterface gained a new method:- importLoginsAsync, used for bulk-inserting logins (for example, during a migration).
 
24.0.0
- 
browser-errorpages - Added strings for "no network connection" error pages
 
- 
browser-menu - Replaced BrowserMenuHighlightableItem.HighlightwithBrowserMenuHighlight.HighPriorityto highlight a menu item with some background color.Highlighthas been deprecated.
- Added BrowserMenuHighlight.LowPriorityto highlight a menu item with a dot over the icon.
 
- Replaced 
- 
storage-sync - Added RemoteTabsStoragefor synced tabs.
 
- Added 
- 
service-firefox-accounts - Removed StorageSyncinterface as it is superseded by the sync manager.
 
- Removed 
- 
service-glean - Glean was updated to v21.3.0 (Full changelog)
- Timers are reset when disabled. That avoids recording timespans across disabled/enabled toggling.
- Add a new flag to pings: send_if_empty.
- Upgrade glean_parser to v1.12.0.
- Implement the deletion request ping in Glean.
 
 
- Glean was updated to v21.3.0 (Full changelog)
23.0.0
- 
feature-downloads - ⚠️ This is a breaking change:
- Renamed to OnDownloadCompletedtoOnDownloadStoppedfor increased clarity on when it's triggered
 
- 
browser-state - ⚠️ This is a breaking change: DownloadStatedoesn't include the propertyfilePathin its constructor anymore, now it is a computed property. As the previous behavior caused some situations wherefileNamewas initially null and after assigned a value to producefilePathvalues like "/storage/emulated/0/Download/null" for more info.
 
- ⚠️ This is a breaking change: 
- 
feature-prompts and feature-downloads - Fix issue #6439 "Crash when downloading Image"
 
- 
service-firefox-accounts - Account profile cache is now used, removing a network call from most instances of account manager instantiation.
- Fixed a bug where account would disappear after restarting an app which hit authentication problems.
- Deprecated the StorageSyncclass. Please use theSyncManagerclass instead.
 
- 
service-glean - Glean was updated to v21.2.0
- Two new metrics were added to investigate sending of metrics and baseline pings. See Bug 1597980 for more information.
- Glean's two lifecycle observers were refactored to avoid the use of reflection.
- Timespans will now not record an error if stopping after setting upload enabled to false.
- The GleanTimerIdcan now be accessed in Java and is no longer atypealias.
- Fixed a bug where the metrics ping was getting scheduled twice on startup.
- When constructing a ping, events are now sorted by their timestamp. In practice, it rarely happens that event timestamps are unsorted to begin with, but this guards against a potential race condition and incorrect usage of the lower-level API.
- Metrics that can record errors now have a new testing method,
testGetNumRecordedErrors.
- The experiments API is no longer ignored before the Glean SDK initialized. Calls are recorded and played back once the Glean SDK is initialized.
- String list items were being truncated to 20, rather than 50, bytes when using
.set()(rather than.add()). This has been corrected, but it may result in changes in the sent data if using string list items longer than 20 bytes.
 
 
- Glean was updated to v21.2.0
- 
support-base - Deprecated BackHandlerinterface. Use theUserInteractionHandler.onBackPressedinstead.
- Added generic UserInteractionHandlerinterface for fragments, features and other components that want to handle user interactions such as ‘back’ or 'home' button presses.
 
- Deprecated 
22.0.0
- 
feature-addons - ⚠️ This is a breaking change:
- Renamed to AddOnsCollectionsProvidertoAddOnCollectionProviderand added caching support:
 val addOnsProvider by lazy { // Keeps addon collection response cached and valid for one day AddOnCollectionProvider(applicationContext, client, maxCacheAgeInMinutes = 24 * 60) } // May return a cached result, if available val addOns = addOnsProvider.getAvailableAddOns() // Will never return a cached result val addOns = addOnsProvider.getAvailableAddOns(allowCache = false)
- 
lib-nearby - 🆕 New component for communicating directly between two devices using Google Nearby API.
 
- 
sample-nearby-chat - 🆕 New sample program demonstrating use of lib-nearby.
 
- 🆕 New sample program demonstrating use of 
- 
feature-customtabs - ⚠️ CustomTabWindowFeaturenow takesActivityinstead ofContext.
 
- ⚠️ 
- 
concept-sync, service-firefox-accounts - OAuthAccount@authorizeOAuthCodemethod is now- authorizeOAuthCodeAsync.
 
- 
service-firefox-accounts - For supported Android API levels (23+), FxaAccountManagercan now be configured to encrypt persisted FxA state, viasecureStateAtRestflag on passed-inDeviceConfig. Defaults tofalse. For lower API levels, settingsecureStateAtRestwill continue storing FxA state in plaintext. If the device is later upgraded to 23+, FxA state will be automatically migrated to an encrypted storage.
- FxA state is stored in application's data directory, in plaintext or encrypted-at-rest if configured via the secureStateAtRestflag. This state contains everything that's necessary to download and decrypt data stored in Firefox Sync.
- An instance of a CrashReportermay now be passed to theFxaAccountManager's constructor. If configured, it will be used to report any detected abnormalities.
- ⚠️ This is a breaking change:
- Several FxaAccountManagermethods have been made internal, and are no longer part of the public API of this module:createSyncManager,getAccountStorage.
 
- For supported Android API levels (23+), 
21.0.0
- 
feature-downloads - Added tryAgainwhich can be called on the feature in order to restart a failed download.
 
- Added 
- 
lib-dataprotect - Added new SecureAbove22Preferenceshelper class, which is an encryption-aware wrapper forSharedPreferences. Only actually encrypts stored values when running on API23+.
 
- Added new 
- 
service-firefox-accounts - Support for keeping SyncEngine.Passwordsengine unlocked during sync. If you're syncing this engine, you must useSecureAbove22Preferencesto store encryption key (stored under "passwords" key), and pass an instance of these secure prefs toGlobalSyncableStoreProvider.configureKeyStorage.
 
- Support for keeping 
- 
concept-sync - Added new LockableStoreto facilitate syncing of "lockable" stores (such asSyncableLoginsStore).
 
- Added new 
- 
feature-sitepermissions - Added a new get operator to SitePermissionsto facilitate the retrieval of permissions.
 val sitePermissions = SitePermissions( "dev.mozilla.org", notification = ALLOWED, savedAt = 0) sitePermissions[Permission.LOCATION] // ALLOWED will be returned
- Added a new get operator to 
- 
engine-gecko-nightly - Adds setDynamicToolbarMaxHeight ApI.
 
- 
feature-push - Added unsubscribeAllsupport from the Rust native layer.
 
- Added 
20.0.0
- 
browser-session, feature-customtabs, feature-session, feature-tabs - ⚠️ This is a breaking change: The WindowFeatureandCustomTabWindowFeaturecomponents have been migrated tobrowser-statefrombrowser-session. Therefore creating these features now requires aBrowserStoreinstance (instead of aSessionManagerinstance). ThewindowRequestproperties have been removedSessionso window requests can now only be observed on aBrowserStorefrom thebrowser-statecomponent. In addition,WindowFeaturewas moved fromfeature-sessiontofeature-tabsbecause it now makes use of ourTabsUseCasesand this would otherwise cause a dependency cycle.
 
- ⚠️ This is a breaking change: The 
- 
feature-downloads - Added ability to pause, resume, cancel, and try again on a download through the DownloadNotification.
- Added support for multiple, continuous downloads.
- Added size of the file to the DownloadNotification.
- Added open file functionality to the DownloadNotification.- Note: you must add a FileProviderto your manifest as well asfile_paths.xml. See SampleBrowser for an example.
- To open .apk files, you must still add the permission android.permission.INSTALL_PACKAGESto your manifest.
 
- Note: you must add a 
- Improved visuals of SimpleDownloadDialogFragmentto better matchSitePermissionsDialogFragment.- SimpleDownloadDialogFragmentcan similarly be themed by using- PromptsStylingproperties.
 
- Recreated download notification channel with lower importance for Android O+ so that the notification is not audibly intrusive.
 
- Added ability to pause, resume, cancel, and try again on a download through the 
- 
feature-webnotifications - Adds feature implementation for configuring and displaying web notifications to the user
 WebNotificationFeature( applicationContext, engine, icons, R.mipmap.ic_launcher, BrowserActivity::class.java )
- 
service-glean - Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing stderr.
 
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing 
- 
concept-engine - Adds support for WebPush abstraction to the Engine.
- Adds support for WebShare abstraction as a PromptRequest.
 
- 
engine-gecko-nightly - Adds support for WebPush in GeckoEngine.
 
- 
support-webextensions - Adds support for sending messages to background pages and scripts in WebExtensions.
 
- 
service-firefox-accounts - Adds authorizeOAuthCodemethod for generating scoped OAuth codes.
 
- Adds 
- 
feature-push - ⚠️ The AutoPushFeaturenow throws when reaching exceptions in the native layer that are unrecoverable.
 
- ⚠️ The 
- 
feature-prompts - Adds support for Web Share API using ShareDelegate.
 
- Adds support for Web Share API using 
- 
experiments - Fixes a crash when the app version or the experiment's version specifiers are not in the expected format.
 
- 
engine, engine-gecko-*, support-webextensions - Added support browser.tabs.remove()in web extensions.
 val engine = GeckoEngine(applicationContext, engineSettings) engine.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate { override fun onCloseTab(webExtension: WebExtension?, engineSession: EngineSession) { store.state.tabs.find { it.engineState.engineSession === engineSession }?.let { store.dispatch(RemoveTabAction(tab.id)) } } })
- Added support 
19.0.1
- 
service-glean - Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing stderr.
 
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing 
19.0.0
- 
browser-toolbar - ⚠️ This is a breaking change: Refactored the internals to use ConstraintLayout. As part of this change the public API was simplified and unused methods/properties have been removed.
 
- ⚠️ This is a breaking change: Refactored the internals to use 
- 
feature-accounts - Add new FxaPushSupportFeaturefor some underlying support when connecting push and fxa accounts together.
 
- Add new 
- 
browser-state - Added externalAppTypetoCustomTabConfigto indicate how the session is being used.
 
- Added 
- 
service-glean - The Rust implementation of the Glean SDK is now being used.
- ⚠️ This is a breaking change: the GleanDebugActivityis no longer exposed from service-glean. Users need to use the one inmozilla.telemetry.glean.debug.GleanDebugActivityfrom theadbcommand line.
 
- 
lib-push-firebase - Fixes a potential bug where we receive a message for another push service that we cannot process.
 
- 
feature-privatemode - Added new feature for private browsing mode.
- Added SecureWindowFeatureto prevent screenshots in private browsing mode.
 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko: GeckoView 70.0
- browser-engine-gecko-beta: GeckoView 71.0
- browser-engine-gecko-nightly: GeckoView 72.0
 
 
- Merge day!
- 
feature-push - The AutoPushFeaturenow checks (once every 24 hours) to verify and renew push subscriptions if expired after a cold boot.
 
- The 
18.0.1
- 
feature-prompts - Fixed a crash when showing the file picker.
 
18.0.0
- 
browser-menu - Adds the ability to create a BrowserMenuCategory, a menu item that defines a category for other menu items
 
- 
concept-engine - Adds the setting forceUserScalableContent.
 
- Adds the setting 
- 
engine-gecko-nightly - Implements the setting forceUserScalableContent.
 
- Implements the setting 
- 
feature-prompts - Deprecated PromptFeatureconstructor that has parameters for bothActivityandFragment. Use the constructors that just take either one instead.
- Changed sessionIdparameter name tocustomTabId.
 
- Deprecated 
17.0.0
- 
feature-contextmenu - The "Save Image" context menu item will no longer prompt before downloading the image.
 
- 
concept-engine - Added WebAppManifest.ShareTargetdata class.
 
- Added 
- 
lib-crash - Now supports sending caught exceptions. Use the 'submitCaughtException()' to send caught exceptions if the underlying crash reporter service supports it.
 val job = crashReporter.submitCaughtException(e)
- 
engine, engine-gecko-nightly, engine-gecko-beta, engine-gecko - ⚠️ This is a breaking change: Renamed WebExtensionTabDelegatetoWebExtensionDelegateto handle various web extensions related engine events:
 GeckoEngine(applicationContext, engineSettings).also { it.registerWebExtensionDelegate(object : WebExtensionDelegate { override fun onNewTab(webExtension: WebExtension?, url: String, engineSession: EngineSession) { sessionManager.add(Session(url), true, engineSession) } }) }- ⚠️ This is a breaking change: Redirect source and target flags are now passed to history tracking delegates. As part of this change, HistoryTrackingDelegate.onVisited()receives a newPageVisitdata class as its second argument, specifying thevisitTypeandredirectSource. For more details, please see PR #4268.
 
- ⚠️ This is a breaking change: Renamed 
- 
support-webextensions - Added functionality to make sure web extension related events in the engine are reflected in the browser state / store. Instead of attaching a WebExtensionDelegateto the engine, and manually reacting to all events, it's now possible to initializeWebExtensionSupport, which provides overridable default behaviour for all web extension related engine events:
 // Makes sure web extension related events (e.g. an extension is installed, or opens a new tab) are dispatched to the browser store. WebExtensionSupport.initialize(components.engine, components.store) // If dispatching to the browser store is not desired, all actions / behaviour can be overridden: WebExtensionSupport.initialize(components.engine, components.store, onNewTabOverride = { _, engineSession, url -> components.sessionManager.add(Session(url), true, engineSession) })
- Added functionality to make sure web extension related events in the engine are reflected in the browser state / store. Instead of attaching a 
- 
browser-menu - Fixes background ripple of Switch in BrowserMenuImageSwitch
 
16.0.0
- 
feature-awesomebar - ⚠️ This is a breaking change: AwesomeBar.Suggestionnow directly takes a Bitmap for the icon param rather than a Unit.
 
- ⚠️ This is a breaking change: 
- 
feature-pwa - ⚠️ This is a breaking change: Intent sent from the WebAppShortcutManagernow require the consumption of theSHORTCUT_CATEGORYin your manifest
 
- ⚠️ This is a breaking change: Intent sent from the 
- 
feature-customtabs - 'CustomTabIntentProcessor' can create private sessions now.
 
- 
browser-session, browser-state, feature-prompts - ⚠️ This is a breaking change: The feature-promptscomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aPromptFeaturerequires aBrowserStoreinstance (instead of aSessionManagerinstance). ThepromptRequestproperty has been removedSession. Prompt requests can now only be observed on aBrowserStorefrom thebrowser-statecomponent.
 
- ⚠️ This is a breaking change: The 
- 
tooling-detekt - Published detekt rules for internal use. Check module documentation for detailed ruleset description.
 
- 
feature-intent - Added support for NFC tag intents to TabIntentProcessor.
 
- Added support for NFC tag intents to 
- 
firefox-accounts, service-fretboard - ⚠️ This is a breaking change: Due to migration to WorkManager v2.2.0, some classes like WorkManagerSyncSchedulerandWorkManagerSyncDispatchernow expects aContextin their constructors.
 
- ⚠️ This is a breaking change: Due to migration to WorkManager v2.2.0, some classes like 
- 
engine, engine-gecko-nightly and engine-gecko-beta - Added WebExtensionsTabsDelegateto supportbrowser.tabs.create()in web extensions.
 GeckoEngine(applicationContext, engineSettings).also { it.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate { override fun onNewTab(webExtension: WebExtension?, url: String, engineSession: EngineSession) { sessionManager.add(Session(url), true, engineSession) } }) }
- Added 
15.0.0
- 
browser-session, browser-state, feature-contextmenu, feature-downloads - 
- ⚠️ This is a breaking change: Removed the downloadproperty fromSession. Downloads can now only be observed on aBrowserStatefrom thebrowser-statecomponent. ThereforeContextMenuUseCasesandDownloadsUseCasesnow require aBrowserStoreinstance.
 
- ⚠️ This is a breaking change: Removed the 
 
- 
- 
support-ktx - Adds Resources.Theme.resolveAttribute(Int)to quickly get a resource ID from a theme.
- Adds Context.getColorFromAttrto get a color int from an attribute.
 
- Adds 
- 
feature-customtabs - Added CustomTabWindowFeatureto handle windows inside custom tabs, PWAs, and TWAs.
 
- Added 
- 
feature-tab-collections - Behavior change: In a collection List is now ordered descending by creation date (newest tab in a collection on top)
 
- 
feature-session, engine-gecko-nightly and engine-gecko-beta - Added api to manage the tracking protection exception list, any session added to the list will be ignored and the the current tracking policy will not be applied.
 val useCase = TrackingProtectionUseCases(sessionManager,engine) useCase.addException(session) useCase.removeException(session) useCase.removeAllExceptions() useCase.containsException(session){ contains -> // contains indicates if this session is on the exception list. } useCase.fetchExceptions { exceptions -> // exceptions is a list of all the origins that are in the exception list. }
- 
support-sync-telemetry - 🆕 New component containing building blocks for sync telemetry.
 
- 
concept-sync, services-firefox-accounts ⚠️ This is a breaking change - Internal implementation of sync changed. Most visible change is that clients are now allowed to change which sync engines are enabled and disabled.
- FxaAccountManager#syncNowAsynctakes an instance of a- reasoninstead of- startupboolean flag.
- SyncEnginesStorageis introduced, allowing applications to read and update enabled/disabled state configured- SyncEngines.
- SyncEngineis no longer an- enum class, but a- sealed classinstead. e.g.- SyncEngine.HISTORYis now- SyncEngine.History.
- DeviceConstellation#setDeviceNameAsyncnow takes a- contextin addition to new- name.
- FxaAuthDatanow takes an optional- declinedEnginesset of SyncEngines.
 
14.0.1
- 
feature-collections - Fixed #4514: Do not restore parent tab ID for collections.
 
- 
service-glean - PR #4511: Always set 'wasMigrated' to false in the Glean SDK.
 
14.0.0
- 
feature-customtabs - Now the color of the tracking protection icon adapts to color of the toolbar.
 
- 
feature-session, engine-gecko-nightly and engine-gecko-beta - Added a way to exposes the same amount of trackers as Firefox desktop has in it tracking protection panel via TrackingProtectionUseCases.
 val useCase = TrackingProtectionUseCases(sessionManager,engine) useCase.fetchTrackingLogs( session, onSuccess = { trackersLog -> // A list of all the tracker logger for this session }, onError = { throwable -> //A throwable indication what went wrong } )
- 
browser-toolbar - Resized icons on the toolbar see #4490 for more information.
- Added a way to customize the color of the tracking protection icon via BrowserToolbar.
 val toolbar = BrowserToolbar(context) toolbar.trackingProtectionColor = Color.BLUE
- 
All components - Increased androidx.browserversion to1.2.0-alpha07.
 
- Increased 
- 
feature-media - Playback will now be stopped and the media notification will get removed if the app's task is getting removed (app is swiped away in task switcher).
 
- 
feature-pwa - Adds WebAppHideToolbarFeature.onToolbarVisibilityChangeto be notified when the toolbar is shown or hidden.
 
- Adds 
- 
engine-gecko-nightly - Added the ability to exfiltrate Gecko categorical histograms.
 
- 
support-webextensions - 🆕 New component containing building blocks for features implemented as web extensions.
 
- 
lib-push-amazon - Fixed usage of cache version of registration ID in situations when app data is deleted.
 
- 
tools-detekt - New (internal-only) component with custom detekt rules.
 
- 
service-glean - ⚠ This is a breaking change: Glean.initialize() must be called on the main thread.
 
13.0.0
- 
All components - Updated Kotlin version from 1.3.40to1.3.50.
- Updated Kotlin Coroutine library version from 1.2.2to1.3.0.
 
- Updated Kotlin version from 
- 
browser-session - Clear session icon only if URL host changes.
 
- 
feature-pwa - Adds WebAppUseCases.isInstallableto check if the current session can be installed as a Progressive Web App.
 
- Adds 
- 
feature-downloads - ⚠️ This is a breaking change: The feature-downloadscomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aDownloadsFeaturerequires aBrowserStoreinstance (instead of aSessionManagerinstance) and aDownloadsUseCasesinstance now.
 
- ⚠️ This is a breaking change: The 
- 
feature-contextmenu - ⚠️ This is a breaking change: The feature-contextmenucomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aContextMenuFeaturerequires aBrowserStoreinstance (instead of aSessionManagerinstance) and aContextMenuUseCasesinstance now.
 
- ⚠️ This is a breaking change: The 
- 
service-glean - ⚠️ This is a breaking change: applications need to use ConceptFetchHttpUploaderfor overriding the ping uploading mechanism instead of directly usingconcept-fetchimplementations.
 
- ⚠️ This is a breaking change: applications need to use 
- 
feature-tabs - ⚠️ This is a breaking change: Methods that have been accepting a parent Sessionparameter now expect the parent id (String).
 
- ⚠️ This is a breaking change: Methods that have been accepting a parent 
- 
browser-menu - Adds the ability to create a BrowserMenuImageSwitch, a BrowserMenuSwitch with icon
 
- 
feature-accounts - Added ability to configure FxaWebChannelFeature with a set of FxaCapability. Currently there's just one:CHOOSE_WHAT_TO_SYNC. It defaults tofalse, so if you want "choose what to sync" selection during auth flows, please specify it.
 
- Added ability to configure FxaWebChannelFeature with a set of 
12.0.1
- 
lib-push-amazon - Fixed #4448: Clearing app data does not reset the registration ID.
 
12.0.0
- 
browser-engine-gecko-nightly, browser-engine-gecko-beta and browser-engine-gecko - The TrackingProtectionPolicy.recommended()andTrackingProtectionPolicy.strict()policies are now aligned with standard and strict (respectively) policies on FireFox desktop, for more details see the issue #4349.
 
- The 
- 
browser-engine-gecko-nightly and browser-engine-gecko-beta - The TrackingProtectionPolicy.selectfunction now allows you to indicate ifstrictSocialTrackingProtectionshould be activated or not. When it is active blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the issue #4320
 val policy = TrackingProtectionPolicy.select( strictSocialTrackingProtection = true )
- The 
- 
context-menu - Exposed title tag from GV in HitResult. Fixes [#1444]. If title is null or blank the src value is returned for title.
 
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 69.0
- browser-engine-gecko-beta: GeckoView 70.0
- browser-engine-gecko-nightly: GeckoView 71.0
 
 
- Merge day!
- 
feature-toolbar - ⚠️ This is a breaking change: The feature-toolbarcomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aToolbarFeaturerequires aBrowserStoreinstance instead of aSessionManagerinstance now.
 
- ⚠️ This is a breaking change: The 
- 
lib-crash - Now supports Breadcrumbs. Use the 'recordCrashBreadcrumb()' to record Breadcrumbs if the underlying crash reporter service supports it.
 crashReporter.recordCrashBreadcrumb( CrashBreadcrumb("Settings button clicked", data, "UI", Level.INFO, Type.USER) )
- 
browser-engine-gecko-nightly and browser-engine-gecko-beta - The TrackingProtectionPolicy.strict()now blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the issue #4213
 
- The 
- 
browser-session - ⚠️ This is a breaking change: getSessionIdandEXTRA_SESSION_IDhas moved to thefeature-intentcomponent.
 
- ⚠️ This is a breaking change: 
- 
feature-intent - ⚠️ This is a breaking change: TabIntentProcessorhas moved to theprocessingsub-package, but is still in the same component.
 
- ⚠️ This is a breaking change: 
- 
browser-engine-gecko - Like with the nightly and beta flavor previously this component now has a hard dependency on the new universal GeckoView build that is no longer architecture specific (ARM, x86, ..). With that apps no longer need to specify the GeckoView dependency themselves and synchronize the used version with Android Components. Additionally apps can now make use of APK splits or Android App Bundles (AAB).
 
- 
browser-engine-servo - ❌ We removed the browser-engine-servocomponent since it was not being maintained, updated and used.
 
- ❌ We removed the 
- 
concept-sync, service-firefox-accounts - ⚠️ This is a breaking change:
- SyncConfig's- syncableStoreshas been renamed to- supportedEngines, expressed via new enum type- SyncEngine.
- begin*OAuthAccount methods now return an- AuthFlowUrl, which encapsulates an OAuth state identifier.
- AccountObserver:onAuthenticatedmethod now has- authTypeparameter (instead of- newAccount), which describes in detail what caused an authentication.
- GlobalSyncableStoreProvider.configureStorenow takes a pair of- Pair<SyncEngine, SyncableStore>, instead of allowing arbitrary string names for engines.
- GlobalSyncableStoreProvider.getStoreis no longer part of the public API.
 
- 
feature-push - Added more logging into AutoPushFeatureto aid in debugging in release builds.
 
- Added more logging into 
- 
support-ktx - Added variant of Flow.ifChanged()that takes a mapping function in order to filter items where the mapped value has not changed.
 
- Added variant of 
- 
feature-pwa - Adds the ability to create a basic shortcut with a custom label
 
- 
browser-engine-gecko-nightly - Adds support for exposing Gecko scalars through the Glean SDK. See Bug 1579365 for details.
 
- 
support-utils - Intent.asForegroundServicePendingIntent(Context)extension method to create pending intent for the service that will play nicely with background execution limitations introduced in Android O (e.g. foreground service).
 
- 
concept-sync - ⚠️ This is a breaking change: actionparam ofAuthType.OtherExternalis now optional. Missingactionindicates that we really don't know what external authType we've hit.
 
- ⚠️ This is a breaking change: 
11.0.0
- 
browser-icons - Ensures icons are not cached on the disk in private sessions.
 
- 
browser-menu - Added startImageto Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted
- Highlight properties of HighlightableMenuItem startImageandendImageare now both optional
 
- Added 
- 
lib-state - Added Storeextensions to observeStateusing Kotlin'sFlowAPI:Store.flow(),Store.flowScoped().
 
- Added 
- 
support-ktx - Added property delegates to work with SharedPreferences.
- Added Flow.ifChanged()operator for filtering aFlowbased on whether a value has changed from the previous one (e.g.A, A, B, C, A -> A, B, C, A).
 
- Added property delegates to work with 
- 
feature-customtabs - Added CustomTabsServiceStoreto track custom tab data inAbstractCustomTabsService.
 
- Added 
- 
feature-pwa - Added support for hiding the toolbar in a Trusted Web Activity.
- Added TrustedWebActivityIntentProcessorto process TWA intents.
- Added CustomTabState.trustedOriginsextension method to turn the verification state of a custom tab into a list of origins.
- Added WebAppHideToolbarFeature.onTrustedScopesChangeto change the trusted scopes after the feature is created.
 
- 
service-telemetry - This component is now deprecated. Please use the Glean SDK instead. This library will not be removed until all projects using it start using the Glean SDK.
 
- 
browser-session, feature-intent - ⚠️ This is a breaking change: Moved Intentrelated code frombrowser-sessiontofeature-intent.
 
- ⚠️ This is a breaking change: Moved 
- 
feature-media - The Intentlaunched from the media notification now has its action set toMediaFeature.ACTION_SWITCH_TAB. In addition to that the extraMediaFeature.EXTRA_TAB_IDcontains the id of the tab the media notification is displayed for.
 
- The 
10.0.1
- 
browser-menu - Added startImageto Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted
- Highlight properties of HighlightableMenuItem startImageandendImageare now both optional
 
- Added 
- 
Imported latest state of translations. 
10.0.0
- 
feature-toolbar - Toolbar Menu is now closed on exiting the app.
 
- 
support-test-appservices - 🆕 New component for synchronizing Application Services' unit testing dependencies used in Android Components.
 
- 
service-location - Added RegionSearchLocalizationProvider- ASearchLocalizationProviderimplementation that uses aMozillaLocationServiceinstance to do a region lookup via GeoIP.
- ⚠️ This is a breaking change: An implementation of SearchLocalizationProvidernow returns aSearchLocalizationdata class instead of multiple properties.
 
- Added 
- 
service-glean - ⚠️ This is a breaking change: Glean.handleBackgroundEventis now an internal API.
- Added a QuantityMetricType(for internal use by Gecko metrics only).
 
- ⚠️ This is a breaking change: 
- 
browser-engine-gecko(-beta/nightly), concept-engine - Added simplified Media.statederived fromMedia.playbackStateevents.
 
- Added simplified 
- 
lib-push-adm, lib-push-firebase, concept-push - Added isServiceAvailableto signify if the push service is supported on the device.
 
- Added 
- 
concept-engine - Added WebNotificationdata class for the web notifications API.
 
- Added 
- 
browser-engine-system - Fixed issue 4191 where the recommended()tracking category was not getting applied forSystemEngine.
 
- Fixed issue 4191 where the 
- 
concept-engine, browser-engine-gecko-nightly and browser-engine-gecko-beta: - ⚠️ This is a breaking change: TrackingProtectionPolicydoes not have asafeBrowsingCategoriesanymore, Safe Browsing is now a separate setting on the Engine level. To change the default value ofSafeBrowsingPolicy.RECOMMENDEDyou have set it throughengine.settings.safeBrowsingPolicy.
- This decouples the tracking protection API and safe browsing from each other so you can change the tracking protection policy without affecting your safe browsing policy as described in this issue #4190.
- ⚠️ Alert for SystemEngine consumers: The Safe Browsing API is not yet supported on this engine, this will be covered on #4206. If you use this API you will get a UnsupportedSettingException, however you can use a manifest tag to activate it.
 <manifest> <application> <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" /> ... </application> </manifest>
- ⚠️ This is a breaking change: 
9.0.0
- 
browser-menu - Updated the styling of the menu to not have padding on top or bottom. Also modified size of BrowserMenuItemToolbarto matchBrowserToolbar's height
 
- Updated the styling of the menu to not have padding on top or bottom. Also modified size of 
- 
feature-media - Do not display title/url/icon of website in media notification if website is opened in private mode.
 
- 
concept-engine and browser-session - ⚠️ This is a breaking change: TrackingProtectionPolicyremoves thecategoriesproperty to expose two new onestrackingCategories: Array<AntiTrackingCategory>andsafeBrowsingCategories: Array<SafeBrowsingCategory>to separate the tracking protection categories from the safe browsing ones.
- ⚠️ This is a breaking change: TrackingProtectionPolicy.all()has been replaced byTrackingProtectionPolicy.strict()to have similar naming conventions with GeckoView api.
- ⚠️ This is a breaking change: Tracker#categorieshas been replaced byTracker#trackingCategoriesandTracker#cookiePoliciesto better report blocked content see #4098.
- Added: Session#trackersLoadedA list ofTrackers that could be blocked but has been loaded in this session.
- Added: Session#Observer#onTrackerLoadedNotifies that a tracker that could be blocked has been loaded.
 
- ⚠️ This is a breaking change: 
- 
browser-toolbar - HTTP sites are now marked as insecure with a broken padlock icon, rather than a globe icon. Apps can revert to the globe icon by using a custom BrowserToolbar.siteSecurityIcon.
 
- HTTP sites are now marked as insecure with a broken padlock icon, rather than a globe icon. Apps can revert to the globe icon by using a custom 
- 
service-firefox-accounts, concept-sync - FxaAccountManager, if configured with- DeviceCapability.SEND_TAB, will now automatically refresh device constellation state and poll for device events during initialization and login.
- FxaAccountManager.syncNowAsynccan now receive a- debounceparameter, allowing consumers to specify debounce behaviour of their sync requests.
- ⚠️ This is a breaking change:
- Removed public methods from DeviceConstellationand its implementation inFxaDeviceConstellation:fetchAllDevicesAsync,startPeriodicRefresh,stopPeriodicRefresh.
- DeviceConstellation#refreshDeviceStateAsyncwas renamed to- refreshDevicesAsync: no longer polls for device events, only updates device states (e.g. new devices, name changes)
- pollForEventsAsyncno longer returns the events. Use the observer API instead:
 val deviceConstellation = autheneticatedAccount()?.deviceConstellation() ?: return deviceConstellation.registerDeviceObserver( object: DeviceEventsObserver { override fun onEvents(events: List<DeviceEvent>) { // Process device events here. } }, lifecycleOwner, false) // Poll for events. deviceConstellation.pollForEventsAsync().await()
- 
browser-session - Removed deprecated CustomTabConfighelpers. Use the equivalent methods in feature-customtabs instead.
 
- Removed deprecated 
- 
support-ktx - Removed deprecated methods that have equivalents in Android KTX.
 
- 
concept-sync, service-firefox-account - ⚠️ This is a breaking change
- In OAuthAccount(and by extension,FirefoxAccount)beginOAuthFlowAsyncno longer need to specifywantsKeysparameter; it's automatically inferred from the requestedscopes.
- Three new device types now available: tablet,tv,vr.
 
8.0.0
- 
service-glean - Timing distributions now use a functional bucketing algorithm that does not require fixed limits to be defined up front.
 
- 
support-android-test - Added WebserverRule- a junit rule that will run a webserver during tests serving content from assets in the test package (#3893).
 
- Added 
- 
browser-engine-gecko-nightly - The component now exposes an implementation of the Gecko runtime telemetry delegate, glean.GeckoAdapter, which can be used to collect Gecko metrics with the Glean SDK.
 
- The component now exposes an implementation of the Gecko runtime telemetry delegate, 
- 
browser-engine-gecko-beta - The component now handles situations where the Android system kills the content process (without killing the main app process) in order to reclaim resources. In those situations the component will automatically recover and restore the last known state of those sessions.
 
- 
browser-toolbar - Changed BrowserToolbar.siteSecurityColorto use no icon color filter when the color is set toColor.TRANSPARENT.
- Added BrowserToolbar.siteSecurityIconto use custom security icons with multiple colors in the toolbar.
 
- Changed 
- 
feature-sendtab - Added a SendTabFeaturethat observes account device events with optional support for push notifications.
 SendTabFeature( context, accountManager, pushFeature, // optional pushService // optional; if you want the service to also be started/stopped based on account changes. onTabsReceiver = { from, tabs -> /* Do cool things here! */ } )
- Added a 
- 
feature-media - MediaFeatureis no longer showing a notification for playing media with a very short duration.
- Lowered priority of media notification channel to avoid the media notification making any sounds itself.
 
7.0.0
- 
browser-menu - ⚠️ This is a breaking change: BrowserMenuHighlightableItemnow has a ripple effect and includes an example of how to pass in a drawable properly to also include a ripple when highlighted
 
- ⚠️ This is a breaking change: 
- 
feature-accounts - ⚠️ This is a breaking change:
- The FirefoxAccountsAuthFeatureno longer needs anTabsUseCases, instead is taking a lambda to allow applications to decide which action should be taken. This fixes #2438 and #3272.
 val feature = FirefoxAccountsAuthFeature( accountManager, redirectUrl ) { context, authUrl -> // passed-in context allows easily opening new activities for handling urls. tabsUseCases.addTab(authUrl) } // ... elsewhere, in the UI code, handling click on button "Sign In": components.feature.beginAuthentication(activityContext)
- 
browser-engine-gecko-nightly - Now supports window requests. A new tab will be opened for target="_blank"links andwindow.opencalls.
 
- Now supports window requests. A new tab will be opened for 
- 
browser-icons - Handles low-memory scenarios by reducing memory footprint.
 
- 
feature-app-links - Fixed #3944 causing third-party apps being opened when links with a javascriptscheme are clicked.
 
- Fixed #3944 causing third-party apps being opened when links with a 
- 
feature-session - ⚠️ This is a breaking change:
- The WindowFeatureno longer needs an engine. It can now be created using just:
 val windowFeature = WindowFeature(components.sessionManager)
- 
feature-pwa - Added full support for pinning websites to the home screen.
- Added full support for Progressive Web Apps, which can be pinned and open in their own window.
 
- 
service-glean - Fixed a bug inTimeSpanMetricTypethat prevented multiple consecutivestart()/stop()calls. This resulted in theglean.baseline.durationbeing missing from mostbaselinepings.
 
- Fixed a bug in
- 
service-firefox-accounts - ⚠️ This is a breaking change: AccountObserver.onAuthenticatednow helps observers distinguish when an account is a new authenticated account one with a secondnewAccountboolean parameter.
 
- ⚠️ This is a breaking change: 
- 
concept-sync, service-firefox-accounts: - ⚠️ This is a breaking change: Added OAuthAccount@disconnectAsync, which replacedDeviceConstellation@destroyCurrentDeviceAsync.
 
- ⚠️ This is a breaking change: Added 
- 
lib-crash - ⚠️ Known issue: Sending a crash using the MozillaSocorroServicewith GeckoView 69.0 or 68.0, will lead to aNoSuchMethodErrorwhen using this particular version of android components. See #4052.
 
- ⚠️ Known issue: Sending a crash using the 
6.0.2
- 
service-glean - Fixed a bug inTimeSpanMetricTypethat prevented multiple consecutivestart()/stop()calls. This resulted in theglean.baseline.durationbeing missing from mostbaselinepings.
 
- Fixed a bug in
6.0.1
- 
feature-app-links - Fixed #3944 causing third-party apps being opened when links with a javascriptscheme are clicked.
 
- Fixed #3944 causing third-party apps being opened when links with a 
- 
Imported latest state of translations. 
6.0.0
- 
support-utils - Fixed #3871 autocomplete incorrectly fills urls that contains a port number.
 
- 
feature-readerview - Fixed #3864 now minus and plus buttons have the same size on reader view.
 
- 
browser-engine-gecko-nightly - The component now handles situations where the Android system kills the content process (without killing the main app process) in order to reclaim resources. In those situations the component will automatically recover and restore the last known state of those sessions.
- Now supports window requests. A new tab will be opened for target="_blank"links andwindow.opencalls.
 
- 
service-location - 🆕 A new component for accessing Mozilla's and other location services.
 
- 
feature-prompts - Improved month picker UI, now we have the same widget as Fennec.
 
- 
support-ktx - Deprecated ViewGroup.forEachin favour of Android Core KTX.
- Deprecated Map.toBundle()in favour of Android Core KTXbundleOf.
 
- Deprecated 
- 
lib-state - Migrated Store.broadcastChannel()toStore.channel()returning aReceiveChannelthat can be read by only one receiver. Broadcast channels have a more complicated lifetime that is not needed in most use cases. For multiple receivers multiple channels can be created from theStoreor Kotlin'sReceiveChannel.broadcast()extension method can be used.
 
- Migrated 
- 
support-android-test - Added LeakDetectionRuleto install LeakCanary when running instrumented tests. If a leak is found the test will fail and the test report will contain the leak trace.
 
- Added 
- 
lib-push-amazon - 🆕 Added a new component for Amazon Device Messaging push support.
 
- 
browser-icons - Changed the maximum size for decoded icons. Icons are now scaled to the target size to save memory.
 
- 
service-firefox-account 
- 
Added isSyncActive(): Booleanmethod toFxaAccountManager
- 
feature-customtabs - CustomTabsToolbarFeaturenow optionally takes- Windowas a parameter. It will update the status bar color to match the toolbar color.
- Custom tabs can now style the navigation bar using CustomTabsConfig.navigationBarColor.
 
- 
feature-sendtab - 🆕 New component for send tab use cases.
 val sendTabUseCases = SendTabUseCases(accountManager) // Send to a particular device sendTabUseCases.sendToDeviceAsync("1234", TabData("Mozilla", "https://mozilla.org")) // Send to all devices sendTabUseCases.sendToAllAsync(TabData("Mozilla", "https://mozilla.org")) // Send multiple tabs to devices works too.. sendTabUseCases.sendToDeviceAsync("1234", listof(tab1, tab2)) sendTabUseCases.sendToAllAsync(listof(tab1, tab2))
- 
support-ktx - Added Collection.crossProductto retrieve the cartesian product of twoCollections.
 
- Added 
- 
service-glean - ⚠️ This is a breaking change: Glean.enableTestingModeis nowinternal. Tests can use theGleanTestRuleto enable testing mode. Updated docs available here.
 
- ⚠️ This is a breaking change: 
- 
feature-push - Added default arguments when registering for subscriptions/messages.
 
5.0.0
- 
All components - Increased compileSdkVersionto 29 (Android Q)
 
- Increased 
- 
feature-tab - ⚠️ This is a breaking change: Now TabsUseCases.SelectTabUseCaseis an interface, if you want to rely on its previous behavior you could keep usingTabsUseCases.selectTabor useTabsUseCases.DefaultSelectTabUseCase.
 
- ⚠️ This is a breaking change: Now 
- 
feature-awesomebar - SessionSuggestionProvidernow have a new parameter- excludeSelectedSession, to ignore the selected session on the suggestions.
 
- 
concept-engine and browser-session - ⚠️ This is a breaking change: Function signature changed from Session.Observer.onTrackerBlocked(session: Session, blocked: String, all: List<String>) = UnittoSession.Observer.onTrackerBlocked(session: Session, tracker: Tracker, all: List<Tracker>) = Unit
- ⚠️ This is a breaking change: Function signature changed from EngineSession.Observer.onTrackerBlocked(url: String) = UnittoEngineSession.Observer.onTrackerBlocked(tracker: Tracker) = Unit
- Added: To provide more details about a blocked content, we introduced a new class called Trackerthis contains information like theurlandcategoriesof theTracker. Among the categories we haveAd,Analytic,Social,Cryptomining,FingerprintingandContent.
 
- ⚠️ This is a breaking change: Function signature changed from 
- 
browser-icons - Added BrowserIcons.loadIntoViewto automatically load an icon into anImageView.
 
- Added 
- 
browser-session - Added IntentProcessorinterface to represent a class that processes intents to create sessions.
- Deprecated CustomTabConfig.isCustomTabIntentandCustomTabConfig.createFromIntent. UseisCustomTabIntentandcreateFromCustomTabIntentin feature-customtabs instead.
 
- Added 
- 
feature-customtabs - Added CustomTabIntentProcessorto create custom tab sessions from intents.
- Added isCustomTabIntentto check if an intent is for creating custom tabs.
- Added createCustomTabConfigFromIntentto create aCustomTabConfigfrom a custom tab intent.
 
- Added 
- 
feature-downloads - FetchDownloadManagernow determines the filename during the download, resulting in more accurate filenames.
 
- 
feature-intent - Deprecated IntentProcessorclass and moved some of its code to the newTabIntentProcessor.
 
- Deprecated 
- 
feature-push - Updated the default autopush service endpoint to updates.push.services.mozilla.com.
 
- Updated the default autopush service endpoint to 
- 
service-glean - Hyphens -are now allowed in labels for metrics. See 1566764.
- ⚠️ This is a breaking change: Timespan values are returned in their configured time unit in the testing API.
 
- Hyphens 
- 
lib-state - Added ability to pause/resume observing a Storeviapause()andresume()methods on the subscription
- When using observeManuallythe returnedSubscriptionis in paused state by default.
- When binding a subscription to a LifecycleOwnerthen this subscription will automatically paused and resumed based on whether the lifecycle is in STARTED state.
- When binding a subscription to a Viewthen this subscription will be paused until theViewgets attached.
- Added Store.broadcastChannel()to observe state from a coroutine sequentially ordered.
- Added helpers to process states coming from a Storesequentially viaFragment.consumeFrom(Store)andView.consumeFrom(Store).
 
- Added ability to pause/resume observing a 
- 
support-ktx - ⚠️ This is a breaking behavior change: JSONArray.mapNotNullis now an inline function, changing the behavior of thereturnkeyword within its lambda.
- Added View.toScope()to create aCoroutineScopethat is active as long as theViewis attached. Once theViewgets detached theCoroutineScopegets cancelled automatically. By default coroutines dispatched on the created [CoroutineScope] run on the main dispatcher
 
- ⚠️ This is a breaking behavior change: 
- 
concept-push, lib-push-firebase, feature-push - Added deleteTokento the PushService interface.
- Added the implementation for it to Firebase Push implementation.
- Added forceRegistrationRenewalto the AutopushFeature for situations where our current registration token may be invalid for us to use.
 
- Added 
- 
service-firefox-accounts - Added AccountMigration, which may be used to query trusted FxA Auth providers and automatically sign-in into available accounts.
 
- Added 
4.0.1
- 
service-glean - Hyphens -are now allowed in labels for metrics. See 1566764.
 
- Hyphens 
- 
Imported latest state of translations. 
- 
support-rusthttp - ⚠️ This is a breaking change: The application-services (FxA, sync, push) code now will send HTTP requests through a kotlin-provided HTTP stack in all configurations, however it requires configuration at startup. This may be done via the neq support-rusthttpcomponent as follows:
 import mozilla.components.support.rusthttp.RustHttpConfig // Note: other implementations of `Client` from concept-fetch are fine as well. import mozilla.components.lib.fetch.httpurlconnection.HttpURLConnectionClient // some point before calling rust code that makes HTTP requests. RustHttpConfig.setClient(lazy { HttpURLConnectionClient() })- Note that code which uses a custom megazord must call this after initializing the megazord.
 
- ⚠️ This is a breaking change: The application-services (FxA, sync, push) code now will send HTTP requests through a kotlin-provided HTTP stack in all configurations, however it requires configuration at startup. This may be done via the neq 
4.0.0
- 
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly - Merge day!
- browser-engine-gecko-release: GeckoView 68.0
- browser-engine-gecko-beta: GeckoView 69.0
- browser-engine-gecko-nightly: GeckoView 70.0
 
 
- Merge day!
- 
browser-engine-gecko-beta - Like with the nightly flavor previously (0.55.0) this component now has a hard dependency on the new universal GeckoView build that is no longer architecture specific (ARM, x86, ..). With that apps no longer need to specify the GeckoView dependency themselves and synchronize the used version with Android Components. Additionally apps can now make use of APK splits or Android App Bundles (AAB).
 
- 
feature-media - Added MediaNotificationFeature- a feature implementation to show an ongoing notification (keeping the app process alive) while web content is playing media.
 
- Added 
- 
feature-downloads - Added custom notification icon for FetchDownloadManager.
 
- Added custom notification icon for 
- 
feature-app-links - Added allow-list for schemes of URLs to open with an external app. This defaults to mailto,market,smsandtel.
 
- Added allow-list for schemes of URLs to open with an external app. This defaults to 
- 
feature-accounts - ⚠️ This is a breaking change: Public API for interacting with FxaAccountManagerand sync changes
- FxaAccountManagernow has a new, simplified public API.
- BackgroundSyncManageris longer exists; sync functionality exposed directly via- FxaAccountManager.
- See component's README for detailed description of the new API.
- As part of these changes, token caching issue has been fixed. See #3579 for details.
 
- ⚠️ This is a breaking change: Public API for interacting with 
- 
concept-engine, browser-engine-gecko(-beta/nightly). - Added TrackingProtectionPolicy.CookiePolicyto indicate how cookies should behave for a givenTrackingProtectionPolicy.
- Now TrackingProtectionPolicy.selectallows you to specify aTrackingProtectionPolicy.CookiePolicy, if not specified,TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERSwill be used.
- Behavior change: Now TrackingProtectionPolicy.none()will get assigned aTrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL, and bothTrackingProtectionPolicy.all()andTrackingProtectionPolicy.recommended()will have aTrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS.
 
- Added 
- 
concept-engine, browser-engine-system - Added useWideViewPortinSettingsto support the viewport HTML meta tag or if a wide viewport should be used. (Only affectsSystemEngineSession)
 
- Added 
- 
browser-session - Added SessionManager.add(List<Session>)to add a list ofSessions to theSessionManager.
 
- Added 
- 
feature-tab-collections - ⚠️ These are breaking changes below:
- Tab.restore()now returns a- Sessioninstead of a- SessionManager.Snapshot
- TabCollection.restore()and- TabCollection.restoreSubset()now return a- List<Session>instead of a- SessionManager.Snapshot
 
- 
support-ktx - Added onNextGlobalLayoutto add aViewTreeObserver.OnGlobalLayoutListenerthat is only called once.
 
- Added 
3.0.0
- 
feature-prompts - Improved file picker prompt by displaying the option to use the camera to capture images, microphone to record audio, or video camera to capture a video.
- The color picker has been redesigned based on Firefox for Android (Fennec).
 
- 
feature-pwa - Added preliminary support for pinning websites to the home screen.
 
- 
browser-search - Loading search engines should no longer deadlock on devices with 1-2 CPUs
 
- 
concept-engine, browser-engine-gecko(-beta/nightly), browser-engine-system - Added EngineView.release()to manually release anEngineSessionthat is currently being rendered by theEngineView. Usually an app does not need to callrelease()manually sinceEngineViewtakes care of releasing theEngineSessionon specific lifecycle events. However sometimes the app wants to release anEngineSessionto immediately render it on anotherEngineView; e.g. when transforming a Custom Tab into a regular browser tab.
 
- Added 
- 
browser-session - ⚠️ This is a breaking change: Removed "default session" behavior from SessionManager. This feature was never used by any app except the sample browser.
 
- ⚠️ This is a breaking change: Removed "default session" behavior from 
- 
feature-downloads - Added FetchDownloadManager, an alternate download manager that uses a fetchClientinstead of the native AndroidDownloadManager.
 
- Added 
- 
support-ktx - Deprecated String.toUri()in favour of Android Core KTX.
- Deprecated View.isGoneandView.isInvisiblein favour of Android Core KTX.
- Added putCompoundDrawablesRelativeandputCompoundDrawablesRelativeWithIntrinsicBounds, aliases ofsetCompoundDrawablesRelativethat use Kotlin named and default arguments.
 
- Deprecated 
2.0.0
- 
browser-toolbar - Adds focus()which provides a hook for callingeditMode.focus()to focus the edit modeurlView
 
- Adds 
- 
browser-awesomebar - Updated DefaultSuggestionViewHolderto have a style more consistent with Fenix mocks.
- Fixed a bug with InlineAutocompleteEditTextwhere the cursor would disappear if a user cleared an suggested URL.
 
- Updated 
- 
lib-state - A new component for maintaining application, screen or component state via a redux-style Store. This component provides the architectural foundation for thebrowser-statecomponent (in development).
 
- A new component for maintaining application, screen or component state via a redux-style 
- 
feature-downloads - onDownloadCompletedno longer receives the download object and ID.
 
- 
support-ktx - Deprecated Resource.pxToDp.
- Added Int.dpToPxto convert from density independent pixels to an int representing screen pixels.
- Added Int.dpToFloatto convert from density independent pixels to a float representing screen pixels.
 
- Deprecated 
- 
support-ktx - Added Context.isScreenReaderEnabledextension to check if TalkBack service is enabled.
 
- Added 
- 
browser-icons - The component now ships with the tippy-top-sites top 200 list for looking up icon resources.
 
- 
concept-engine, browser-engine-gecko(-beta/nightly), feature-session, feature-tabs - Added to support for specifying additional flags when loading URLs. This can be done using the engine session directly, as well as via use cases:
 // Bypass cache sessionManager.getEngineSession().loadUrl(url, LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE)) // Bypass cache and proxy sessionUseCases.loadUrl.invoke(url, LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE, LoadUrlFlags.BYPASS_PROXY))
1.0.0
- 
🛑 Removed deprecated components (See blog posting): - feature-session-bundling
- ui-progress
- ui-doorhanger
 
- 
concept-engine, browser-engine-gecko(-beta/nightly), browser-engine-system - Added Engine.versionproperty (EngineVersion) for printing and comparing the version of the used engine.
 
- Added 
- 
browser-menu - Added endOfMenuAlwaysVisibleproperty/parameter toBrowserMenuBuilderconstructor and toBrowserMenu.showfunction. When is set to true makes sure the bottom of the menu is always visible, this allows use cases like #3211.
- Added onDimissparameter toBrowserMenu.showfunction, called when the menu is dismissed.
- Changed BrowserMenuHighlightableItemconstructor to allow for dynamically toggling the highlight withinvalidate().
 
- Added 
- 
browser-toolbar - Added highlight effect to the overflow menu button when a highlighted BrowserMenuHighlightableItemis present.
 
- Added highlight effect to the overflow menu button when a highlighted 
- 
feature-tab-collections - Tabs can now be restored without restoring the ID of the Sessionby using therestoreSessionIdflag. An app may prefer to use new IDs if it expects sessions to get restored multiple times - otherwise breaking the promise of a unique ID.
 
- Tabs can now be restored without restoring the ID of the 
- 
browser-search - Added getProvidedDefaultSearchEnginetoSearchEngineManagerto return the provided default search engine or the first search engine if the default is not set. This allows use cases like #3344.
 
- Added 
- 
feature-tab-collections - Behavior change: TabCollectioninstances returned byTabCollectionStorageare now ordered by the last time they have been updated (instead of the time they have been created).
 
- Behavior change: 
- 
lib-crash - Restrictions to background activity starts in Android Q+ make it impossible to launch the crash reporter prompt after certain crashes. In those situations the library will show a "crash notification" instead. Clicking on the notification will launch the crash reporter prompt allowing the user to submit a crash report.
 
For older versions see the [changelog archive]({{ site.baseurl }}/changelog/archive).
