Changelog
125.0 (In Development)
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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 theTabListReducerwill 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
- Commits
- Dependencies
- Gecko
- feature-customtabs
- Sharing a URL from a custom tab always uses the current url of the session. Bug 1831803
122.0
- Commits
- Dependencies
- Gecko
- 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 fromGeckoView#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
- Commits
- Dependencies
- Gecko
- 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’sLocationService. Bug 1854988
120.0
- Commits
- Dependencies
- Gecko
- 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 1847063SessionState.isProductUrlhas been moved toContentState.isProductUrl. Bug 1857287
119.0
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
-
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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
-
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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 parameterprioritythat decides the order of this group in the AwesomeBar suggestions. Priority is same as thescoreofAwesomeBar.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
- Commits
- Dependencies
- Gecko
- 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
SearchSuggestionProviderandSearchActionProvidernow have a new parametersuggestionsHeader, 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
- Commits
- Dependencies
- Gecko
- 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:
UpdateThumbnailActionandRemoveThumbnailActionnow 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 theImageLoader.
107.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 beLoggedOut.SyncStoreSupportwill update theSyncStorewithLoggedOutwhen 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 returnsnullwhen 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 validTimerId,TimingDistributionMetricType.stopAndAccumulatealways requires aTimerId.
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 usingconcept-storage@KeyManageras its basis.
- service-sync-autofill:
AutofillCryptois now usingconcept-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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 optionalProfiler. If passed in, two new profiler markers will be added:SuggestionFetcher.fetchandSuggestion update.
94.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-awesomebar
BrowserAwesomeBaris now deprecated in favor of using theAwesomeBar()composable from thecompose-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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-errorpages:
ErrorType.ERROR_SECURITY_SSLwill now no longer displayAdvancedbutton 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 formaxNumberOfSuggestions. 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 84.0browser-engine-gecko-beta: GeckoView 85.0browser-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.69.0.0
- Added a
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
-
ℹ️ 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 83.0browser-engine-gecko-beta: GeckoView 84.0browser-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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 82.0browser-engine-gecko-beta: GeckoView 83.0browser-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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 ```kotlin 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- feature-recentlyclosed
- Added a new [RecentlyClosedTabsStorage] and a [RecentlyClosedMiddleware] to maintain a list of restorable recently closed tabs.
57.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-search
- ⚠️ This is a breaking change:
SearchFeature.performSearchnow takes a second parameter. BrowserStoreSearchAdapterandSearchFeaturecan now take atabIdparameter.
- ⚠️ 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 duringState.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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko: GeckoView 79.0browser-engine-gecko-beta: GeckoView 80.0browser-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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 adata_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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 readEngineSessioninstances of tabs fromBrowserState.
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 thefirstContentfulPaintbefore 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 asRustErrorExceptions.
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 fasterisURLLikeinstead 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 strictisURLinstead 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 strictisURLLikeinstead or creating a new method using:lib-publicsuffixlist.
- support-ktx
String.isUrlStrictis now deprecated due to performance issues. Consider using the less strictisURLinstead 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 newBrowserThumbnailsin a future.
39.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- All components
- Increased
targetSdkVersionto 29 (Android Q)
- Increased
- browser-session
SnapshotSerializerno longer restores source of aSession, addedSession.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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 75.0browser-engine-gecko-beta: GeckoView 76.0browser-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 supportBrowser.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 forsubmitCaughtExceptionwithoutlib-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. Thereforecleancan 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 74.0browser-engine-gecko-beta: GeckoView 75.0browser-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 theObserver.onSubscriptionChangedcallback.- ⚠️ This is a breaking change:
RustPushConnection.verifyConnectionnow returns a list of subscriptions that have changed.
35.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- 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 anyLocationServiceimplementation.- 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 andSessionManager.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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 theping_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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 73.0browser-engine-gecko-beta: GeckoView 74.0browser-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 aWebExtensionRuntimeinstead of aEngineasinstallmethod 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. ```kotlin // Example usage
// Attach
DefaultSelectionActionDelegateto theEngineViewoverride 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
SearchFeatureto attach search requests to your own code private val searchFeature = ViewBoundFeatureWrapper() // ... 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 72.0browser-engine-gecko-beta: GeckoView 73.0browser-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
- AppLinksInterceptor can now be used without the AppLinksFeature. Set the new parameter launchFromInterceptor = true
- concept-storage
- Added classes related to login autofill
LoginStorageDelegatemay be attached to anEngine, 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 aLoginValidationDelegate. If present, it users will be prompted to save their information after logging in to a website.PromptFeaturenow accepts a false by defaultisSaveLoginEnabledlambda 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 defaultisAutofillEnabledlambda to be invoked before fetching logins. If false, logins will not be fetched to autofill.
- Added
- service-firefox-accounts
signInWithShareableAccountAsyncnow takes areuseAccountparameter, 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 bothBrowserMenuBuilderandBrowserMenu, 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
- Commits
- Milestone
- Dependencies
- Gecko
- feature-remotetabs was renamed to feature-syncedtabs
- ⚠️ This is a breaking change:
RemoteTabsFeatureis nowSyncedTabsFeature, and some method names have corresponding changes.RemoteTabsStorageSuggestionProvideris nowSyncedTabsStorageSuggestionProvider.
- 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() }
- Now supports performing action after submitting crash report.
- 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 newString.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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko: GeckoView 71.0browser-engine-gecko-beta: GeckoView 72.0browser-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.
SendTabFeatureandSendTabUseCaseshave 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- feature-addons
- ⚠️ This is a breaking change:
- Renamed to
AddOnsCollectionsProvidertoAddOnCollectionProviderand added caching support: ```kotlin 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 nowauthorizeOAuthCodeAsync.
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 usingPromptsStylingproperties.
- 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 )
- Adds feature implementation for configuring and displaying web notifications to the user
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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.0browser-engine-gecko-beta: GeckoView 71.0browser-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
- Commits
- Dependencies
- Gecko
- feature-prompts
- Fixed a crash when showing the file picker.
18.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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)
- Now supports sending caught exceptions. Use the ‘submitCaughtException()’ to send caught exceptions if the underlying crash reporter service supports it.
- 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: ```kotlin // 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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)
- Behavior change: In a collection List
- 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 areasoninstead ofstartupboolean flag.SyncEnginesStorageis introduced, allowing applications to read and update enabled/disabled state configuredSyncEngines.SyncEngineis no longer anenum class, but asealed classinstead. e.g.SyncEngine.HISTORYis nowSyncEngine.History.DeviceConstellation#setDeviceNameAsyncnow takes acontextin addition to newname.FxaAuthDatanow takes an optionaldeclinedEnginesset of SyncEngines.
14.0.1
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- lib-push-amazon
- Fixed #4448: Clearing app data does not reset the registration ID.
12.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- 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 #4320val 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.0browser-engine-gecko-beta: GeckoView 70.0browser-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) )
- Now supports Breadcrumbs. Use the ‘recordCrashBreadcrumb()’ to record Breadcrumbs if the underlying crash reporter service supports it.
- 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’ssyncableStoreshas been renamed tosupportedEngines, expressed via new enum typeSyncEngine.begin*OAuthAccount methods now return anAuthFlowUrl, which encapsulates an OAuth state identifier.AccountObserver:onAuthenticatedmethod now hasauthTypeparameter (instead ofnewAccount), which describes in detail what caused an authentication.GlobalSyncableStoreProvider.configureStorenow takes a pair ofPair<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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 withDeviceCapability.SEND_TAB, will now automatically refresh device constellation state and poll for device events during initialization and login.FxaAccountManager.syncNowAsynccan now receive adebounceparameter, 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 torefreshDevicesAsync: 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 in
TimeSpanMetricTypethat 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
- Commits
- Dependencies
- Gecko
- service-glean
- Fixed a bug in
TimeSpanMetricTypethat prevented multiple consecutivestart()/stop()calls. This resulted in theglean.baseline.durationbeing missing from mostbaselinepings.
- Fixed a bug in
6.0.1
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 takesWindowas 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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 parameterexcludeSelectedSession, 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
- Commits
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 68.0browser-engine-gecko-beta: GeckoView 69.0browser-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 viaFxaAccountManager.- 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 aSessioninstead of aSessionManager.SnapshotTabCollection.restore()andTabCollection.restoreSubset()now return aList<Session>instead of aSessionManager.Snapshot
- support-ktx
- Added
onNextGlobalLayoutto add aViewTreeObserver.OnGlobalLayoutListenerthat is only called once.
- Added
3.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 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
- Commits
- Milestone
- Dependencies
- Gecko
- 🛑 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.