Changelog
75.0.0-SNAPSHOT (In Development)
- Commits
- Milestone
- Dependencies
- Gecko
- browser-menu:
- 🚒 Bug fixed issue # - The browser menu will have it’s dynamic width calculated only once, before the first layout.
- browser-menu
- 🌟️ BrowserMenu support a bottom collapsed/expandable layout through a new ExpandableLayout that will wrap a menu layout before being used in a PopupWindow and automatically allow the collapse/expand behaviors.
- To use this set
isCollapsingMenuLimit = truefor any menu item of a bottom anchored menu.
- browser-toolbar
- feature-session
- 🚒️ **Various issues related to the dynamic toolbar and pull to refresh will be fixed with with GeckoView offering more details about how the touch event will be handled.
- concept-engine
- ⚠️ **EngineView#InputResult is deprecated in favor of InputResultDetail which offers more details about how a touch event will be handled.
- feature-downloads:
- 🚒 Bug fixed issue #9964 - Downloads notification strings are not localized.
- service-nimbus
- Added
getExperimentBranchesmethod toNimbusfor retrieving a list of experiment branches for a given experiment. issue #9895
- Added
74.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-downloads:
- 🚒 Bug fixed issue #9821 - Crash for downloads inferred empty mime types.
- intent-processing
- 🌟️ Added support for opening links from ACTION_MAIN Intents. This Intents could the result of
Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER)calls.
- 🌟️ Added support for opening links from ACTION_MAIN Intents. This Intents could the result of
- browser-toolbar
- 🌟️ Added
ToolbarBehaviorControllerto automatically block theBrowserToolbarbeing animated by theBrowserToolbarBehaviorwhile the tab is loading. This new class just has to be initialized by AC clients, similar toToolbarPresenter.
- 🌟️ Added
- feature-downloads:
- 🚒 Bug fixed issue #9757 - Remove downloads notification when private tabs are closed.
- 🚒 Bug fixed issue #9789 - Canceled first PDF download prevents following attempts from downloading.
- 🚒 Bug fixed issue #9823 - Downloads prompts do not show again when a user denies system permission twice.
- concept-engine,browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly, browser-engine-system
- ⚠️ This is a breaking change:
EngineSession.enableTrackingProtection()andEngineSession.disableTrackingProtection()have been removed, please useEngineSession.updateTrackingProtection()instead , for more details see issue #9787.
- ⚠️ This is a breaking change:
- feature-push
- ⚠️ This is a breaking change: Removed
databasePathfromRustPushConnectionconstructor and addedcontext. The file path is now queries lazily.
- ⚠️ This is a breaking change: Removed
- feature-top-sites
- ⚠️ This is a breaking change: Replace
TopSitesUseCases.renameTopSiteswithTopSitesUseCases.updateTopSiteswhich allows for updating the title and the url of a top site. #9599
- ⚠️ This is a breaking change: Replace
- service-sync-autofill
- Refactors
AutofillCreditCardsAddressesStoragefrom browser-storage-sync into its own component. #9801
- Refactors
- service-firefox-accounts,browser-storage-sync,service-nimbus,service-sync-logins
- Due to a temporary build issue in the Application Services project, it is not currently
possible to run some service-related unittests on a Windows host. #9731
- Work on restoring this capability will be tracked in application-services#3917.
- Due to a temporary build issue in the Application Services project, it is not currently
possible to run some service-related unittests on a Windows host. #9731
- service-firefox-accounts
- ⚠️ This is a breaking change: Removed the currently unused
authorizeOAuthCodefrom FirefoxAccount API surface.
- ⚠️ This is a breaking change: Removed the currently unused
- service-nimbus
- Added UI components for displaying a list of active Nimbus experiments.
- support-locale
- ⚠️ This is a breaking change: Extended support for locale changes. The
LocaleManagercan now handle notifications aboutLocalechanges throughLocaleUseCases, which are then reflected in theBrowserStore. - 🚒 Bug fixed issue #17190 - Private browsing notifications are updated with the correct language when the app locale is changed.
- ⚠️ This is a breaking change: Extended support for locale changes. The
73.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- All components
- ⚠️Increased
targetSdkVersionto 30 (Android R)
- ⚠️Increased
- browser-toolbar
- 🌟 Added
BrowserToolbarBehavior#forceCollapseto easily collapse the top/bottom toolbar.
- 🌟 Added
- browser-toolbar
- ⚠️ This is a breaking change:
BrowserToolbarBottomBehavioris renamed toBrowserToolbarBehavioras it is now a common behavior for toolbars be them placed at the bottom or at the top of the screen.
- ⚠️ This is a breaking change:
- feature-session
- ⚠️ This is a breaking change:
EngineViewBottomBehavioris renamed toEngineViewBrowserToolbarBehavioras it is now the glue betweenEngineViewandBrowserToolbarirrespective of if the toolbar is placed at the bottom oir at the top of theEngineView.
- ⚠️ This is a breaking change:
- feature-downloads:
- 🌟 New
ShareDownloadFeaturewill listen forAddShareActionand download, cache locally and then share internet resources. - ⚠️ This is a breaking change: This is a breaking change with clients expected to create and register a new instance of the this new feature otherwise the “Share image” from the browser contextual menu will do nothing.
- 🌟 New
- support-ktx
- 🌟 Added
Context.shareMediathat allows to easily share a specific locally stored file through the Android share menu.
- 🌟 Added
- feature-downloads:
- 🚒 Bug fixed issue #9441 - Don’t ask for redundant system files permission if not required.
- 🚒 Bug fixed issue #9526 - Downloads with generic content types use the correct file extension.
- 🚒 Bug fixed issue #9553 - Multiple files were unable to be opened after being download.
- feature-webauthn
- 🆕 New component to enable support for WebAuthn specification with
WebAuthnFeature.
- 🆕 New component to enable support for WebAuthn specification with
- feature-awesomebar
- added
SearchEngineSuggestionProviderthat offers suggestion(s) for search engines based on user search engine list
- added
- browser-storage-sync
- Added
AutofillCreditCardsAddressesStorageimplementation of theCreditCardsAddressesStorageinterface back by the application-services’autofilllibrary.
- Added
- concept-engine
- Added
defaultSettings: Settings?parameter to registerTabHandler to supply a default Tracking Policy when opening a new extension tab. - When calling
onNewTabinregisterTabHandlerfromGeckoWebExtension.kta defaultTrackingProtectionPolicy.strict()is supplied to the newGeckoEngineSession. This was added in to avoid WebExtension tabs without any ETP settings.
- Added
- concept-storage
- Introduced
CreditCardsAddressesStorageinterface for describing credit card and address storage.
- Introduced
- support-base
- Add
NamedThreadFactory, aThreadFactorythat names its threads with the given argument.
- Add
- lib-state
- Add
threadNamePrefixparameter toStoreto give threads created by theStorea specific name.
- Add
- service-glean
- 🆙 Updated Glean to version 35.0.0 (changelog)
72.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-prompts:
- 🚒 Bug fixed issue #9471 - Confirm and alert js dialogs don’t show “OK” and “Cancel” buttons when the message is too long.
- support-base
- ⚠️ This is a breaking change: Update the signature of
ActivityResultHandler.onActivityResultto avoid conflict with internal Android APIs.
- ⚠️ This is a breaking change: Update the signature of
- feature-addons
- 🚒 Bug fixed [issue #9484] https://github.com/mozilla-mobile/android-components/issues/9484) - Handle multiple add-ons update that require new permissions.
- feature-top-sites
- ⚠️ This is a breaking change: Replaces
includeFrecentwith an optionalfrecencyConfiginTopSitesConfigandTopSitesStorage.getTopSitesto specify the frecency threshold for the returned list of top frecent sites see #8690.
- ⚠️ This is a breaking change: Replaces
- service-nimbus
- Upgraded nimbus-sdk to enable
getExperimentBranch()(and friends) to be callable from the main thread. - Split up
updateExperiments()in to two methods:fetchExperiments()andapplyPendingExperiments(). - Exposed
setExperimentsLocally()for testing and startup.
71.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-prompts:
- 🚒 Bug fixed [issue #9351] Camera images are available even with “Don’t keep activities” enabled.
- ui-autocomplete:
- Pasting from the clipboard now cleans up any unwanted uri schemes.
- support-utils:
- 🌟 Added SafeUrl#stripUnsafeUrlSchemes that can cleanup unwanted uri schemes. Interested clients can specify what these are by overwriting “mozac_url_schemes_blocklist”.
- concept-fetch:
- 🌟 Added
Request#privateto allow requests to be performed in a private context, the feature is not support in allClients check support before using.
- 🌟 Added
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- 🌟 Added support for
Request#private.
- 🌟 Added support for
- feature-prompts:
- 🚒 Bug fixed issue #9229 - Dismiss SelectLoginPrompt from the current tab when opening a new one ensuring the new one can show it’s own. When returning to the previous tab users should focus a login field to see the SelectLoginPrompt again.
- PromptFeature now implements UserInteractionHandler.onBackPressed to dismiss loginPicker.
- browser-session
- 🚒 Bug fixed issue #9445 - LinkEngineSessionAction does not consider restoreState result.
- feature-contextmenu
- 🌟 New functionality issue #9392 - Add share and copy link context menu options to images.
- feature-customtabs
- ⚠️ This is a breaking change: Multiple breaking changes after migrating
feature-customtabsto use the browser store,CustomTabIntentProcessorrequiresAddCustomTabUseCase,CustomTabsToolbarFeaturerequires theBrowserStoreandCustomTabsUseCasesfor more details see issue #4257.
- ⚠️ This is a breaking change: Multiple breaking changes after migrating
- feature-intent
- ⚠️ This is a breaking change: Multiple breaking changes after migrating
feature-intentto use the browser store,TabIntentProcessorrequiresTabsUseCasesand removes theopenNewTabparameter, for more details see issue #4279.
- ⚠️ This is a breaking change: Multiple breaking changes after migrating
- feature-tabs
- ⚠️ This is a breaking change:
TabsUseCasesnow requiresSessionStoragefor more info see issue #9323.
- ⚠️ This is a breaking change:
- browser-icons
- 🚒 Bug fixed issue #7888 - Fixed crash when fetching icon with invalid URI scheme.
- feature-media
- 🚒 Bug fixed issue #9243 - Pausing YouTube Video for A While Causes Media Notification to Disappear.
- 🚒 Bug fixed issue #9254 - Headphone control does not pause or play video.
- support-webextensions
- 🚒 Bug fixed issue #9210 - White page shown in custom tab when ublock blocks page.
- feature-downloads:
- Allow browsers to change the download notification accent color by providing
Style()inAbstractFetchDownloadService, for more information see #9299.
- Allow browsers to change the download notification accent color by providing
- feature-accounts-push
- Rolling back to previous behaviour of renewing push registration token when the
subscriptionExpiredflag is observed.
- Rolling back to previous behaviour of renewing push registration token when the
- browser-icons
- Catch
IOExceptionthat may be thrown when deleting icon caches.
- Catch
- feature-qr
- QR Scanner can now scan inverted QR codes, by decoding inverted source when the decoding the original source fails.
- feature-sitepermissions
- ⚠️ This is a breaking change: The
SitePermissionsconstructor, now parameter types forautoplayAudibleandautoplayInaudiblehave changed toAutoplayStatusas autoplay permissions only support two statusALLOWEDandBLOCKED.
- ⚠️ This is a breaking change: The
- feature-app-links
- ⚠️ This is a breaking change: Migrated this component to use
browser-stateinstead ofbrowser-session. It is now required to pass aBrowserStoreinstance (instead ofSessionManager) toAppLinksFeature.
- ⚠️ This is a breaking change: Migrated this component to use
- browser-toolbar
- ⚠️ This is a breaking change: The API for showing the site permission indicators has been replaced to API to show an dot notification instead, for more information see #9378.
- service-nimbus
- Added a
NimbusDisabledclass to provide implementers who are not able to use Nimbus yet.
- Added a
- support-base
- 🌟 Add an
ActivityResultHandlerfor features that want to consume the result.
- 🌟 Add an
- concept-engine,browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- 🌟 Added a new
ActivityDelegatefor handling intent requests from the engine. - ⚠️ This is a breaking change:
EngineSessionState.toJSON()has been removed for more details see issue #8370.
- 🌟 Added a new
- browser-engine-gecko(-nightly)
- Added
GeckoActivityDelegatefor the GeckoViewactivityDelegate.
- Added
- feature-tabs
- ⚠️ This is a breaking change: Removed the
TabCounterToolbarButton#privateColorattribute which are replaced by thetabCounterTintColorAndroid styleable attribute.
- ⚠️ This is a breaking change: Removed the
- lib-nearby, feature-p2p, samples-nearby
- ⚠️ This is a breaking change: Removed Nearby component and related samples.
70.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 84.0browser-engine-gecko-beta: GeckoView 85.0browser-engine-gecko-nightly: GeckoView 86.0
- Merge day!
- browser-toolbar
- 🌟 Added API to show site permission indicators for more information see #9131.
- browser-awesomebar:
- Awesomebar can now be customized for bottom toolbar using the [customizeForBottomToolbar] property
- service-numbus
- Added a
NimbusDisabledclass to provide implementers who are not able to use Nimbus yet.69.0.0
- Added a
- Commits
- Milestone
- Dependencies
- Gecko
- browser-session
- ⚠️ This is a breaking change:
Session.searchTermshas been removed. UseContentState.searchTerms(browser-state) instead. - ⚠️ This is a breaking change:
Session.desktopModehas been removed. UseContentState.desktopMode(browser-state) instead.
- ⚠️ This is a breaking change:
- feature-search
- ⚠️ This is a breaking change: Use cases in
SearchUseCasesnow take the ID of s session/tab as parameter instead of aSessioninstance. - ⚠️ This is a breaking change:
SearchUseCasesno longer depends onSessionManagerand requires aTabsUseCasesinstance now.
- ⚠️ This is a breaking change: Use cases in
- feature-tabs
- ⚠️ This is a breaking change: Use cases in
TabsUseCasesthat previously returned aSessioninstance now return the ID of theSession.
- ⚠️ This is a breaking change: Use cases in
- support-test-libstate
- Added
CaptureActionsMiddleware: AMiddlewareimplementation for unit tests that want to inspect actions dispatched on aStore.
- Added
- feature-sitepermissions
- ⚠️ This is a breaking change: The
SitePermissionsRulesconstructor, now requires a new parametermediaKeySystemAccess. - 🌟 Added support for EME permission prompts, see #7121.
- ⚠️ This is a breaking change: The
- browser-thumbnail
- Catch
IOExceptionthat may be thrown when deleting thumbnails.
- Catch
- browser-tabstray
- ⚠️ This is a breaking change: Support temporary hiding if a tab is selected. For this you should use partial bindings with PAYLOAD_(DONT_)HIGHLIGHT_SELECTED_ITEM; override TabsAdapter#isTabSelected for new item bindings; override TabViewHolder#updateSelectedTabIndicator.
- concept-tabstray:
- ⚠️ This is a breaking change: A new method -
isTabSelectedwas added that exposes to clients an easy way to change what a “selected” tab means.
- ⚠️ This is a breaking change: A new method -
68.0.0
- Commits
- Milestone
- Dependencies
- Gecko
-
ℹ️ Note that various AndroidX dependencies have been updated in this release.
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- 🚒 Bug fixed issue #8464 - Crash when confirming a prompt that was already confirmed
- feature-downloads
- 🚒 Bug fixed issue #9033 - Fix resuming downloads in slow networks more details see the Fenix issue.
- 🚒 Bug fixed issue #9073 - Fix crash downloading a file with multiple dots on it, for more details see the Fenix issue.
- feature-session
- 🚒 Bug fixed issue #9109 - Tracking protection shield not getting updated after deleting exception by url Fenix issue.
- feature-app-links
- Added handling of PackageItemInfo.packageName NullPointerException on some Xiaomi and TCL devices
- service-glean
- 🆙 Updated Glean to version 33.1.2 (changelog)
- feature-tab-collections:
- [createCollection] now returns the id of the newly created collection
- browser-errorpages:
- ⚠️ The url encoded error page -
error_page_jsis now clean of inline code. Clients should not rely on inlined code anymore. - ⚠️ This is a breaking change: Removed the data url encoded error page -
error_pageswhich was already deprecated byerror_page_js.
- ⚠️ The url encoded error page -
67.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 83.0browser-engine-gecko-beta: GeckoView 84.0browser-engine-gecko-nightly: GeckoView 85.0
- Merge day!
- feature-sitepermissions
- 🚒 Bug fixed issue #8943 Refactor
SwipeRefreshFeatureto not useEngineSession.Observer, this result in multiple site permissions bugs getting fixed see fenix#8987 and fenix#16411.
- 🚒 Bug fixed issue #8943 Refactor
- feature-prompts
- 🚒 Bug fixed issue #8967 Crash when trying to upload a file see fenix#16537, for more information.
- 🚒 Bug fixed issue #8953 - Scroll to selected prompt choice if one exists.
- feature-accounts-push
- ⚠️
FxaPushSupportFeaturenow re-subscribes to push instead of triggering the registration renewal process - this is a temporary workaround and will be removed in the future, see #7143. FxaPushSupportFeaturenow takes an optional crash reporter in the constructor.
- ⚠️
66.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- accounts-push
- 🚒 Bug fixed issue #8745 - Remove OneTimeFxaPushReset from FxaPushSupportFeature
- ⚠️ This is a breaking change because the public API changes with the removal of the class.
- 🚒 Bug fixed issue #8745 - Remove OneTimeFxaPushReset from FxaPushSupportFeature
- feature-downloads
- 🚒 Bug fixed issue #8904 - Fix resuming downloads in nightly/beta more details see the Fenix issue.
- feature-search
- ⚠️ This is a breaking change:
SearchUseCasesno longer requires aContextparameter in the constructor.
- ⚠️ This is a breaking change:
- feature-sitepermissions
- ⚠️ This is a breaking change: The
SitePermissionsFeature’s constructor does not requires asessionManagerparameter anymore pass astoreinstead.
- ⚠️ This is a breaking change: The
- browser-session
SelectionAwareSessionObserveris now deprecated. All session state changes can be observed using the browser store (browser-statemodule).
- feature-addons
AddonManager.getAddons()now accepts a new (optional)allowCacheparameter to configure whether or not a cached response may be returned. This is useful in case a UI flow needs the most up-to-date addons list, or to support “refresh” functionality. By default, cached responses are allowed.
- service-nimbus
- Added new Nimbus rapid experiment library component. This is a Rust based component that is delivered to A-C through the appservices megazord. See the nimbus-sdk repo for more info.
65.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-tabs
- Added
TabsUseCases.RemoveTabsUseCasefor removing an arbitrary list of tabs.
- Added
- browser-state
- Added
TabListAction.RemoveTabsActiontoBrowserAction.
- Added
- feature-downloads
- 🚒 Bug fixed issue #8823 Downloads for data URLs were failing on nightly and beta more details in the Fenix issue.
- 🚒 Bug fixed issue #8847 crash when trying to download a file and switching from a normal to a private mode.
- 🚒 Bug fixed issue #8857 Sometimes it is not possible to dismiss download notifications see Fenix#15527 for more information.
- feature-sitepermissions
- ⚠️ This is a breaking change: The
SitePermissionsFeature’s constructor, now requires a new parameterBrowserStoreobject. - 🌟 Moved sitePermissionsFeature from using session to using kotlin flow for observing content and app permission requests#8554
- ⚠️ This is a breaking change: The
- feature-addons
- 🌟️ Added dividers for sections in add-ons list, see #8703.
- feature-top-sites
- Added
RenameTopSiteUseCaseto rename pinned site entries. #8751
- Added
- browser-engine-gecko-nightly
- Adds optional
PreferredColorSchemeparam toGeckoEngineView - On
GeckoViewinit callcoverUntilFirstPaint()withPreferredColorScheme
- Adds optional
- feature-push
- Added
disableRateLimittoPushConfigto allow for easier debugging of push during development. - Made
AutoPushFeatureaware of thePushConfig.disableRateLimitflag.
- Added
- feature-accounts-push
- Made
FxaPushSupportFeatureaware of thePushConfig.disableRateLimitflag.
- Made
- support-base
- Add
LazyComponent, a wrapper aroundlazythat avoids initializing recursive dependencies until component use.
- Add
64.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Exposes GeckoView
CompositorController#ClearColoras Setting
- Exposes GeckoView
- browser-engine-system
- ⚠️ This is a breaking change: Renames
blackListFiletoblocklistFile. - ⚠️ This is a breaking change: Renames
whiteListFiletosafelistFile.
- ⚠️ This is a breaking change: Renames
- feature-addons
- 🚒 Bug fixed issue #7879 Crash when the default locale is not part of the translations fields of an add-on
- ⚠️ Removed
Addon.translatedName,Addon.translatedSummaryandAddon.translatedDescriptionand addedAddon.translateName(context: Context),Addon.translateSummary(context: Context)andAddon.translateDescription(context: Context)
- concept-engine
- ⚠️ Removed
TrackingCategory.SHIMMED, for user usability reasons, we are going to mark SHIMMED categories as blocked, to follow the same pattern as Firefox desktop for more information see #8769
- ⚠️ Removed
- feature-downloads
- 🚒 Bug fixed issue #8585 create download directory when it doesn’t exists for more information see mozilla-mobile/fenix#15527.
63.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 82.0browser-engine-gecko-beta: GeckoView 83.0browser-engine-gecko-nightly: GeckoView 84.0
- Merge day!
- feature-addons
- 🚒 Bug fixed issue #8681 Fenix was consuming a lot of extra space on disk, when an add-on update requires a new permission, more info can be found here ```
- All components
- Updated to Kotlin 1.4.10 and Coroutines 1.3.9.
-
Updated to Android Gradle plugin 4.0.1 (downstream projects need to update too).
- service-glean
- Glean was upgraded to v33.0.0
- ⚠️ This is a breaking change: Updated to the Android Gradle Plugin v4.0.1 and Gradle 6.5.1. Projects using older versions of these components will need to update in order to use newer versions of the Glean SDK.
- Glean was upgraded to v33.0.0
- browser-toolbar
- Clear tint of tracking protection icon when animatable
- concept-engine
- Added
MediaSessionfor the media session API. - 🌟 Added a new
TrackingCategory.SHIMMEDto indicate that content that would have been blocked has instead been replaced with a shimmed file. See more on Fenix #14071
- Added
- browser-engine-gecko(-nightly)
- Added
GeckoMediaSessionControllerandGeckoMediaSessionDelegatefor the media session API.
- Added
- browser-state
- Added
MediaSessionStatetoSessionState. - Added
MediaSessionActiontoBrowserAction.
- Added
- feature-sitepermissions
- ⚠️ This is a breaking change: The
SitePermissionsRules’s constructor, now requires a new parameterpersistentStorage. - 🌟 Added support for the local storage site permission see #3153.
- ⚠️ This is a breaking change: The
- browser-toolbar
- 🌟 Added API to add a click listener to the iconView.
- feature-prompts
- The repost prompt now has different text and will also dismiss the pull to refresh throbber.
- lib-push-firebase
- Upgrade Firebase Cloud Messaging to v20.3.0.
- ⚠️ This is a breaking change:
RemoteMessageis now non-null inonMessageReceived.
- ⚠️ This is a breaking change:
- Upgrade Firebase Cloud Messaging to v20.3.0.
62.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-state
- ⚠️ This is a breaking change:
DownloadStatedoesn’t support Parcelable anymore.
- ⚠️ This is a breaking change:
- feature-downloads
- 🚒 Bug fixed issue #8585 fixed regression files not been added to the downloads database system.
- 🌟 Added new use cases for removing individual downloads (
removeDownload) and all downloads (removeAllDownloads). - 🌟 Added support for new download GeckoView API.
- service-glean
- Glean was upgraded to v32.4.1
- Update
glean_parserto 1.28.6- BUGFIX: Ensure Kotlin arguments are deterministically ordered
- BUGFIX: Transform ping directory size from bytes to kilobytes before accumulating to
glean.upload.pending_pings_directory_size
- Update
- Glean was upgraded to v32.4.1
- feature-customtabs
- The drawable for the Action button icon in custom tabs is now scaled to 24dp width an 24dp height.
- support-images
- ⚠️ This is a breaking change:
ImageLoaderandImageRequesthave moved to theconcept-basecomponent.
- ⚠️ This is a breaking change:
- browser-session
- browser-toolbar
- 🚒 Bug fixed: Crash IllegalArgumentException BrowserGestureDetector$CustomScrollDetectorListener see more on #8356
- feature-qr
- 🚒 Bug fixed: Pair message show at every scan after you try to login using scan qr see #8537
- feature-addons
- ⚠️ This is a breaking change for call sites that don’t rely on named arguments:
AddonCollectionProvidernow supports configuring a custom collection owner (via AMO user ID or name).AddonCollectionProvidernow supports configuring the sort order of recommended collections, defaulting to sorting descending by popularity ```kotlin val addonCollectionProvider by lazy { AddonCollectionProvider( applicationContext, client, collectionUser = “16314372” collectionName = “myCollection”, sortOption = SortOption.NAME maxCacheAgeInMinutes = DAY_IN_MINUTES ) }
- Temporary add-ons installed via web-ext are no longer displayed as unsupported.
- ⚠️ This is a breaking change for call sites that don’t rely on named arguments:
61.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-session
- Added “undo” functionality via
UndoMiddleware.
- Added “undo” functionality via
- feature-tabs
- Added
TabsUseCases.UndoTabRemovalUseCasefor undoing the removal of tabs.
- Added
- feature-webcompat-reporter
- Added the ability to automatically add a screenshot as well as more technical details when submitting a WebCompat report.
- feature-addons
- Temporary add-ons installed via web-ext are no longer displayed as unsupported.
- 🚒 Bug fixed issue #8267 Devtools permission had wrong translation. ```
- concept-menu
- 🌟 Added
AsyncDrawableMenuIconclass to use icons in a menu that will be loaded later.
- 🌟 Added
60.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- 🚒 Bug fixed issue #8431 update
Session.trackerBlockingEnabledandSessionState#trackingProtection#enabledwith the initial tracking protection state.
- 🚒 Bug fixed issue #8431 update
- feature-tabs
- Added
TabsUseCases.removeNormalTabs()andTabsUseCases.removePrivateTabs(). - ⚠️ This is a breaking change: Removed
TabsUseCases.removeAllTabsOfType().
- Added
- browser-session
- Added
SessionManager.removeNormalSessions()andSessionManager.removePrivateSessions().
- Added
- feature-downloads
- 🚒 Bug fixed issue #8456 Crash SQLiteConstraintException UNIQUE constraint failed: downloads.id (code 1555).
- service-glean
- Glean was upgraded to v32.4.0
- Allow using quantity metric type outside of Gecko (#1198)
- Update
glean_parserto 1.28.5- The
SUPERFLUOUS_NO_LINTwarning has been removed from the glinter. It likely did more harm than good, and makes it hard to make metrics.yaml files that pass across different versions ofglean_parser. - Expired metrics will now produce a linter warning,
EXPIRED_METRIC. - Expiry dates that are more than 730 days (~2 years) in the future will produce a linter warning,
EXPIRATION_DATE_TOO_FAR. - Allow using the Quantity metric type outside of Gecko.
- New parser configs
custom_is_expiredandcustom_validate_expiresadded. These are both functions that take the expires value of the metric and return a bool. (SeeMetric.is_expiredandMetric.validate_expires). These will allow FOG to provide custom validation for its version-basedexpiresvalues.
- The
- Add a limit of 250 pending ping files. (#1217).
- Don’t retry the ping uploader when waiting, sleep instead. This avoids a never-ending increase of the backoff time (#1217).
- Glean was upgraded to v32.4.0
59.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-downloads
- 🚒 Bug fixed issue #8354 Do not restart FAILED downloads.
- browser-tabstray
- Removed the
BrowserTabsTraythat was deprecated in previous releases.
- Removed the
- service-telemetry
- This library has been removed. Please use
service-gleaninstead.
- This library has been removed. Please use
- service-glean
- Glean was upgraded to v32.3.2
- Track the size of the database file at startup (#1141).
- Submitting a ping with upload disabled no longer shows an error message (#1201).
- BUGFIX: scan the pending pings directories after dealing with upload status on initialization. This is important, because in case upload is disabled we delete any outstanding non-deletion ping file, and if we scan the pending pings folder before doing that we may end up sending pings that should have been discarded. (#1205)
- Move logic to limit the number of retries on ping uploading “recoverable failures” to glean-core. (#1120)
- The functionality to limit the number of retries in these cases was introduced to the Glean SDK in
v31.1.0. The work done now was to move that logic to the glean-core in order to avoid code duplication throughout the language bindings. - Update
glean_parsertov1.28.3- BUGFIX: Generate valid C# code when using Labeled metric types.
- BUGFIX: Support
HashSetandDictionaryin the C# generated code.
- Add a 10MB quota to the pending pings storage. (#1100)
- Handle ping registration off the main thread. This removes a potential blocking call (#1132).
- Glean was upgraded to v32.3.2
- feature-syncedtabs
- Added support for indicators to synced tabs
AwesomeBarsuggestions.
- Added support for indicators to synced tabs
- feature-addons
- ⚠️ This is a breaking change: The
Addon.translatePermissionsnow requires acontextobject and returns a list of localized strings instead of a list of id string resources. - 🚒 Bug fixed issue #8323 Add-on permission dialog does not prompt for host permissions.
- ⚠️ This is a breaking change: The
58.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-recentlyclosed
- Added a new [RecentlyClosedTabsStorage] and a [RecentlyClosedMiddleware] to maintain a list of restorable recently closed tabs.
57.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-search
- ⚠️ This is a breaking change:
SearchFeature.performSearchnow takes a second parameter. BrowserStoreSearchAdapterandSearchFeaturecan now take atabIdparameter.
- ⚠️ This is a breaking change:
- feature-top-sites
- ⚠️ This is a breaking change: Renames
TopSiteStoragetoPinnedSitesStorage. - ⚠️ This is a breaking change: Renames
TopSiteDaotoPinnedSiteDao. - ⚠️ This is a breaking change: Renames
TopSiteEntitytoPinnedSiteEntity. - ⚠️ This is a breaking change: Replaces
TopSiteinterface with a new genericTopSitedata class. - Implements TopSitesFeature based on the RFC 0006-top-sites-feature.md.
- Downloads, redirect targets, reloads, embedded resources, and frames are no longer considered for inclusion in top sites. Please see this Application Services PR for more details.
- ⚠️ This is a breaking change: Renames
- lib-push-firebase
- Removed non-essential dependency on
com.google.firebase:firebase-core.
- Removed non-essential dependency on
- lib-crash
- Crash report timestamp is now set to when the crash occurred.
- When breadcrumbs limit is reached, oldest breadcrumbs are dropped.
- feature-toolbar
- Added
ContainerToolbarFeatureto update the toolbar with the container page action whenever the selected tab changes.
- Added
- browser-state
- Added
LastAccessMiddlewareto dispatchTabSessionAction.UpdateLastAccessActionwhen a tab is selected.
- Added
- feature-prompts
- Replaced generic icon in
LoginDialogFragmentwith site icon (keep the generic one as fallback)
- Replaced generic icon in
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- 🚒 Bug fixed issue #8240 Crash when dismissing Share dialog.
- feature-downloads
- ⚠️ This is a breaking change:
AndroidDownloadManager.downloadreturns aStrings,AndroidDownloadManager.tryAgainrequires aStringsidparameter. - ⚠️ This is a breaking change:
ConsumeDownloadActionrequires aStringsidparameter. - ⚠️ This is a breaking change:
DownloadManager#onDownloadStoppedrequires aStrings(DownloadState, Long, Status) -> Unit. - ⚠️ This is a breaking change:
DownloadsUseCases.invokerequires anStringsdownloadIdparameter. - ⚠️ This is a breaking change:
DownloadState.idhas changed its type fromLongtoString. - ⚠️ This is a breaking change:
BrowserState.downloadshas changed it’s type fromMap<Long, DownloadState>toMap<String, DownloadState>. - 🌟 Added support for persisting/restoring downloads see issue #7762.
- 🌟 Added
DownloadStoragefor querying stored download metadata. - 🚒 Bug issue #8190 ArithmeticException: divide by zero in Download notification.
- 🚒 Bug issue #8363 IllegalStateException: Not allowed to start service Intent.
- ⚠️ This is a breaking change:
- ui-widgets
- 🆕 New VerticalSwipeRefreshLayout that comes to resolve many of the issues of the platform SwipeRefreshLayout and filters out other gestures than swipe down/up.
56.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-prompts
- 🌟 Added optional
LoginPickerViewandonManageLoginsparams toPromptFeaturefor a new [LoginPicker] to display a view for selecting one of multiple matching saved logins to fill into a site.
- 🌟 Added optional
- concept-tabstray
- 🌟 Added
onTabsUpdatedtoTabsTray.Observerfor notifying observers when one or more tabs have been added/removed.
- 🌟 Added
- browser-tabstray
- 🌟 Added the convenience function
TabsAdapter.doOnTabsUpdatedfor performing actions only once when the tabs are updated.
- 🌟 Added the convenience function
- feature-app-links
- 🚒 Bug fixed issue #8169 App links dialog will now call
showNowto immediately show the dialog.
- 🚒 Bug fixed issue #8169 App links dialog will now call
- browser-thumbnails
- 🌟 Exposed
BrowserThumbnail.requestThumbnailAPI for consumers.
- 🌟 Exposed
- browser-engine-gecko-nightly
- 🌟 Added
onPaintStatusResetwhen a session’s paint has been reset. - 🚒 Bug fixed issue #8123 Fix history title crash.
- 🌟 Added
- **browser-engine-gecko-beta and **browser-engine-gecko **
- 🚒 Bug fixed issue #8123 Fix history title crash.
- concept-menu
- 🌟 Added
MenuStyleclass to set menu background and width.
- 🌟 Added
- browser-menu
- 🌟 Added
styleparameter toBrowserMenu.show. - 🚒 Bug fixed issue #8223: Fix compound drawable position for RTL.
- 🌟 Added
- browser-menu2
- 🌟 Added
styleparameter toBrowserMenuController.
- 🌟 Added
- ui-widgets
- 🌟 Added widget for showing a website in a list, such as in bookmarks or history. The
mozac_primary_text_colorandmozac_caption_text_colorattributes should be set.
- 🌟 Added widget for showing a website in a list, such as in bookmarks or history. The
- browser-icons
- 🌟 Expose
BrowserIcons.clear()as a public API to remove all saved data from disk and memory caches.
- 🌟 Expose
- feature-downloads
- 🚒 Bug fixed issue #8202: Download’s ui were always showing failed status.
- feature-pwa
- ⚠️ This is a breaking change: The
SiteControlsBuilderinterface has changed.buildNotificationnow takes two parameters:ContextandNotification.Builder. WebAppSiteControlsFeaturenow supports displaying monochrome icons.
- ⚠️ This is a breaking change: The
- service-glean
- Glean was updated to v32.1.1
- Support installing glean_parser in offline mode.
- Fix a startup crash on some Android 8 (SDK=25) devices, due to a bug in the Java compiler.
- Glean was updated to v32.1.1
- feature-readerview
- 🚒 Bug fixed issue #8208: Add a link to the original page in Reader Mode.
- feature-addons
- 🌟 Feature issue #8200: “users” in add-ons manager should be renamed to “reviews”.
55.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Fixed issue #7983, crash when a file name wasn’t provided when uploading a file.
- service-glean
- Glean was updated to v32.1.0
- The rate limiter now allows 15, rather than 10, pings per minute.
- Glean was updated to v32.1.0
- storage-sync
- Fixed issue #8011 PlacesConnectionBusy: Error executing SQL: database is locked.
- feature-app-links
- Fixed issue #8122 App link redirecting to Play Store, rather than to installed app.
54.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- concept-menu
- Added
orientationparameter toMenuController.show. Passing null (the default) tells the menu to determine the best orientation itself.
- Added
- browser-menu2
- ⚠️ This is a breaking change:
BrowserMenuController.showno longer supports the width parameter.
- ⚠️ This is a breaking change:
- feature-app-links
- Added
loadUrlUseCaseas a parameter forAppLinksFeature. This is used to load the URL if the user decides to not launch the link in the external app.
- Added
- concept-awesomebar
- Added
AwesomeBar.setOnEditSuggestionListener()to register a callback when a search term is selected to be edited further.
- Added
- browser-toolbar
BrowserToolbar.setSearchTerms()can now be called duringState.EDIT
- browser-awesomebar
- The view of
DefaultSuggestionViewHoldernow contains a button to select a search term for further editing. Clicking it will invoke the callback registered inBrowserAwesomeBar.setOnEditSuggestionListener()
- The view of
- browser-menu
- ⚠️ This is a breaking change: Removed
SimpleBrowserMenuHighlightableItem.itemType. Use a WeakMap instead if you need to attach private data.
- ⚠️ This is a breaking change: Removed
- browser-menu
- For a11y,
BrowserMenuImageSwitchnow highlights the entire row, not just the switch
- For a11y,
- concept-engine
- Added the
cookiePurgingproperty toTrackingProtectionPolicyandTrackingProtectionPolicyForSessionTypesconstructors to enable/disable cookie purging feature read more about it here.
- Added the
- browser-engine-nightly
- Added
cookiePurgingtoTrackingProtectionPolicy.toContentBlockingSetting.
- Added
- feature-addons
- ⚠️ This is a breaking change: Unified addons icons design with the one of favicons used all throughout the app. Specifying a different background is not possible anymore.
53.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko: GeckoView 79.0browser-engine-gecko-beta: GeckoView 80.0browser-engine-gecko-nightly: GeckoView 81.0
- Merge day!
- feature-downloads
- ⚠️ This is a breaking change: Removed the following properties from
DownloadJobStateinAbstractFetchDownloadServiceand added toDownloadState:DownloadJobStatus(now renamed toDownloadStatus) andcurrentBytesCopied. These properties can now be read fromDownloadState. - ⚠️ This is a breaking change: Removed the enum class
DownloadJobStatusfromAbstractFetchDownloadServiceand moved intoDownloadState, and removed theACTIVEstate while introducing two new states calledINITIATEDandDOWNLOADING. - ⚠️ This is a breaking change: Renamed the following data classes from
BrowserAction:QueuedDownloadActiontoAddDownloadAction,RemoveQueuedDownloadActiontoRemoveDownloadAction,RemoveAllQueuedDownloadsActiontoRemoveAllDownloadsAction, andUpdateQueuedDownloadActiontoUpdateDownloadAction. - ⚠️ This is a breaking change: Renamed
queuedDownloadsfromBrowserStatetodownloads. - Removed automatic deletion of
downloadsupon a completed download. - 🆕 Added support for choosing a third party app to perform a download.
- ⚠️ This is a breaking change: Removed the following properties from
- browser-menu
- ⚠️ This is a breaking change:
BrowserMenuItemToolbar.Button.longClickListeneris now nullable and defaults to null.
- ⚠️ This is a breaking change:
- concept-menu
- Added
SmallMenuCandidate.onLongClickto handle long click of row menu buttons.
- Added
- service-glean
- Glean was updated to v31.6.0
- Limit ping request body size to 1MB. (#1098)
- BUGFIX: Require activities executed via
GleanDebugViewto be exported.
- Glean was updated to v31.6.0
- feature-downloads
- ⚠️ This is a breaking change:
DownloadsFeatureis no longer accepting a custom download dialog but supporting customizations via thepromptStylingparameter. Thedialogparameter was unused so far. If it’s required in the future it will need to be replaced with a lambda or factory so that the feature can create instances of the dialog itself, as needed.
- ⚠️ This is a breaking change:
- feature-webcompat-reporter
- Added a second parameter to the
installmethod:productNameallows to provide a unique product name per usage for automatic product-labelling on webcompat.com
- Added a second parameter to the
- feature-contextmenu
- Do not show the “Download link” option for html URLs.
- Uses a speculative check, may not work in all cases.
- ui-widgets
- Added shared ImageView style for favicons. The
mozac_widget_favicon_background_colorandmozac_widget_favicon_border_colorattributes should be set, thenstyle="@style/Mozac.Widgets.Favicon"can be added to an ImageView.
- Added shared ImageView style for favicons. The
52.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-icons
- Added
BrowserIcons.clear()to remove all saved data from disk and memory caches.
- Added
- support-images
- ⚠️ This is a breaking change: Removed
ImageLoader.loadIntoView(view: ImageView, id: String)extension function.
- ⚠️ This is a breaking change: Removed
- service-glean
- Glean was updated to v31.6.0
- Implement ping tagging (i.e. the
X-Source-Tagsheader) (#1074). Note that this is not yet implemented for iOS. - String values that are too long now record
invalid_overflowrather thaninvalid_valuethrough the Glean error reporting mechanism. This affects the string, event and string list metrics. metrics.yamlfiles now support adata_sensitivityfield to all metrics for specifying the type of data collected in the field.- Allow defining which
Activityto run next when using theGleanDebugActivity. - Implement JWE metric type (#1073, #1062).
- DEPRECATION:
getUploadEnabledis deprecated (respectivelyget_upload_enabledin Python) (#1046)- Due to Glean’s asynchronous initialization the return value can be incorrect. Applications should not rely on Glean’s internal state. Upload enabled status should be tracked by the application and communicated to Glean if it changes. Note: The method was removed from the C# and Python implementation.
- Update
glean_parsertov1.28.1- The
glean_parserlinting was leading consumers astray by incorrectly suggesting thatdeletion-requestbe insteaddeletion_requestwhen used forsend_in_pings. This was causing metrics intended for thedeletion-requestping to not be included when it was collected and submitted. Consumers that are sending metrics in thedeletion-requestping will need to update thesend_in_pingsvalue in their metrics.yaml to correct this. - Fixes a bug in doc rendering.
- The
- Implement ping tagging (i.e. the
- Glean was updated to v31.6.0
- feature-syncedtabs
- ⚠️ This is a breaking change: Adds context to the constructor of
SyncedTabsFeature.
- ⚠️ This is a breaking change: Adds context to the constructor of
- browser-tabstray
- ⚠️ This is a breaking change: The
BrowserTabsTrayis now deprecated. Using aRecyclerViewdirectly is now recommended. - ⚠️ This is a breaking change:
ViewHolderProviderno longer has a second param. - ⚠️ This is a breaking change:
TabsAdapterhas astylingfieldTabsTrayStyling.
- ⚠️ This is a breaking change: The
- browser-menu2
- Added new component to replace browser-menu. menu2 uses immutable data types and better integrates with
BrowserStore.
- Added new component to replace browser-menu. menu2 uses immutable data types and better integrates with
- concept-menu
- Added concept component to contain data classes for menu items and interfaces for menu controllers.
- browser-toolbar
- Added support for the new
MenuControllerinterface for menu2. When a menu controller is added to a toolbar, it will be used in place of theBrowserMenuBuilder. The builder will supply items to theMenuControllerininvalidateMenuif it is kept.
- Added support for the new
- feature-containers
- Adds a
ContainerMiddlewarethat connects container browser actions with theContainerStorage.
- Adds a
- feature-app-links
- ⚠️ This is a breaking change: add
lastUrias a parameter forAppLinksInterceptor.
- ⚠️ This is a breaking change: add
- concept-engine, browser-engine-*
- ⚠️ This is a breaking change: add
lastUrias a parameter forRequestInterceptor.onLoadRequest.
- ⚠️ This is a breaking change: add
- support-ktx
- Added
Vibrator.vibrateOneShotcompat method.
- Added
51.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-session
- ⚠️ This is a breaking change: Removed the following properties from
Session:findResults,hitResult,fullScreenModeandlayoutInDisplayCutoutMode. The values still exist inBrowserStateand can be read from there.
- ⚠️ This is a breaking change: Removed the following properties from
- support-images
- ⚠️ This is a breaking change: Removed
ImageRequestin favor ofImageSaveRequestandImageLoadRequestto separate the information passed to methods that load and save images. - ⚠️ This is a breaking change:
ImageLoader.loadIntoView()now takes anImageSaveRequestinstead of anImageRequest.
- ⚠️ This is a breaking change: Removed
- browser-thumbnails
- ⚠️ This is a breaking change:
ThumbnailStorage.saveThumbnail()now takes anImageSaveRequestinstead of anImageRequest. - ⚠️ This is a breaking change:
ThumbnailStorage.loadThumbnail()now takes anImageLoadRequestinstead of anImageRequest.
- ⚠️ This is a breaking change:
- feature-addons
- AddonManager now receives a
WebExtensionRuntimeinstead of anEngine. This has no impact to consumers offeature-addonsasEnginealready implementsWebExtensionRuntime.
- AddonManager now receives a
- browser-session
- ⚠️ This is a breaking change:
Session.Sourcewas moved to browser-state and is nowSessionState.Source. No change is required other than fixing imports.
- ⚠️ This is a breaking change:
- browser-engine-beta
- Added
TrackingProtectionPolicy.toContentBlockingSettingextension methods to convert a policy to GeckoView’sContentBlocking.Setting.
- Added
- browser-engine-nightly
- Added
TrackingProtectionPolicy.toContentBlockingSettingextension methods to convert a policy to GeckoView’sContentBlocking.Setting. - Added checks to not apply the same policy twice if they are the same as already on the engine.
- Added
- feature-pwa
- Added
ManifestStorage.loadShareableManifeststo get manifest with aWebAppManifest.ShareTarget.
- Added
- support-ktx
- Add
Activity.reportFullyDrawnSafe, a function to callActivity.reportFullyDrawnwhile catching crashes under some circumstances.
- Add
50.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-session
- Added
SessionFeature.release(): Calling this method stops the feature from rendering sessions on theEngineView(until explicitly started again) and releases an already rendering session from theEngineView. - Added
SessionUseCases.goToHistoryIndexto allow consumers to jump to a specific index in a session’s history. - Added
flagsparameter toReloadUrlUseCase.
- Added
- support-ktx
- Adds
Bundle.contentEqualsfunction to check if two bundles are equal.
- Adds
- concept-engine
- Added
EngineSession.goToHistoryIndexto jump to a specific index in a session’s history. - Adds
flagsparameter toreload.
- Added
- service-glean
- Glean was updated to v31.4.1
- Remove locale from baseline ping. (1609968, #1016)
- Persist X-Debug-ID header on store ping. (1605097, #1042)
- BUGFIX: raise an error if Glean is initialized with an empty string as the
application_id(#1043). - Enable debugging features through environment variables. (#1058)
- BUGFIX: fix
int32toErrorTypemapping. TheInvalidOverflowhad a value mismatch between glean-core and the bindings. This would only be a problem in unit tests. (#1063) - Enable propagating options to the main product Activity when using the
GleanDebugActivity. - BUGFIX: Fix the metrics ping collection for startup pings such as
reason=upgradeto occur in the same thread/task as Glean initialize. Otherwise, it gets collected after the application lifetime metrics are cleared such as experiments that should be in the ping. (#1069)
- Glean was updated to v31.4.1
- service-location
LocationService.hasRegionCached()is introduced to query if the region is already cached and a long running operation to fetch the region is not needed.
- browser-state
- Added map of
SessionState.contextIdand their respectiveContainerStateinBrowserStateto track the state of a container.
- Added map of
- browser-menu
- Added an optional
longClickListenerparameter toBrowserMenuItemToolbar.ButtonandBrowserMenuItemToolbar.TwoStateButtonto handle long click events.
- Added an optional
49.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-session
- ⚠️ This is a breaking change:
FullScreenFeature,SettingsUseCases,SwipeRefreshFeatureandSessionFeaturenow require aBrowserStoreinstead of aSessionManager. - ⚠️ This is a breaking change:
SessionFeaturenow requires anEngineSessionUseCasesinstance. - ⚠️ This is a breaking change:
TrackingProtectionUseCasesnow requires aBrowserStoreinstead of aSessionManager.
- ⚠️ This is a breaking change:
- feature-tabs
- ⚠️ This is a breaking change:
TabsUseCases.AddNewTabUseCaseandTabsUseCases.AddNewPrivateTabUseCasenow require aBrowserStoreinstead of aSessionManager.
- ⚠️ This is a breaking change:
- browser-session
SessionManager.getEngineSession()is now deprecated. From now on please readEngineSessioninstances of tabs fromBrowserState.
- service-sync-logins
- ⚠️ This is a breaking change: removed
isAutofillEnabledlambda fromGeckoLoginStorageDelegatebecause setting has been exposed through GV
- ⚠️ This is a breaking change: removed
- concept-engine
- Adds
profilerproperty withisProfilerActive,getProfilerTimeandaddMarkerFirefox Profiler APIs. These will allow to add profiler markers.
- Adds
- support-ktx
- Adds
Resources.getSpannedto format strings using style spans. - Adds
Resources.localeto get the corresponding locale on all SDK versions.
- Adds
- feature-logins
- 🆕 New component for logins related features.
- Adds
LoginExceptionStoragefor storing and accessing save login prompt exceptions.
- feature-prompts
- Added an optional
LoginExceptionsparam that a storage layer can implement to check for exceptions before showing a save login prompt.
- Added an optional
48.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-intent
- ⚠️ This is a breaking change:
IntentProcessor.processis not a suspend function anymore.
- ⚠️ This is a breaking change:
- feature-search
- Adds optional
parentSessionto attach to a new search session inSearchUseCases
- Adds optional
- feature-contextmenu
- Add “Share image” to context menu.
- feature-session
- ⚠️ This is a breaking change:
AbstractCustomTabsServicenow requiresCustomTabsServiceStore. - ⚠️ This is a breaking change:
httpClientandapiKeyhave been removed fromAbstractCustomTabsService. They should be replaced with buildingDigitalAssetLinksApiand passing it torelationChecker. - Added
relationCheckerto customize Digital Asset Links handling.
- ⚠️ This is a breaking change:
- feature-pwa
- ⚠️ This is a breaking change:
TrustedWebActivityIntentProcessornow requires aRelationCheckerinstead ofhttpClientandapiKey. - ⚠️ This is a breaking change: Removed unused API from
WebAppShortcutManager: uninstallShortcuts WebAppShortcutManagergained a new API: recentlyUsedWebAppsCount. Allows counting recently used web apps.
- ⚠️ This is a breaking change:
- browser-thumbnails
- The
ThumbnailMiddlewaredeletes the tab’s thumbnail from the storage when the sessions are removed. BrowserThumbnailswaits for thefirstContentfulPaintbefore requesting a screenshot.
- The
- feature-tabs
- ⚠️ This is a breaking change: Removes unused
ThumbnailsUseCasessince we now load thumbnails viaThumbnailLoader. See #7313. - ⚠️ This is a breaking change: Removes
ThumbnailsUseCasesas a parameter inTabsFeatureandTabsTrayPresenter. - ⚠️ This is a breaking change: Change the id parameter to accept a new
ImageRequestinImageLoader, which allows consumers ofThumbnailLoaderto specify the preferred image size along with the id when loading an image.
- ⚠️ This is a breaking change: Removes unused
- feature-privatemode
- Add
PrivateNotificationFeatureto display a notification when private sessions are open.
- Add
- service-glean
- Glean was updated to v31.2.3
- BUGFIX: Correctly format the date and time in the Date header
- Feature: Add rate limiting capabilities to the upload manager
- BUGFIX: baseline pings with reason “dirty startup” are no longer sent if Glean did not full initialize in the previous run
- BUGFIX: Compile dependencies with
NDEBUGto avoid linking unavailable symbols. This fixes a crash due to a missingstderrsymbol on older Android. - BUGFIX: Fix mismatch in events keys and values by using glean_parser version 1.23.0.
- Glean was updated to v31.2.3
- feature-webnotifications
WebNotificationFeaturechecks the site permissions first before showing a notification.- Notifications with a long text body are now expandable to show the full text.
- feature-addons
- Add
Addon.createdAtDateandAddon.updatedAtDateextensions to getAddon.createdAtandAddon.updatedAtas aDate.
- Add
47.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- service-digitalassetlinks
- Added new component for listing and checking Digital Asset Links. Contains a local checker and a version that uses Google’s API.
46.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- concept-engine
- Exposed
GeckoRuntimeSettings#setLoginAutofillEnabledto control whether login forms should be automatically filled in suitable situations
- Exposed
- browser-icons
- Fixed issue #7142
- feature-downloads
- On devices older than Q we were not adding downloads to the system download database for more information see #7230
- browser-storage-sync
- Added
getTopFrecentSitestoPlacesHistoryStorage, which returns a list of the top frecent site infos sorted by most to least frecent.
- Added
- local development
- Enable local Gradle Build Cache to speed-up local builds. Build cache is located in
.build-cache/, clear it if you run into strange problems and please file an issue.
- Enable local Gradle Build Cache to speed-up local builds. Build cache is located in
- support-rustlog
RustLog.enablenow takes an optional [CrashReporting] instance which is used to submit error-level log messages asRustErrorExceptions.
- feature-push
- Fixed a bug where we do not verify subscriptions on first attempt.
- feature-prompts
- Select a regular tab first if that exists before checking custom tabs.
- feature-session
- ⚠️ This is a breaking change:
SettingsUseCasesnow requires an engine reference, to clear speculative sessions if engine settings change. - ⚠️ This is a breaking change:
PictureInPictureFeaturenow takesBrowserStoreinstead ofSessionManager. - ⚠️ This is a breaking change: The
pipChangedcallback has been removed. You should now observeContentState.pictureInPictureEnabledinstead.
- ⚠️ This is a breaking change:
- feature-containers
- Adds a new storage component to store containers (contextual identities) in a Room database and provides the necessary APIs to get, add and remove containers.
- feature-webnotifications
- Adds support for displaying the
sourceURL the WebNotification originated from.
- Adds support for displaying the
- feature-tabs
- ⚠️ This is a breaking change:
TabsFeaturenow supports providing custom use case implementations. Therefore, an instance ofSelectTabUseCaseandRemoveTabUseCasehave to be provided.
- ⚠️ This is a breaking change:
- support-ktx
- Added
Uri.sameHostAsto check if two Uris have the same host (both http/https, both same domain). - Added
Uri.sameOriginAsto check if two Uris have the same origin (same host, same port). - Added
Uri.isInScopeto check if a Uri is within one of the given scopes.
- Added
- browser-state
- Added
ContentState.pictureInPictureEnabledto track if Picture in Picture mode is in use.
- Added
- feature-pwa
- ⚠️ This is a breaking change:
WebAppHideToolbarFeaturenow takesBrowserStoreinstead ofSessionManager.trustedScopesis now derived fromCustomTabsServiceStoreandWebAppManifest.setToolbarVisibilityshould now be used set the visibility of the toolbar. - ⚠️ This is a breaking change:
onToolbarVisibilityChangehas been removed. You should now observeBrowserStoreinstead.
- ⚠️ This is a breaking change:
- feature-tab-collections:
- ⚠️ This is a breaking change:
TabCollectionStorage.getCollectionsnow returnsFlowinstead ofLiveData. UseFlow.asLiveDatato convert the result into aLiveDataagain.
- ⚠️ This is a breaking change:
- feature-top-sites:
- ⚠️ This is a breaking change:
TopSiteStorage.getTopSitesnow returnsFlowinstead ofLiveData. UseFlow.asLiveDatato convert the result into aLiveDataagain.
- ⚠️ This is a breaking change:
- service-glean
- Glean was updated to v31.1.1
- Smaller binary library after a big dependency was dropped
- Limit the number of upload retries in all implementations
- Glean was updated to v31.1.1
- support-images:
- Added
ImageLoaderAPI for loading images directly into anImageView.
- Added
- browser-tabstray:
- ⚠️ This is a breaking change:
TabsAdapterandDefaultTabViewHoldertake an optionalImageLoaderfor loading browser thumbnails. - Fixed a bug in
TabsThumbnailViewwhere thescaleFactorwas not applied all the time when expected.
- ⚠️ This is a breaking change:
- browser-menu:
- DynamicWidthRecyclerView will still be able to have a dynamic width between xml set minWidth and maxWidth attributes but we’ll now enforce the following:
- minimum width 112 dp
- maximum width - screen width minus a 48dp tappable “exit area”
- DynamicWidthRecyclerView will still be able to have a dynamic width between xml set minWidth and maxWidth attributes but we’ll now enforce the following:
45.0.0
- ⚠️ This release can’t be used due to a bad build.
44.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko-nightly
- Added support for onbeforeunload prompt
- feature-tabs
- Added an optional
ThumbnailsUseCasestoTabsFeatureandTabsTrayPresenterfor loading a tab’s thumbnail.
- Added an optional
- browser-thumbnails
- Adds
LoadThumbnailUseCaseinThumbnailsUseCasesfor loading the thumbnail of a tab. - Adds
ThumbnailStorageas a storage layer for handling saving and loading a thumbnail from the disk cache.
- Adds
- feature-push
- Adds the
getSubscriptioncall to check if a subscription exists.
- Adds the
- browser-engine-gecko-*
- Fixes GeckoWebPushDelegate to gracefully return when a subscription is not available.
- feature-session
- Removes unused
ThumbnailsFeaturesince this has been refactored into its own browser-thumbnails component in #6827.
- Removes unused
- browser-state
- Adds
BrowserState.getNormalOrPrivateTabs(private: Boolean)to getnormalTabsorprivateTabsbased on a boolean condition.
- Adds
- support-utils
URLStringUtils.isURLLikeStrict, deprecated in 40.0.0, was now removed due to performance issues. Use the less strict and much fasterisURLLikeinstead or customize based on:lib-publicsuffixlist.
- support-ktx
String.isUrlStrict, deprecated in 40.0.0, was now removed due to performance issues. Use the less strictisURLinstead or customize based on:lib-publicsuffixlist.
- service-glean
- Glean was updated to v31.0.2
- Provide a new upload mechanism, now driven by internals. This has no impact to consumers of service-glean.
- Automatically Gzip-compress ping payloads before upload
- Upgrade
glean_parserto v1.22.0
- Glean was updated to v31.0.2
43.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-downloads
- ⚠️ This is a breaking change: DownloadManager and DownloadService are now using the browser store to keep track of queued downloads. Therefore, an instance of the store needs to be provided when constructing manager and service. There’s also a new DownloadMiddleware which needs to be provided to the store.
val store by lazy { BrowserStore(middleware = listOf( MediaMiddleware(applicationContext, MediaService::class.java), DownloadMiddleware(applicationContext, DownloadService::class.java), ... )) } ) val feature = DownloadsFeature( requireContext().applicationContext, store = components.store, useCases = components.downloadsUseCases, fragmentManager = childFragmentManager, onDownloadStopped = { download, id, status -> Logger.debug("Download done. ID#$id $download with status $status") }, downloadManager = FetchDownloadManager( requireContext().applicationContext, components.store, // Store needs to be provided now DownloadService::class ), tabId = sessionId, onNeedToRequestPermissions = { permissions -> requestPermissions(permissions, REQUEST_CODE_DOWNLOAD_PERMISSIONS) } ) class DownloadService : AbstractFetchDownloadService() { override val httpClient by lazy { components.core.client } override val store: BrowserStore by lazy { components.core.store } // Store needs to be provided now } - feature-tabs
- Makes
TabsAdapteropen to subclassing.
- Makes
- feature-intent
- Select existing tab by url when trying to open a new tab in
TabIntentProcessor
- Select existing tab by url when trying to open a new tab in
- feature-media
- Adds
MediaFullscreenOrientationFeatureto autorotate activity while in fullscreen based on media aspect ratio.
- Adds
- support-images
- ⚠️ This is a breaking change: Extracts
AndroidIconDecoder,IconDecoderandDesiredSizeout ofbrowser-iconsinto a new componentsupport-images, which provides helpers for handling images.AndroidIconDecoderandIconDecoderare renamed toAndroidImageDecoderandImageDecoderinsupport-images.
- ⚠️ This is a breaking change: Extracts
- support-utils
URLStringUtils.isURLLike()will now consider URLs containing double dash (“–”) as valid.
- browser-thumbnails
- Adds
ThumbnailDiskCachefor storing and restoring thumbnail bitmaps into a disk cache.
- Adds
- concept-engine
- Adds
onHistoryStateChangedmethod and correspondingHistoryItemdata class.
- Adds
- browser-state
- Adds
historytoContentStateto check the back and forward history list.
- Adds
- service-glean
- BUGFIX: Fix a race condition that leads to a
ConcurrentModificationException. Bug 1635865
- BUGFIX: Fix a race condition that leads to a
- browser-menu
- Added
AbstractParentBrowserMenuItemandParentBrowserMenuItemfor handling nested sub menu items on view click. - ⚠️ This is a breaking change:
WebExtensionBrowserMenuBuildernow returns as a sub menu entry for add-ons. The sub menu also contains an access entry for Add-ons Manager, for whichonAddonsManagerTappedneeds to be passed in the constructor.
- Added
- feature-syncedtabs
- When the SyncedTabsFeature is started it syncs the devices and account first.
42.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-state
- Adds
firstContentfulPainttoContentStateto know if first contentful paint has happened.
- Adds
- service-glean
- ⚠️ This is a breaking change: Glean’s configuration now requires explicitly setting an http client. Users need to pass one at construction.
A default
lib-fetch-httpurlconnectionimplementation is available. Add it to the configuration object like this:val config = Configuration(httpClient = ConceptFetchHttpUploader(lazy { HttpURLConnectionClient() as Client })). See PR #6875 for details and full code examples.
- ⚠️ This is a breaking change: Glean’s configuration now requires explicitly setting an http client. Users need to pass one at construction.
A default
- browser-store
- Added
webAppManifestproperty toContentState.
- Added
- feature-qr
- Added
CustomViewFinder, aViewthat shows a ViewFinder positioned in center of the camera view and draws an Overlay - Added optional String resource
scanMessageparam toQrFeaturefor adding a message below the viewfinder
- Added
- service-experiments
- ⚠️ This is a breaking change: Mako’s configuration now requires explicitly setting an http client. Users need to pass one at construction.
- feature-prompts
- Added
mozacPromptLoginEditTextCursorColorattribute to be able to change cursor color of TextInputEditTexts frommozac_feature_prompt_login_prompt.
- Added
41.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-tabs
- Fixed issue #6907. Uses MediaState when mapping BrowserState to tabs.
- concept-tabstray
- For issue #6907. Adds
Media.StatetoTab
- For issue #6907. Adds
- feature-session
- ⚠️ This is a breaking change: Added optional
crashReportingparam to [PictureInPictureFeature] so we can record caught exceptions.
- ⚠️ This is a breaking change: Added optional
- feature-downloads
- Fixed issue #6881.
- feature-addons
- Added optional
addonAllowPrivateBrowsingLabelDrawableResDrawableRes parameter toAddonPermissionsAdapter.Styleconstructor to allow the clients to add their own drawable. This is used to clearly label the WebExtensions that run in private browsing.
- Added optional
- browser-menu
- BrowserMenu will now support dynamic width based on two new attributes:
mozac_browser_menu_width_minandmozac_browser_menu_width_max.
- BrowserMenu will now support dynamic width based on two new attributes:
- browser-tabstray
- Added optional
itemDecorationDividerItemDecoration parameter toBrowserTabsTrayconstructor to allow the clients to add their own dividers. This is used to ensure setting divider item decoration after setAdapter() is called.
- Added optional
- service-glean
- Glean was updated to v29.1.0
- ⚠️ This is a breaking change: glinter errors found during code generation will now return an error code.
- The minimum and maximum values of a timing distribution can now be controlled by the
time_unitparameter. See bug 1630997 for more details.
- Glean was updated to v29.1.0
- feature-accounts
- ⚠️ This is a breaking change: Refactored component to use
browser-stateinstead ofbrowser-session. TheFxaWebChannelFeaturenow requires aBrowserStoreinstance instead of aSessionManager.
- ⚠️ This is a breaking change: Refactored component to use
- lib-push-fcm, lib-push-adm, concept-push
- Allow nullable encoding values in push messsages. If they are null, we attempt to use
aes128gcmfor 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 use
browser-stateinstead ofbrowser-session. It is now required to pass aBrowserStoreinstance (instead ofSessionManager) toBrowserThumnails.
- ⚠️ This is a breaking change: Migrated this component to use
40.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-tabstray
- Converts
TabViewHolderto an abstract class withDefaultTabViewHolderas the default implementation. - Replaces
layoutIdwithviewHolderProviderin theTabsAdapterfor allowing tab customization.
- Converts
- concept-engine
- Adds Fingerprinter to the recommended Tracking protection policy.
- support-locale
- Adds Android 8.1 to the check in
setLayoutDirectionIfNeededinsideLocaleAwareAppCompatActivity
- Adds Android 8.1 to the check in
- feature-top-sites
- ⚠️ This is a breaking change: Added
isDefaultto the top site entity, which allows application to specify a default top site that is added by the application. This is called throughTopSiteStorage.addTopSite.- If your application is using Nightly Snapshots of v40.0.0, please test that the Top Sites feature still works and update to the latest v40.0.0 if any schema errors are encountered.
- ⚠️ This is a breaking change: Added
- feature-push
- Simplified error handling and reduced non-fatal exception reporting.
- support-base
- ⚠️ This is a breaking change:
CrashReportingallowing adding support forrecordCrashBreadcrumbwithoutlib-crashdependency. - ⚠️ This is a breaking change:
Breadcrumbhas moved fromlib-crashto this component.
- ⚠️ This is a breaking change:
- support-utils
URLStringUtils.isURLLikeStrictis now deprecated due to performance issues. Consider using the less strictisURLLikeinstead or creating a new method using:lib-publicsuffixlist.
- support-ktx
String.isUrlStrictis now deprecated due to performance issues. Consider using the less strictisURLinstead or creating a new method using:lib-publicsuffixlist.
- browser-menu
- Added
SimpleBrowserMenuHighlightableItemwhich is a simple menu highlightable item (no images/icons).
- Added
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Improve social trackers categorization see ac#6851 and fenix#5921
- service-firefox-accounts
- ⚠️ This is a breaking change:
FxaAccountManager.withConstellationputs theDeviceConstellationwithin the same scope as the block so you no longer need to use theitreference.
- ⚠️ This is a breaking change:
- feature-syncedtabs
- Moved
SyncedTabsFeaturetoSyncedTabsStorage. - ⚠️ This is a breaking change: The new
SyncedTabsFeaturenow orchestrates the correct state needed for consumers to handle by implementing theSyncedTabsView.
- Moved
- browser-thumbnails
- 🆕 New component for capturing browser thumbnails.
ThumbnailsFeaturewill be deprecated for the newBrowserThumbnailsin a future.
39.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- All components
- Increased
targetSdkVersionto 29 (Android Q)
- Increased
- browser-session
SnapshotSerializerno longer restores source of aSession, addedSession.Source.RESTORED
- feature-downloads
- Fixed issue #6764.
- support-locale
- Added fix for respecting RTL/LTR changes when activity is recreated in Android 8
- feature-sitepermissions
- ⚠️ This is a breaking change: The
SitePermissionsFeature’s constructor, now requires a new parameteronShouldShowRequestPermissionRationalea lambda to allow the feature to query ActivityCompat.shouldShowRequestPermissionRationale or Fragment.shouldShowRequestPermissionRationale. This allows theSitePermissionsFeatureto handle when a user clicks “Deny & don’t ask again” button in a system permission dialog, for more information see issue #6565.
- ⚠️ This is a breaking change: The
- ui-widgets
- 🆕 New component for standardized Mozilla widgets and styles. A living style guide will be published soon that helps explain design choices made.
- First version includes styling for buttons:
NeutralButton,PositiveButton, andDestructiveButton
- feature-addons
- Added
AddonsManagerAdapter.updateAddonandAddonsManagerAdapter.updateAddonsto allow partial updates. - ⚠️ This is a breaking change:
AddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: ArrayList<Addon>)is changed toAddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: List<Addon>). - Fixed issue #6685, now
DefaultSupportedAddonsCheckerwill marked any newly supported add-on as enabled. - Added
Addon.translatedSummaryandAddon.translatedDescriptionto ease add-on translations. - Added
Addon.defaultLocaleIndicates which locale will be always available to display translatable fields. - ⚠️ This is a breaking change:
AddonManager.enableAddonandAddonManager.disableAddonhave a new optional parametersourcethat indicates why the extension is enabled/disabled. - ⚠️ This is a breaking change:
Map<String, String>.translatenow is marked as internal, if you are trying to translate the summary or the description of an add-on, useAddon.translatedSummaryandAddon.translatedDescription.
- Added
- feature-toolbar
- Disabled autocompleting when updating url upon entering edit mode in BrowserToolbar.
- feature-media
- Muted media will not start the media service anymore, causing no media notification to be shown and no audio focus getting requested.
- feature-fullscreen
-
⚠️ This is a breaking change: Added
viewportFitChangedto support Android display cutouts. -
feature-qr
- Moved
AutoFitTextureViewfromsupport-basetofeature-qr.
- Moved
-
- feature-session
- ⚠️ This is a breaking change: Added
viewportFitChangedtoFullScreenFeaturefor supporting Android display cutouts.
- ⚠️ This is a breaking change: Added
- feature-qr
- Moved
AutoFitTextureViewfromsupport-basetofeature-qr.
- Moved
- service-sync-logins
- Adds fun
LoginsStorage.getPotentialDupesIgnoringUsernamefor fetching list of potential duplicate logins from the underlying storage layer, ignoring username.
- Adds fun
- feature-customtabs
- ⚠️ This is a breaking change: Removed
handleErrorinCustomTabWindowFeatureconstructor - ⚠️ This is a breaking change: Added
onLaunchUrlFallbacktoCustomTabWindowFeatureconstructor
- ⚠️ This is a breaking change: Removed
- browser-tabstray
- The iconView is no longer required in the template.
- The URL text for items may be styled.
- service-glean
- Glean was updated to v28.0.0
- The baseline ping is now sent when the application goes to foreground, in addition to background and dirty-startup.
- Glean was updated to v28.0.0
- Developer ergonomics
- Improved autoPublication workflow. See https://mozac.org/contributing/testing-components-inside-app for updated documentation.
- browser-search
- Added
getSearchTemplateto reconstruct the user-entered search engine url template
- Added
38.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 75.0browser-engine-gecko-beta: GeckoView 76.0browser-engine-gecko-nightly: GeckoView 77.0
- Merge day!
- feature-session
- ⚠️ This is a breaking change: Added optional
customTabSessionIdparam to [PictureInPictureFeature] so consumers can use this feature for custom tab sessions.
- ⚠️ This is a breaking change: Added optional
- support-locale
- Updates
updateResourcesto always update the context configuration
- Updates
- feature-toolbar
- Added
forceExpandto [BrowserToolbarBottomBehavior] so consumers can expand the BrowserToolbar on demand.
- Added
- feature-addons
- Added
AddonPermissionsAdapter.StyleandAddonsManagerAdapter.Styleclasses to allow UI customization.
- Added
- service-accounts-push
- Fixed a bug where the push subscription was incorrectly cached and caused some
GeneralErrors.
- Fixed a bug where the push subscription was incorrectly cached and caused some
- feature-addons
- Added
DefaultAddonUpdater.UpdateAttemptStorageallows to query the last known state for a previous attempt to update an add-on.
- Added
- feature-accounts-push
- Re-subscribe for Sync push support when notified by
onSubscriptionChangedevents.
- Re-subscribe for Sync push support when notified by
- support-migration
- ⚠️ This is a breaking change:
FennecMigratornow takesLazyreferences to storage layers.
- ⚠️ This is a breaking change:
- concept-storage, service-sync-logins
- 🆕 New API:
PlacesStorage#warmUp,SyncableLoginsStorage#warmUp- allows consumers to ensure that underlying storage database connections are fully established.
- 🆕 New API:
- feature-customtabs
- ⚠️ This is a breaking change: add parameter
handleErrortoCustomTabWindowFeatureconstructor- This is used to show an error when the url can’t be handled
CustomTabIntentProcessorto supportBrowser.EXTRA_HEADERS.
- ⚠️ This is a breaking change: add parameter
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Fixed a memory leak when using a
SelectionActionDelegateonGeckoEngineView.
- Fixed a memory leak when using a
- feature-share
- Added
RecentAppsStorage.deleteRecentAppandRecentAppsDao.deleteRecentAppto allow deleting aRecentAppEntity
- Added
- feature-p2p
- Add new
P2PFeatureto send URLs and web pages through peer-to-peer networking.
- Add new
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly, **browser-engine-system
- Added
GeckoEngineView#getInputResult()to return an EngineView.InputResult indicating how a MotionEvent was handled by an EngineView.
- Added
- concept-engine
- Will expose a new
InputResultenum throughgetInputResult()indicating how an EngineView handled user’s MotionEvent. - See above changes to browser-engine-*.
- Will expose a new
- browser-toolbar
BrowserToolbarBottomBehavioris now solely responsible to decide if the dynamic nav bar should animate or not.- See above changes to browser-engine-*, concept-engine.
- feature-session
SwipeRefreshLayoutwill now trigger pull down to refresh only if the website is scrolled to top and it itself did not consume the swype event.- See above changes to browser-engine-*, concept-engine.
- Added androidx_swiperefreshlayout as a dependency because google_materials dependency was incremented to version 1.1.0 which no longer includes SwipeRefreshLayout
- lib-crash
- ⚠️ This is a breaking change: added
support-basedependency.
- ⚠️ This is a breaking change: added
- support-base
CrashReportingallowing adding support forsubmitCaughtExceptionwithoutlib-crashdependency.
- browser-tabstray
- Added ability to let consumers pass a custom layout of
TabViewHolderin order to control layout inflation and view binding. - Added an optional URL view to the
TabViewHolderto display the URL. - Will expose a new
layoutparameter which allows consumers to change the tabs tray layout. -
Will only display a URL’s hostname instead of the entire URL
- browser-session
- ⚠️ This is a breaking change:
SessionManager.runWithSessionIdOrSelectednow returns the result from theblockit executes. This is consistent withrunWithSession.
- ⚠️ This is a breaking change:
- feature-push
- Allow nullable AutoPush messages to be delivered to observers.
- service-glean
- Glean was updated to v27.1.0
- Breaking change: The regular expression used to validate labels is stricter and more correct.
- BUGFIX: baseline pings sent at startup with the
dirty_startupreason will now include application lifetime metrics (#810) - Add more information about pings to markdown documentation:
- State whether the ping includes client id;
- Add list of data review links;
- Add list of related bugs links.
gradlew cleanwill no longer remove the Miniconda installation in~/.gradle/glean. Thereforecleancan be used without reinstalling Miniconda afterward every time.- Glean will now detect when the upload enabled flag changes outside of the application, for example due to a change in a config file. This means that if upload is disabled while the application wasn’t running (e.g. between the runs of a Python command using the Glean SDK), the database is correctly cleared and a deletion request ping is sent. See #791.
- The
eventsping now includes a reason code:startup,backgroundormax_capacity.
- Glean was updated to v27.1.0
37.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- lib-state, browser-state
- Added the ability to add
Middlewareinstances to aStore. AMiddlewarecan rewrite or intercept anAction, as well as dispatch additionalActions or perform side-effects when anActiongets dispatched.
- Added the ability to add
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Updated
removeAll()fromTrackingProtectionExceptionFileStorageto notify active sessions when all exceptions are removed. - Added
GeckoPort.senderUrlwhich returns the associated content URL.
- Updated
- feature-accounts
- It should now be possible to log-in on stable, stage and china FxA servers using a WebChannel flow.
- ⚠️ This is a breaking change:
FxaWebChannelFeaturetakes aServerConfigas 4th parameter to ensure incoming WebChannel messages are sent by the expected FxA host.
- feature-sitepermissions
- Fixed issue #6299, from now on, any media requests like a microphone or a camera permission will require the system permissions to be granted before a dialog can be shown.
- service-sync-logins
- ⚠️ This is a breaking change:
DefaultLoginValidationDelegate,GeckoLoginStorageDelegateconstructors changed to takeLazy<LoginsStorage>instead ofLoginsStorage, to facilitate late initialization.
- ⚠️ This is a breaking change:
- service-firefox-accounts
- ⚠️ This is a breaking change:
GlobalSyncableStoreProvider#configureStorechanged to takeLazy<SyncableStore>instead ofSyncableStore, to facilitate late initialization.
- ⚠️ This is a breaking change:
- feature-session
- ⚠️ This is a breaking change:
HistoryDelegateconstructor changed to takeLazy<HistoryStorage>instead ofHistoryStorage, to facilitate late initialization.
- ⚠️ This is a breaking change:
- concept-engine
- Added:
DataCleanablea new interface that decouples the behavior of clearing browser data from theEngineandEngineSession.
- Added:
- feature-sitepermissions
- Fixed #6322, now
SitePermissionsStorageallows to indicate an optional reference toDataCleanable.
- Fixed #6322, now
- browser-menu
- Added
canPropagateparam to allBrowserMenuHighlights, making it optional to be displayed in other components - Changed
BrowserMenuItem.getHighlightto filter the highlights which should not propagate.
- Added
- feature-share
- Changed primary key of RecentAppEntity to activityName instead of packageName
- ⚠️ This is a breaking change: all calls to app.packageName should now use app.activityName
- Changed primary key of RecentAppEntity to activityName instead of packageName
36.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 74.0browser-engine-gecko-beta: GeckoView 75.0browser-engine-gecko-nightly: GeckoView 76.0
- Merge day!
- feature-addons
- Added
DefaultSupportedAddonsCheckerwhich checks for add-ons that were previously unsupported, and creates a notification to let the user known when they are available to be used.
- Added
- feature-push
AutoPushFeaturenow properly notifies observers that they have changed by theObserver.onSubscriptionChangedcallback.- ⚠️ This is a breaking change:
RustPushConnection.verifyConnectionnow returns a list of subscriptions that have changed.
35.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-sitepermissions
- Fixed #5616 issue now when a new exception is added if the sitePermissionsRules object is present its values are going to be taken into consideration as default values for the new exception.
- feature-awesomebar
- ⚠️ This is a breaking change: Refactored component to use
browser-stateinstead ofbrowser-session. Feature andSuggestionProviderimplementations may require aBrowserStoreinstance instead of aSessionManagernow.
- ⚠️ This is a breaking change: Refactored component to use
- feature-intent
- ⚠️ This is a breaking change: Removed
IntentProcessor.matches()method from interface. Callingprocess()and examining the boolean return value is enough to know whether anIntentmatched.
- ⚠️ This is a breaking change: Removed
- feature-downloads
- Fixed APK downloads not prompting to install when the notification is clicked.
- service-location
- Created
LocationServiceinterface and madeMozillaLocationServiceimplement it. RegionSearchLocalizationProvidernow accepts anyLocationServiceimplementation.- Added
LocationService.dummy()which creates a dummyLocationServiceimplementation that always returnsnullwhen asked for aLocationService.Region.
- Created
- feature-accounts-push
- Add known prefix to FxA push scope.
- browser-toolbar
- Add the possibility to listen to menu dismissal through
setMenuDismissActioninDisplayToolbar
- Add the possibility to listen to menu dismissal through
- concept-storage
- New interface:
LoginsStorage, describes a logins storage. A slightly cleaned-up version of what was in theservice-sync-logins.
- New interface:
- service-sync-logins
- ⚠️ This is a breaking change: Refactored
AsyncLoginsStorage, which is now calledSyncableLoginsStorage. New class caches the db connection, and removes lock/unlock operations from the public API.
- ⚠️ This is a breaking change: Refactored
- feature-tabs
- Fixed close tabs callback incorrectly invoked on start.
- ⚠️ This is a breaking change: Added
defaultTabsFiltertoTabsFeaturefor initial presenting of tabs.TabsFeature.filterTabsalso uses the same filter if no new filter is provided.
- browser-session
- SessionManager will now close internal
EngineSessioninstances on memory pressure whenonTrimMemory()gets called SessionManager.onLowMemory()is now deprecated andSessionManager.onTrimMemory(level)should be used instead.
- SessionManager will now close internal
- browser-engine-system
- Updated tracking protection lists for more details see #6163.
- concent-engine, browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly, browser-engine-system
- Add additional HTTP header support for
EngineSession.loadUrl().
- Add additional HTTP header support for
34.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- concept-tabstray
- ⚠️ This is a breaking change: Removed dependency on
browser-sessionand introduced tabs tray specific data classes.
- ⚠️ This is a breaking change: Removed dependency on
- browser-tabstray
- ⚠️ This is a breaking change: Refactored component to implement updated
concept-tabstrayinterfaces.
- ⚠️ This is a breaking change: Refactored component to implement updated
- feature-tabs
- ⚠️ This is a breaking change: Refactored component to use
browser-stateinstead ofbrowser-session. - Added additional method to
TabsUseCasesto select a tab based on its id.
- ⚠️ This is a breaking change: Refactored component to use
- feature-contextmenu
- Adds optional
shareTextClickedlambda toDefaultSelectionActionDelegatewhich allows adding and dispatching a text selection share action
- Adds optional
- browser-icons
- ⚠️ This is a breaking change: Migrated this component to use
browser-stateinstead ofbrowser-session. It is now required to pass aBrowserStoreinstance (instead ofSessionManager) toBrowserIcons.install().
- ⚠️ This is a breaking change: Migrated this component to use
- support-webextensions
- Emit facts on installed and enabled addon ids after web extension is initialized.
- feature-app-links
- ⚠️ This is a breaking change:
alwaysAllowedSchemesis removed as a parameter forAppLinksInterceptor. - Added
engineSupportedSchemesas a parameter forAppLinksInterceptor. This allows the caller to specify which protocol is supported by the engine.- Using this information, app links can decide if a protocol should be launched in a third party app or not regardless of user preference.
- ⚠️ This is a breaking change:
- feature-sitepermissions
- ⚠️ This is a breaking change: add parameters
autoplayAudibleandautoplayInaudibletoSitePermissionsRules.- This allows autoplay settings to be controlled for specific sites, rather than globally.
- ⚠️ This is a breaking change: add parameters
- concept-engine
- ⚠️ This is a breaking change: remove deprecated GeckoView setting
allowAutoplayMedia- This should now be controlled for individual sites via
SitePermissionsRules
- This should now be controlled for individual sites via
- Fixed a bug that would cause
TrackingProtectionPolicyForSessionTypesto lose some information during transformations.
- ⚠️ This is a breaking change: remove deprecated GeckoView setting
- feature-downloads
- ⚠️ This is a breaking change:
customTabIdis renamed totabId.
- ⚠️ This is a breaking change:
- feature-contextmenu
- ⚠️ This is a breaking change:
customTabIdis renamed totabId.
- ⚠️ This is a breaking change:
- browser-menu
- Emit fact on the web extension id when a web extension menu item is clicked.
- feature-push
- ⚠️ This is a breaking change:
- Removed APIs from AutoPushFeature:
subscribeForType,unsubscribeForType,subscribeAll. - Removed
PushTypeenum and it’s internal uses. - Use the new ✨
subscribeandunsubscribeAPIs.
- Removed APIs from AutoPushFeature:
- ⚠️ This is a breaking change:
- feature-accounts-push
- Updated
FxaPushSupportFeatureto use the newAutoPushFeatureAPIs.
- Updated
- concept-sync
- ⚠️ This is a breaking change:
DeviceEventand related classes were expanded/refactored, and renamed toAccountEvent.-
DeviceConstellation“event” related APIs were renamed to be “command”-centric. - service-firefox-accounts
- ⚠️ This is a breaking change:
FxaAccountManager.registerForDeviceEventsrenamed toFxaAccountManager.registerForAccountEvents.
33.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-share
- Added database to store recent apps
- Added
RecentAppsStorageto handle storing and retrieving most-recent apps
- service-glean
- Glean was updated to v25.0.0:
- General:
ping_typeis not included in theping_infoany more (#653), the pipeline takes the value from the submission URL.- The version of
glean_parserhas been upgraded to 1.18.2:- Breaking Change (Java API) Have the metrics names in Java match the names in Kotlin. See Bug 1588060.
- The reasons a ping are sent are now included in the generated markdown documentation.
- Android:
- The
Glean.initializemethod runs mostly off the main thread (#672). - Labels in labeled metrics now have a correct, and slightly stricter, regular expression. See label format for more information.
- The
- General:
- Glean was updated to v25.0.0:
32.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 73.0browser-engine-gecko-beta: GeckoView 74.0browser-engine-gecko-nightly: GeckoView 75.0
- Merge day!
- browser-engine-gecko-nightly, concept-engine
- Updated
WebPushHandlerandGeckoWebPushHandlerto accept push scopes foronSubscriptionChangedevents.
- Updated
- WebExtensions refactor
- The Web Extensions related methods have been refactored from
Engineinto a newWebExtensionRuntimeinterface. - The
Engineinterface now implements theWebExtensionRuntimeinterface. WebCompatFeaturehas been updated to receive aWebExtensionRuntimeinstead of aEngineasinstallmethod parameter.
- The Web Extensions related methods have been refactored from
- lib-crash
- Now supports adding telemetry crash reporting services. Telemetry services will not require to prompt
- the user since it is restricted by the telemetry preference of the user.
CrashReporter( services = services, telemetryServices = telemetryServices, shouldPrompt = CrashReporter.Prompt.ALWAYS, promptConfiguration = CrashReporter.PromptConfiguration( appName = context.getString(R.string.app_name), organizationName = "Mozilla" ), enabled = true, nonFatalCrashIntent = pendingIntent )
- feature-search
- Adds
DefaultSelectionActionDelegate, which may be used to add new actions to text selection context menus.- It currently adds “Firefox Search” or “Firefox Private Search”, depending on whether the selected tab is private.
- Adds
SearchFeature, which consumes search requests made by other components. ```kotlin // Example usage
// Attach
DefaultSelectionActionDelegateto theEngineViewoverride fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? = when (name) { EngineView::class.java.name -> components.engine.createView(context, attrs).apply { selectionActionDelegate = DefaultSelectionActionDelegate( components.store, context, “My App Name” ) }.asView() }// Use
SearchFeatureto attach search requests to your own code private val searchFeature = ViewBoundFeatureWrapper() // ... searchFeature.set( feature = SearchFeature(components.store) { when (it.isPrivate) { false -> components.searchUseCases.newTabSearch.invoke(it.query) true -> components.searchUseCases.newPrivateTabSearch.invoke(it.query) } }, owner = this, view = layout ) ``` - Adds
- service-glean
- Glean was updated to v24.2.0:
- Add
localetoclient_infosection. - Deprecation Warning Since
localeis now in theclient_infosection, the one in the baseline ping (glean.baseline.locale) is redundant and will be removed by the end of the quarter. - Drop the Glean handle and move state into glean-core (#664)
- If an experiment includes no
extrafields, it will no longer include{"extra": null}in the JSON payload. - Support for ping
reasoncodes was added.- The metrics ping will now include
reasoncodes that indicate why it was submitted. - The baseline ping will now include
reasoncodes that indicate why it was submitted. If an unclean shutdown is detected (e.g. due to force-close), this ping will be sent at startup withreason: dirty_startup.
- The metrics ping will now include
- The version of
glean_parserhas been upgraded to 1.17.3 - Collections performed before initialization (preinit tasks) are now dispatched off the main thread during initialization.
- Add
- Glean was updated to v24.2.0:
- feature-awesomebar
- Added
showDescriptionparameter (default totrue) toSearchSuggestionProviderconstructors to add the possibility of removing search suggestion description.
- Added
- support-migration
- Emit facts during migration.
31.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-awesomebar
- ⚠️ This is a breaking change: Added resources parameter to
addSessionProvidermethod fromAwesomeBarFeatureand toSessionSuggestionProviderconstructor for accessing strings.
- ⚠️ This is a breaking change: Added resources parameter to
30.0.0
29.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-error-pages
- ⚠️ This is a breaking change: ErrorResponse now has two data classes: Content (for data URI’s) and Uri (for encoded URL’s)
- This will require a change in RequestInterceptors that override
onErrorRequest. - Return the corresponding ErrorResponse (ErrorResponse.Content or ErrorResponse.Uri) as ErrorResponse can no longer be directly instantiated.
- This will require a change in RequestInterceptors that override
- Added support for loading images into error pages with
createUrlEncodedErrorPage. These error pages load dynamically with javascript by parsing params in the URL - ⚠️ To use custom HTML & CSS with image error pages, resources must be located in the assets folder
- ⚠️ This is a breaking change: ErrorResponse now has two data classes: Content (for data URI’s) and Uri (for encoded URL’s)
- feature-prompts
- Save login prompts will no longer be closed on page load
- lib-crash
- Glean reports now distinguishes between fatal and non-fatal native code crashes.
- feature-pwa
- Added ability to query install state of an url.
- Added ability load all manifests that apply to a certain url.
- Added ability to track if an PWA is actively used.
28.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 72.0browser-engine-gecko-beta: GeckoView 73.0browser-engine-gecko-nightly: GeckoView 74.0
- Merge day!
- feature-session
-
- ⚠️ This is a breaking change:
TrackingProtectionUseCases.fetchExceptions: now receives a(List<TrackingProtectionException>) -> Unitinstead of a(List<String>) -> Unitto add support for deleting individual exceptions. - Added:
TrackingProtectionUseCases.removeException(exception: TrackingProtectionException): now you can delete an exception without the need of having aSessionby callingremoveException(trackingProtectionException).
- ⚠️ This is a breaking change:
-
- service-glean
- Glean was updated to v24.1.0:
- Breaking Change An
enableUploadparameter has been added to theinitialize()function. This removes the requirement to callsetUploadEnabled()prior to calling theinitialize()function. - A new metric
glean.error.preinit_tasks_overflowwas added to report when the preinit task queue overruns, leading to data loss. See bug 1609482 - The metrics ping scheduler will now only send metrics pings while the application is running. The application will no longer “wake up” at 4am using the Work Manager.
- The code for migrating data from Glean SDK before version 19 was removed.
- When using the
GleanTestLocalServerrule in instrumented tests, pings are immediately flushed by theWorkManagerand will reach the test endpoint as soon as possible. - The Glean Gradle Plugin correctly triggers docs and API updates when registry files change, without requiring them to be deleted.
parseISOTimeStringhas been made 4x faster. This had an impact on Glean migration and initialization.- Metrics with
lifetime: applicationare now cleared when the application is started, after startup Glean SDK pings are generated. - ⚠️ This is a breaking change:
- The public method
PingType.send()(in all platforms) have been deprecated and renamed toPingType.submit().
- The public method
- Rename
deletion_requestping todeletion-requestping after glean_parser update - BUGFIX: The Glean Gradle plugin will now work if an app or library doesn’t have a metrics.yaml or pings.yaml file.
- Breaking Change An
- Glean was updated to v24.1.0:
- feature-app-links
- AppLinksInterceptor can now be used without the AppLinksFeature. Set the new parameter launchFromInterceptor = true
AppLinksInterceptor( applicationContext, interceptLinkClicks = true, launchInApp = { true }, launchFromInterceptor = true ) - Introduce a
ContextMenuCandidateto open links in the corresponding external app, if installed
- AppLinksInterceptor can now be used without the AppLinksFeature. Set the new parameter launchFromInterceptor = true
- concept-storage
- Added classes related to login autofill
LoginStorageDelegatemay be attached to anEngine, where it can be used to save logins.LoginValidationDelegatemay be used to read and update currently saved logins.
- Added classes related to login autofill
- feature-prompts
PromptFeaturemay now optionally accept aLoginValidationDelegate. If present, it users will be prompted to save their information after logging in to a website.PromptFeaturenow accepts a false by defaultisSaveLoginEnabledlambda to be invoked before showing prompts. If true, users will be prompted to save their information after logging in to a website.- Prompts will now be closed automatically when pages have mostly loaded
- service-sync-logins
- Added
GeckoLoginStorageDelegate. This can be attached to a GeckoEngine, where it will be used to save user login credentials. GeckoLoginStorageDelegatenow accepts a false by defaultisAutofillEnabledlambda to be invoked before fetching logins. If false, logins will not be fetched to autofill.
- Added
- service-firefox-accounts
signInWithShareableAccountAsyncnow takes areuseAccountparameter, allowing consumers to reuse existing session token (and FxA device) associated with the passed-in account.
- support-migration
- New Telemetry Notice
- Added a ‘migration’ ping, which contains telemetry data about migration via Glean. It’s emitted whenever a migration is executed.
- Added
MigrationIntentProcessorfor handling incoming intents when migration is in progress. - Added
AbstractMigrationProgressActivityas a base activity to block user interactions during migration.
- browser-menu
- Added
MenuButtonto let the browser menu be used outside ofBrowserToolbar.
- Added
- browser-menu
- Added new
MenuControllerandMenuCandidateitems that replaceBrowserMenuBuilderandBrowserMenuItem.- Menu candidates are pure data classes and state changes are done by submitting a new list of menu candidates, rather than mutating menu items.
- The current state of a
BrowserMenuItemcan be converted to a menu candidate withasCandidate(Context). MenuControllerreplaces bothBrowserMenuBuilderandBrowserMenu, and handles showing the menu and adjusting the displayed items.MenuViewlets the menu be used outside of popups.- Menu candidates add support for buttons inside menu options, text to the side of a menu option, and improved a11y.
- ⚠️ This is a breaking change: Added
asCandidatemethod toBrowserMenuIteminterface.
- Added new
- browser-toolbar
- Added support for the new menu controller through the
DisplayToolbar.menuControllerproperty.
- Added support for the new menu controller through the
27.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-remotetabs was renamed to feature-syncedtabs
- ⚠️ This is a breaking change:
RemoteTabsFeatureis nowSyncedTabsFeature, and some method names have corresponding changes.RemoteTabsStorageSuggestionProvideris nowSyncedTabsStorageSuggestionProvider.
- service-glean
- Glean was updated to v22.1.0 (Full changelog)
- Attempt to re-send the deletion ping on init even if upload is disabled.
- Introduce the
InvalidOverflowerror forTimingDistributions.
- Glean now provides a Gradle plugin for automating the conversion from
metrics.yamlandpings.yamlfiles to Kotlin code. This should be used instead of the deprecated Gradle script. See integrating with the build system docs for more information.
- Glean was updated to v22.1.0 (Full changelog)
- feature-app-links
- ⚠️ This is a breaking change:
- Feature now contains two parts. One part is the AppLinksFeature, the other part is RequestInterceptor.
// add this call in the RequestInterceptor context.components.appLinksInterceptor.onLaunchIntentRequest(engineSession, uri, hasUserGesture, isSameDomain)
- support-telemetry-sync
- Added new telemetry ping, to support password sync:
passwords_sync.
- Added new telemetry ping, to support password sync:
- service-firefox-accounts
- 🕵️ New Telemetry Notice
- Added telemetry for password sync, via the new
passwords_syncin support-telemetry-sync
- sync-logins
- 🕵️ New Telemetry Notice
- Added telemetry for password sync, via the new
passwords_syncin support-telemetry-sync - The
service-sync-loginscomponent now collects some basic performance and quality metrics via Glean. Applications that send telemetry via Glean must ensure they have received appropriate data-review before integrating this component. - ⚠️ This is a breaking change: The
ServerPasswordfieldsusername,usernameFieldandpasswordFieldcan no longer bynull. Use the empty string to indicate an absent value for these fields. - ⚠️ This is a breaking change: The
AsyncLoginsStorageAdapter.inMemorymethod has been removed. UseAsyncLoginsStorageAdapter.forDatabase(":memory:")instead.
- samples-sync
- Added support for password synchronization (not reflected in the UI, but demonstrates how to integrate the component).
- browser-menu
- Added
BrowserMenuHighlightableSwitchto represent a highlightable item with a toggle switch.
- Added
- lib-crash
- Now supports performing action after submitting crash report.
crashReporter.submitReport(Crash.fromIntent(intent)) { stopSelf() }
- Now supports performing action after submitting crash report.
- support-ktx
- Added
Context.getDrawableWithTintextension method to get a drawable resource with a tint applied.String.isUrlis now using a more lenient check for improved performance. Strictly checking whether a string is a URL or not is supported through the newString.isUrlStrictmethod.
- Added
- support-base
- ⚠️ This is a breaking change:
- Removed helper for unique notification id.
- Added helper for providing unique stable
Intids based on aStringtag to avoid id conflicts between components and app code. This is now for any id, not just notification id. - Added new API that allows user to request for the next available id using the same tag.
// Get a unique id for the provided tag val id = SharedIdsHelper.getIdForTag(context, "mozac.my.feature") // Get the next unique id for the provided tag val id = SharedIdsHelper.getNextIdForTag(context, "mozac.my.feature") - browser-errorpages
- Added support for bypassing invalid SSL certification.
26.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko: GeckoView 71.0browser-engine-gecko-beta: GeckoView 72.0browser-engine-gecko-nightly: GeckoView 73.0
- Merge day!
- browser-engine-system and browser-engine-gecko-nightly
- Added
EngineView.canClearSelection()andEngineView.clearSelection()for clearing the selection.
- Added
- feature-accounts
- ⚠️ This is a breaking change: Migrated
FxaPushSupportFeatureto thefeature-accounts-pushcomponent.
- ⚠️ This is a breaking change: Migrated
- feature-sendtab
- ⚠️ This is a breaking change: This component is now deprecated. See
feature-accounts-push.
- ⚠️ This is a breaking change: This component is now deprecated. See
- feature-accounts-push
- 🆕 New component for features that need Firefox Accounts and Push, e.g. Send Tab.
SendTabFeatureandSendTabUseCaseshave been migrated here.- ⚠️ This is a breaking change:
SendTabFeatureno longer takes an instance ofAutoPushFeature.FxaPushSupportFeatureis now needed for integrating Firefox Accounts with Push support.
- support-test-libstate
- 🆕 New component providing utilities to test functionality that relies on lib-state.
- browser-errorpages
- Removed list items semantics to improve a11y for unordered lists, preventing items being read twice.
- support-locale
- Add
resetToSystemDefaultandgetSystemDefaultmethod toLocaleManager
- Add
25.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-downloads
- Makes
DownloadStateparcelizable so that it can be passed toFetchDownloadManagerwhen completed
- Makes
- feature-remotetabs
- Add new
RemoteTabsFeatureto view tabs from other synced devices and upload our own. - Add
RemoteTabsStorageSuggestionProviderclass to match remote tabs in awesomebar suggestions.
- Add new
- support-migration
- Added Fennec login migration logic.
- service-sync-logins
AsyncLoginsStorageinterface gained a new method:importLoginsAsync, used for bulk-inserting logins (for example, during a migration).
24.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-errorpages
- Added strings for “no network connection” error pages
- browser-menu
- Replaced
BrowserMenuHighlightableItem.HighlightwithBrowserMenuHighlight.HighPriorityto highlight a menu item with some background color.Highlighthas been deprecated. - Added
BrowserMenuHighlight.LowPriorityto highlight a menu item with a dot over the icon.
- Replaced
- storage-sync
- Added
RemoteTabsStoragefor synced tabs.
- Added
- service-firefox-accounts
- Removed
StorageSyncinterface as it is superseded by the sync manager.
- Removed
- service-glean
- Glean was updated to v21.3.0 (Full changelog)
- Timers are reset when disabled. That avoids recording timespans across disabled/enabled toggling.
- Add a new flag to pings: send_if_empty.
- Upgrade glean_parser to v1.12.0.
- Implement the deletion request ping in Glean.
- Glean was updated to v21.3.0 (Full changelog)
23.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-downloads
- ⚠️ This is a breaking change:
- Renamed to
OnDownloadCompletedtoOnDownloadStoppedfor increased clarity on when it’s triggered
- browser-state
- ⚠️ This is a breaking change:
DownloadStatedoesn’t include the propertyfilePathin its constructor anymore, now it is a computed property. As the previous behavior caused some situations wherefileNamewas initially null and after assigned a value to producefilePathvalues like “/storage/emulated/0/Download/null” for more info.
- ⚠️ This is a breaking change:
- feature-prompts and feature-downloads
- Fix issue #6439 “Crash when downloading Image”
- service-firefox-accounts
- Account profile cache is now used, removing a network call from most instances of account manager instantiation.
- Fixed a bug where account would disappear after restarting an app which hit authentication problems.
- Deprecated the
StorageSyncclass. Please use theSyncManagerclass instead.
- service-glean
- Glean was updated to v21.2.0
- Two new metrics were added to investigate sending of metrics and baseline pings. See bug 1597980 for more information.
- Glean’s two lifecycle observers were refactored to avoid the use of reflection.
- Timespans will now not record an error if stopping after setting upload enabled to false.
- The
GleanTimerIdcan now be accessed in Java and is no longer atypealias. - Fixed a bug where the metrics ping was getting scheduled twice on startup.
- When constructing a ping, events are now sorted by their timestamp. In practice, it rarely happens that event timestamps are unsorted to begin with, but this guards against a potential race condition and incorrect usage of the lower-level API.
- Metrics that can record errors now have a new testing method,
testGetNumRecordedErrors. - The experiments API is no longer ignored before the Glean SDK initialized. Calls are recorded and played back once the Glean SDK is initialized.
- String list items were being truncated to 20, rather than 50, bytes when using
.set()(rather than.add()). This has been corrected, but it may result in changes in the sent data if using string list items longer than 20 bytes.
- Glean was updated to v21.2.0
- support-base
- Deprecated
BackHandlerinterface. Use theUserInteractionHandler.onBackPressedinstead. - Added generic
UserInteractionHandlerinterface for fragments, features and other components that want to handle user interactions such as ‘back’ or ‘home’ button presses.
- Deprecated
22.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-addons
- ⚠️ This is a breaking change:
- Renamed to
AddOnsCollectionsProvidertoAddOnCollectionProviderand added caching support: ```kotlin val addOnsProvider by lazy { // Keeps addon collection response cached and valid for one day AddOnCollectionProvider(applicationContext, client, maxCacheAgeInMinutes = 24 * 60) }
// May return a cached result, if available val addOns = addOnsProvider.getAvailableAddOns()
// Will never return a cached result val addOns = addOnsProvider.getAvailableAddOns(allowCache = false) ```
- lib-nearby
- 🆕 New component for communicating directly between two devices using Google Nearby API.
- sample-nearby-chat
- 🆕 New sample program demonstrating use of
lib-nearby.
- 🆕 New sample program demonstrating use of
- feature-customtabs
- ⚠️
CustomTabWindowFeaturenow takesActivityinstead ofContext.
- ⚠️
- concept-sync, service-firefox-accounts
OAuthAccount@authorizeOAuthCodemethod is nowauthorizeOAuthCodeAsync.
- service-firefox-accounts
- For supported Android API levels (23+),
FxaAccountManagercan now be configured to encrypt persisted FxA state, viasecureStateAtRestflag on passed-inDeviceConfig. Defaults tofalse. For lower API levels, settingsecureStateAtRestwill continue storing FxA state in plaintext. If the device is later upgraded to 23+, FxA state will be automatically migrated to an encrypted storage. - FxA state is stored in application’s data directory, in plaintext or encrypted-at-rest if configured via the
secureStateAtRestflag. This state contains everything that’s necessary to download and decrypt data stored in Firefox Sync. - An instance of a
CrashReportermay now be passed to theFxaAccountManager’s constructor. If configured, it will be used to report any detected abnormalities. - ⚠️ This is a breaking change:
- Several
FxaAccountManagermethods have been made internal, and are no longer part of the public API of this module:createSyncManager,getAccountStorage.
- For supported Android API levels (23+),
21.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-downloads
- Added
tryAgainwhich can be called on the feature in order to restart a failed download.
- Added
- lib-dataprotect
- Added new
SecureAbove22Preferenceshelper class, which is an encryption-aware wrapper forSharedPreferences. Only actually encrypts stored values when running on API23+.
- Added new
- service-firefox-accounts
- Support for keeping
SyncEngine.Passwordsengine unlocked during sync. If you’re syncing this engine, you must useSecureAbove22Preferencesto store encryption key (stored under “passwords” key), and pass an instance of these secure prefs toGlobalSyncableStoreProvider.configureKeyStorage.
- Support for keeping
- concept-sync
- Added new
LockableStoreto facilitate syncing of “lockable” stores (such asSyncableLoginsStore).
- Added new
- feature-sitepermissions
- Added a new get operator to
SitePermissionsto facilitate the retrieval of permissions.val sitePermissions = SitePermissions( "dev.mozilla.org", notification = ALLOWED, savedAt = 0) sitePermissions[Permission.LOCATION] // ALLOWED will be returned
- Added a new get operator to
- engine-gecko-nightly
- Adds setDynamicToolbarMaxHeight ApI.
- feature-push
- Added
unsubscribeAllsupport from the Rust native layer.
- Added
20.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-session, feature-customtabs, feature-session, feature-tabs
- ⚠️ This is a breaking change: The
WindowFeatureandCustomTabWindowFeaturecomponents have been migrated tobrowser-statefrombrowser-session. Therefore creating these features now requires aBrowserStoreinstance (instead of aSessionManagerinstance). ThewindowRequestproperties have been removedSessionso window requests can now only be observed on aBrowserStorefrom thebrowser-statecomponent. In addition,WindowFeaturewas moved fromfeature-sessiontofeature-tabsbecause it now makes use of ourTabsUseCasesand this would otherwise cause a dependency cycle.
- ⚠️ This is a breaking change: The
- feature-downloads
- Added ability to pause, resume, cancel, and try again on a download through the
DownloadNotification. - Added support for multiple, continuous downloads.
- Added size of the file to the
DownloadNotification. - Added open file functionality to the
DownloadNotification.- Note: you must add a
FileProviderto your manifest as well asfile_paths.xml. See SampleBrowser for an example. - To open .apk files, you must still add the permission
android.permission.INSTALL_PACKAGESto your manifest.
- Note: you must add a
- Improved visuals of
SimpleDownloadDialogFragmentto better matchSitePermissionsDialogFragment.SimpleDownloadDialogFragmentcan similarly be themed by usingPromptsStylingproperties.
- Recreated download notification channel with lower importance for Android O+ so that the notification is not audibly intrusive.
- Added ability to pause, resume, cancel, and try again on a download through the
- feature-webnotifications
- Adds feature implementation for configuring and displaying web notifications to the user
WebNotificationFeature( applicationContext, engine, icons, R.mipmap.ic_launcher, BrowserActivity::class.java )
- Adds feature implementation for configuring and displaying web notifications to the user
- service-glean
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing
stderr.
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing
- concept-engine
- Adds support for WebPush abstraction to the Engine.
- Adds support for WebShare abstraction as a PromptRequest.
- engine-gecko-nightly
- Adds support for WebPush in GeckoEngine.
- support-webextensions
- Adds support for sending messages to background pages and scripts in WebExtensions.
- service-firefox-accounts
- Adds
authorizeOAuthCodemethod for generating scoped OAuth codes.
- Adds
- feature-push
- ⚠️ The
AutoPushFeaturenow throws when reaching exceptions in the native layer that are unrecoverable.
- ⚠️ The
- feature-prompts
- Adds support for Web Share API using
ShareDelegate.
- Adds support for Web Share API using
- experiments
- Fixes a crash when the app version or the experiment’s version specifiers are not in the expected format.
- engine, engine-gecko-*, support-webextensions
- Added support
browser.tabs.remove()in web extensions.val engine = GeckoEngine(applicationContext, engineSettings) engine.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate { override fun onCloseTab(webExtension: WebExtension?, engineSession: EngineSession) { store.state.tabs.find { it.engineState.engineSession === engineSession }?.let { store.dispatch(RemoveTabAction(tab.id)) } } })
- Added support
19.0.1
- Commits
- Dependencies
- Gecko
- service-glean
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing
stderr.
- Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing
19.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-toolbar
- ⚠️ This is a breaking change: Refactored the internals to use
ConstraintLayout. As part of this change the public API was simplified and unused methods/properties have been removed.
- ⚠️ This is a breaking change: Refactored the internals to use
- feature-accounts
- Add new
FxaPushSupportFeaturefor some underlying support when connecting push and fxa accounts together.
- Add new
- browser-state
- Added
externalAppTypetoCustomTabConfigto indicate how the session is being used.
- Added
- service-glean
- The Rust implementation of the Glean SDK is now being used.
- ⚠️ This is a breaking change: the
GleanDebugActivityis no longer exposed from service-glean. Users need to use the one inmozilla.telemetry.glean.debug.GleanDebugActivityfrom theadbcommand line.
- lib-push-firebase
- Fixes a potential bug where we receive a message for another push service that we cannot process.
- feature-privatemode
- Added new feature for private browsing mode.
- Added
SecureWindowFeatureto prevent screenshots in private browsing mode.
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko: GeckoView 70.0browser-engine-gecko-beta: GeckoView 71.0browser-engine-gecko-nightly: GeckoView 72.0
- Merge day!
- feature-push
- The
AutoPushFeaturenow checks (once every 24 hours) to verify and renew push subscriptions if expired after a cold boot.
- The
18.0.1
- Commits
- Dependencies
- Gecko
- feature-prompts
- Fixed a crash when showing the file picker.
18.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-menu
- Adds the ability to create a BrowserMenuCategory, a menu item that defines a category for other menu items
- concept-engine
- Adds the setting
forceUserScalableContent.
- Adds the setting
- engine-gecko-nightly
- Implements the setting
forceUserScalableContent.
- Implements the setting
- feature-prompts
- Deprecated
PromptFeatureconstructor that has parameters for bothActivityandFragment. Use the constructors that just take either one instead. - Changed
sessionIdparameter name tocustomTabId.
- Deprecated
17.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-contextmenu
- The “Save Image” context menu item will no longer prompt before downloading the image.
- concept-engine
- Added
WebAppManifest.ShareTargetdata class.
- Added
- lib-crash
- Now supports sending caught exceptions. Use the ‘submitCaughtException()’ to send caught exceptions if the underlying crash reporter service supports it.
val job = crashReporter.submitCaughtException(e)
- Now supports sending caught exceptions. Use the ‘submitCaughtException()’ to send caught exceptions if the underlying crash reporter service supports it.
- engine, engine-gecko-nightly, engine-gecko-beta, engine-gecko
- ⚠️ This is a breaking change: Renamed
WebExtensionTabDelegatetoWebExtensionDelegateto handle various web extensions related engine events:GeckoEngine(applicationContext, engineSettings).also { it.registerWebExtensionDelegate(object : WebExtensionDelegate { override fun onNewTab(webExtension: WebExtension?, url: String, engineSession: EngineSession) { sessionManager.add(Session(url), true, engineSession) } }) } - ⚠️ This is a breaking change: Redirect source and target flags are now passed to history tracking delegates. As part of this change,
HistoryTrackingDelegate.onVisited()receives a newPageVisitdata class as its second argument, specifying thevisitTypeandredirectSource. For more details, please see PR #4268.
- ⚠️ This is a breaking change: Renamed
- support-webextensions
- Added functionality to make sure web extension related events in the engine are reflected in the browser state / store. Instead of attaching a
WebExtensionDelegateto the engine, and manually reacting to all events, it’s now possible to initializeWebExtensionSupport, which provides overridable default behaviour for all web extension related engine events: ```kotlin // Makes sure web extension related events (e.g. an extension is installed, or opens a new tab) are dispatched to the browser store. WebExtensionSupport.initialize(components.engine, components.store)
// If dispatching to the browser store is not desired, all actions / behaviour can be overridden: WebExtensionSupport.initialize(components.engine, components.store, onNewTabOverride = { _, engineSession, url -> components.sessionManager.add(Session(url), true, engineSession) }) ```
- Added functionality to make sure web extension related events in the engine are reflected in the browser state / store. Instead of attaching a
- browser-menu
- Fixes background ripple of Switch in BrowserMenuImageSwitch
16.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-awesomebar
- ⚠️ This is a breaking change:
AwesomeBar.Suggestionnow directly takes a Bitmap for the icon param rather than a Unit.
- ⚠️ This is a breaking change:
- feature-pwa
- ⚠️ This is a breaking change: Intent sent from the
WebAppShortcutManagernow require the consumption of theSHORTCUT_CATEGORYin your manifest
- ⚠️ This is a breaking change: Intent sent from the
- feature-customtabs
- ‘CustomTabIntentProcessor’ can create private sessions now.
- browser-session, browser-state, feature-prompts
- ⚠️ This is a breaking change: The
feature-promptscomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aPromptFeaturerequires aBrowserStoreinstance (instead of aSessionManagerinstance). ThepromptRequestproperty has been removedSession. Prompt requests can now only be observed on aBrowserStorefrom thebrowser-statecomponent.
- ⚠️ This is a breaking change: The
- tooling-detekt
- Published detekt rules for internal use. Check module documentation for detailed ruleset description.
- feature-intent
- Added support for NFC tag intents to
TabIntentProcessor.
- Added support for NFC tag intents to
- firefox-accounts, service-fretboard
- ⚠️ This is a breaking change: Due to migration to WorkManager v2.2.0, some classes like
WorkManagerSyncSchedulerandWorkManagerSyncDispatchernow expects aContextin their constructors.
- ⚠️ This is a breaking change: Due to migration to WorkManager v2.2.0, some classes like
- engine, engine-gecko-nightly and engine-gecko-beta
- Added
WebExtensionsTabsDelegateto supportbrowser.tabs.create()in web extensions.GeckoEngine(applicationContext, engineSettings).also { it.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate { override fun onNewTab(webExtension: WebExtension?, url: String, engineSession: EngineSession) { sessionManager.add(Session(url), true, engineSession) } }) }
- Added
15.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-session, browser-state, feature-contextmenu, feature-downloads
-
- ⚠️ This is a breaking change: Removed the
downloadproperty fromSession. Downloads can now only be observed on aBrowserStatefrom thebrowser-statecomponent. ThereforeContextMenuUseCasesandDownloadsUseCasesnow require aBrowserStoreinstance.
- ⚠️ This is a breaking change: Removed the
-
- support-ktx
- Adds
Resources.Theme.resolveAttribute(Int)to quickly get a resource ID from a theme. - Adds
Context.getColorFromAttrto get a color int from an attribute.
- Adds
- feature-customtabs
- Added
CustomTabWindowFeatureto handle windows inside custom tabs, PWAs, and TWAs.
- Added
-
feature-tab-collections
- Behavior change: In a collection List
is now ordered descending by creation date (newest tab in a collection on top)
- Behavior change: In a collection List
- feature-session, engine-gecko-nightly and engine-gecko-beta
- Added api to manage the tracking protection exception list, any session added to the list will be ignored and the the current tracking policy will not be applied.
val useCase = TrackingProtectionUseCases(sessionManager,engine) useCase.addException(session) useCase.removeException(session) useCase.removeAllExceptions() useCase.containsException(session){ contains -> // contains indicates if this session is on the exception list. } useCase.fetchExceptions { exceptions -> // exceptions is a list of all the origins that are in the exception list. } - support-sync-telemetry
- 🆕 New component containing building blocks for sync telemetry.
- concept-sync, services-firefox-accounts
⚠️ This is a breaking change
- Internal implementation of sync changed. Most visible change is that clients are now allowed to change which sync engines are enabled and disabled.
FxaAccountManager#syncNowAsynctakes an instance of areasoninstead ofstartupboolean flag.SyncEnginesStorageis introduced, allowing applications to read and update enabled/disabled state configuredSyncEngines.SyncEngineis no longer anenum class, but asealed classinstead. e.g.SyncEngine.HISTORYis nowSyncEngine.History.DeviceConstellation#setDeviceNameAsyncnow takes acontextin addition to newname.FxaAuthDatanow takes an optionaldeclinedEnginesset of SyncEngines.
14.0.1
- Commits
- Dependencies
- Gecko
- feature-collections
- Fixed #4514: Do not restore parent tab ID for collections.
- service-glean
- PR #4511: Always set ‘wasMigrated’ to false in the Glean SDK.
14.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-customtabs
- Now the color of the tracking protection icon adapts to color of the toolbar.
- feature-session, engine-gecko-nightly and engine-gecko-beta
- Added a way to exposes the same amount of trackers as Firefox desktop has in it tracking protection panel via TrackingProtectionUseCases.
val useCase = TrackingProtectionUseCases(sessionManager,engine) useCase.fetchTrackingLogs( session, onSuccess = { trackersLog -> // A list of all the tracker logger for this session }, onError = { throwable -> //A throwable indication what went wrong } ) - browser-toolbar
- Resized icons on the toolbar see #4490 for more information.
- Added a way to customize the color of the tracking protection icon via BrowserToolbar.
val toolbar = BrowserToolbar(context) toolbar.trackingProtectionColor = Color.BLUE
- All components
- Increased
androidx.browserversion to1.2.0-alpha07.
- Increased
- feature-media
- Playback will now be stopped and the media notification will get removed if the app’s task is getting removed (app is swiped away in task switcher).
- feature-pwa
- Adds
WebAppHideToolbarFeature.onToolbarVisibilityChangeto be notified when the toolbar is shown or hidden.
- Adds
- engine-gecko-nightly
- Added the ability to exfiltrate Gecko categorical histograms.
- support-webextensions
- 🆕 New component containing building blocks for features implemented as web extensions.
- lib-push-amazon
- Fixed usage of cache version of registration ID in situations when app data is deleted.
- tools-detekt
- New (internal-only) component with custom detekt rules.
- service-glean
- ⚠ This is a breaking change: Glean.initialize() must be called on the main thread.
13.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- All components
- Updated Kotlin version from
1.3.40to1.3.50. - Updated Kotlin Coroutine library version from
1.2.2to1.3.0.
- Updated Kotlin version from
- browser-session
- Clear session icon only if URL host changes.
- feature-pwa
- Adds
WebAppUseCases.isInstallableto check if the current session can be installed as a Progressive Web App.
- Adds
- feature-downloads
- ⚠️ This is a breaking change: The
feature-downloadscomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aDownloadsFeaturerequires aBrowserStoreinstance (instead of aSessionManagerinstance) and aDownloadsUseCasesinstance now.
- ⚠️ This is a breaking change: The
- feature-contextmenu
- ⚠️ This is a breaking change: The
feature-contextmenucomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aContextMenuFeaturerequires aBrowserStoreinstance (instead of aSessionManagerinstance) and aContextMenuUseCasesinstance now.
- ⚠️ This is a breaking change: The
- service-glean
- ⚠️ This is a breaking change: applications need to use
ConceptFetchHttpUploaderfor overriding the ping uploading mechanism instead of directly usingconcept-fetchimplementations.
- ⚠️ This is a breaking change: applications need to use
- feature-tabs
- ⚠️ This is a breaking change: Methods that have been accepting a parent
Sessionparameter now expect the parent id (String).
- ⚠️ This is a breaking change: Methods that have been accepting a parent
- browser-menu
- Adds the ability to create a BrowserMenuImageSwitch, a BrowserMenuSwitch with icon
- feature-accounts
- Added ability to configure FxaWebChannelFeature with a set of
FxaCapability. Currently there’s just one:CHOOSE_WHAT_TO_SYNC. It defaults tofalse, so if you want “choose what to sync” selection during auth flows, please specify it.
- Added ability to configure FxaWebChannelFeature with a set of
12.0.1
- Commits
- Dependencies
- Gecko
- lib-push-amazon
- Fixed #4448: Clearing app data does not reset the registration ID.
12.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko-nightly, browser-engine-gecko-beta and browser-engine-gecko
- The
TrackingProtectionPolicy.recommended()andTrackingProtectionPolicy.strict()policies are now aligned with standard and strict (respectively) policies on FireFox desktop, for more details see the issue #4349.
- The
- browser-engine-gecko-nightly and browser-engine-gecko-beta
- The
TrackingProtectionPolicy.selectfunction now allows you to indicate ifstrictSocialTrackingProtectionshould be activated or not. When it is active blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the issue #4320val policy = TrackingProtectionPolicy.select( strictSocialTrackingProtection = true )
- The
- context-menu
- Exposed title tag from GV in HitResult. Fixes [#1444]. If title is null or blank the src value is returned for title.
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 69.0browser-engine-gecko-beta: GeckoView 70.0browser-engine-gecko-nightly: GeckoView 71.0
- Merge day!
- feature-toolbar
- ⚠️ This is a breaking change: The
feature-toolbarcomponent has been migrated tobrowser-statefrombrowser-session. Therefore creating aToolbarFeaturerequires aBrowserStoreinstance instead of aSessionManagerinstance now.
- ⚠️ This is a breaking change: The
- lib-crash
- Now supports Breadcrumbs. Use the ‘recordCrashBreadcrumb()’ to record Breadcrumbs if the underlying crash reporter service supports it.
crashReporter.recordCrashBreadcrumb( CrashBreadcrumb("Settings button clicked", data, "UI", Level.INFO, Type.USER) )
- Now supports Breadcrumbs. Use the ‘recordCrashBreadcrumb()’ to record Breadcrumbs if the underlying crash reporter service supports it.
- browser-engine-gecko-nightly and browser-engine-gecko-beta
- The
TrackingProtectionPolicy.strict()now blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the issue #4213
- The
- browser-session
- ⚠️ This is a breaking change:
getSessionIdandEXTRA_SESSION_IDhas moved to thefeature-intentcomponent.
- ⚠️ This is a breaking change:
- feature-intent
- ⚠️ This is a breaking change:
TabIntentProcessorhas moved to theprocessingsub-package, but is still in the same component.
- ⚠️ This is a breaking change:
- browser-engine-gecko
- Like with the nightly and beta flavor previously this component now has a hard dependency on the new universal GeckoView build that is no longer architecture specific (ARM, x86, ..). With that apps no longer need to specify the GeckoView dependency themselves and synchronize the used version with Android Components. Additionally apps can now make use of APK splits or Android App Bundles (AAB).
- browser-engine-servo
- ❌ We removed the
browser-engine-servocomponent since it was not being maintained, updated and used.
- ❌ We removed the
- concept-sync, service-firefox-accounts
- ⚠️ This is a breaking change:
SyncConfig’ssyncableStoreshas been renamed tosupportedEngines, expressed via new enum typeSyncEngine.begin*OAuthAccount methods now return anAuthFlowUrl, which encapsulates an OAuth state identifier.AccountObserver:onAuthenticatedmethod now hasauthTypeparameter (instead ofnewAccount), which describes in detail what caused an authentication.GlobalSyncableStoreProvider.configureStorenow takes a pair ofPair<SyncEngine, SyncableStore>, instead of allowing arbitrary string names for engines.GlobalSyncableStoreProvider.getStoreis no longer part of the public API.
- feature-push
- Added more logging into
AutoPushFeatureto aid in debugging in release builds.
- Added more logging into
- support-ktx
- Added variant of
Flow.ifChanged()that takes a mapping function in order to filter items where the mapped value has not changed.
- Added variant of
- feature-pwa
- Adds the ability to create a basic shortcut with a custom label
- browser-engine-gecko-nightly
- Adds support for exposing Gecko scalars through the Glean SDK. See bug 1579365 for details.
- support-utils
Intent.asForegroundServicePendingIntent(Context)extension method to create pending intent for the service that will play nicely with background execution limitations introduced in Android O (e.g. foreground service).
- concept-sync
- ⚠️ This is a breaking change:
actionparam ofAuthType.OtherExternalis now optional. Missingactionindicates that we really don’t know what external authType we’ve hit.
- ⚠️ This is a breaking change:
11.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-icons
- Ensures icons are not cached on the disk in private sessions.
- browser-menu
- Added
startImageto Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted - Highlight properties of HighlightableMenuItem
startImageandendImageare now both optional
- Added
- lib-state
- Added
Storeextensions to observeStateusing Kotlin’sFlowAPI:Store.flow(),Store.flowScoped().
- Added
- support-ktx
- Added property delegates to work with
SharedPreferences. - Added
Flow.ifChanged()operator for filtering aFlowbased on whether a value has changed from the previous one (e.g.A, A, B, C, A -> A, B, C, A).
- Added property delegates to work with
- feature-customtabs
- Added
CustomTabsServiceStoreto track custom tab data inAbstractCustomTabsService.
- Added
- feature-pwa
- Added support for hiding the toolbar in a Trusted Web Activity.
- Added
TrustedWebActivityIntentProcessorto process TWA intents. - Added
CustomTabState.trustedOriginsextension method to turn the verification state of a custom tab into a list of origins. - Added
WebAppHideToolbarFeature.onTrustedScopesChangeto change the trusted scopes after the feature is created.
- service-telemetry
- This component is now deprecated. Please use the Glean SDK instead. This library will not be removed until all projects using it start using the Glean SDK.
- browser-session, feature-intent
- ⚠️ This is a breaking change: Moved
Intentrelated code frombrowser-sessiontofeature-intent.
- ⚠️ This is a breaking change: Moved
- feature-media
- The
Intentlaunched from the media notification now has its action set toMediaFeature.ACTION_SWITCH_TAB. In addition to that the extraMediaFeature.EXTRA_TAB_IDcontains the id of the tab the media notification is displayed for.
- The
10.0.1
- Commits
- Dependencies
- Gecko
- browser-menu
- Added
startImageto Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted - Highlight properties of HighlightableMenuItem
startImageandendImageare now both optional
- Added
- Imported latest state of translations.
10.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-toolbar
- Toolbar Menu is now closed on exiting the app.
- support-test-appservices
- 🆕 New component for synchronizing Application Services’ unit testing dependencies used in Android Components.
- service-location
- Added
RegionSearchLocalizationProvider- ASearchLocalizationProviderimplementation that uses aMozillaLocationServiceinstance to do a region lookup via GeoIP. - ⚠️ This is a breaking change: An implementation of
SearchLocalizationProvidernow returns aSearchLocalizationdata class instead of multiple properties.
- Added
- service-glean
- ⚠️ This is a breaking change:
Glean.handleBackgroundEventis now an internal API. - Added a
QuantityMetricType(for internal use by Gecko metrics only).
- ⚠️ This is a breaking change:
- browser-engine-gecko(-beta/nightly), concept-engine
- Added simplified
Media.statederived fromMedia.playbackStateevents.
- Added simplified
- lib-push-adm, lib-push-firebase, concept-push
- Added
isServiceAvailableto signify if the push service is supported on the device.
- Added
- concept-engine
- Added
WebNotificationdata class for the web notifications API.
- Added
- browser-engine-system
- Fixed issue 4191 where the
recommended()tracking category was not getting applied forSystemEngine.
- Fixed issue 4191 where the
- concept-engine, browser-engine-gecko-nightly and browser-engine-gecko-beta:
- ⚠️ This is a breaking change:
TrackingProtectionPolicydoes not have asafeBrowsingCategoriesanymore, Safe Browsing is now a separate setting on the Engine level. To change the default value ofSafeBrowsingPolicy.RECOMMENDEDyou have set it throughengine.settings.safeBrowsingPolicy. - This decouples the tracking protection API and safe browsing from each other so you can change the tracking protection policy without affecting your safe browsing policy as described in this issue #4190.
- ⚠️ Alert for SystemEngine consumers: The Safe Browsing API is not yet supported on this engine, this will be covered on #4206. If you use this API you will get a
UnsupportedSettingException, however you can use a manifest tag to activate it.
<manifest> <application> <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" /> ... </application> </manifest> - ⚠️ This is a breaking change:
9.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-menu
- Updated the styling of the menu to not have padding on top or bottom. Also modified size of
BrowserMenuItemToolbarto matchBrowserToolbar’s height
- Updated the styling of the menu to not have padding on top or bottom. Also modified size of
- feature-media
- Do not display title/url/icon of website in media notification if website is opened in private mode.
- concept-engine and browser-session
- ⚠️ This is a breaking change:
TrackingProtectionPolicyremoves thecategoriesproperty to expose two new onestrackingCategories: Array<AntiTrackingCategory>andsafeBrowsingCategories: Array<SafeBrowsingCategory>to separate the tracking protection categories from the safe browsing ones. - ⚠️ This is a breaking change:
TrackingProtectionPolicy.all()has been replaced byTrackingProtectionPolicy.strict()to have similar naming conventions with GeckoView api. - ⚠️ This is a breaking change:
Tracker#categorieshas been replaced byTracker#trackingCategoriesandTracker#cookiePoliciesto better report blocked content see #4098. - Added:
Session#trackersLoadedA list ofTrackers that could be blocked but has been loaded in this session. - Added:
Session#Observer#onTrackerLoadedNotifies that a tracker that could be blocked has been loaded.
- ⚠️ This is a breaking change:
- browser-toolbar
- HTTP sites are now marked as insecure with a broken padlock icon, rather than a globe icon. Apps can revert to the globe icon by using a custom
BrowserToolbar.siteSecurityIcon.
- HTTP sites are now marked as insecure with a broken padlock icon, rather than a globe icon. Apps can revert to the globe icon by using a custom
- service-firefox-accounts, concept-sync
FxaAccountManager, if configured withDeviceCapability.SEND_TAB, will now automatically refresh device constellation state and poll for device events during initialization and login.FxaAccountManager.syncNowAsynccan now receive adebounceparameter, allowing consumers to specify debounce behaviour of their sync requests.- ⚠️ This is a breaking change:
- Removed public methods from
DeviceConstellationand its implementation inFxaDeviceConstellation:fetchAllDevicesAsync,startPeriodicRefresh,stopPeriodicRefresh. DeviceConstellation#refreshDeviceStateAsyncwas renamed torefreshDevicesAsync: no longer polls for device events, only updates device states (e.g. new devices, name changes)pollForEventsAsyncno longer returns the events. Use the observer API instead:val deviceConstellation = autheneticatedAccount()?.deviceConstellation() ?: return deviceConstellation.registerDeviceObserver( object: DeviceEventsObserver { override fun onEvents(events: List<DeviceEvent>) { // Process device events here. } }, lifecycleOwner, false) // Poll for events. deviceConstellation.pollForEventsAsync().await()
- browser-session
- Removed deprecated
CustomTabConfighelpers. Use the equivalent methods in feature-customtabs instead.
- Removed deprecated
- support-ktx
- Removed deprecated methods that have equivalents in Android KTX.
- concept-sync, service-firefox-account
- ⚠️ This is a breaking change
- In
OAuthAccount(and by extension,FirefoxAccount)beginOAuthFlowAsyncno longer need to specifywantsKeysparameter; it’s automatically inferred from the requestedscopes. - Three new device types now available:
tablet,tv,vr.
8.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- service-glean
- Timing distributions now use a functional bucketing algorithm that does not require fixed limits to be defined up front.
- support-android-test
- Added
WebserverRule- a junit rule that will run a webserver during tests serving content from assets in the test package (#3893).
- Added
- browser-engine-gecko-nightly
- The component now exposes an implementation of the Gecko runtime telemetry delegate,
glean.GeckoAdapter, which can be used to collect Gecko metrics with the Glean SDK.
- The component now exposes an implementation of the Gecko runtime telemetry delegate,
- browser-engine-gecko-beta
- The component now handles situations where the Android system kills the content process (without killing the main app process) in order to reclaim resources. In those situations the component will automatically recover and restore the last known state of those sessions.
- browser-toolbar
- Changed
BrowserToolbar.siteSecurityColorto use no icon color filter when the color is set toColor.TRANSPARENT. - Added
BrowserToolbar.siteSecurityIconto use custom security icons with multiple colors in the toolbar.
- Changed
- feature-sendtab
- Added a
SendTabFeaturethat observes account device events with optional support for push notifications.
SendTabFeature( context, accountManager, pushFeature, // optional pushService // optional; if you want the service to also be started/stopped based on account changes. onTabsReceiver = { from, tabs -> /* Do cool things here! */ } ) - Added a
- feature-media
MediaFeatureis no longer showing a notification for playing media with a very short duration.- Lowered priority of media notification channel to avoid the media notification making any sounds itself.
7.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-menu
- ⚠️ This is a breaking change:
BrowserMenuHighlightableItemnow has a ripple effect and includes an example of how to pass in a drawable properly to also include a ripple when highlighted
- ⚠️ This is a breaking change:
- feature-accounts
- ⚠️ This is a breaking change:
- The
FirefoxAccountsAuthFeatureno longer needs anTabsUseCases, instead is taking a lambda to allow applications to decide which action should be taken. This fixes #2438 and #3272.
val feature = FirefoxAccountsAuthFeature( accountManager, redirectUrl ) { context, authUrl -> // passed-in context allows easily opening new activities for handling urls. tabsUseCases.addTab(authUrl) } // ... elsewhere, in the UI code, handling click on button "Sign In": components.feature.beginAuthentication(activityContext) - browser-engine-gecko-nightly
- Now supports window requests. A new tab will be opened for
target="_blank"links andwindow.opencalls.
- Now supports window requests. A new tab will be opened for
- browser-icons
- Handles low-memory scenarios by reducing memory footprint.
- feature-app-links
- Fixed #3944 causing third-party apps being opened when links with a
javascriptscheme are clicked.
- Fixed #3944 causing third-party apps being opened when links with a
- feature-session
- ⚠️ This is a breaking change:
- The
WindowFeatureno longer needs an engine. It can now be created using just:val windowFeature = WindowFeature(components.sessionManager)
- feature-pwa
- Added full support for pinning websites to the home screen.
- Added full support for Progressive Web Apps, which can be pinned and open in their own window.
- service-glean
- Fixed a bug in
TimeSpanMetricTypethat prevented multiple consecutivestart()/stop()calls. This resulted in theglean.baseline.durationbeing missing from mostbaselinepings.
- Fixed a bug in
- service-firefox-accounts
- ⚠️ This is a breaking change:
AccountObserver.onAuthenticatednow helps observers distinguish when an account is a new authenticated account one with a secondnewAccountboolean parameter.
- ⚠️ This is a breaking change:
- concept-sync, service-firefox-accounts:
- ⚠️ This is a breaking change: Added
OAuthAccount@disconnectAsync, which replacedDeviceConstellation@destroyCurrentDeviceAsync.
- ⚠️ This is a breaking change: Added
- lib-crash
- ⚠️ Known issue: Sending a crash using the
MozillaSocorroServicewith GeckoView 69.0 or 68.0, will lead to aNoSuchMethodErrorwhen using this particular version of android components. See #4052.
- ⚠️ Known issue: Sending a crash using the
6.0.2
- Commits
- Dependencies
- Gecko
- service-glean
- Fixed a bug in
TimeSpanMetricTypethat prevented multiple consecutivestart()/stop()calls. This resulted in theglean.baseline.durationbeing missing from mostbaselinepings.
- Fixed a bug in
6.0.1
- Commits
- Dependencies
- Gecko
- feature-app-links
- Fixed #3944 causing third-party apps being opened when links with a
javascriptscheme are clicked.
- Fixed #3944 causing third-party apps being opened when links with a
- Imported latest state of translations.
6.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- support-utils
- Fixed #3871 autocomplete incorrectly fills urls that contains a port number.
- feature-readerview
- Fixed #3864 now minus and plus buttons have the same size on reader view.
- browser-engine-gecko-nightly
- The component now handles situations where the Android system kills the content process (without killing the main app process) in order to reclaim resources. In those situations the component will automatically recover and restore the last known state of those sessions.
- Now supports window requests. A new tab will be opened for
target="_blank"links andwindow.opencalls.
- service-location
- 🆕 A new component for accessing Mozilla’s and other location services.
- feature-prompts
- Improved month picker UI, now we have the same widget as Fennec.
- support-ktx
- Deprecated
ViewGroup.forEachin favour of Android Core KTX. - Deprecated
Map.toBundle()in favour of Android Core KTXbundleOf.
- Deprecated
- lib-state
- Migrated
Store.broadcastChannel()toStore.channel()returning aReceiveChannelthat can be read by only one receiver. Broadcast channels have a more complicated lifetime that is not needed in most use cases. For multiple receivers multiple channels can be created from theStoreor Kotlin’sReceiveChannel.broadcast()extension method can be used.
- Migrated
- support-android-test
- Added
LeakDetectionRuleto install LeakCanary when running instrumented tests. If a leak is found the test will fail and the test report will contain the leak trace.
- Added
- lib-push-amazon
- 🆕 Added a new component for Amazon Device Messaging push support.
- browser-icons
- Changed the maximum size for decoded icons. Icons are now scaled to the target size to save memory.
- service-firefox-account
-
Added
isSyncActive(): Booleanmethod toFxaAccountManager - feature-customtabs
CustomTabsToolbarFeaturenow optionally takesWindowas a parameter. It will update the status bar color to match the toolbar color.- Custom tabs can now style the navigation bar using
CustomTabsConfig.navigationBarColor.
- feature-sendtab
- 🆕 New component for send tab use cases.
val sendTabUseCases = SendTabUseCases(accountManager) // Send to a particular device sendTabUseCases.sendToDeviceAsync("1234", TabData("Mozilla", "https://mozilla.org")) // Send to all devices sendTabUseCases.sendToAllAsync(TabData("Mozilla", "https://mozilla.org")) // Send multiple tabs to devices works too.. sendTabUseCases.sendToDeviceAsync("1234", listof(tab1, tab2)) sendTabUseCases.sendToAllAsync(listof(tab1, tab2)) - support-ktx
- Added
Collection.crossProductto retrieve the cartesian product of twoCollections.
- Added
- service-glean
- ⚠️ This is a breaking change:
Glean.enableTestingModeis nowinternal. Tests can use theGleanTestRuleto enable testing mode. Updated docs available here.
- ⚠️ This is a breaking change:
- feature-push
- Added default arguments when registering for subscriptions/messages.
5.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- All components
- Increased
compileSdkVersionto 29 (Android Q)
- Increased
- feature-tab
- ⚠️ This is a breaking change: Now
TabsUseCases.SelectTabUseCaseis an interface, if you want to rely on its previous behavior you could keep usingTabsUseCases.selectTabor useTabsUseCases.DefaultSelectTabUseCase.
- ⚠️ This is a breaking change: Now
- feature-awesomebar
SessionSuggestionProvidernow have a new parameterexcludeSelectedSession, to ignore the selected session on the suggestions.
- concept-engine and browser-session
- ⚠️ This is a breaking change: Function signature changed from
Session.Observer.onTrackerBlocked(session: Session, blocked: String, all: List<String>) = UnittoSession.Observer.onTrackerBlocked(session: Session, tracker: Tracker, all: List<Tracker>) = Unit - ⚠️ This is a breaking change: Function signature changed from
EngineSession.Observer.onTrackerBlocked(url: String) = UnittoEngineSession.Observer.onTrackerBlocked(tracker: Tracker) = Unit - Added: To provide more details about a blocked content, we introduced a new class called
Trackerthis contains information like theurlandcategoriesof theTracker. Among the categories we haveAd,Analytic,Social,Cryptomining,FingerprintingandContent.
- ⚠️ This is a breaking change: Function signature changed from
- browser-icons
- Added
BrowserIcons.loadIntoViewto automatically load an icon into anImageView.
- Added
- browser-session
- Added
IntentProcessorinterface to represent a class that processes intents to create sessions. - Deprecated
CustomTabConfig.isCustomTabIntentandCustomTabConfig.createFromIntent. UseisCustomTabIntentandcreateFromCustomTabIntentin feature-customtabs instead.
- Added
- feature-customtabs
- Added
CustomTabIntentProcessorto create custom tab sessions from intents. - Added
isCustomTabIntentto check if an intent is for creating custom tabs. - Added
createCustomTabConfigFromIntentto create aCustomTabConfigfrom a custom tab intent.
- Added
- feature-downloads
FetchDownloadManagernow determines the filename during the download, resulting in more accurate filenames.
- feature-intent
- Deprecated
IntentProcessorclass and moved some of its code to the newTabIntentProcessor.
- Deprecated
- feature-push
- Updated the default autopush service endpoint to
updates.push.services.mozilla.com.
- Updated the default autopush service endpoint to
- service-glean
- Hyphens
-are now allowed in labels for metrics. See 1566764. - ⚠️ This is a breaking change: Timespan values are returned in their configured time unit in the testing API.
- Hyphens
- lib-state
- Added ability to pause/resume observing a
Storeviapause()andresume()methods on the subscription - When using
observeManuallythe returnedSubscriptionis in paused state by default. - When binding a subscription to a
LifecycleOwnerthen this subscription will automatically paused and resumed based on whether the lifecycle is in STARTED state. - When binding a subscription to a
Viewthen this subscription will be paused until theViewgets attached. - Added
Store.broadcastChannel()to observe state from a coroutine sequentially ordered. - Added helpers to process states coming from a
Storesequentially viaFragment.consumeFrom(Store)andView.consumeFrom(Store).
- Added ability to pause/resume observing a
- support-ktx
- ⚠️ This is a breaking behavior change:
JSONArray.mapNotNullis now an inline function, changing the behavior of thereturnkeyword within its lambda. - Added
View.toScope()to create aCoroutineScopethat is active as long as theViewis attached. Once theViewgets detached theCoroutineScopegets cancelled automatically. By default coroutines dispatched on the created [CoroutineScope] run on the main dispatcher
- ⚠️ This is a breaking behavior change:
- concept-push, lib-push-firebase, feature-push
- Added
deleteTokento the PushService interface. - Added the implementation for it to Firebase Push implementation.
- Added
forceRegistrationRenewalto the AutopushFeature for situations where our current registration token may be invalid for us to use.
- Added
- service-firefox-accounts
- Added
AccountMigration, which may be used to query trusted FxA Auth providers and automatically sign-in into available accounts.
- Added
4.0.1
- Commits
- Dependencies
- Gecko
- service-glean
- Hyphens
-are now allowed in labels for metrics. See 1566764.
- Hyphens
-
Imported latest state of translations.
- support-rusthttp
- ⚠️ This is a breaking change: The application-services (FxA, sync, push) code now will send HTTP requests through a kotlin-provided HTTP stack in all configurations, however it requires configuration at startup. This may be done via the neq
support-rusthttpcomponent as follows:
import mozilla.components.support.rusthttp.RustHttpConfig // Note: other 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.
- ⚠️ This is a breaking change: The application-services (FxA, sync, push) code now will send HTTP requests through a kotlin-provided HTTP stack in all configurations, however it requires configuration at startup. This may be done via the neq
4.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-engine-gecko, browser-engine-gecko-beta, browser-engine-gecko-nightly
- Merge day!
browser-engine-gecko-release: GeckoView 68.0browser-engine-gecko-beta: GeckoView 69.0browser-engine-gecko-nightly: GeckoView 70.0
- Merge day!
- browser-engine-gecko-beta
- Like with the nightly flavor previously (0.55.0) this component now has a hard dependency on the new universal GeckoView build that is no longer architecture specific (ARM, x86, ..). With that apps no longer need to specify the GeckoView dependency themselves and synchronize the used version with Android Components. Additionally apps can now make use of APK splits or Android App Bundles (AAB).
- feature-media
- Added
MediaNotificationFeature- a feature implementation to show an ongoing notification (keeping the app process alive) while web content is playing media.
- Added
- feature-downloads
- Added custom notification icon for
FetchDownloadManager.
- Added custom notification icon for
- feature-app-links
- Added whitelist for schemes of URLs to open with an external app. This defaults to
mailto,market,smsandtel.
- 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 with
FxaAccountManagerand sync changes FxaAccountManagernow has a new, simplified public API.BackgroundSyncManageris longer exists; sync functionality exposed directly viaFxaAccountManager.- See component’s README for detailed description of the new API.
- As part of these changes, token caching issue has been fixed. See #3579 for details.
- ⚠️ This is a breaking change: Public API for interacting with
- concept-engine, browser-engine-gecko(-beta/nightly).
- Added
TrackingProtectionPolicy.CookiePolicyto indicate how cookies should behave for a givenTrackingProtectionPolicy. - Now
TrackingProtectionPolicy.selectallows you to specify aTrackingProtectionPolicy.CookiePolicy, if not specified,TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERSwill be used. - Behavior change: Now
TrackingProtectionPolicy.none()will get assigned aTrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL, and bothTrackingProtectionPolicy.all()andTrackingProtectionPolicy.recommended()will have aTrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS.
- Added
- concept-engine, browser-engine-system
- Added
useWideViewPortinSettingsto support the viewport HTML meta tag or if a wide viewport should be used. (Only affectsSystemEngineSession)
- Added
- browser-session
- Added
SessionManager.add(List<Session>)to add a list ofSessions to theSessionManager.
- Added
- feature-tab-collections
- ⚠️ These are breaking changes below:
Tab.restore()now returns aSessioninstead of aSessionManager.SnapshotTabCollection.restore()andTabCollection.restoreSubset()now return aList<Session>instead of aSessionManager.Snapshot
- support-ktx
- Added
onNextGlobalLayoutto add aViewTreeObserver.OnGlobalLayoutListenerthat is only called once.
- Added
3.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- feature-prompts
- Improved file picker prompt by displaying the option to use the camera to capture images, microphone to record audio, or video camera to capture a video.
- The color picker has been redesigned based on Firefox for Android (Fennec).
- feature-pwa
- Added preliminary support for pinning websites to the home screen.
- browser-search
- Loading search engines should no longer deadlock on devices with 1-2 CPUs
- concept-engine, browser-engine-gecko(-beta/nightly), browser-engine-system
- Added
EngineView.release()to manually release anEngineSessionthat is currently being rendered by theEngineView. Usually an app does not need to callrelease()manually sinceEngineViewtakes care of releasing theEngineSessionon specific lifecycle events. However sometimes the app wants to release anEngineSessionto immediately render it on anotherEngineView; e.g. when transforming a Custom Tab into a regular browser tab.
- Added
- browser-session
- ⚠️ This is a breaking change: Removed “default session” behavior from
SessionManager. This feature was never used by any app except the sample browser.
- ⚠️ This is a breaking change: Removed “default session” behavior from
- feature-downloads
- Added
FetchDownloadManager, an alternate download manager that uses a fetchClientinstead of the native AndroidDownloadManager.
- Added
- support-ktx
- Deprecated
String.toUri()in favour of Android Core KTX. - Deprecated
View.isGoneandView.isInvisiblein favour of Android Core KTX. - Added
putCompoundDrawablesRelativeandputCompoundDrawablesRelativeWithIntrinsicBounds, aliases ofsetCompoundDrawablesRelativethat use Kotlin named and default arguments.
- Deprecated
2.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- browser-toolbar
- Adds
focus()which provides a hook for callingeditMode.focus()to focus the edit modeurlView
- Adds
- browser-awesomebar
- Updated
DefaultSuggestionViewHolderto have a style more consistent with Fenix mocks. - Fixed a bug with
InlineAutocompleteEditTextwhere the cursor would disappear if a user cleared an suggested URL.
- Updated
- lib-state
- A new component for maintaining application, screen or component state via a redux-style
Store. This component provides the architectural foundation for thebrowser-statecomponent (in development).
- A new component for maintaining application, screen or component state via a redux-style
- feature-downloads
onDownloadCompletedno longer receives the download object and ID.
- support-ktx
- Deprecated
Resource.pxToDp. - Added
Int.dpToPxto convert from density independent pixels to an int representing screen pixels. - Added
Int.dpToFloatto convert from density independent pixels to a float representing screen pixels.
- Deprecated
- support-ktx
- Added
Context.isScreenReaderEnabledextension to check if TalkBack service is enabled.
- Added
- browser-icons
- The component now ships with the tippy-top-sites top 200 list for looking up icon resources.
- concept-engine, browser-engine-gecko(-beta/nightly), feature-session, feature-tabs
- Added to support for specifying additional flags when loading URLs. This can be done using the engine session directly, as well as via use cases:
// Bypass cache sessionManager.getEngineSession().loadUrl(url, LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE)) // Bypass cache and proxy sessionUseCases.loadUrl.invoke(url, LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE, LoadUrlFlags.BYPASS_PROXY))
1.0.0
- Commits
- Milestone
- Dependencies
- Gecko
- 🛑 Removed deprecated components (See blog posting):
- feature-session-bundling
- ui-progress
- ui-doorhanger
- concept-engine, browser-engine-gecko(-beta/nightly), browser-engine-system
- Added
Engine.versionproperty (EngineVersion) for printing and comparing the version of the used engine.
- Added
- browser-menu
- Added
endOfMenuAlwaysVisibleproperty/parameter toBrowserMenuBuilderconstructor and toBrowserMenu.showfunction. When is set to true makes sure the bottom of the menu is always visible, this allows use cases like #3211. - Added
onDimissparameter toBrowserMenu.showfunction, called when the menu is dismissed. - Changed
BrowserMenuHighlightableItemconstructor to allow for dynamically toggling the highlight withinvalidate().
- Added
- browser-toolbar
- Added highlight effect to the overflow menu button when a highlighted
BrowserMenuHighlightableItemis present.
- Added highlight effect to the overflow menu button when a highlighted
- feature-tab-collections
- Tabs can now be restored without restoring the ID of the
Sessionby using therestoreSessionIdflag. An app may prefer to use new IDs if it expects sessions to get restored multiple times - otherwise breaking the promise of a unique ID.
- Tabs can now be restored without restoring the ID of the
- browser-search
- Added
getProvidedDefaultSearchEnginetoSearchEngineManagerto return the provided default search engine or the first search engine if the default is not set. This allows use cases like #3344.
- Added
- feature-tab-collections
- Behavior change:
TabCollectioninstances returned byTabCollectionStorageare now ordered by the last time they have been updated (instead of the time they have been created).
- Behavior change:
- lib-crash
- Restrictions to background activity starts in Android Q+ make it impossible to launch the crash reporter prompt after certain crashes. In those situations the library will show a “crash notification” instead. Clicking on the notification will launch the crash reporter prompt allowing the user to submit a crash report.
For older versions see the changelog archive.