Updates the Day Zero onboarding experience on smartphones and small screen devices to a multi‑step, horizontally advancing flow driven by CTA buttons.
It introduces distinct layouts per step, a pager animation helper, and updates onboarding logic to support a scalable, multi‑step sequence with minimal duplication.
Tablet support is intentionally out of scope and will be handled in a separate PR.
[Android] Fixes a crash in FaviconUtils.getIconDrawableWithFilter
when an icon is not available for a particular URL by falling back
to the default globe icon.
Resolves: https://github.com/brave/brave-browser/issues/52458
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/b80a1b0c422e6fbd55c1a3bf92ab3b70cdee2363
commit b80a1b0c422e6fbd55c1a3bf92ab3b70cdee2363
Author: Menghan Yang <myuu@google.com>
Date: Mon Jan 12 04:06:44 2026 -0800
[Android][Signin] Migrate NTP promo to the new sign-in API
This change migrates the NTP sign-in promo to a new sign-in API.
It plumbs several new dependencies (ActivityResultTracker,
ModalDialogManager, SnackbarManager, BottomSheetController, etc.)
through NativePageFactory, NewTabPage, and NewTabPageLayout down to the
NtpSigninPromoCoordinator.
Bug: 437039516
Change-Id: I33714b69d37e4f482973a8f00a10530f5e5d3e2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7390216
Commit-Queue: Menghan Yang <myuu@google.com>
Reviewed-by: Boris Sazonov <bsazonov@chromium.org>
Auto-Submit: Menghan Yang <myuu@google.com>
Cr-Commit-Position: refs/heads/main@{#1567687}
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/d5213c799a29303dcc0e9497fda72130b39af681
commit d5213c799a29303dcc0e9497fda72130b39af681
Author: Ho Cheung <hocheung@chromium.org>
Date: Tue Dec 23 17:03:39 2025 -0800
[Bookmarks] Add "Copy link" option to Android bookmark manager selection menu
Add a "Copy link" menu option to the selection mode menu in the
Android bookmarks manager. When a single bookmark is selected,
users can now copy its URL to the clipboard via the overflow menu,
providing a quick way to share bookmark URLs without opening them.
This feature:
- Appears in the three-dot overflow menu alongside "Open in new tab"
and "Open in Incognito tab" when exactly one bookmark is selected.
- Is hidden when folders are selected (folders have no URL).
- Clears the selection after copying for a cleaner UX.
- Shows a "Copied" snackbar notification to confirm the action.
- Reuses existing translated strings (@string/copy_link, @string/copied)
to avoid additional i18n overhead.
At the same time, add appropriate tests to improve code coverage and
UserAction for statistical use.
Design doc:
https://docs.google.com/document/d/1zDD-gk01xMioNgL_NTKroxvPW1HnVbPDHIxNQlF-_ZI
Bug: 448009940
Change-Id: I60fdc09a971daea4a92c64b79d3a1706502e63d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7227136
Reviewed-by: Sky Malice <skym@chromium.org>
Reviewed-by: Wenyu Fu <wenyufu@chromium.org>
Reviewed-by: Brandon Wylie <wylieb@google.com>
Owners-Override: Wenyu Fu <wenyufu@chromium.org>
Reviewed-by: Theresa Sullivan <twellington@chromium.org>
Commit-Queue: Aaron Teo <hocheung@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1562385}
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/17d86894d67e5807756d5e437d813cc13e5ee630
commit 17d86894d67e5807756d5e437d813cc13e5ee630
Author: Jinsuk Kim <jinsukkim@chromium.org>
Date: Wed Dec 17 13:18:21 2025 -0800
[Settings Search] Let Sync pref open from search results
Sync preference in main settings either opens a fragment via
SettingsNavigation or displays a toast if it is disabled by
administration policy. This CL makes it work in the same way when
opened from search results.
For this to work, SettingsNavigation#startSettings is given an extra
parameter (EXTRA_FRAGMENT_TAG) which is given to a fragment transition
from search to result state. This allows the fragment opened via
SettingsNavigation to behave as expected for back action/tap on title.
Bug: 469676538
Change-Id: Ic84cac90a195bbfebf6734727b3367b8aeec52a5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7268507
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: Moe Adel <adelm@google.com>
Cr-Commit-Position: refs/heads/main@{#1560153}
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/8a572f986d8d90fe1befaa2792dabff71410b4db
commit 8a572f986d8d90fe1befaa2792dabff71410b4db
Author: Abdelrahman Eed <abdoeed@google.com>
Date: Tue Dec 16 11:20:41 2025 -0800
[Clank Navigation] Add support for user-modified (Shift-Click)
This CL adds support for the user modified navigation (Shift + Left
click) to launch a new browser window or an app if one is present
depending on the navigation source, for desktop devices.
Changes (only affecting desktop Android devices, or if we are on desktop
windowing):
- Launch a new chrome window if navigating from the chrome browser
- Launch an app to handle the navigation if navigating from a CCT
NO_IFTTT=the check is not working properly, I added the changes needed
Change-Id: I480eb5b648c7da281a83e592fec2b45d52a89631
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6662663
Commit-Queue: Abdelrahman Eed <abdoeed@google.com>
Reviewed-by: Michael Thiessen <mthiesse@chromium.org>
Auto-Submit: Abdelrahman Eed <abdoeed@google.com>
Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1559473}
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/9c2a3c87dbd2168e374e611422f9d815c67293ab
commit 9c2a3c87dbd2168e374e611422f9d815c67293ab
Author: Shuhei Takahashi <nya@chromium.org>
Date: Mon Dec 8 19:32:36 2025 -0800
extensions: Initialize extension UI post-native-init
This is a part of the patch series to use ExtensionActionViewModel on
Desktop Android.
We currently inflate the extension UI before native initialization,
following many other UI components. This is why we use OneshotSupplier
for ChromeAndroidTask because it is available only after native init.
As we update the extension UI to rely on browser-keyed shared view
models, such as ExtensionActionViewModel, they would introduce many
OneshotSupplier<T>, which is going to be cumbersome.
This patch avoids the problem by moving the extension UI initialization
to post-native-init. After all, we don't show the extension UI before
checking the profile eligibility, whereas profiles are available only
after native init.
Bug: 448199168
Change-Id: Ib0ea1bbb6f0adfc868ddfc1e7eb653f9eb189361
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7214707
Reviewed-by: Patrick Noland <pnoland@chromium.org>
Reviewed-by: Masa Fujita <massan@google.com>
Commit-Queue: Shuhei Takahashi <nya@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1555878}
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/814d968251668c4eba1b96d961633a91467c1e12
commit 814d968251668c4eba1b96d961633a91467c1e12
Author: Michael Wu <mklw@google.com>
Date: Mon Dec 8 14:17:00 2025 -0800
Unify #getInstanceInfo() APIs
We have two #getInstanceInfo() APIs currently:
- getInstanceInfo()
- getInstanceInfo(@PersistedInstanceType int persistedInstanceType)
We should remove 1 in favor of keeping only 2. Existing call-sites of 1
should be appropriately updated to pass PersistedInstanceType.ANY.
Bug: 467083292
Change-Id: I94decc397bebf483992eebf171d54e901a40c5ac
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7237457
Commit-Queue: Michael Wu <mklw@google.com>
Reviewed-by: Sirisha Kavuluru <skavuluru@google.com>
Cr-Commit-Position: refs/heads/main@{#1555733}
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/416a61c418c152a7a7ae568d89302e5ecb6e4a3d
commit 416a61c418c152a7a7ae568d89302e5ecb6e4a3d
Author: Andrew Grieve <agrieve@chromium.org>
Date: Tue Dec 2 14:13:59 2025 -0800
Android: Split ObservableSupplier into Nullable / Monotonic / NonNull variants
The goal is to use proper @Nullable annotations with
ObservableSuppliers.
To achieve this, we use interfaces that define nullness:
* (Settable)NullableObservableSupplier
* (Settable)ObservableSupplier <-- monotonic
* (Settable)NonNullObservableSupplier
And we have ObservableSupplierImpl implement all of them.
In order to make this migration manageable, I've marked the interfaces
as @NullUnmarked, and will fix annotations in batches until they
can be marked @NullMarked.
This CL includes a batch in order to test out the new interfaces (and
because many were necessary to make the change).
Monotonic suppliers are by far the most common afaict, so that's why
the non-prefixed ObservableSupplier is the monotonic one (that, and
because "Monotonic" is a mouthful).
One implication of this approach is that we'll never have:
ObservableSupplier<@Nullable Foo>
We'd have instead:
NullableObservableSupplier<Foo>
Having the nullness in the interface rather than in the generic
allows for defining toNonNull() only on monotonic suppliers, and
simplifies the implementation.
Bug: 455874046
Change-Id: Id48e235b9ff16a5b21a9c1199863150d17c22736
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7206746
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org>
Owners-Override: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1553094}
Currently there is an async mojo call to check policies for Leo and
Rewards, that is an overhead and not needed, in fact it could be wrong
if the policies controlled by something else that is not Origin.
Resolves: https://github.com/brave/brave-browser/issues/52244
This moves files that are directly copied over chromium resources to a separate directory where they are checked to make sure that there is a corresponding upstream file. This is the first step in a series of changes to clean up branding.js https://github.com/brave/brave-browser/issues/51969