* Support contained tabs session restore and sync.
* Review fixes.
* Use struct as a return value instead of optional with out args.
* Add a unit test for view-source: scheme.
* Move TabRestore helper to components.
* Add containers-specific SerializedNavigationBuilder* tests.
* Guard PageState.top.url_string use.
* Add plaster files for few patches.
* Replace browser_tabrestore.cc #define patch with plaster rewrite.
* Replace content_serialized_navigation_builder.cc change with rewrite.
* Fix gn check.
* Add prefix_length check.
* Improve rewrite rules.
* Guard PageState changes with buildflag.
* Rename StoragePartitionKeyToUrlPrefix.
* Add buildflag check into SerializedNavigationEntry.
* Fix build issues with containers buildflag disabled.
* Fix iOS build.
* Add tree tab collapse/expand UI and auto-expand on selection
- Add tree toggle button on BraveTab: when a tab has descendants, show
expand/collapse icon (replacing close button when applicable). When
the node is collapsed but has descendants, always show the toggle so
users can expand. Button uses submenu/expand icons per collapsed state.
- Model: BraveTabStripModel::SetTreeTabNodeCollapsed() updates collapse
state and notifies observers via TreeTabChange::kNodeCollapsedStateChanged.
TreeTabModel::GetClosestCollapsedAncestor() returns the closest collapsed
ancestor for a node.
- Controller: BraveBrowserTabStripController exposes
SetTreeTabNodeCollapsed(), IsInCollapsedTreeTabNode(), and
GetClosestCollapsedAncestor(). On collapsed-state change, updates the
tab’s tree toggle icon and invalidates layout.
- Tab strip: Override SetSelection() to post ExpandAllCollapsedAncestors();
when the user selects a tab (or adds an active new tab) that lives under
collapsed nodes, all ancestors are expanded so the selection is visible.
- Layout: TabStripLayoutHelper marks slots in collapsed tree nodes as
TabOpen::kClosed so those tabs are not laid out (hidden).
- Observer: Add TreeTabChange::CollapsedStateChangedChange and
kNodeCollapsedStateChanged. TabSlotController gains
SetTreeTabNodeCollapsed() and IsInCollapsedTreeTabNode(); TabSlotView
gains IsInCollapsedTreeTabNode(). Chromium overrides provide no-ops or
defaults.
- Tests: TreeTabsBrowserTest for auto-expand on selecting a tab in a
collapsed tree and on adding an active new tab; BraveTabTestWithTreeTab
for toggle visibility (replacing close button when has descendants, and
always visible when collapsed with descendants).
- TreeTabNode: add set_height_for_test() for unit tests.
* Move opaque_ke WASM crate next to its consumer component
Move opaque_ke from third_party/wasm/ to
components/brave_account/resources/opaque_ke/ so it lives
next to the component that consumes it.
- Move crate directory with index.js as-is
- Add workspace key to Cargo.toml for workspace discovery
- Update .cargo/config.toml vendor path
- Add transpile_web_ui target in resources/opaque_ke/BUILD.gn
- Update workspace Cargo.toml member path
- Update update.py to use make_config_toml for relative vendor paths
* Move candle_embedding_gemma WASM crate next to its consumer component
Move candle_embedding_gemma from third_party/wasm/ to
components/local_ai/resources/candle_embedding_gemma/ so it lives
next to the component that consumes it.
- Move crate directory
- Add workspace key to Cargo.toml for workspace discovery
- Update .cargo/config.toml vendor path
- Update workspace Cargo.toml member path
- Update update.py PRESERVE_PATTERNS for new config location
Issue - https://github.com/brave/brave-browser/issues/53468
Test failed with 1px overlap with contents and vertical tab.
vertical_tab_strip_browsertest.cc(2204):
error: Expected: (contents_bounds_right.right()) <= (tab_widget_bounds_right.x()), actual: 727 vs 726
For testing right-side vertical tab in RTL, disable rounded corners and move sidebar to left side.
So, test can compare right-side vertical tab position with contents area w/o any other factors.
Filed https://github.com/brave/brave-core/pull/34594 as right-side vertical tab has 1px off with rounded corners.
* Change `brave_capability` field to a list, add Deep Research feature & capability
* Allow multiple conversation capabilities in `ConversationHandler`
* Update tests to support capability lists
* Add CHECK for conflicting capabilities
* Add test for conversation capability set
* Fix rebase issues
* Fix storybook
* Move `ConversationCapabilitySet` to types.h
* Check that all conversation capabilities are included in model supported capabilities
* Remove `CHAT` and `CONTENT_AGENT` mutual exclusion
* Address PR test feedback
* Media session P3A fix wip
* Move `MediaSessionMetrics` to browser/misc_metrics
* Update test
* Code follow ups
* Expand uptime monitor to record 8 days
* Revert "Expand uptime monitor to record 8 days"
This reverts commit 00dd9f1d26f5d96fb2d2dbdaf0095cb7f91c739f.
* Use TimeDelta prefs instead of TPS
* Make Session final
* Fix wrong color ids for light-unpinned-inactive
* Add override_tab_background_color to TabAccentColors
We need to override tab background color for inactive tabs with accent in case
it's hovered.
Relocate the WASM workspace from ui/webui/resources/wasm/ to
third_party/wasm/, following the convention of third_party/rust/.
This is a plain move with path updates — no structural changes to
the workspace, crate locations within it, or build targets.
Guard mojo calls with try/catch for IllegalStateException since the
pipe can be closed by onDetachedFromWindow() or onConnectionError()
before the BEST_EFFORT task executes, and Java mojo bindings have no
non-destructive validity check.
Resolves: https://github.com/brave/brave-browser/issues/53479
When the user in the middle of typing a character that requires
multiple keystrokes, the Enter key may be used to select a
character. Do not execute search when Enter is pressed in this
state.
As part of general code health improvements, apply IWYU fixes, replace
SerpClassifier with free functions, improve TestHttpsServerBuilder,
update tests whose behavior did not match our expectations, and
deduplicate the search engine allowlist.
Initializes exit menu item as hidden for new users only by setting it as disabled during onboarding. Exit item will be shown as disabled in the customized menu and tapping it on the toggle will bring it back.
OnDownloadCreated() was not observing download items whose GUID didn't
match current_download_item_guid_ (e.g. when a download was canceled
before its DownloadItemImpl was created). Those items remained in
InProgressDownloadManager unobserved, so the destructor's call to
RemoveObservation() hit a CHECK failure.
Fix: always add the observation in OnDownloadCreated() before the GUID
check. Stale items still get a cancel scheduled; the observation ensures
proper cleanup in the destructor.
Resolvesbrave/brave-browser#53099
Fix vertical tab strip layout in RTL
The vertical tab strip and its surrounding views (contents area, bookmark bar, infobar, sidebar) were
being incorrectly positioned in RTL locales. The Views framework automatically mirrors child view
positions in RTL, which conflicted with Brave's explicit alignment preferences for the vertical tab
strip and sidebar.
Root cause
The layout in CalculateSideBarLayout was applying GetMirroredRect only to the sidebar and contents
bounds. When in RTL mode, the Views framework would also auto-mirror the vertical tab strip host view,
causing it to appear on the opposite side from what the user configured.
Changes
- BraveBrowserViewTabbedLayoutImpl::CalculateProposedLayout: Consolidate all RTL mirroring into a
single post-processing step at the end of the function. After the full layout is computed in logical
(LTR-equivalent) coordinates, apply GetMirroredRect uniformly to contents, bookmark bar, infobar
container, sidebar container, sidebar separator, and vertical tab strip host. This ensures all views
are mirrored consistently and respects the user's vertical-tab/sidebar alignment preference regardless of
RTL mode.
- BraveBrowserViewTabbedLayoutImpl::CalculateSideBarLayout: Remove the per-view GetMirroredRect calls
that were previously scattered here (sidebar bounds, contents bounds, separator bounds). These are now
handled centrally in CalculateProposedLayout.
- BraveVerticalTabStripRegionView and VerticalTabStripWidgetDelegateView: Call SetMirrored(false) to
prevent the Views framework from flipping their internal layout in RTL. Their visual position is
already controlled by the layout's GetMirroredRect post-processing step, matching the approach used by
SidebarContainerView.
- Add VerticalTabLayoutInRTL browser test to verify that both the host view (via GetMirroredBounds())
and the OS-level widget (via GetWindowBoundsInScreen()) are on the correct side of the contents area in
RTL, for both the "vertical tab on left" and "vertical tab on right" user preferences.
This upstream Chromium test intermittently fails in Brave (issue
#53422). The test detects video playback via canvas getImageData()
fingerprinting which Brave's canvas farbling (PerturbPixels) modifies.
The sibling variant Capture/0 is already disabled for the same reason.
Stable upstream: Capture/0 1.1%, Capture/1 0.2% flake rate (30-day
LUCI Analysis).
Resolves https://github.com/brave/brave-browser/issues/53422
Chromium changes:
https://chromium.googlesource.com/chromium/src/+/61945115e29e52db591108c859ddea4e3740d61f
commit 61945115e29e52db591108c859ddea4e3740d61f
Author: Orin Jaworski <orinj@google.com>
Date: Mon Feb 23 19:24:49 2026 -0800
[omnibox][next] Implement popup selection control in webui omnibox
This CL does a few things:
- Lets the classic webui omnibox popup control its own popup selections
- Introduces a concept of "popup-focus" which is distinct from standard
browser focus, thus allowing the OmniboxViewView to retain input focus
while independently updating popup-focus as a visual indicator of
which popup selection should be opened when the user presses Enter
- Makes all elements on the classic webui omnibox keyboard accessible
- Makes the AIM button focusable even when there are no other
matches to select.
- Plumbs selection control signals (up/down/tab/pageup/pagedown etc.)
from native to webui so that webui can control its own logical
popup focus
- Provides a general mechanism for opening all natively supported
popup selections
- Implements selection navigation logic similar to that of
OmniboxPopupSelection but simpler and easier to reason about
Screen reader behavior is not changed or implemented on this CL,
it still depends on the native selection updates. More work is
needed to implement screen reading for the new popup-only (non-native)
selections like the context menu entrypoint button.
The main feature added on this CL is disabled by default but there
are also some bug fixing parts that aren't guarded.
Bug: 462775253, 476191408, 483063098
Change-Id: I47dd2b01801a28b8916c64e89a8389848a06e4e7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7562907
Commit-Queue: Orin Jaworski <orinj@chromium.org>
Reviewed-by: Demetrios Papadopoulos <dpapad@chromium.org>
Reviewed-by: Orin Jaworski <orinj@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1589123}
This PR fixes the flakiness by replacing custom
GoBack()/GoForward() helpers with
HistoryGoBack() and HistoryGoForward() from
Chromium's browser_test_utils, which wait until
navigation is finished before returning.