layout | title | permalink |
---|---|---|
page |
Changelog |
/changelog/ |
-
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
isScanInProgress
property. This helps deciding on whether to resume scanning by callingscan
in a newQRFeature
instance 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
-
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
-
feature-syncedtabs
- 🚒 Bug fixed issue #12930 Ensure
DefaultPresenter
will unregister it'sFxaAccountManager
observers when it'slifecycleOwner
is 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.
-
concept-engine, feature-sitepermissions
- 🆕 New
name
property 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.shareMedia
work with Android Direct Share.
- 🚒 Bug fixed issue #12689 Make
-
feature-accounts-push:
⚠️ This is a breaking change:FxaPushSupportFeature
now requires to be explicitly started withinitialize
.- The constructor for
FxaPushSupportFeature
has acoroutineScope
parameter that defaults to aCoroutineScope(Dispatchers.IO)
.
-
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
requestPdfToDownload
API 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 (mozilla-mobile/fenix#23651)
-
nimbus-gradle-plugin
⚠️ This is a breaking change: Updated the NimbusGradlePlugin to use the new nimbus cli commands.
-
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
SyncStatus
can now beLoggedOut
.SyncStoreSupport
will update theSyncStore
withLoggedOut
when 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
frecencyConfig
fromTopSitesConfig
withTopSitesFrecencyConfig
, which specifies theFrecencyTresholdOption
and the frecency filter, an optional function used to filter the top frecent sites. [#12384] (#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
-
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] (#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
addressPickerView
andonManageAddresses
parameters throughAddressDelegate
toPromptFeature
for a newAddressPicker
to display a view for selecting addresses to autofill into a site. #12061 ⚠️ This is a breaking change:PromptFeature
constructor now takesLoginDelegate
andCreditCardDelegate
instead 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:
testGetValue
on all metric types now returnsnull
when no data is recorded instead of throwing an exception.testGetValue
on metrics with more complex data now return new objects for inspection.testHasValue
on all metric types is deprecated.- On
TimingDistributionMetric
,CustomDistributionMetric
,MemoryDistributionMetric
theaccumulateSamples
method now takes aList<Long>
instead ofLongArray
. UselistOf
instead oflongArrayOf
or call.toList
TimingDistributionMetricType.start
now always returns a validTimerId
,TimingDistributionMetricType.stopAndAccumulate
always 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-auth
component for various forms of authentication. - Adds a new
BiometricPromptAuth
for authenticating with biometrics or PIN. issue # 12289
- Added new
-
service-firefox-accounts
- 🆕 SyncStore to abstract account and Sync details.
-
browser-state:
- 🌟️ Add support for tab prioritization via
SessionPrioritizationMiddleware
for more information see #12190.
- 🌟️ Add support for tab prioritization via
-
service-pocket
-
support-ktx
- 🌟️ Add support for optionally persisting the default value when
stringPreference
is 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 newPocketStory
supertype for all Pocket stories. #12171
-
service-pocket
- 🌟️ Add support for Pocket sponsored stories.
- See component's README to get more info.
-
support-test
⚠️ This is a breaking change:MainCoroutineRule
constructor now takes aTestDispatcher
instead of deprecatedTestCoroutineDispatcher
. Default isUnconfinedTestDispatcher
.⚠️ This is a breaking change:MainCoroutineRule.runBlockingTest
is replaced with arunTestOnMain
top level function. . This method is preferred over the globalrunTest
because it reparents new child coroutines to the test coroutine context.
-
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
additionalValidation
parameter 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
providerFilter
toTopSitesProviderConfig
, allowing the client to filter the provided top sites.
- Added
-
feature-prompts:
- Add a
CreditCardSaveDialogFragment
that is displayed for aSaveCreditCard
prompt 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
CreditCardValidationDelegate
which is a delegate that will check against theCreditCardsAddressesStorage
to determine if aCreditCard
can be persisted in storage. #9838 - Refactors
CreditCard
fromconcept-engine
toCreditCardEntry
inconcept-storage
so that it can validated with theCreditCardValidationDelegate
. #9838
- Added
-
browser-storage-sync
⚠️ This is a breaking change: When constructing aRemoteTabsStorage
object you must now aContext
which is used to determine the location of the sqlite database which is used to persist the remote tabs #11799.- Fixed a low frequency crasher that might occur when the app attempts to delete all history. #12112
-
feature-syncedtabs
⚠️ This is a breaking change: When constructing aSyncedTabsStorage
, thetabsStorage: RemoteTabsStorage
parameter is no longer optional so must be supplied #11799.
-
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
WebNotificationIntentProcessor
to 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.
-
browser-errorpages
- 🌟 The https-only error page will now show also an image.
-
service-pocket
- 🚒 Bug fixed issue #11905 - Delete existing stories when their
imageUrl
is updated allowing those stories to be replaced.
- 🚒 Bug fixed issue #11905 - Delete existing stories when their
-
feature-serviceworker
- 🆕 New
ServiceWorkerSupport
component for handling all service workers' events and callbacks. Currently this is supported only for usingGeckoEngine
.
- 🆕 New
-
feature-autofill
⚠️ This is a breaking change: Removed unusedcontext
parameter inFxaWebChannelFeature
. #11864.
-
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 unusedreader
parameter inTabCollectionStorage
. #11864.
-
feature-contextmenu
- 🚒 Bug fixed issue #11829 - To make the additional note visible in landscape mode.
-
feature-intent
⚠️ This is a breaking change: Removed unusedloadUrlUseCase
parameter inTabIntentProcessor
. #11864.
-
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: ReplacedaddEditAction
inBrowserToolbar
withaddEditActionStart
andaddEditActionEnd
to add actions to the left and right of the URL in edit mode. #11890
-
feature-session
- 🆕 New
ScreenOrientationFeature
to enable support for setting a requested screen orientation as part of supporting the ScreenOrientation web APIs.
- 🆕 New
-
concept-sync
- 🌟️️ Add
onReady
method toAccountObserver
, allowing consumers to know when they can start querying account state.
- 🌟️️ Add
-
service-firefox-accounts
⚠️ This is a breaking change:fetchProfile
was removed fromFxaAccountManager
.
-
lib-crash-sentry
- 🌟️️ Add
sendCaughtExceptions
config 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
-
feature-top-sites
⚠️ This is a breaking change: This changesfetchProvidedTopSites
inTopSitesConfig
into a data classTopSitesProviderConfig
that specifies whether or not to display the top sites from the provider. #11654
-
support-base
⚠️ This is a breaking change: RefactorFrequency
out of feature-addons and service-pocket #11732.
-
support-utils
- 🌟️️ **Added new Browsers constant for Fennec
Browsers.FIREFOX_FENNEC_NIGHTLY
. ⚠️ This is a breaking change:Browsers.FIREFOX_NIGHTLY
now 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 ofEngineSessionState
instances.
- 🌟️️ Add
-
browser-session-storage
- 🌟️️ Add
FileEngineSessionStateStorage
, an implementation ofEngineSessionStateStorage
for persisting engine state outside of the regular RecoverableBrowserState flow.
- 🌟️️ Add
-
browser-state
⚠️ This is a breaking change: Shape ofRecoverableTab
changed. There's now a tab-state wrapper calledTabState
; use it whenengineSessionState
isn't necessary right away.
-
feature-recentlyclosed
- 🌟️️ Add
RecentlyClosedTabsStorage
, which knows how to write/read recently closed tabs.
- 🌟️️ Add
-
feature-tabs
⚠️ This is a breaking change:RestoreUseCase
implementation responsible for restoringRecoverableTab
instances now takes aTabState
and aEngineSessionStateStorage
instead (and will read/rehydrate an EngineSessionState prior to restoring).
-
support-utils
- 🌟️️ Add a
PendingUtils.defaultFlags
property 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
extraAdServersRegexps
of 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 -
clearColorFilter
doesn't work on Api 21, 22, so the default white filter remains set.UseclearColorFilter
only 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: RemovedString.urlToTrimmedHost
extension method.
-
feature-top-sites
⚠️ This is a breaking change: The existing data classTopSite
has been converted into a sealed class. #11483- Extend
DefaultTopSitesStorage
to accept aTopSitesProvider
for fetching top sites. #11483 ⚠️ This is a breaking change: Added a new parameterfetchProvidedTopSites
toTopSitesConfig
to specify whether or not to fetch top sites from theTopSitesProvider
. #11605
-
concept-storage
⚠️ This is a breaking change: Adds a newisRemote
property inVisitInfo
which distinguishes visits made on the device and those that come from Sync.
-
service-contile
- Adds a
ContileTopSitesProvider
that implementsTopSitesProvider
for returning top sites from the Contile services API. #11483
- Adds a
-
service-glean
- 🆙 Updated Glean to version 43.0.2 (changelog)
- Includes new
build_date
metric
- 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.
-
support-ktx
- 🚒 Bug fixed issue #11374 - Restore immersive mode after interacting with other Windows.
⚠️ This is a breaking change:OnWindowFocusChangeListener
parameter 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_access
API prompt.
-
concept-storage:
⚠️ This is a breaking change:KeyProvider#key
has been renamed toKeyProvider#getOrGenerateKey
and is nowsuspend
.⚠️ This is a breaking change:KeyRecoveryHandler
has been removed.⚠️ This is a breaking change:CreditCardsAddressesStorage
gained a new method -scrubEncryptedData
.- 🌟️️ **Add an abstract
KeyManager
which implementsKeyProvider
and knows how to store, retrieve and verify managed keys.
-
service-sync-logins:
LoginsCrypto
is now usingconcept-storage
@KeyManager
as its basis.
-
service-sync-autofill:
AutofillCrypto
is now usingconcept-storage
@KeyManager
as its basis.AutofillCrypto
is 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.GoBackUseCase
andSessionUseCases.GoForwardUseCase
to support optionaluserInteraction
parameter 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)
-
browser-engine-gecko:
-
support-utils
- 🌟️ Add
String.toCreditCardNumber
for removing characters other than digits from a credit card string number. - 🚒 Bug fixed issue #11360 - Crash when saving credit cards
- 🌟️ Add
-
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
TabsTray
interface frombrowser-tabstray
.
- Instead use the
-
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
previewImageUrl
inContentState
which provides a preview image of the page (e.g. the hero image), if available.
- 🌟️ Adds a new
-
compose-awesomebar
AwesomeBar
takes an optionalProfiler
. If passed in, two new profiler markers will be added:SuggestionFetcher.fetch
andSuggestion update
.
-
browser-awesomebar
BrowserAwesomeBar
is now deprecated in favor of using theAwesomeBar()
composable from thecompose-awesomebar
component.
-
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-omni
releases.-omni
packages 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.initialize
now requires abuildInfo
parameter to pass in build time version information. A suitable instance is generated byglean_parser
in${PACKAGE_ROOT}.GleanMetrics.GleanBuildInfo.buildInfo
. Support for not passing in abuildInfo
object has been removed.
- 🆙 Updated Glean to version 41.1.0 (changelog)
-
concept-toolbar, concept-engine, browser-engine-gecko, browser-state, feature-toolbar, browser-toolbar,
- 🌟️ The toolbar now supports two new methods:
expand
andcollapse
to immediately execute this actions if the toolbar is dynamic.expand
is 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
additionalNote
which it will be attached to the bottom of context menu but for a specificHitResult
- 🌟️ Adds
-
browser-feature-awesomebar:
- 🌟️ Adds
CombinedHistorySuggestionProvider
that combines the results fromHistoryMetadataSuggestionProvider
andHistoryStorageSuggestionProvider
so 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
Button
and givesTwoStateButton
all the features ofBrowserMenuItemToolbar.TwoStateButton
-
support-test
⚠️ Deprecation:createTestCoroutinesDispatcher()
should be replaced with the preferredTestCoroutineDispatcher()
from thekotlinx-coroutines-test
library.⚠️ This is a breaking change:MainCoroutineRule
's constructor takes a more strictTestCoroutineDispatcher
instead of aCoroutineDispatcher
- 🌟️ Adds
MainCoroutineRule.runBlockingTest
, which is a convenience method forMainCoroutineRule.testDispatcher.runBlockingTest
. These methods are preferred over the globalrunBlockingTest
because they reparent new child coroutines to the test coroutine context.
-
feature-search
- 🌟️ New
AdsTelemetry
based 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 theAdsTelemetryMiddleware
is set forBrowserStore
. - 🌟️ New
InContentTelemetry
based 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
lastAccess
to theTab
data class that is used inTabsTray
. - Adds a new SelectOrAddUseCase for reopening existing tab with matching HistoryMetadataKey. #10611
- Adds
recoverable
parameter toRemoveAllTabsUseCase.invoke()
to specify whetherUndoMiddleware
should make the removed tabs recoverable. - Applies
createdAt
property fromTabSessionState
when filtering tabs inRestoreUseCase
with timeout.
- Adds
-
browser-store
- Adds
createdAt
properpty to the theBrowserStore
to know when a tab is first created.
- Adds
-
browser-errorpages:
ErrorType.ERROR_SECURITY_SSL
will now no longer displayAdvanced
button on the SSL Error Page.
-
browser-state:
- 🌟️ Adds a new
lastMediaAccess
inTabSessionState
as 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 newLastMediaAccessMiddleware
toBrowserStore
.
- 🌟️ Adds a new
-
feature-search
- Updated the icon of the bing search engine.
-
browser-menu
- Adds
showAddonsInMenu
in WebExtensionBrowserMenuBuilder to allow the option of removingAdd-ons
item even if another extensions are displayed
- Adds
-
feature-privatemode
- Adds
clearFlagOnStop = true
in SecureWindowFeature to allow the option of keepingFLAG_SECURE
when callingstop()
- Adds
-
browser-feature-awesomebar:
- 🌟️ Adds a new
maxNumberOfSuggestions
parameter toHistoryStorageSuggestionProvider
as a way to specify a different number than the default of 20 for how many history results to be returned. - 🌟️ Adds a new
maxNumberOfSuggestions
parameter toHistoryMetadataSuggestionProvider
as 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.addHistoryProvider
allows 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
CrashReporting
to theRemoteTabsStorage
.
- Adds
-
concept-engine
- 🌟️ Adds a new
SitePermissionsStorage
interface that represents a common API to store site permissions.
- 🌟️ Adds a new
-
browser-engine-gecko:
⚠️ This is a breaking change:GeckoPermissionRequest.Content
changed 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
GeckoSitePermissionsStorage
this 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.
-
feature-sitepermissions
⚠️ This is a breaking change: TheSitePermissionsStorage
has been renamed toOnDiskSitePermissionsStorage
.⚠️ This is a breaking change: TheSitePermissions
has been moved to the packagemozilla.components.concept.engine.permission.SitePermissions
.
-
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.cookiePolicyPrivateMode
it 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 newisCreditCardAutofillEnabled
callback is available inPromptFeature
andGeckoCreditCardsAddressesStorageDelegate
to allow clients controlling whether credit cards should be autofilled or not. Default is false*
-
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
LoginPickerView
into a more generic viewSelectablePromptView
that can be reused by any prompts that displays a list of selectable options. #10216 - Added optional
creditCardPickerView
,onManageCreditCards
andonSelectCreditCard
parameters toPromptFeature
for a newCreditCardPicker
to 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 shemes that the engine won't load. - Adds a new
CreditCard
data class which is a parallel of GeckoView'sAutocomplete.CreditCard
. #10205 - Adds a new
SelectCreditCard
inPromptRequest
to 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.StorageDelegate
interface inGeckoStorageDelegateWrapper
. This will replace the deprecatedGeckoLoginDelegateWrapper
and 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.
-
browser-engine-gecko(-nightly/beta)
⚠️ From now on there will be only oneconcept-engine
implementation using GeckoView. Onmain
this will be the Nightly version. In release versions it will be the corresponding Beta or Release version. More about this in RFC 7.- Implements
onCreditCardSelect
inGeckoPromptDelegate
to handle a credit card selection prompt request. #10205
-
concept-sync, browser-storage-sync
⚠️ This is a breaking change:SyncableStore
now has aregisterWithSyncManager
method for use in newer storage layers.
-
concept-storage, service-sync-autofill
⚠️ This is a breaking change: Update and add APIs now take specificUpdatableCreditCardFields
andNewCreditCardFields
data classes as arguments.⚠️ This is a breaking change:CreditCard
's number field changed toencryptedCardNumber
,cardNumberLast4
added.- New
CreditCardNumber
class, which encapsulate either an encrypted or plaintext versions of credit cards. AutofillCreditCardsAddressesStorage
reflects these breaking changes.- Introduced a new
CreditCardCrypto
interface for for encrypting and decrypting a credit card number. #10140 - 🌟️ New APIs for managing keys -
ManagedKey
,KeyProvider
andKeyRecoveryHandler
.AutofillCreditCardsAddressesStorage
implements these APIs for managing keys for credit card storage. - 🌟️ New support for bookmarks to retrieve latest added bookmark nodes.
PlacesBookmarksStorage
now implementsgetRecentBookmarks
.
-
service-firefox-accounts
- 🌟️ When configuring syncable storage layers,
SyncManager
now takes an optionalKeyProvider
to handle encryption/decryption of protected values. - 🌟️ Support for syncing Address and Credit Cards
- 🌟️ When configuring syncable storage layers,
-
service-glean
ConceptFetchHttpUploader
adds 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
AbstractBinding
for simple features that want to observe changes to theState
in aStore
without needing to manually manage the CoroutineScope. This can now be handled like otherLifecycleAwareFeature
implementations: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
CreditCardUtils
which provides methods for retrieving the credit card issuer network from a provided card number. #9813
- Added
-
browser-menu:
- 🌟️ New StickyHeaderLinearLayoutManager and StickyFooterLinearLayoutManager that can be used to keep an item from being scrolled off-screen.
- To use this set
isSticky = true
for 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 = true
for any menu item of a bottom anchored menu. - 🌟️
WebExtensionBrowserMenuBuilder
provide a new way to customize how items look like viaStyle()
where thetintColor
,backPressDrawable
andaddonsManagerDrawable
can be customized. ⚠️ This is a breaking change:WebExtensionBrowserMenuBuilder.webExtIconTintColorResource
constructor parameter has been removed, please useWebExtensionBrowserMenuBuilder
.Style
instead. 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
getExperimentBranches
method toNimbus
for 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
-
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
ToolbarBehaviorController
to automatically block theBrowserToolbar
being animated by theBrowserToolbarBehavior
while 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.
-
feature-push
⚠️ This is a breaking change: RemoveddatabasePath
fromRustPushConnection
constructor and addedcontext
. The file path is now queries lazily.
-
feature-top-sites
⚠️ This is a breaking change: ReplaceTopSitesUseCases.renameTopSites
withTopSitesUseCases.updateTopSites
which allows for updating the title and the url of a top site. #9599
-
service-sync-autofill
- Refactors
AutofillCreditCardsAddressesStorage
from 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 unusedauthorizeOAuthCode
from FirefoxAccount API surface.
-
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. TheLocaleManager
can now handle notifications aboutLocale
changes throughLocaleUseCase
s, 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.
-
All components
⚠️ IncreasedtargetSdkVersion
to 30 (Android R)
-
browser-toolbar
- 🌟 Added
BrowserToolbarBehavior#forceCollapse
to easily collapse the top/bottom toolbar.
- 🌟 Added
-
browser-toolbar
⚠️ This is a breaking change:BrowserToolbarBottomBehavior
is renamed toBrowserToolbarBehavior
as it is now a common behavior for toolbars be them placed at the bottom or at the top of the screen.
-
feature-session
⚠️ This is a breaking change:EngineViewBottomBehavior
is renamed toEngineViewBrowserToolbarBehavior
as it is now the glue betweenEngineView
andBrowserToolbar
irrespective of if the toolbar is placed at the bottom oir at the top of theEngineView
.
-
feature-downloads:
- 🌟 New
ShareDownloadFeature
will listen forAddShareAction
and 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.shareMedia
that 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
SearchEngineSuggestionProvider
that offers suggestion(s) for search engines based on user search engine list
- added
-
browser-storage-sync
- Added
AutofillCreditCardsAddressesStorage
implementation of theCreditCardsAddressesStorage
interface back by the application-services'autofill
library.
- Added
-
concept-engine
- Added
defaultSettings: Settings?
parameter to registerTabHandler to supply a default Tracking Policy when opening a new extension tab. - When calling
onNewTab
inregisterTabHandler
fromGeckoWebExtension.kt
a defaultTrackingProtectionPolicy.strict()
is supplied to the newGeckoEngineSession
. This was added in to avoid WebExtension tabs without any ETP settings.
- Added
-
concept-storage
- Introduced
CreditCardsAddressesStorage
interface for describing credit card and address storage.
- Introduced
-
support-base
- Add
NamedThreadFactory
, aThreadFactory
that names its threads with the given argument.
- Add
-
lib-state
- Add
threadNamePrefix
parameter toStore
to give threads created by theStore
a specific name.
- Add
-
service-glean
- 🆙 Updated Glean to version 35.0.0 (changelog)
-
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 ofActivityResultHandler.onActivityResult
to avoid conflict with internal Android APIs.
-
feature-addons
- 🚒 Bug fixed [issue #9484] #9484) - Handle multiple add-ons update that require new permissions.
-
feature-top-sites
⚠️ This is a breaking change: ReplacesincludeFrecent
with an optionalfrecencyConfig
inTopSitesConfig
andTopSitesStorage.getTopSites
to specify the frecency threshold for the returned list of top frecent sites see #8690.
-
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.
-
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#private
to allow requests to be performed in a private context, the feature is not support in allClient
s 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 migratingfeature-customtabs
to use the browser store,CustomTabIntentProcessor
requiresAddCustomTabUseCase
,CustomTabsToolbarFeature
requires theBrowserStore
andCustomTabsUseCases
for more details see issue #4257.
-
feature-intent
⚠️ This is a breaking change: Multiple breaking changes after migratingfeature-intent
to use the browser store,TabIntentProcessor
requiresTabsUseCases
and removes theopenNewTab
parameter, for more details see issue #4279.
-
feature-tabs
⚠️ This is a breaking change:TabsUseCases
now requiresSessionStorage
for more info see issue #9323.
-
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
subscriptionExpired
flag is observed.
- Rolling back to previous behaviour of renewing push registration token when the
-
browser-icons
- Catch
IOException
that 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: TheSitePermissions
constructor, now parameter types forautoplayAudible
andautoplayInaudible
have changed toAutoplayStatus
as autoplay permissions only support two statusALLOWED
andBLOCKED
.
-
feature-app-links
⚠️ This is a breaking change: Migrated this component to usebrowser-state
instead ofbrowser-session
. It is now required to pass aBrowserStore
instance (instead ofSessionManager
) toAppLinksFeature
.
-
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
NimbusDisabled
class to provide implementers who are not able to use Nimbus yet.
- Added a
-
support-base
- 🌟 Add an
ActivityResultHandler
for 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
ActivityDelegate
for 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
GeckoActivityDelegate
for the GeckoViewactivityDelegate
.
- Added
-
feature-tabs
⚠️ This is a breaking change: Removed theTabCounterToolbarButton#privateColor
attribute which are replaced by thetabCounterTintColor
Android styleable attribute.
-
lib-nearby, feature-p2p, samples-nearby
⚠️ This is a breaking change: Removed Nearby component and related samples.
-
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
NimbusDisabled
class to provide implementers who are not able to use Nimbus yet.
- Added a
-
browser-session
⚠️ This is a breaking change:Session.searchTerms
has been removed. UseContentState.searchTerms
(browser-state
) instead.⚠️ This is a breaking change:Session.desktopMode
has been removed. UseContentState.desktopMode
(browser-state
) instead.
-
feature-search
⚠️ This is a breaking change: Use cases inSearchUseCases
now take the ID of s session/tab as parameter instead of aSession
instance.⚠️ This is a breaking change:SearchUseCases
no longer depends onSessionManager
and requires aTabsUseCases
instance now.
-
feature-tabs
⚠️ This is a breaking change: Use cases inTabsUseCases
that previously returned aSession
instance now return the ID of theSession
.
-
support-test-libstate
- Added
CaptureActionsMiddleware
: AMiddleware
implementation for unit tests that want to inspect actions dispatched on aStore
.
- Added
-
feature-sitepermissions
⚠️ This is a breaking change: TheSitePermissionsRules
constructor, now requires a new parametermediaKeySystemAccess
.- 🌟 Added support for EME permission prompts, see #7121.
-
browser-thumbnail
- Catch
IOException
that 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 -isTabSelected
was added that exposes to clients an easy way to change what a "selected" tab means.
-
ℹ️ 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_js
is 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_pages
which was already deprecated byerror_page_js
.
-
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
SwipeRefreshFeature
to 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
⚠️ FxaPushSupportFeature
now 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.FxaPushSupportFeature
now takes an optional crash reporter in the constructor.
-
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:SearchUseCases
no longer requires aContext
parameter in the constructor.
-
feature-sitepermissions
⚠️ This is a breaking change: TheSitePermissionsFeature
's constructor does not requires asessionManager
parameter anymore pass astore
instead.
-
browser-session
SelectionAwareSessionObserver
is now deprecated. All session state changes can be observed using the browser store (browser-state
module).
-
feature-addons
AddonManager.getAddons()
now accepts a new (optional)allowCache
parameter 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.
-
feature-tabs
- Added
TabsUseCases.RemoveTabsUseCase
for removing an arbitrary list of tabs.
- Added
-
browser-state
- Added
TabListAction.RemoveTabsAction
toBrowserAction
.
- 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: TheSitePermissionsFeature
's constructor, now requires a new parameterBrowserStore
object.- 🌟 Moved sitePermissionsFeature from using session to using kotlin flow for observing content and app permission requests#8554
-
feature-addons
- 🌟️ Added dividers for sections in add-ons list, see #8703.
-
feature-top-sites
- Added
RenameTopSiteUseCase
to rename pinned site entries. #8751
- Added
-
browser-engine-gecko-nightly
- Adds optional
PreferredColorScheme
param toGeckoEngineView
- On
GeckoView
init callcoverUntilFirstPaint()
withPreferredColorScheme
- Adds optional
-
feature-push
- Added
disableRateLimit
toPushConfig
to allow for easier debugging of push during development. - Made
AutoPushFeature
aware of thePushConfig.disableRateLimit
flag.
- Added
-
feature-accounts-push
- Made
FxaPushSupportFeature
aware of thePushConfig.disableRateLimit
flag.
- Made
-
support-base
- Add
LazyComponent
, a wrapper aroundlazy
that avoids initializing recursive dependencies until component use.
- Add
-
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Exposes GeckoView
CompositorController#ClearColor
as Setting
- Exposes GeckoView
-
browser-engine-system
⚠️ This is a breaking change: RenamesblackListFile
toblocklistFile
.⚠️ This is a breaking change: RenameswhiteListFile
tosafelistFile
.
-
feature-addons
- 🚒 Bug fixed issue #7879 Crash when the default locale is not part of the translations fields of an add-on
⚠️ RemovedAddon.translatedName
,Addon.translatedSummary
andAddon.translatedDescription
and addedAddon.translateName(context: Context)
,Addon.translateSummary(context: Context)
andAddon.translateDescription(context: Context)
-
concept-engine
⚠️ RemovedTrackingCategory
.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
-
feature-downloads
- 🚒 Bug fixed issue #8585 create download directory when it doesn't exists for more information see mozilla-mobile/fenix#15527.
-
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
MediaSession
for the media session API. - 🌟 Added a new
TrackingCategory
.SHIMMED
to 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
GeckoMediaSessionController
andGeckoMediaSessionDelegate
for the media session API.
- Added
-
browser-state
- Added
MediaSessionState
toSessionState
. - Added
MediaSessionAction
toBrowserAction
.
- Added
-
feature-sitepermissions
⚠️ This is a breaking change: TheSitePermissionsRules
's constructor, now requires a new parameterpersistentStorage
.- 🌟 Added support for the local storage site permission see #3153.
-
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:RemoteMessage
is now non-null inonMessageReceived
.
- Upgrade Firebase Cloud Messaging to v20.3.0.
-
browser-state
⚠️ This is a breaking change:DownloadState
doesn't support Parcelable anymore.
-
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_parser
to 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:ImageLoader
andImageRequest
have moved to theconcept-base
component.
-
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:AddonCollectionProvider
now supports configuring a custom collection owner (via AMO user ID or name).AddonCollectionProvider
now supports configuring the sort order of recommended collections, defaulting to sorting descending by popularity
val addonCollectionProvider by lazy { AddonCollectionProvider( applicationContext, client, collectionUser = "16314372" collectionName = "myCollection", sortOption = SortOption.NAME maxCacheAgeInMinutes = DAY_IN_MINUTES ) } * Temporary add-ons installed via web-ext are no longer displayed as unsupported.
-
browser-session
- Added "undo" functionality via
UndoMiddleware
.
- Added "undo" functionality via
-
feature-tabs
- Added
TabsUseCases.UndoTabRemovalUseCase
for 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
AsyncDrawableMenuIcon
class to use icons in a menu that will be loaded later.
- 🌟 Added
-
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- 🚒 Bug fixed issue #8431 update
Session.trackerBlockingEnabled
andSessionState#trackingProtection#enabled
with the initial tracking protection state.
- 🚒 Bug fixed issue #8431 update
-
feature-tabs
- Added
TabsUseCases.removeNormalTabs()
andTabsUseCases.removePrivateTabs()
. ⚠️ This is a breaking change: RemovedTabsUseCases.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_parser
to 1.28.5- The
SUPERFLUOUS_NO_LINT
warning 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_expired
andcustom_validate_expires
added. These are both functions that take the expires value of the metric and return a bool. (SeeMetric.is_expired
andMetric.validate_expires
). These will allow FOG to provide custom validation for its version-basedexpires
values.
- 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
-
feature-downloads
- 🚒 Bug fixed issue #8354 Do not restart FAILED downloads.
-
browser-tabstray
- Removed the
BrowserTabsTray
that was deprecated in previous releases.
- Removed the
-
service-telemetry
- This library has been removed. Please use
service-glean
instead.
- 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_parser
tov1.28.3
- BUGFIX: Generate valid C# code when using Labeled metric types.
- BUGFIX: Support
HashSet
andDictionary
in 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
AwesomeBar
suggestions.
- Added support for indicators to synced tabs
-
feature-addons
⚠️ This is a breaking change: TheAddon.translatePermissions
now requires acontext
object 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.
-
feature-recentlyclosed
- Added a new [RecentlyClosedTabsStorage] and a [RecentlyClosedMiddleware] to maintain a list of restorable recently closed tabs.
-
feature-search
⚠️ This is a breaking change:SearchFeature.performSearch
now takes a second parameter.BrowserStoreSearchAdapter
andSearchFeature
can now take atabId
parameter.
-
feature-top-sites
⚠️ This is a breaking change: RenamesTopSiteStorage
toPinnedSitesStorage
.⚠️ This is a breaking change: RenamesTopSiteDao
toPinnedSiteDao
.⚠️ This is a breaking change: RenamesTopSiteEntity
toPinnedSiteEntity
.⚠️ This is a breaking change: ReplacesTopSite
interface with a new genericTopSite
data 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.
-
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
ContainerToolbarFeature
to update the toolbar with the container page action whenever the selected tab changes.
- Added
-
browser-state
- Added
LastAccessMiddleware
to dispatchTabSessionAction.UpdateLastAccessAction
when a tab is selected.
- Added
-
feature-prompts
- Replaced generic icon in
LoginDialogFragment
with 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.download
returns aStrings
,AndroidDownloadManager.tryAgain
requires aStrings
id
parameter.⚠️ This is a breaking change:ConsumeDownloadAction
requires aStrings
id
parameter.⚠️ This is a breaking change:DownloadManager#onDownloadStopped
requires aStrings
(DownloadState, Long, Status) -> Unit
.⚠️ This is a breaking change:DownloadsUseCases.invoke
requires anStrings
downloadId
parameter.⚠️ This is a breaking change:DownloadState.id
has changed its type fromLong
toString
.⚠️ This is a breaking change:BrowserState.downloads
has changed it's type fromMap<Long, DownloadState>
toMap<String, DownloadState>
.- 🌟 Added support for persisting/restoring downloads see issue #7762.
- 🌟 Added
DownloadStorage
for querying stored download metadata. - 🚒 Bug issue #8190 ArithmeticException: divide by zero in Download notification.
- 🚒 Bug issue #8363 IllegalStateException: Not allowed to start service Intent.
-
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.
-
feature-prompts
- 🌟 Added optional
LoginPickerView
andonManageLogins
params toPromptFeature
for 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
onTabsUpdated
toTabsTray.Observer
for notifying observers when one or more tabs have been added/removed.
- 🌟 Added
-
browser-tabstray
- 🌟 Added the convenience function
TabsAdapter.doOnTabsUpdated
for 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
showNow
to immediately show the dialog.
- 🚒 Bug fixed issue #8169 App links dialog will now call
-
browser-thumbnails
- 🌟 Exposed
BrowserThumbnail.requestThumbnail
API for consumers.
- 🌟 Exposed
-
browser-engine-gecko-nightly
- 🌟 Added
onPaintStatusReset
when 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
MenuStyle
class to set menu background and width.
- 🌟 Added
-
browser-menu
- 🌟 Added
style
parameter toBrowserMenu.show
. - 🚒 Bug fixed issue #8223: Fix compound drawable position for RTL.
- 🌟 Added
-
browser-menu2
- 🌟 Added
style
parameter toBrowserMenuController
.
- 🌟 Added
-
ui-widgets
- 🌟 Added widget for showing a website in a list, such as in bookmarks or history. The
mozac_primary_text_color
andmozac_caption_text_color
attributes 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: TheSiteControlsBuilder
interface has changed.buildNotification
now takes two parameters:Context
andNotification.Builder
.WebAppSiteControlsFeature
now supports displaying monochrome icons.
-
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".
-
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.
-
concept-menu
- Added
orientation
parameter toMenuController.show
. Passing null (the default) tells the menu to determine the best orientation itself.
- Added
-
browser-menu2
⚠️ This is a breaking change:BrowserMenuController.show
no longer supports the width parameter.
-
feature-app-links
- Added
loadUrlUseCase
as 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
DefaultSuggestionViewHolder
now 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: RemovedSimpleBrowserMenuHighlightableItem.itemType
. Use a WeakMap instead if you need to attach private data.
-
browser-menu
- For a11y,
BrowserMenuImageSwitch
now highlights the entire row, not just the switch
- For a11y,
-
concept-engine
- Added the
cookiePurging
property toTrackingProtectionPolicy
andTrackingProtectionPolicyForSessionTypes
constructors to enable/disable cookie purging feature read more about it here.
- Added the
-
browser-engine-nightly
- Added
cookiePurging
toTrackingProtectionPolicy.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.
-
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 fromDownloadJobState
inAbstractFetchDownloadService
and added toDownloadState
:DownloadJobStatus
(now renamed toDownloadStatus
) andcurrentBytesCopied
. These properties can now be read fromDownloadState
.⚠️ This is a breaking change: Removed the enum classDownloadJobStatus
fromAbstractFetchDownloadService
and moved intoDownloadState
, and removed theACTIVE
state while introducing two new states calledINITIATED
andDOWNLOADING
.⚠️ This is a breaking change: Renamed the following data classes fromBrowserAction
:QueuedDownloadAction
toAddDownloadAction
,RemoveQueuedDownloadAction
toRemoveDownloadAction
,RemoveAllQueuedDownloadsAction
toRemoveAllDownloadsAction
, andUpdateQueuedDownloadAction
toUpdateDownloadAction
.⚠️ This is a breaking change: RenamedqueuedDownloads
fromBrowserState
todownloads
.- Removed automatic deletion of
downloads
upon a completed download. - 🆕 Added support for choosing a third party app to perform a download.
-
browser-menu
⚠️ This is a breaking change:BrowserMenuItemToolbar.Button.longClickListener
is now nullable and defaults to null.
-
concept-menu
- Added
SmallMenuCandidate.onLongClick
to 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
GleanDebugView
to be exported.
- Glean was updated to v31.6.0
-
feature-downloads
⚠️ This is a breaking change:DownloadsFeature
is no longer accepting a custom download dialog but supporting customizations via thepromptStyling
parameter. Thedialog
parameter 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.
-
feature-webcompat-reporter
- Added a second parameter to the
install
method:productName
allows 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_color
andmozac_widget_favicon_border_color
attributes should be set, thenstyle="@style/Mozac.Widgets.Favicon"
can be added to an ImageView.
- Added shared ImageView style for favicons. The
-
browser-icons
- Added
BrowserIcons.clear()
to remove all saved data from disk and memory caches.
- Added
-
support-images
⚠️ This is a breaking change: RemovedImageLoader.loadIntoView(view: ImageView, id: String)
extension function.
-
service-glean
- Glean was updated to v31.6.0
- Implement ping tagging (i.e. the
X-Source-Tags
header) (#1074). Note that this is not yet implemented for iOS. - String values that are too long now record
invalid_overflow
rather thaninvalid_value
through the Glean error reporting mechanism. This affects the string, event and string list metrics. metrics.yaml
files now support adata_sensitivity
field to all metrics for specifying the type of data collected in the field.- Allow defining which
Activity
to run next when using theGleanDebugActivity
. - Implement JWE metric type (#1073, #1062).
- DEPRECATION:
getUploadEnabled
is deprecated (respectivelyget_upload_enabled
in 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_parser
tov1.28.1
- The
glean_parser
linting was leading consumers astray by incorrectly suggesting thatdeletion-request
be insteaddeletion_request
when used forsend_in_pings
. This was causing metrics intended for thedeletion-request
ping to not be included when it was collected and submitted. Consumers that are sending metrics in thedeletion-request
ping will need to update thesend_in_pings
value 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 ofSyncedTabsFeature
.
-
browser-tabstray
⚠️ This is a breaking change: TheBrowserTabsTray
is now deprecated. Using aRecyclerView
directly is now recommended.⚠️ This is a breaking change:ViewHolderProvider
no longer has a second param.⚠️ This is a breaking change:TabsAdapter
has astyling
fieldTabsTrayStyling
.
-
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
MenuController
interface 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 theMenuController
ininvalidateMenu
if it is kept.
- Added support for the new
-
feature-containers
- Adds a
ContainerMiddleware
that connects container browser actions with theContainerStorage
.
- Adds a
-
feature-app-links
⚠️ This is a breaking change: addlastUri
as a parameter forAppLinksInterceptor
.
-
concept-engine, browser-engine-*
⚠️ This is a breaking change: addlastUri
as a parameter forRequestInterceptor.onLoadRequest
.
-
support-ktx
- Added
Vibrator.vibrateOneShot
compat method.
- Added
-
browser-session
⚠️ This is a breaking change: Removed the following properties fromSession
:findResults
,hitResult
,fullScreenMode
andlayoutInDisplayCutoutMode
. The values still exist inBrowserState
and can be read from there.
-
support-images
⚠️ This is a breaking change: RemovedImageRequest
in favor ofImageSaveRequest
andImageLoadRequest
to separate the information passed to methods that load and save images.⚠️ This is a breaking change:ImageLoader.loadIntoView()
now takes anImageSaveRequest
instead of anImageRequest
.
-
browser-thumbnails
⚠️ This is a breaking change:ThumbnailStorage.saveThumbnail()
now takes anImageSaveRequest
instead of anImageRequest
.⚠️ This is a breaking change:ThumbnailStorage.loadThumbnail()
now takes anImageLoadRequest
instead of anImageRequest
.
-
feature-addons
- AddonManager now receives a
WebExtensionRuntime
instead of anEngine
. This has no impact to consumers offeature-addons
asEngine
already implementsWebExtensionRuntime
.
- AddonManager now receives a
-
browser-session
⚠️ This is a breaking change:Session.Source
was moved to browser-state and is nowSessionState.Source
. No change is required other than fixing imports.
-
browser-engine-beta
- Added
TrackingProtectionPolicy.toContentBlockingSetting
extension methods to convert a policy to GeckoView'sContentBlocking.Setting
.
- Added
-
browser-engine-nightly
- Added
TrackingProtectionPolicy.toContentBlockingSetting
extension 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.loadShareableManifests
to get manifest with aWebAppManifest.ShareTarget
.
- Added
-
support-ktx
- Add
Activity.reportFullyDrawnSafe
, a function to callActivity.reportFullyDrawn
while catching crashes under some circumstances.
- Add
-
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.goToHistoryIndex
to allow consumers to jump to a specific index in a session's history. - Added
flags
parameter toReloadUrlUseCase
.
- Added
-
support-ktx
- Adds
Bundle.contentEquals
function to check if two bundles are equal.
- Adds
-
concept-engine
- Added
EngineSession.goToHistoryIndex
to jump to a specific index in a session's history. - Adds
flags
parameter 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
int32
toErrorType
mapping. TheInvalidOverflow
had 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=upgrade
to 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.contextId
and their respectiveContainerState
inBrowserState
to track the state of a container.
- Added map of
-
browser-menu
- Added an optional
longClickListener
parameter toBrowserMenuItemToolbar.Button
andBrowserMenuItemToolbar.TwoStateButton
to handle long click events.
- Added an optional
-
feature-session
⚠️ This is a breaking change:FullScreenFeature
,SettingsUseCases
,SwipeRefreshFeature
andSessionFeature
now require aBrowserStore
instead of aSessionManager
.⚠️ This is a breaking change:SessionFeature
now requires anEngineSessionUseCases
instance.⚠️ This is a breaking change:TrackingProtectionUseCases
now requires aBrowserStore
instead of aSessionManager
.
-
feature-tabs
⚠️ This is a breaking change:TabsUseCases.AddNewTabUseCase
andTabsUseCases.AddNewPrivateTabUseCase
now require aBrowserStore
instead of aSessionManager
.
-
browser-session
SessionManager.getEngineSession()
is now deprecated. From now on please readEngineSession
instances of tabs fromBrowserState
.
-
service-sync-logins
⚠️ This is a breaking change: removedisAutofillEnabled
lambda fromGeckoLoginStorageDelegate
because setting has been exposed through GV
-
concept-engine
- Adds
profiler
property withisProfilerActive
,getProfilerTime
andaddMarker
Firefox Profiler APIs. These will allow to add profiler markers.
- Adds
-
support-ktx
- Adds
Resources.getSpanned
to format strings using style spans. - Adds
Resources.locale
to get the corresponding locale on all SDK versions.
- Adds
-
feature-logins
- 🆕 New component for logins related features.
- Adds
LoginExceptionStorage
for storing and accessing save login prompt exceptions.
-
feature-prompts
- Added an optional
LoginExceptions
param that a storage layer can implement to check for exceptions before showing a save login prompt.
- Added an optional
-
feature-intent
⚠️ This is a breaking change:IntentProcessor.process
is not a suspend function anymore.
-
feature-search
- Adds optional
parentSession
to attach to a new search session inSearchUseCases
- Adds optional
-
feature-contextmenu
- Add "Share image" to context menu.
-
feature-session
⚠️ This is a breaking change:AbstractCustomTabsService
now requiresCustomTabsServiceStore
.⚠️ This is a breaking change:httpClient
andapiKey
have been removed fromAbstractCustomTabsService
. They should be replaced with buildingDigitalAssetLinksApi
and passing it torelationChecker
.- Added
relationChecker
to customize Digital Asset Links handling.
-
feature-pwa
⚠️ This is a breaking change:TrustedWebActivityIntentProcessor
now requires aRelationChecker
instead ofhttpClient
andapiKey
.⚠️ This is a breaking change: Removed unused API fromWebAppShortcutManager
: uninstallShortcutsWebAppShortcutManager
gained a new API: recentlyUsedWebAppsCount. Allows counting recently used web apps.
-
browser-thumbnails
- The
ThumbnailMiddleware
deletes the tab's thumbnail from the storage when the sessions are removed. BrowserThumbnails
waits for thefirstContentfulPaint
before requesting a screenshot.
- The
-
feature-tabs
⚠️ This is a breaking change: Removes unusedThumbnailsUseCases
since we now load thumbnails viaThumbnailLoader
. See #7313.⚠️ This is a breaking change: RemovesThumbnailsUseCases
as a parameter inTabsFeature
andTabsTrayPresenter
.⚠️ This is a breaking change: Change the id parameter to accept a newImageRequest
inImageLoader
, which allows consumers ofThumbnailLoader
to specify the preferred image size along with the id when loading an image.
-
feature-privatemode
- Add
PrivateNotificationFeature
to 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
NDEBUG
to avoid linking unavailable symbols. This fixes a crash due to a missingstderr
symbol 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
WebNotificationFeature
checks 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.createdAtDate
andAddon.updatedAtDate
extensions to getAddon.createdAt
andAddon.updatedAt
as aDate
.
- Add
-
service-digitalassetlinks
- Added new component for listing and checking Digital Asset Links. Contains a local checker and a version that uses Google's API.
-
concept-engine
- Exposed
GeckoRuntimeSettings#setLoginAutofillEnabled
to 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
getTopFrecentSites
toPlacesHistoryStorage
, 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.enable
now takes an optional [CrashReporting] instance which is used to submit error-level log messages asRustErrorException
s.
-
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:SettingsUseCases
now requires an engine reference, to clear speculative sessions if engine settings change.⚠️ This is a breaking change:PictureInPictureFeature
now takesBrowserStore
instead ofSessionManager
.⚠️ This is a breaking change: ThepipChanged
callback has been removed. You should now observeContentState.pictureInPictureEnabled
instead.
-
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
source
URL the WebNotification originated from.
- Adds support for displaying the
-
feature-tabs
⚠️ This is a breaking change:TabsFeature
now supports providing custom use case implementations. Therefore, an instance ofSelectTabUseCase
andRemoveTabUseCase
have to be provided.
-
support-ktx
- Added
Uri.sameHostAs
to check if two Uris have the same host (both http/https, both same domain). - Added
Uri.sameOriginAs
to check if two Uris have the same origin (same host, same port). - Added
Uri.isInScope
to check if a Uri is within one of the given scopes.
- Added
-
browser-state
- Added
ContentState.pictureInPictureEnabled
to track if Picture in Picture mode is in use.
- Added
-
feature-pwa
⚠️ This is a breaking change:WebAppHideToolbarFeature
now takesBrowserStore
instead ofSessionManager
.trustedScopes
is now derived fromCustomTabsServiceStore
andWebAppManifest
.setToolbarVisibility
should now be used set the visibility of the toolbar.⚠️ This is a breaking change:onToolbarVisibilityChange
has been removed. You should now observeBrowserStore
instead.
-
feature-tab-collections:
⚠️ This is a breaking change:TabCollectionStorage.getCollections
now returnsFlow
instead ofLiveData
. UseFlow.asLiveData
to convert the result into aLiveData
again.
-
feature-top-sites:
⚠️ This is a breaking change:TopSiteStorage.getTopSites
now returnsFlow
instead ofLiveData
. UseFlow.asLiveData
to convert the result into aLiveData
again.
-
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
ImageLoader
API for loading images directly into anImageView
.
- Added
-
browser-tabstray:
⚠️ This is a breaking change:TabsAdapter
andDefaultTabViewHolder
take an optionalImageLoader
for loading browser thumbnails.- Fixed a bug in
TabsThumbnailView
where thescaleFactor
was not applied all the time when expected.
-
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:
⚠️ This release can't be used due to a bad build.
-
browser-engine-gecko-nightly
- Added support for onbeforeunload prompt
-
feature-tabs
- Added an optional
ThumbnailsUseCases
toTabsFeature
andTabsTrayPresenter
for loading a tab's thumbnail.
- Added an optional
-
browser-thumbnails
- Adds
LoadThumbnailUseCase
inThumbnailsUseCases
for loading the thumbnail of a tab. - Adds
ThumbnailStorage
as a storage layer for handling saving and loading a thumbnail from the disk cache.
- Adds
-
feature-push
- Adds the
getSubscription
call 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
ThumbnailsFeature
since this has been refactored into its own browser-thumbnails component in #6827.
- Removes unused
-
browser-state
- Adds
BrowserState.getNormalOrPrivateTabs(private: Boolean)
to getnormalTabs
orprivateTabs
based 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 fasterisURLLike
instead 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 strictisURL
instead 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_parser
to v1.22.0
- Glean was updated to v31.0.2
-
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
TabsAdapter
open 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
MediaFullscreenOrientationFeature
to autorotate activity while in fullscreen based on media aspect ratio.
- Adds
-
support-images
⚠️ This is a breaking change: ExtractsAndroidIconDecoder
,IconDecoder
andDesiredSize
out ofbrowser-icons
into a new componentsupport-images
, which provides helpers for handling images.AndroidIconDecoder
andIconDecoder
are renamed toAndroidImageDecoder
andImageDecoder
insupport-images
.
-
support-utils
URLStringUtils.isURLLike()
will now consider URLs containing double dash ("--") as valid.
-
browser-thumbnails
- Adds
ThumbnailDiskCache
for storing and restoring thumbnail bitmaps into a disk cache.
- Adds
-
concept-engine
- Adds
onHistoryStateChanged
method and correspondingHistoryItem
data class.
- Adds
-
browser-state
- Adds
history
toContentState
to 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
AbstractParentBrowserMenuItem
andParentBrowserMenuItem
for handling nested sub menu items on view click. ⚠️ This is a breaking change:WebExtensionBrowserMenuBuilder
now returns as a sub menu entry for add-ons. The sub menu also contains an access entry for Add-ons Manager, for whichonAddonsManagerTapped
needs to be passed in the constructor.
- Added
-
feature-syncedtabs
- When the SyncedTabsFeature is started it syncs the devices and account first.
-
browser-state
- Adds
firstContentfulPaint
toContentState
to 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 defaultlib-fetch-httpurlconnection
implementation 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.
-
browser-store
- Added
webAppManifest
property toContentState
.
- Added
-
feature-qr
- Added
CustomViewFinder
, aView
that shows a ViewFinder positioned in center of the camera view and draws an Overlay - Added optional String resource
scanMessage
param toQrFeature
for 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
mozacPromptLoginEditTextCursorColor
attribute to be able to change cursor color of TextInputEditTexts frommozac_feature_prompt_login_prompt
.
- Added
-
feature-tabs
- Fixed issue #6907. Uses MediaState when mapping BrowserState to tabs.
-
concept-tabstray
- For issue #6907. Adds
Media.State
toTab
- For issue #6907. Adds
-
feature-session
⚠️ This is a breaking change: Added optionalcrashReporting
param to [PictureInPictureFeature] so we can record caught exceptions.
-
feature-downloads
- Fixed issue #6881.
-
feature-addons
- Added optional
addonAllowPrivateBrowsingLabelDrawableRes
DrawableRes parameter toAddonPermissionsAdapter.Style
constructor 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_min
andmozac_browser_menu_width_max
.
- BrowserMenu will now support dynamic width based on two new attributes:
-
browser-tabstray
- Added optional
itemDecoration
DividerItemDecoration parameter toBrowserTabsTray
constructor 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_unit
parameter. See bug 1630997 for more details.
- Glean was updated to v29.1.0
-
feature-accounts
⚠️ This is a breaking change: Refactored component to usebrowser-state
instead ofbrowser-session
. TheFxaWebChannelFeature
now requires aBrowserStore
instance instead of aSessionManager
.
-
lib-push-fcm, lib-push-adm, concept-push
- Allow nullable encoding values in push messsages. If they are null, we attempt to use
aes128gcm
for encoding.
- Allow nullable encoding values in push messsages. 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 usebrowser-state
instead ofbrowser-session
. It is now required to pass aBrowserStore
instance (instead ofSessionManager
) toBrowserThumnails
.
-
browser-tabstray
- Converts
TabViewHolder
to an abstract class withDefaultTabViewHolder
as the default implementation. - Replaces
layoutId
withviewHolderProvider
in theTabsAdapter
for allowing tab customization.
- Converts
-
concept-engine
- Adds Fingerprinter to the recommended Tracking protection policy.
-
support-locale
- Adds Android 8.1 to the check in
setLayoutDirectionIfNeeded
insideLocaleAwareAppCompatActivity
- Adds Android 8.1 to the check in
-
feature-top-sites
⚠️ This is a breaking change: AddedisDefault
to 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.
-
feature-push
- Simplified error handling and reduced non-fatal exception reporting.
-
support-base
⚠️ This is a breaking change:CrashReporting
allowing adding support forrecordCrashBreadcrumb
withoutlib-crash
dependency.⚠️ This is a breaking change:Breadcrumb
has moved fromlib-crash
to this component.
-
support-utils
URLStringUtils.isURLLikeStrict
is now deprecated due to performance issues. Consider using the less strictisURLLike
instead or creating a new method using:lib-publicsuffixlist
.
-
support-ktx
String.isUrlStrict
is now deprecated due to performance issues. Consider using the less strictisURL
instead or creating a new method using:lib-publicsuffixlist
.
-
browser-menu
- Added
SimpleBrowserMenuHighlightableItem
which 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.withConstellation
puts theDeviceConstellation
within the same scope as the block so you no longer need to use theit
reference.
-
feature-syncedtabs
- Moved
SyncedTabsFeature
toSyncedTabsStorage
. ⚠️ This is a breaking change: The newSyncedTabsFeature
now orchestrates the correct state needed for consumers to handle by implementing theSyncedTabsView
.
- Moved
-
browser-thumbnails
- 🆕 New component for capturing browser thumbnails.
ThumbnailsFeature
will be deprecated for the newBrowserThumbnails
in a future.
-
All components
- Increased
targetSdkVersion
to 29 (Android Q)
- Increased
-
browser-session
SnapshotSerializer
no 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: TheSitePermissionsFeature
's constructor, now requires a new parameteronShouldShowRequestPermissionRationale
a lambda to allow the feature to query ActivityCompat.shouldShowRequestPermissionRationale or Fragment.shouldShowRequestPermissionRationale. This allows theSitePermissionsFeature
to handle when a user clicks "Deny & don't ask again" button in a system permission dialog, for more information see issue #6565.
-
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.updateAddon
andAddonsManagerAdapter.updateAddons
to allow partial updates. ⚠️ This is a breaking change:AddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: ArrayList<Addon>)
is changed toAddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: List<Addon>)
.- Fixed issue #6685, now
DefaultSupportedAddonsChecker
will marked any newly supported add-on as enabled. - Added
Addon.translatedSummary
andAddon.translatedDescription
to ease add-on translations. - Added
Addon.defaultLocale
Indicates which locale will be always available to display translatable fields. ⚠️ This is a breaking change:AddonManager.enableAddon
andAddonManager.disableAddon
have a new optional parametersource
that indicates why the extension is enabled/disabled.⚠️ This is a breaking change:Map<String, String>.translate
now is marked as internal, if you are trying to translate the summary or the description of an add-on, useAddon.translatedSummary
andAddon.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: AddedviewportFitChanged
to support Android display cutouts. -
feature-qr
- Moved
AutoFitTextureView
fromsupport-base
tofeature-qr
.
- Moved
-
-
feature-session
⚠️ This is a breaking change: AddedviewportFitChanged
toFullScreenFeature
for supporting Android display cutouts.
-
feature-qr
- Moved
AutoFitTextureView
fromsupport-base
tofeature-qr
.
- Moved
-
service-sync-logins
- Adds fun
LoginsStorage.getPotentialDupesIgnoringUsername
for fetching list of potential duplicate logins from the underlying storage layer, ignoring username.
- Adds fun
-
feature-customtabs
⚠️ This is a breaking change: RemovedhandleError
inCustomTabWindowFeature
constructor⚠️ This is a breaking change: AddedonLaunchUrlFallback
toCustomTabWindowFeature
constructor
-
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
getSearchTemplate
to reconstruct the user-entered search engine url template
- Added
-
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 optionalcustomTabSessionId
param to [PictureInPictureFeature] so consumers can use this feature for custom tab sessions.
-
support-locale
- Updates
updateResources
to always update the context configuration
- Updates
-
feature-toolbar
- Added
forceExpand
to [BrowserToolbarBottomBehavior] so consumers can expand the BrowserToolbar on demand.
- Added
-
feature-addons
- Added
AddonPermissionsAdapter.Style
andAddonsManagerAdapter.Style
classes to allow UI customization.
- Added
-
service-accounts-push
- Fixed a bug where the push subscription was incorrectly cached and caused some
GeneralError
s.
- Fixed a bug where the push subscription was incorrectly cached and caused some
-
feature-addons
- Added
DefaultAddonUpdater.UpdateAttemptStorage
allows 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
onSubscriptionChanged
events.
- Re-subscribe for Sync push support when notified by
-
support-migration
⚠️ This is a breaking change:FennecMigrator
now takesLazy
references to storage layers.
-
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 parameterhandleError
toCustomTabWindowFeature
constructor- This is used to show an error when the url can't be handled
CustomTabIntentProcessor
to supportBrowser.EXTRA_HEADERS
.
-
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Fixed a memory leak when using a
SelectionActionDelegate
onGeckoEngineView
.
- Fixed a memory leak when using a
-
feature-share
- Added
RecentAppsStorage.deleteRecentApp
andRecentAppsDao.deleteRecentApp
to allow deleting aRecentAppEntity
- Added
-
feature-p2p
- Add new
P2PFeature
to 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
InputResult
enum throughgetInputResult()
indicating how an EngineView handled user's MotionEvent. - See above changes to browser-engine-*.
- Will expose a new
-
browser-toolbar
BrowserToolbarBottomBehavior
is now solely responsible to decide if the dynamic nav bar should animate or not.- See above changes to browser-engine-*, concept-engine.
-
feature-session
SwipeRefreshLayout
will 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: addedsupport-base
dependency.
-
support-base
CrashReporting
allowing adding support forsubmitCaughtException
withoutlib-crash
dependency.
-
browser-tabstray
-
Added ability to let consumers pass a custom layout of
TabViewHolder
in order to control layout inflation and view binding. -
Added an optional URL view to the
TabViewHolder
to display the URL. -
Will expose a new
layout
parameter 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.runWithSessionIdOrSelected
now returns the result from theblock
it executes. This is consistent withrunWithSession
.
-
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_startup
reason 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 clean
will no longer remove the Miniconda installation in~/.gradle/glean
. Thereforeclean
can 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
events
ping now includes a reason code:startup
,background
ormax_capacity
.
- Glean was updated to v27.1.0
-
lib-state, browser-state
- Added the ability to add
Middleware
instances to aStore
. AMiddleware
can rewrite or intercept anAction
, as well as dispatch additionalAction
s or perform side-effects when anAction
gets dispatched.
- Added the ability to add
-
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Updated
removeAll()
fromTrackingProtectionExceptionFileStorage
to notify active sessions when all exceptions are removed. - Added
GeckoPort.senderUrl
which 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:FxaWebChannelFeature
takes aServerConfig
as 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
,GeckoLoginStorageDelegate
constructors changed to takeLazy<LoginsStorage>
instead ofLoginsStorage
, to facilitate late initialization.
-
service-firefox-accounts
⚠️ This is a breaking change:GlobalSyncableStoreProvider#configureStore
changed to takeLazy<SyncableStore>
instead ofSyncableStore
, to facilitate late initialization.
-
feature-session
⚠️ This is a breaking change:HistoryDelegate
constructor changed to takeLazy<HistoryStorage>
instead ofHistoryStorage
, to facilitate late initialization.
-
concept-engine
- Added:
DataCleanable
a new interface that decouples the behavior of clearing browser data from theEngine
andEngineSession
.
- Added:
-
feature-sitepermissions
- Fixed #6322, now
SitePermissionsStorage
allows to indicate an optional reference toDataCleanable
.
- Fixed #6322, now
-
browser-menu
- Added
canPropagate
param to allBrowserMenuHighlight
s, making it optional to be displayed in other components - Changed
BrowserMenuItem.getHighlight
to 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
-
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
DefaultSupportedAddonsChecker
which 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
AutoPushFeature
now properly notifies observers that they have changed by theObserver.onSubscriptionChanged
callback.⚠️ This is a breaking change:RustPushConnection.verifyConnection
now returns a list of subscriptions that have changed.
-
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 usebrowser-state
instead ofbrowser-session
. Feature andSuggestionProvider
implementations may require aBrowserStore
instance instead of aSessionManager
now.
-
feature-intent
⚠️ This is a breaking change: RemovedIntentProcessor.matches()
method from interface. Callingprocess()
and examining the boolean return value is enough to know whether anIntent
matched.
-
feature-downloads
- Fixed APK downloads not prompting to install when the notification is clicked.
-
service-location
- Created
LocationService
interface and madeMozillaLocationService
implement it. RegionSearchLocalizationProvider
now accepts anyLocationService
implementation.- Added
LocationService.dummy()
which creates a dummyLocationService
implementation that always returnsnull
when 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
setMenuDismissAction
inDisplayToolbar
- 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: RefactoredAsyncLoginsStorage
, which is now calledSyncableLoginsStorage
. New class caches the db connection, and removes lock/unlock operations from the public API.
-
feature-tabs
- Fixed close tabs callback incorrectly invoked on start.
⚠️ This is a breaking change: AddeddefaultTabsFilter
toTabsFeature
for initial presenting of tabs.TabsFeature.filterTabs
also uses the same filter if no new filter is provided.
-
browser-session
- SessionManager will now close internal
EngineSession
instances 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
-
concept-tabstray
⚠️ This is a breaking change: Removed dependency onbrowser-session
and introduced tabs tray specific data classes.
-
browser-tabstray
⚠️ This is a breaking change: Refactored component to implement updatedconcept-tabstray
interfaces.
-
feature-tabs
⚠️ This is a breaking change: Refactored component to usebrowser-state
instead ofbrowser-session
.- Added additional method to
TabsUseCases
to select a tab based on its id.
-
feature-contextmenu
- Adds optional
shareTextClicked
lambda toDefaultSelectionActionDelegate
which allows adding and dispatching a text selection share action
- Adds optional
-
browser-icons
⚠️ This is a breaking change: Migrated this component to usebrowser-state
instead ofbrowser-session
. It is now required to pass aBrowserStore
instance (instead ofSessionManager
) toBrowserIcons.install()
.
-
support-webextensions
- Emit facts on installed and enabled addon ids after web extension is initialized.
-
feature-app-links
⚠️ This is a breaking change:alwaysAllowedSchemes
is removed as a parameter forAppLinksInterceptor
.- Added
engineSupportedSchemes
as 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.
-
feature-sitepermissions
⚠️ This is a breaking change: add parametersautoplayAudible
andautoplayInaudible
toSitePermissionsRules
.- This allows autoplay settings to be controlled for specific sites, rather than globally.
-
concept-engine
⚠️ This is a breaking change: remove deprecated GeckoView settingallowAutoplayMedia
- 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
TrackingProtectionPolicyForSessionTypes
to lose some information during transformations.
-
feature-downloads
⚠️ This is a breaking change:customTabId
is renamed totabId
.
-
feature-contextmenu
⚠️ This is a breaking change:customTabId
is renamed totabId
.
-
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
PushType
enum and it's internal uses. - Use the new ✨
subscribe
andunsubscribe
APIs.
- Removed APIs from AutoPushFeature:
-
feature-accounts-push
- Updated
FxaPushSupportFeature
to use the newAutoPushFeature
APIs.
- Updated
-
concept-sync
-
⚠️ This is a breaking change: -
DeviceEvent
and 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.registerForDeviceEvents
renamed toFxaAccountManager.registerForAccountEvents
.
-
feature-share
- Added database to store recent apps
- Added
RecentAppsStorage
to handle storing and retrieving most-recent apps
-
service-glean
- Glean was updated to v25.0.0:
- General:
ping_type
is not included in theping_info
any more (#653), the pipeline takes the value from the submission URL.- The version of
glean_parser
has 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.initialize
method 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:
-
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
WebPushHandler
andGeckoWebPushHandler
to accept push scopes foronSubscriptionChanged
events.
- Updated
-
WebExtensions refactor
- The Web Extensions related methods have been refactored from
Engine
into a newWebExtensionRuntime
interface. - The
Engine
interface now implements theWebExtensionRuntime
interface. WebCompatFeature
has been updated to receive aWebExtensionRuntime
instead of aEngine
asinstall
method parameter.
- The Web Extensions related methods have been refactored from
-
lib-crash
- Now supports adding telemetry crash reporting services. Telemetry services will not require to prompt
- the user since it is restricted by the telemetry preference of the user.
CrashReporter( services = services, telemetryServices = telemetryServices, shouldPrompt = CrashReporter.Prompt.ALWAYS, promptConfiguration = CrashReporter.PromptConfiguration( appName = context.getString(R.string.app_name), organizationName = "Mozilla" ), enabled = true, nonFatalCrashIntent = pendingIntent )
-
feature-search
- Adds
DefaultSelectionActionDelegate
, which may be used to add new actions to text selection context menus.- It currently adds "Firefox Search" or "Firefox Private Search", depending on whether the selected tab is private.
- Adds
SearchFeature
, which consumes search requests made by other components.
// Example usage // Attach `DefaultSelectionActionDelegate` to the `EngineView` override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? = when (name) { EngineView::class.java.name -> components.engine.createView(context, attrs).apply { selectionActionDelegate = DefaultSelectionActionDelegate( components.store, context, "My App Name" ) }.asView() } // Use `SearchFeature` to attach search requests to your own code private val searchFeature = ViewBoundFeatureWrapper<SearchFeature>() // ... searchFeature.set( feature = SearchFeature(components.store) { when (it.isPrivate) { false -> components.searchUseCases.newTabSearch.invoke(it.query) true -> components.searchUseCases.newPrivateTabSearch.invoke(it.query) } }, owner = this, view = layout )
- Adds
-
service-glean
- Glean was updated to v24.2.0:
- Add
locale
toclient_info
section. - Deprecation Warning Since
locale
is now in theclient_info
section, 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
extra
fields, it will no longer include{"extra": null}
in the JSON payload. - Support for ping
reason
codes was added.- The metrics ping will now include
reason
codes that indicate why it was submitted. - The baseline ping will now include
reason
codes 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_parser
has 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
showDescription
parameter (default totrue
) toSearchSuggestionProvider
constructors to add the possibility of removing search suggestion description.
- Added
-
support-migration
- Emit facts during migration.
-
feature-awesomebar
⚠️ This is a breaking change: Added resources parameter toaddSessionProvider
method fromAwesomeBarFeature
and toSessionSuggestionProvider
constructor for accessing strings.
-
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
-
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.
-
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>) -> Unit
instead of a(List<String>) -> Unit
to add support for deleting individual exceptions.- Added:
TrackingProtectionUseCases.removeException(exception: TrackingProtectionException)
: now you can delete an exception without the need of having aSession
by callingremoveException(trackingProtectionException)
.
-
-
service-glean
- Glean was updated to v24.1.0:
- Breaking Change An
enableUpload
parameter has been added to theinitialize()
function. This removes the requirement to callsetUploadEnabled()
prior to calling theinitialize()
function. - A new metric
glean.error.preinit_tasks_overflow
was 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
GleanTestLocalServer
rule in instrumented tests, pings are immediately flushed by theWorkManager
and 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.
parseISOTimeString
has been made 4x faster. This had an impact on Glean migration and initialization.- Metrics with
lifetime: application
are 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_request
ping todeletion-request
ping 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
ContextMenuCandidate
to open links in the corresponding external app, if installed
-
concept-storage
- Added classes related to login autofill
LoginStorageDelegate
may be attached to anEngine
, where it can be used to save logins.LoginValidationDelegate
may be used to read and update currently saved logins.
- Added classes related to login autofill
-
feature-prompts
PromptFeature
may now optionally accept aLoginValidationDelegate
. If present, it users will be prompted to save their information after logging in to a website.PromptFeature
now accepts a false by defaultisSaveLoginEnabled
lambda 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. GeckoLoginStorageDelegate
now accepts a false by defaultisAutofillEnabled
lambda to be invoked before fetching logins. If false, logins will not be fetched to autofill.
- Added
-
service-firefox-accounts
signInWithShareableAccountAsync
now takes areuseAccount
parameter, 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
MigrationIntentProcessor
for handling incoming intents when migration is in progress. - Added
AbstractMigrationProgressActivity
as a base activity to block user interactions during migration.
-
browser-menu
- Added
MenuButton
to let the browser menu be used outside ofBrowserToolbar
.
- Added
-
browser-menu
- Added new
MenuController
andMenuCandidate
items that replaceBrowserMenuBuilder
andBrowserMenuItem
.- 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
BrowserMenuItem
can be converted to a menu candidate withasCandidate(Context)
. MenuController
replaces bothBrowserMenuBuilder
andBrowserMenu
, and handles showing the menu and adjusting the displayed items.MenuView
lets 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: AddedasCandidate
method toBrowserMenuItem
interface.
- Added new
-
browser-toolbar
- Added support for the new menu controller through the
DisplayToolbar.menuController
property.
- Added support for the new menu controller through the
-
feature-remotetabs was renamed to feature-syncedtabs
⚠️ This is a breaking change:RemoteTabsFeature
is nowSyncedTabsFeature
, and some method names have corresponding changes.RemoteTabsStorageSuggestionProvider
is 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
InvalidOverflow
error forTimingDistribution
s.
- Glean now provides a Gradle plugin for automating the conversion from
metrics.yaml
andpings.yaml
files 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_sync
in support-telemetry-sync
-
sync-logins
- 🕵️ New Telemetry Notice
- Added telemetry for password sync, via the new
passwords_sync
in support-telemetry-sync - The
service-sync-logins
component 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: TheServerPassword
fieldsusername
,usernameField
andpasswordField
can no longer bynull
. Use the empty string to indicate an absent value for these fields.⚠️ This is a breaking change: TheAsyncLoginsStorageAdapter.inMemory
method 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
BrowserMenuHighlightableSwitch
to represent a highlightable item with a toggle switch.
- Added
-
lib-crash
- Now supports performing action after submitting crash report.
crashReporter.submitReport(Crash.fromIntent(intent)) { stopSelf() }
-
support-ktx
- Added
Context.getDrawableWithTint
extension method to get a drawable resource with a tint applied.String.isUrl
is now using a more lenient check for improved performance. Strictly checking whether a string is a URL or not is supported through the newString.isUrlStrict
method.
- Added
-
support-base
⚠️ This is a breaking change:- Removed helper for unique notification id.
- Added helper for providing unique stable
Int
ids based on aString
tag 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.
-
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: MigratedFxaPushSupportFeature
to thefeature-accounts-push
component.
-
feature-sendtab
⚠️ This is a breaking change: This component is now deprecated. Seefeature-accounts-push
.
-
feature-accounts-push
- 🆕 New component for features that need Firefox Accounts and Push, e.g. Send Tab.
SendTabFeature
andSendTabUseCases
have been migrated here.⚠️ This is a breaking change:SendTabFeature
no longer takes an instance ofAutoPushFeature
.FxaPushSupportFeature
is 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
resetToSystemDefault
andgetSystemDefault
method toLocaleManager
- Add
-
feature-downloads
- Makes
DownloadState
parcelizable so that it can be passed toFetchDownloadManager
when completed
- Makes
-
feature-remotetabs
- Add new
RemoteTabsFeature
to view tabs from other synced devices and upload our own. - Add
RemoteTabsStorageSuggestionProvider
class to match remote tabs in awesomebar suggestions.
- Add new
-
support-migration
- Added Fennec login migration logic.
-
service-sync-logins
AsyncLoginsStorage
interface gained a new method:importLoginsAsync
, used for bulk-inserting logins (for example, during a migration).
-
browser-errorpages
- Added strings for "no network connection" error pages
-
browser-menu
- Replaced
BrowserMenuHighlightableItem.Highlight
withBrowserMenuHighlight.HighPriority
to highlight a menu item with some background color.Highlight
has been deprecated. - Added
BrowserMenuHighlight.LowPriority
to highlight a menu item with a dot over the icon.
- Replaced
-
storage-sync
- Added
RemoteTabsStorage
for synced tabs.
- Added
-
service-firefox-accounts
- Removed
StorageSync
interface 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)
-
feature-downloads
⚠️ This is a breaking change:- Renamed to
OnDownloadCompleted
toOnDownloadStopped
for increased clarity on when it's triggered
-
browser-state
⚠️ This is a breaking change:DownloadState
doesn't include the propertyfilePath
in its constructor anymore, now it is a computed property. As the previous behavior caused some situations wherefileName
was initially null and after assigned a value to producefilePath
values like "/storage/emulated/0/Download/null" for more info.
-
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
StorageSync
class. Please use theSyncManager
class 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
GleanTimerId
can 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
BackHandler
interface. Use theUserInteractionHandler.onBackPressed
instead. - Added generic
UserInteractionHandler
interface for fragments, features and other components that want to handle user interactions such as ‘back’ or 'home' button presses.
- Deprecated
-
feature-addons
⚠️ This is a breaking change:- Renamed to
AddOnsCollectionsProvider
toAddOnCollectionProvider
and added caching support:
val addOnsProvider by lazy { // Keeps addon collection response cached and valid for one day AddOnCollectionProvider(applicationContext, client, maxCacheAgeInMinutes = 24 * 60) } // May return a cached result, if available val addOns = addOnsProvider.getAvailableAddOns() // Will never return a cached result val addOns = addOnsProvider.getAvailableAddOns(allowCache = false)
-
lib-nearby
- 🆕 New component for communicating directly between two devices using Google Nearby API.
-
sample-nearby-chat
- 🆕 New sample program demonstrating use of
lib-nearby
.
- 🆕 New sample program demonstrating use of
-
feature-customtabs
⚠️ CustomTabWindowFeature
now takesActivity
instead ofContext
.
-
concept-sync, service-firefox-accounts
OAuthAccount@authorizeOAuthCode
method is nowauthorizeOAuthCodeAsync
.
-
service-firefox-accounts
- For supported Android API levels (23+),
FxaAccountManager
can now be configured to encrypt persisted FxA state, viasecureStateAtRest
flag on passed-inDeviceConfig
. Defaults tofalse
. For lower API levels, settingsecureStateAtRest
will 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
secureStateAtRest
flag. This state contains everything that's necessary to download and decrypt data stored in Firefox Sync. - An instance of a
CrashReporter
may now be passed to theFxaAccountManager
's constructor. If configured, it will be used to report any detected abnormalities. ⚠️ This is a breaking change:- Several
FxaAccountManager
methods have been made internal, and are no longer part of the public API of this module:createSyncManager
,getAccountStorage
.
- For supported Android API levels (23+),
-
feature-downloads
- Added
tryAgain
which can be called on the feature in order to restart a failed download.
- Added
-
lib-dataprotect
- Added new
SecureAbove22Preferences
helper 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.Passwords
engine unlocked during sync. If you're syncing this engine, you must useSecureAbove22Preferences
to store encryption key (stored under "passwords" key), and pass an instance of these secure prefs toGlobalSyncableStoreProvider.configureKeyStorage
.
- Support for keeping
-
concept-sync
- Added new
LockableStore
to facilitate syncing of "lockable" stores (such asSyncableLoginsStore
).
- Added new
-
feature-sitepermissions
- Added a new get operator to
SitePermissions
to 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
unsubscribeAll
support from the Rust native layer.
- Added
-
browser-session, feature-customtabs, feature-session, feature-tabs
⚠️ This is a breaking change: TheWindowFeature
andCustomTabWindowFeature
components have been migrated tobrowser-state
frombrowser-session
. Therefore creating these features now requires aBrowserStore
instance (instead of aSessionManager
instance). ThewindowRequest
properties have been removedSession
so window requests can now only be observed on aBrowserStore
from thebrowser-state
component. In addition,WindowFeature
was moved fromfeature-session
tofeature-tabs
because it now makes use of ourTabsUseCases
and this would otherwise cause a dependency cycle.
-
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
FileProvider
to 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_PACKAGES
to your manifest.
- Note: you must add a
- Improved visuals of
SimpleDownloadDialogFragment
to better matchSitePermissionsDialogFragment
.SimpleDownloadDialogFragment
can similarly be themed by usingPromptsStyling
properties.
- Recreated download notification channel with lower importance for Android O+ so that the notification is not audibly intrusive.
- Added ability to pause, resume, cancel, and try again on a download through the
-
feature-webnotifications
- Adds feature implementation for configuring and displaying web notifications to the user
WebNotificationFeature( applicationContext, engine, icons, R.mipmap.ic_launcher, BrowserActivity::class.java )
-
service-glean
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing
stderr
.
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing
-
concept-engine
- Adds support for WebPush abstraction to the Engine.
- Adds support for WebShare abstraction as a PromptRequest.
-
engine-gecko-nightly
- Adds support for WebPush in GeckoEngine.
-
support-webextensions
- Adds support for sending messages to background pages and scripts in WebExtensions.
-
service-firefox-accounts
- Adds
authorizeOAuthCode
method for generating scoped OAuth codes.
- Adds
-
feature-push
⚠️ TheAutoPushFeature
now throws when reaching exceptions in the native layer that are unrecoverable.
-
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
-
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
-
browser-toolbar
⚠️ This is a breaking change: Refactored the internals to useConstraintLayout
. As part of this change the public API was simplified and unused methods/properties have been removed.
-
feature-accounts
- Add new
FxaPushSupportFeature
for some underlying support when connecting push and fxa accounts together.
- Add new
-
browser-state
- Added
externalAppType
toCustomTabConfig
to 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: theGleanDebugActivity
is no longer exposed from service-glean. Users need to use the one inmozilla.telemetry.glean.debug.GleanDebugActivity
from theadb
command 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
SecureWindowFeature
to 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
AutoPushFeature
now checks (once every 24 hours) to verify and renew push subscriptions if expired after a cold boot.
- The
-
feature-prompts
- Fixed a crash when showing the file picker.
-
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
PromptFeature
constructor that has parameters for bothActivity
andFragment
. Use the constructors that just take either one instead. - Changed
sessionId
parameter name tocustomTabId
.
- Deprecated
-
feature-contextmenu
- The "Save Image" context menu item will no longer prompt before downloading the image.
-
concept-engine
- Added
WebAppManifest.ShareTarget
data class.
- Added
-
lib-crash
- Now supports sending caught exceptions. Use the 'submitCaughtException()' to send caught exceptions if the underlying crash reporter service supports it.
val job = crashReporter.submitCaughtException(e)
-
engine, engine-gecko-nightly, engine-gecko-beta, engine-gecko
⚠️ This is a breaking change: RenamedWebExtensionTabDelegate
toWebExtensionDelegate
to 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 newPageVisit
data class as its second argument, specifying thevisitType
andredirectSource
. For more details, please see PR #4268.
-
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
WebExtensionDelegate
to the engine, and manually reacting to all events, it's now possible to initializeWebExtensionSupport
, which provides overridable default behaviour for all web extension related engine events:
// Makes sure web extension related events (e.g. an extension is installed, or opens a new tab) are dispatched to the browser store. WebExtensionSupport.initialize(components.engine, components.store) // If dispatching to the browser store is not desired, all actions / behaviour can be overridden: WebExtensionSupport.initialize(components.engine, components.store, onNewTabOverride = { _, engineSession, url -> components.sessionManager.add(Session(url), true, engineSession) })
- Added functionality to make sure web extension related events in the engine are reflected in the browser state / store. Instead of attaching a
-
browser-menu
- Fixes background ripple of Switch in BrowserMenuImageSwitch
-
feature-awesomebar
⚠️ This is a breaking change:AwesomeBar.Suggestion
now directly takes a Bitmap for the icon param rather than a Unit.
-
feature-pwa
⚠️ This is a breaking change: Intent sent from theWebAppShortcutManager
now require the consumption of theSHORTCUT_CATEGORY
in your manifest
-
feature-customtabs
- 'CustomTabIntentProcessor' can create private sessions now.
-
browser-session, browser-state, feature-prompts
⚠️ This is a breaking change: Thefeature-prompts
component has been migrated tobrowser-state
frombrowser-session
. Therefore creating aPromptFeature
requires aBrowserStore
instance (instead of aSessionManager
instance). ThepromptRequest
property has been removedSession
. Prompt requests can now only be observed on aBrowserStore
from thebrowser-state
component.
-
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 likeWorkManagerSyncScheduler
andWorkManagerSyncDispatcher
now expects aContext
in their constructors.
-
engine, engine-gecko-nightly and engine-gecko-beta
- Added
WebExtensionsTabsDelegate
to 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
-
browser-session, browser-state, feature-contextmenu, feature-downloads
-
⚠️ This is a breaking change: Removed thedownload
property fromSession
. Downloads can now only be observed on aBrowserState
from thebrowser-state
component. ThereforeContextMenuUseCases
andDownloadsUseCases
now require aBrowserStore
instance.
-
-
support-ktx
- Adds
Resources.Theme.resolveAttribute(Int)
to quickly get a resource ID from a theme. - Adds
Context.getColorFromAttr
to get a color int from an attribute.
- Adds
-
feature-customtabs
- Added
CustomTabWindowFeature
to handle windows inside custom tabs, PWAs, and TWAs.
- Added
-
feature-tab-collections
- Behavior change: In a collection List is now ordered descending by creation date (newest tab in a collection on top)
-
feature-session, engine-gecko-nightly and engine-gecko-beta
- Added api to manage the tracking protection exception list, any session added to the list will be ignored and the the current tracking policy will not be applied.
val useCase = TrackingProtectionUseCases(sessionManager,engine) useCase.addException(session) useCase.removeException(session) useCase.removeAllExceptions() useCase.containsException(session){ contains -> // contains indicates if this session is on the exception list. } useCase.fetchExceptions { exceptions -> // exceptions is a list of all the origins that are in the exception list. }
-
support-sync-telemetry
- 🆕 New component containing building blocks for sync telemetry.
-
concept-sync, services-firefox-accounts
⚠️ This is a breaking change- Internal implementation of sync changed. Most visible change is that clients are now allowed to change which sync engines are enabled and disabled.
FxaAccountManager#syncNowAsync
takes an instance of areason
instead ofstartup
boolean flag.SyncEnginesStorage
is introduced, allowing applications to read and update enabled/disabled state configuredSyncEngine
s.SyncEngine
is no longer anenum class
, but asealed class
instead. e.g.SyncEngine.HISTORY
is nowSyncEngine.History
.DeviceConstellation#setDeviceNameAsync
now takes acontext
in addition to newname
.FxaAuthData
now takes an optionaldeclinedEngines
set of SyncEngines.
-
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.
-
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.browser
version 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.onToolbarVisibilityChange
to 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.
-
All components
- Updated Kotlin version from
1.3.40
to1.3.50
. - Updated Kotlin Coroutine library version from
1.2.2
to1.3.0
.
- Updated Kotlin version from
-
browser-session
- Clear session icon only if URL host changes.
-
feature-pwa
- Adds
WebAppUseCases.isInstallable
to check if the current session can be installed as a Progressive Web App.
- Adds
-
feature-downloads
⚠️ This is a breaking change: Thefeature-downloads
component has been migrated tobrowser-state
frombrowser-session
. Therefore creating aDownloadsFeature
requires aBrowserStore
instance (instead of aSessionManager
instance) and aDownloadsUseCases
instance now.
-
feature-contextmenu
⚠️ This is a breaking change: Thefeature-contextmenu
component has been migrated tobrowser-state
frombrowser-session
. Therefore creating aContextMenuFeature
requires aBrowserStore
instance (instead of aSessionManager
instance) and aContextMenuUseCases
instance now.
-
service-glean
⚠️ This is a breaking change: applications need to useConceptFetchHttpUploader
for overriding the ping uploading mechanism instead of directly usingconcept-fetch
implementations.
-
feature-tabs
⚠️ This is a breaking change: Methods that have been accepting a parentSession
parameter now expect the parent id (String
).
-
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
-
lib-push-amazon
- Fixed #4448: Clearing app data does not reset the registration ID.
-
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.select
function now allows you to indicate ifstrictSocialTrackingProtection
should be activated or not. When it is active blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the issue #4320
val policy = TrackingProtectionPolicy.select( strictSocialTrackingProtection = true )
- The
-
context-menu
- Exposed title tag from GV in HitResult. Fixes [#1444]. If title is null or blank the src value is returned for title.
-
browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release
: GeckoView 69.0browser-engine-gecko-beta
: GeckoView 70.0browser-engine-gecko-nightly
: GeckoView 71.0
- Merge day!
-
feature-toolbar
⚠️ This is a breaking change: Thefeature-toolbar
component has been migrated tobrowser-state
frombrowser-session
. Therefore creating aToolbarFeature
requires aBrowserStore
instance instead of aSessionManager
instance now.
-
lib-crash
- Now supports Breadcrumbs. Use the 'recordCrashBreadcrumb()' to record Breadcrumbs if the underlying crash reporter service supports it.
crashReporter.recordCrashBreadcrumb( CrashBreadcrumb("Settings button clicked", data, "UI", Level.INFO, Type.USER) )
-
browser-engine-gecko-nightly and browser-engine-gecko-beta
- The
TrackingProtectionPolicy.strict()
now blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the issue #4213
- The
-
browser-session
⚠️ This is a breaking change:getSessionId
andEXTRA_SESSION_ID
has moved to thefeature-intent
component.
-
feature-intent
⚠️ This is a breaking change:TabIntentProcessor
has moved to theprocessing
sub-package, but is still in the same component.
-
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-servo
component since it was not being maintained, updated and used.
- ❌ We removed the
-
concept-sync, service-firefox-accounts
⚠️ This is a breaking change:SyncConfig
'ssyncableStores
has been renamed tosupportedEngines
, expressed via new enum typeSyncEngine
.begin*
OAuthAccount methods now return anAuthFlowUrl
, which encapsulates an OAuth state identifier.AccountObserver:onAuthenticated
method now hasauthType
parameter (instead ofnewAccount
), which describes in detail what caused an authentication.GlobalSyncableStoreProvider.configureStore
now takes a pair ofPair<SyncEngine, SyncableStore>
, instead of allowing arbitrary string names for engines.GlobalSyncableStoreProvider.getStore
is no longer part of the public API.
-
feature-push
- Added more logging into
AutoPushFeature
to 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:action
param ofAuthType.OtherExternal
is now optional. Missingaction
indicates that we really don't know what external authType we've hit.
-
browser-icons
- Ensures icons are not cached on the disk in private sessions.
-
browser-menu
- Added
startImage
to Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted - Highlight properties of HighlightableMenuItem
startImage
andendImage
are now both optional
- Added
-
lib-state
- Added
Store
extensions to observeState
using Kotlin'sFlow
API:Store.flow()
,Store.flowScoped()
.
- Added
-
support-ktx
- Added property delegates to work with
SharedPreferences
. - Added
Flow.ifChanged()
operator for filtering aFlow
based 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
CustomTabsServiceStore
to track custom tab data inAbstractCustomTabsService
.
- Added
-
feature-pwa
- Added support for hiding the toolbar in a Trusted Web Activity.
- Added
TrustedWebActivityIntentProcessor
to process TWA intents. - Added
CustomTabState.trustedOrigins
extension method to turn the verification state of a custom tab into a list of origins. - Added
WebAppHideToolbarFeature.onTrustedScopesChange
to 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: MovedIntent
related code frombrowser-session
tofeature-intent
.
-
feature-media
- The
Intent
launched from the media notification now has its action set toMediaFeature.ACTION_SWITCH_TAB
. In addition to that the extraMediaFeature.EXTRA_TAB_ID
contains the id of the tab the media notification is displayed for.
- The
-
browser-menu
- Added
startImage
to Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted - Highlight properties of HighlightableMenuItem
startImage
andendImage
are now both optional
- Added
-
Imported latest state of translations.
-
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
- ASearchLocalizationProvider
implementation that uses aMozillaLocationService
instance to do a region lookup via GeoIP. ⚠️ This is a breaking change: An implementation ofSearchLocalizationProvider
now returns aSearchLocalization
data class instead of multiple properties.
- Added
-
service-glean
⚠️ This is a breaking change:Glean.handleBackgroundEvent
is now an internal API.- Added a
QuantityMetricType
(for internal use by Gecko metrics only).
-
browser-engine-gecko(-beta/nightly), concept-engine
- Added simplified
Media.state
derived fromMedia.playbackState
events.
- Added simplified
-
lib-push-adm, lib-push-firebase, concept-push
- Added
isServiceAvailable
to signify if the push service is supported on the device.
- Added
-
concept-engine
- Added
WebNotification
data 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:TrackingProtectionPolicy
does not have asafeBrowsingCategories
anymore, Safe Browsing is now a separate setting on the Engine level. To change the default value ofSafeBrowsingPolicy.RECOMMENDED
you 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 aUnsupportedSettingException
, 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>
-
browser-menu
- Updated the styling of the menu to not have padding on top or bottom. Also modified size of
BrowserMenuItemToolbar
to 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:TrackingProtectionPolicy
removes thecategories
property 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#categories
has been replaced byTracker#trackingCategories
andTracker#cookiePolicies
to better report blocked content see #4098.- Added:
Session#trackersLoaded
A list ofTracker
s that could be blocked but has been loaded in this session. - Added:
Session#Observer#onTrackerLoaded
Notifies that a tracker that could be blocked has been loaded.
-
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.syncNowAsync
can now receive adebounce
parameter, allowing consumers to specify debounce behaviour of their sync requests.⚠️ This is a breaking change:- Removed public methods from
DeviceConstellation
and its implementation inFxaDeviceConstellation
:fetchAllDevicesAsync
,startPeriodicRefresh
,stopPeriodicRefresh
. DeviceConstellation#refreshDeviceStateAsync
was renamed torefreshDevicesAsync
: no longer polls for device events, only updates device states (e.g. new devices, name changes)pollForEventsAsync
no 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
CustomTabConfig
helpers. 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
)beginOAuthFlowAsync
no longer need to specifywantsKeys
parameter; it's automatically inferred from the requestedscopes
. - Three new device types now available:
tablet
,tv
,vr
.
-
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.siteSecurityColor
to use no icon color filter when the color is set toColor.TRANSPARENT
. - Added
BrowserToolbar.siteSecurityIcon
to use custom security icons with multiple colors in the toolbar.
- Changed
-
feature-sendtab
- Added a
SendTabFeature
that 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
MediaFeature
is 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.
-
browser-menu
⚠️ This is a breaking change:BrowserMenuHighlightableItem
now has a ripple effect and includes an example of how to pass in a drawable properly to also include a ripple when highlighted
-
feature-accounts
⚠️ This is a breaking change:- The
FirefoxAccountsAuthFeature
no 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.open
calls.
- 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
javascript
scheme are clicked.
- Fixed #3944 causing third-party apps being opened when links with a
-
feature-session
⚠️ This is a breaking change:- The
WindowFeature
no 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
TimeSpanMetricType
that prevented multiple consecutivestart()
/stop()
calls. This resulted in theglean.baseline.duration
being missing from mostbaseline
pings.
- Fixed a bug in
-
service-firefox-accounts
⚠️ This is a breaking change:AccountObserver.onAuthenticated
now helps observers distinguish when an account is a new authenticated account one with a secondnewAccount
boolean parameter.
-
concept-sync, service-firefox-accounts:
⚠️ This is a breaking change: AddedOAuthAccount@disconnectAsync
, which replacedDeviceConstellation@destroyCurrentDeviceAsync
.
-
lib-crash
⚠️ Known issue: Sending a crash using theMozillaSocorroService
with GeckoView 69.0 or 68.0, will lead to aNoSuchMethodError
when using this particular version of android components. See #4052.
-
service-glean
- Fixed a bug in
TimeSpanMetricType
that prevented multiple consecutivestart()
/stop()
calls. This resulted in theglean.baseline.duration
being missing from mostbaseline
pings.
- Fixed a bug in
-
feature-app-links
- Fixed #3944 causing third-party apps being opened when links with a
javascript
scheme are clicked.
- Fixed #3944 causing third-party apps being opened when links with a
-
Imported latest state of translations.
-
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.open
calls.
-
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.forEach
in favour of Android Core KTX. - Deprecated
Map.toBundle()
in favour of Android Core KTXbundleOf
.
- Deprecated
-
lib-state
- Migrated
Store.broadcastChannel()
toStore.channel()
returning aReceiveChannel
that 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 theStore
or Kotlin'sReceiveChannel.broadcast()
extension method can be used.
- Migrated
-
support-android-test
- Added
LeakDetectionRule
to 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(): Boolean
method toFxaAccountManager
-
feature-customtabs
CustomTabsToolbarFeature
now optionally takesWindow
as 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.crossProduct
to retrieve the cartesian product of twoCollections
.
- Added
-
service-glean
⚠️ This is a breaking change:Glean.enableTestingMode
is nowinternal
. Tests can use theGleanTestRule
to enable testing mode. Updated docs available here.
-
feature-push
- Added default arguments when registering for subscriptions/messages.
-
All components
- Increased
compileSdkVersion
to 29 (Android Q)
- Increased
-
feature-tab
⚠️ This is a breaking change: NowTabsUseCases.SelectTabUseCase
is an interface, if you want to rely on its previous behavior you could keep usingTabsUseCases.selectTab
or useTabsUseCases.DefaultSelectTabUseCase
.
-
feature-awesomebar
SessionSuggestionProvider
now 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 fromSession.Observer.onTrackerBlocked(session: Session, blocked: String, all: List<String>) = Unit
toSession.Observer.onTrackerBlocked(session: Session, tracker: Tracker, all: List<Tracker>) = Unit
⚠️ This is a breaking change: Function signature changed fromEngineSession.Observer.onTrackerBlocked(url: String) = Unit
toEngineSession.Observer.onTrackerBlocked(tracker: Tracker) = Unit
- Added: To provide more details about a blocked content, we introduced a new class called
Tracker
this contains information like theurl
andcategories
of theTracker
. Among the categories we haveAd
,Analytic
,Social
,Cryptomining
,Fingerprinting
andContent
.
-
browser-icons
- Added
BrowserIcons.loadIntoView
to automatically load an icon into anImageView
.
- Added
-
browser-session
- Added
IntentProcessor
interface to represent a class that processes intents to create sessions. - Deprecated
CustomTabConfig.isCustomTabIntent
andCustomTabConfig.createFromIntent
. UseisCustomTabIntent
andcreateFromCustomTabIntent
in feature-customtabs instead.
- Added
-
feature-customtabs
- Added
CustomTabIntentProcessor
to create custom tab sessions from intents. - Added
isCustomTabIntent
to check if an intent is for creating custom tabs. - Added
createCustomTabConfigFromIntent
to create aCustomTabConfig
from a custom tab intent.
- Added
-
feature-downloads
FetchDownloadManager
now determines the filename during the download, resulting in more accurate filenames.
-
feature-intent
- Deprecated
IntentProcessor
class 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
Store
viapause()
andresume()
methods on the subscription - When using
observeManually
the returnedSubscription
is in paused state by default. - When binding a subscription to a
LifecycleOwner
then this subscription will automatically paused and resumed based on whether the lifecycle is in STARTED state. - When binding a subscription to a
View
then this subscription will be paused until theView
gets attached. - Added
Store.broadcastChannel()
to observe state from a coroutine sequentially ordered. - Added helpers to process states coming from a
Store
sequentially viaFragment.consumeFrom(Store)
andView.consumeFrom(Store)
.
- Added ability to pause/resume observing a
-
support-ktx
⚠️ This is a breaking behavior change:JSONArray.mapNotNull
is now an inline function, changing the behavior of thereturn
keyword within its lambda.- Added
View.toScope()
to create aCoroutineScope
that is active as long as theView
is attached. Once theView
gets detached theCoroutineScope
gets cancelled automatically. By default coroutines dispatched on the created [CoroutineScope] run on the main dispatcher
-
concept-push, lib-push-firebase, feature-push
- Added
deleteToken
to the PushService interface. - Added the implementation for it to Firebase Push implementation.
- Added
forceRegistrationRenewal
to 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
-
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 neqsupport-rusthttp
component as follows:
import mozilla.components.support.rusthttp.RustHttpConfig // Note: other implementions 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.
-
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 whitelist for schemes of URLs to open with an external app. This defaults to
mailto
,market
,sms
andtel
.
- Added whitelist for schemes of URLs to open with an external app. This defaults to
-
feature-accounts
⚠️ This is a breaking change: Public API for interacting withFxaAccountManager
and sync changesFxaAccountManager
now has a new, simplified public API.BackgroundSyncManager
is 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.
-
concept-engine, browser-engine-gecko(-beta/nightly).
- Added
TrackingProtectionPolicy.CookiePolicy
to indicate how cookies should behave for a givenTrackingProtectionPolicy
. - Now
TrackingProtectionPolicy.select
allows you to specify aTrackingProtectionPolicy.CookiePolicy
, if not specified,TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS
will 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
useWideViewPort
inSettings
to 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 ofSession
s to theSessionManager
.
- Added
-
feature-tab-collections
⚠️ These are breaking changes below:Tab.restore()
now returns aSession
instead of aSessionManager.Snapshot
TabCollection.restore()
andTabCollection.restoreSubset()
now return aList<Session>
instead of aSessionManager.Snapshot
-
support-ktx
- Added
onNextGlobalLayout
to add aViewTreeObserver.OnGlobalLayoutListener
that is only called once.
- Added
-
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 anEngineSession
that is currently being rendered by theEngineView
. Usually an app does not need to callrelease()
manually sinceEngineView
takes care of releasing theEngineSession
on specific lifecycle events. However sometimes the app wants to release anEngineSession
to 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 fromSessionManager
. This feature was never used by any app except the sample browser.
-
feature-downloads
- Added
FetchDownloadManager
, an alternate download manager that uses a fetchClient
instead of the native AndroidDownloadManager
.
- Added
-
support-ktx
- Deprecated
String.toUri()
in favour of Android Core KTX. - Deprecated
View.isGone
andView.isInvisible
in favour of Android Core KTX. - Added
putCompoundDrawablesRelative
andputCompoundDrawablesRelativeWithIntrinsicBounds
, aliases ofsetCompoundDrawablesRelative
that use Kotlin named and default arguments.
- Deprecated
-
browser-toolbar
- Adds
focus()
which provides a hook for callingeditMode.focus()
to focus the edit modeurlView
- Adds
-
browser-awesomebar
- Updated
DefaultSuggestionViewHolder
to have a style more consistent with Fenix mocks. - Fixed a bug with
InlineAutocompleteEditText
where 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-state
component (in development).
- A new component for maintaining application, screen or component state via a redux-style
-
feature-downloads
onDownloadCompleted
no longer receives the download object and ID.
-
support-ktx
- Deprecated
Resource.pxToDp
. - Added
Int.dpToPx
to convert from density independent pixels to an int representing screen pixels. - Added
Int.dpToFloat
to convert from density independent pixels to a float representing screen pixels.
- Deprecated
-
support-ktx
- Added
Context.isScreenReaderEnabled
extension 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))
-
🛑 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.version
property (EngineVersion
) for printing and comparing the version of the used engine.
- Added
-
browser-menu
- Added
endOfMenuAlwaysVisible
property/parameter toBrowserMenuBuilder
constructor and toBrowserMenu.show
function. When is set to true makes sure the bottom of the menu is always visible, this allows use cases like #3211. - Added
onDimiss
parameter toBrowserMenu.show
function, called when the menu is dismissed. - Changed
BrowserMenuHighlightableItem
constructor to allow for dynamically toggling the highlight withinvalidate()
.
- Added
-
browser-toolbar
- Added highlight effect to the overflow menu button when a highlighted
BrowserMenuHighlightableItem
is 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
Session
by using therestoreSessionId
flag. 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
getProvidedDefaultSearchEngine
toSearchEngineManager
to 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:
TabCollection
instances returned byTabCollectionStorage
are now ordered by the last time they have been updated (instead of the time they have been created).
- Behavior change:
-
lib-crash
- Restrictions to background activity starts in Android Q+ make it impossible to launch the crash reporter prompt after certain crashes. In those situations the library will show a "crash notification" instead. Clicking on the notification will launch the crash reporter prompt allowing the user to submit a crash report.
For older versions see the [changelog archive]({{ site.baseurl }}/changelog/archive).