layout | title | permalink |
---|---|---|
page |
Changelog |
/changelog/ |
-
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.
-
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
.
-
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
-
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).