Commit Graph
17793 Commits
Author SHA1 Message Date
Brian CliftonandBrian Johnson b349cfc012 Workspaces - phase 1 (#36059)
* Introduce a workspace service for serializing open windows/tabs.

---------

Co-authored-by: Brian Johnson <34129+bridiver@users.noreply.github.com>
2026-05-20 09:14:00 -07:00
Simone Arpe d44a3bff68 Move period outside clickable span (#36572) 2026-05-20 18:11:11 +02:00
Serg 70d97d993e [Origin] Defer policy init signal until BraveProfilePolicyProvider refreshes (#36495)
[Origin] Gate BraveProfilePolicyProvider on BraveOriginPolicyManager init

`BraveProvider`'s first `RefreshPolicies` is triggered by
`AdBlockOnlyModePolicyManager` (initialised at process start), well before
`BraveOriginPolicyManager` (lazily initialised by `BraveOriginServiceFactory`)
is ready. The resulting bundle lacks `BraveRewardsDisabled`, but the
default `IsInitializationComplete` lets `PolicyService` report ready
anyway. `AdsServiceImpl::MaybeStartBatAdsService` then evaluates a stale
managed pref store and bat-ads starts despite the policy.

Override `IsInitializationComplete` to additionally gate on
`BraveOriginPolicyManager::IsInitialized()`. Upstream unit tests
(`ProfilePolicyConnectorTest`) bypass our factory bootstrap, so add a
`SetExpectedToBeInitialized` flag set from `BraveOriginServiceFactory`'s
ctor; the override short-circuits when unset (desktop/Android only --
iOS doesn't run those tests).

Resolves: https://github.com/brave/brave-browser/issues/54962
2026-05-20 07:22:43 -04:00
Sangwoo Ko 0622bb761b Revert "Register vertical tab region view as draggable area (#36468)" (#36567)
This reverts commit 23084d45c9.
2026-05-20 11:17:45 +01:00
Simon Hong e0afd4c9ab Fixed Windows caption buttons container height calc (#36562)
Caption button container on Windows was shifted upward (and had wrong height) in both default
and compact horizontal tab modes.

### Root cause
1. Wrong value in `GetLayoutConstantForBraveWindowControls. The TU-local `GetLayoutConstant`
    wrapper returned `tabs::GetHorizontalTabControlsDelta()` for `kTabstripToolbarOverlap`. That value is negative 
    (−4 default, −5 compact) because it is intended to *center tab-strip control buttons* inside the tab strip.
    For the caption button container, `kTabstripToolbarOverlap` is used to compute the **container height**, where
    only a positive geometry value (1 default, 8 compact) is correct. Using the negative delta caused the container
    to be too tall.

2. Extra negative Y-offset in `BraveBrowserFrameViewWin::LayoutCaptionButtons()`. After calling 
   `BrowserFrameViewWin::LayoutCaptionButtons()` (which already positions the container correctly),
    we applied `SetY(y() + GetHorizontalTabControlsDelta())` — another negative nudge that shifted the
    container upward, misaligning both its bottom (should touch the tab-strip top) and its top (should sit at
    `WindowTopY()` below the window edge).

### Fix
- Remove `ScopedWinCaptionLayoutUsesGeometryTabstripOverlap`
- Simplify `GetLayoutConstantForBraveWindowControls` to always return 
  `::GetLayoutConstant(kTabstripToolbarOverlap)` — the correct geometry value in every window type
   (normal, popup, PWA)
- Remove the `SetY` delta nudge** from `BraveBrowserFrameViewWin::LayoutCaptionButtons()`
- Update comments in the wrapper and in `brave_compact_horizontal_tabs_layout.h` to document the
   distinction between the geometry value (this wrapper) and the controls centering delta
   (`horizontal_tab_strip_region_view.cc`'s analogous wrapper).

### Test
Added `brave_browser_frame_view_win_browsertest.cc` (Windows only, parameterized over compact / default 
horizontal tab mode) that asserts the two layout invariants for a normal browser window:
1. `container.bottom() == top_container.y()` — container bottom touches the tab/toolbar row top.
2. `container.y() == window.y() + frame->WindowTopY()` — container top sits at the non-client border below the window edge.

Resolves https://github.com/brave/brave-browser/issues/55406
2026-05-20 19:11:40 +09:00
Aleksei Khoroshilov 783c860914 Change farbling seed per container. (#36474)
* Change farbling seed per container.

* Generate uint64_t persistent hash.

* Add LIFETIME_BOUND attribute.

* Assign entropy, not append.

* Adjust browsertest to check all cases.
2026-05-20 13:53:21 +07:00
cypt4 846aad46c2 [Polkadot] Add parachains support (#35963)
* [Polkadot] Add parachains support
Add supportedKeyrings field to persist for NetworkInfo.
This is required since each polkadot keyring can have multiple
parachains.
Updated Deposit modal so showed address uses patachain ss58 prefix.
Resolves https://github.com/brave/brave-browser/issues/44750
2026-05-20 13:51:08 +07:00
Szilard Szaloki 393ce6ed87 Email Aliases: fix Guest profile crash (#36559) 2026-05-20 13:42:43 +07:00
Simon Hong c369640b69 Fix vertical tab is not expaned in fullscreen on macOS (#36527)
When browser widget is inactive while application is active,
browser widget's WindowEventMonitor couldn't get event.
This can happen when overlay widget is focused in fullscreen mode on macOS.

Fixed by using application monitor.

Resolves brave/brave-browser#54300

Not added test code as it's difficult to simulate this scenario.
2026-05-20 09:46:08 +09:00
Brian R. Bondy 706969a6ac Set minimum size for Brave Origin startup dialog (#36489)
Constrain the dialog's minimum size to its initial dimensions
(540x500, 540x600 on Linux) so users cannot resize the window below
the designed layout.

Fixes https://github.com/brave/brave-browser/issues/55554
2026-05-19 14:05:03 -04:00
Alex 1587d2171a [VPN 2.0] Split BraveVPNService into interface and implementation (#36462)
[VPN 2.0] Split BraveVpnService into interface and implementation

To add a new BraveVpnService implementation based on Architecture 2.0,
which must co-exist with Architecture 1.0 for quite a while, we need
to split service's interface and implementation. All the external
components will keep accessing VPN service via the BraveVpnService
interface, but the implementation mostly goes into BraveVpnServiceImpl.

BraveVpnService is a concrete base that implements bookkeeping shared
by both architectures: mojo remote creation and observer management.
The lion's share of functionality is kept in the implementation; if
it becomes duplicated eventually, we can move it to the base later.

This change is a preparatory step to introduce the second (Arch 2.0)
implementation of BraveVPNServiceImpl, which could be selected at
compile time, or (later) at runtime too.

Other notable changes:
- Revised and moved the public VPN service API to BraveVpnService.
- BraveVpnService base is comprehensively covered by unit tests.
- Removed a BraveVpnMetrics::Delegate method dependency in external
  components.
- BraveVPNServiceTest test fixture renamed to
  BraveVpnServiceImplV1Test.

Implements part of brave/brave-browser#54597
2026-05-19 13:53:54 -04:00
Anton Paymyshev 4b2f4caeae Cleanup wallet webui GNs (#35961) 2026-05-19 21:47:26 +07:00
Pavel Beloborodov f2d1b756c3 Email Aliases UI fixes. (#36268)
* Added Gap between action buttons.
* Multi card subpage.
* Removed top delemiter in aliases list.
* Aliases presented within a boxed area.
* Fixed paddings.
2026-05-19 19:40:24 +07:00
Aleksei Khoroshilov 1197161e51 Fix brave shields test utils location. (#36475) 2026-05-19 15:51:31 +07:00
Simon Hong 0c1d146556 [Sidebar V2] Make brave's panel header as SidePanel's header (#36472)
Sidebar v2 attaches a Brave-styled panel header at the SidePanel level
instead of embedding it inside the content view.

## Changes
  - New BraveSidePanelHeader (view) + BraveSidePanelHeaderController (delegate) under
     brave/browser/ui/views/side_panel/. Visual spec (title, optional launch button + separator,
    close button, 60px height, Nala colors, Leo icons) mirrors V1's inline headers in
    BraveReadLaterSidePanelView/BraveBookmarksSidePanelView.
  - BraveSidePanelCoordinator::PopulateSidePanel attaches the header via upstream
    SidePanel::AddHeaderView only for entries ShouldShowBraveHeader allows (today: kReadingList, kBookmarks).
  - SidePanel chromium_src override now wraps upstream AddHeaderView / RemoveHeaderView so each call also 
    re-runs Brave's UpdateBorder(). UpdateBorder() reserves a top inset equal to the header's preferred height 
    when a header is attached, in both the rounded-border and no-border states.
  - brave_side_panel_header_controller is split into its own :side_panel_impl source_set
    (depending on :side_panel) to keep dep chains clean.

## Test plan
  - New SidebarBrowserTest.SidebarV2BraveHeaderTest test case
  - Manual: run with enable_sidebar_v2=true, open reading list and bookmarks — header should be visible
2026-05-19 13:13:51 +09:00
Max Karolinskiy 4899c60d84 Fixes search engines icons in the Settings. (#36516)
Replaces site-favicon component - which only retrieves favicons from the
history service, which means the user would first have to visit the site
for the favicon to be available - with settings-search-engine-icon which
retrieves the favicon right away.
2026-05-18 18:49:16 -04:00
r0hit0303 fa5cf216e4 [webgl] Add fingerprinting protections against webgl_debug_renderer_info (#36354)
This change adds fingerprinting protection for UNMASKED_VENDOR_WEBGL and UNMASKED_RENDERER_WEBGL for balanced farbling level behind a new feature flag |kWebGLBalancedFingerprintingProtection|.

Manual testing with |kWebGLBalancedFingerprintingProtection| flag enabled:
https://github.com/user-attachments/assets/3dc32625-5a85-491e-9a05-919e932313dd

<!-- Add brave-browser issue below that this PR will resolve -->
Resolves https://github.com/brave/brave-browser/issues/55443
2026-05-18 15:37:51 +02:00
Sangwoo Ko 23084d45c9 Register vertical tab region view as draggable area (#36468)
Now users can drag the window by dragging the vertical tab region view.
2026-05-18 17:48:09 +09:00
Jay Harris c550cb1c88 [AI Chat]: Fix global sidepanel display (#35143) 2026-05-18 05:43:55 +01:00
Sangwoo Ko 6b98e3d2d5 Refactor non-client hit test helper for extensibility (#36467)
In order to make it easier to register draggable areas, we move the non-client
hit test helper to the browser window features. The new BraveNonClientHitTestHelper
will manage the registration of draggable areas and provide a non-client hit test
helper for the frame views.
2026-05-18 10:58:07 +09:00
Pete Miller 3dcdad4c8a [AI Chat] Disable chromium Actor UI Task Button (#36499)
* [AI Chat] Disable chromium Actor UI Task Button

When an actor framework task is invoked, the button shows due to kGlicActorUiTaskIcon being true. Interacting with this button causes a crash.

First we will disable the button entirely, via this PR.

Then we will bring the functionality either in a custom Brave button and menu, or fix the upstream one.

Tests

Guards the kGlicActorUiTaskIcon=false override in chromium_src/chrome/
common/chrome_features.cc against regressions: while the agent profile
window is executing a task, neither the toolbar nor the tab strip
action container should construct the upstream
GlicAndActorButtonsContainer (which has been the source of crashes).
2026-05-16 13:35:23 -07:00
Simon Hong b1bb303244 Disable some flaky tests in macOS Tahoe (#36497)
Resolves - no issue. just disable flaky tests.
2026-05-16 13:30:21 +09:00
Serg 0c513a33ea Decouple PolicyService::Observer from AdsServiceImpl (#36437)
* Decouple PolicyService::Observer from AdsServiceImpl

Move the "defer ads service start until policy is initialized" pattern out
of `AdsServiceImpl` into a reusable `brave_policy::PolicyInitializationWaiter`
helper. `AdsServiceImpl` no longer inherits from `policy::PolicyService::Observer`
or takes a `policy::PolicyService*` in its constructor; `AdsServiceFactory`
builds the waiter from the profile policy connector and injects it.

Also drops the temporary `[AdsGate]` verbose logging that was added with the
original race fix; behaviour is now covered by unit tests.

The new helper lives at `brave/components/brave_policy/policy_initialization_waiter.{h,cc}`
and is reusable by any service that needs to defer initialization until
`PolicyService` has merged its policy bundle into the managed pref store.

Resolves: https://github.com/brave/brave-browser/issues/55266
2026-05-15 17:41:37 -04:00
Darnell Andries 049d6c4088 Add WDP toggle on Origin settings page (#36491)
Enable WDP toggle on Origin settings page
2026-05-15 14:18:17 -07:00
Aleksei Khoroshilov b6295cd1c1 Add Containers enable toggle. (#36447)
* Add Containers enable toggle.

* Replace cr-toggle with settings-toggle-button.
2026-05-15 20:18:11 +07:00
Alex 15224491ad [VPN 2.0] Rename BraveVpnService to BraveVpnServiceImpl (#36465)
To add a new BraveVPNService implementation based on Architecture 2.0,
which must co-exist with Architecture 1.0 for quite a while, we need
to split service's interface and implementation. All the external
components will keep accessing VPN service via the BraveVPNService
interface, but the implementation mostly goes into BraveVPNServiceImpl.

This is the first step: renaming the existing service, to minimize
diffs in the next PR, where the concrete base class appears.

No changes in the business logic, pure renaming.

Implements part of https://github.com/brave/brave-browser/issues/54597
2026-05-15 09:00:45 -04:00
Anton Paymyshev ea5843de82 [Wallet] Remove deprecated prefs (#36346) 2026-05-15 18:53:33 +07:00
vadims fb01221cb5 [Android] Update Shred Settings UI (#36431)
Added Shred settings UI modifications and an additional element to 
manage the browsing history shredding flag.

Resolves: https://github.com/brave/brave-browser/issues/55005

---------

Signed-off-by: Vadym Struts <vstruts@brave.com>
2026-05-15 10:09:09 +02:00
Anthony Tseng 26594196ec [History Embeddings] Move model lifecycle into controller, renderer-side into BatchEmbedder (#36106)
* Move factory/init orchestration into BraveBatchPassageEmbedder

BravePassageEmbeddingsService held the full embedder lifecycle — the
renderer-side factory remote, a queue of pending loads, and a
state machine that drove factory_->Init in addition to file loading —
which made the set of reachable states hard to reason about and left
room for the factory remote and the batch embedder to drift out of
sync.

Align with upstream's PassageEmbeddingsService: the service now just
reads model files from disk and hands the factory remote, model files,
receiver, and load callback to BraveBatchPassageEmbedder at the right
moment. The BatchEmbedder drives factory->Init, binds the renderer
pipe on success, and reports disconnect back to the service. With Init
moved out, the service's load phases reduce to {kWaiting, kLoading,
kReady}; kInitializing is no longer needed because BatchEmbedder owns
that step internally.

Collapse the pending-load queue to a single std::optional<PendingLoad>
and reject concurrent BindPassageEmbedder calls. An in-flight file
load is cancelled by a dedicated WeakPtrFactory on
ResetEmbedderState. Use base::ScopedClosureRunner in
OnLocalModelFilesLoaded to keep its three early-return failure paths
from duplicating the reset call.

Adds an !pending_load_ orphan-renderer guard in
OnBackgroundContentsCreated: if CloseBackgroundContents fires while
the BackgroundWebContents factory is in flight, the late
create-callback would otherwise install an orphan renderer that
nothing drives or tears down.

* Move BackgroundWebContents and LocalAIService into BraveBatchPassageEmbedder

Shrinks BravePassageEmbeddingsService to its essential responsibility
(reading EmbeddingGemma model files from disk in response to
LocalModelsUpdaterState notifications) and gives the BatchEmbedder
ownership of the renderer-side lifecycle it actually drives:

  * the background WebContents that hosts the WASM worker,
  * the local_ai::mojom::LocalAIService receiver set used by the WASM
    page to register its PassageEmbedderFactory, and
  * the factory remote, including the duplicate-registration guard.

BravePassageEmbeddingsService now constructs a BatchEmbedder eagerly on
BindPassageEmbedder and hands over loaded files via SetModelFiles.
The BatchEmbedder waits until both the renderer factory and the model
files are present before driving factory->Init.

The static WebContents -> BindCallback registry stays on
BravePassageEmbeddingsService since UntrustedLocalAIUI uses it as a
public API; the registered callback now points at
BraveBatchPassageEmbedder::BindLocalAIReceiver. The controller's
CreateBackgroundWebContents closure is updated to operate on a
WeakPtr<BraveBatchPassageEmbedder> instead of the service.

BUILD.gn: batch_passage_embedder gains a public_deps entry on
//brave/components/local_ai/core because its header now includes
background_web_contents.h.

* Move model-file loading into BravePassageEmbeddingsServiceController

Mirror upstream's PassageEmbeddingsServiceController: the controller owns
the model lifecycle, the service is a thin factory.

- Controller observes LocalModelsUpdaterState and posts the disk read
  for the five EmbeddingGemma files. EmbedderReady() returns true iff
  the component is installed; OnLocalModelsReady fires
  EmbedderMetadataUpdated so SchedulingEmbedder retries. GetEmbeddings
  short-circuits with kModelUnavailable when not ready.
- Service::BindPassageEmbedder now takes ModelFilesPtr and constructs
  BraveBatchPassageEmbedder around it. Drops the observer plumbing,
  file_load_in_flight_, OnLocalModelsReady, MaybeLoadLocalModelFiles,
  OnLocalModelFilesLoaded.
- BraveBatchPassageEmbedder takes ModelFilesPtr in its ctor. Drops
  SetModelFiles / pending_model_files_ and the kAwaitingPrereqs phase;
  state machine collapses to
  kCreatingContents -> kAwaitingFactory -> kInitializing -> kReady.

* Defer receiver_.Bind in BraveBatchPassageEmbedder until kReady

Hold the PendingReceiver<PassageEmbedder> in the ctor instead of binding
receiver_ immediately. Bind it only from OnInitDone(true), after the
renderer-side PassageEmbedder pipe is up.

Callers issue GenerateEmbeddings on embedder_remote_ right after
BindPassageEmbedder; mojo queues those messages on the pipe until the
receiver actually binds, mirroring upstream's utility-process embedder
behavior. By the time GenerateEmbeddings is delivered to this object,
renderer_embedder_ is guaranteed bound, so ProcessNext's
"renderer not bound" branch becomes unreachable and is replaced with a
CHECK.
2026-05-15 04:40:37 +01:00
Simon Hong 42617bb0f9 [infobar] BraveConfirmInfoBar (4/N): refactor sync-account infobar (#36440)
BraveSyncAccountDeletedInfoBar layout is broken with InfobarRefresh.
As it's not compatible with ConfirmInfoBar, changed to subclass BraveConfirmInfoBar.

sync-account-deleted infobar: No regression w or w/o InfobarRefresh flag

Resolves - subtask of brave/brave-browser#48822
2026-05-15 12:20:01 +09:00
Darnell Andries 6cb5446eed [AI Chat] Expose status and error code to user on server error (#36391)
* Add error details struct

* Parse streaming error body in APIRequestHelper, extract status/error codes, display to user

* Add tests, v2 client fixups

* Add comment

* Rename error_code to error_type, use string as type

* Only parse error body if content type is application/json

* Address PR feedback

* Address PR feedback
2026-05-15 03:53:23 +01:00
Sangwoo Ko 445dfe7812 Fix UBSAN error in BraveTabStyleViews (#36436)
During startup tab could be in partially constructed state and BraveTab
could be null during startup.
2026-05-15 07:43:47 +09:00
Pete Miller 593f937bfa [AI Chat] Progress indicator with text and expansion button (#35757)
* [AI Chat] Progress indicator with text and expansion button

Introduce ProgressBubble UI component.

Replaces spinner during generation and tool use, adding text description of the operation currently in progress.
Replaces AssistantTask tabs ("Steps"/"Progress") with a button to control expansion and collapse of details.
Replaces SearchSummary special handling with status inside the ProgressBubble and a regular search Tool Use event rendering when detail is expanded.
2026-05-14 20:03:03 +01:00
cdesouza-chromium 6148d17fe6 [brockit][sync] Avoiding bool in DeviceInfo (#36409)
The use of `bool` for `DeviceInfo` fields has led to bugs in the past.
This has been correct with plaster, however we should also convert the
field to an enum to make sure we follow the upstream practice of using
enums in this type.

Resolves https://github.com/brave/brave-browser/issues/55018
2026-05-14 13:26:01 +01:00
Simon Hong 7c257e500b [infobar] BraveConfirmInfoBar (3/N): drop InfoBarView base class (#36395)
BraveConfirmInfoBar used to inherit from InfoBarView, so its layout
changed with upstream's features::kInfobarRefresh — vertical centering,
label/link gaps, icon offset and multi-line height all shifted between
the flag-off and flag-on states.

As we're using BraveConfirmInfoBar for our specific info bar only,
we don't need to get suffer from upstream's view change over time.
We can go with our own custom view based on infobars::InfoBar interface.

Replace the base class with direct multi-inheritance from
infobars::InfoBar, views::View and views::ExternalFocusTracker, and
implement Layout / CalculatePreferredSize / OnThemeChanged /
PlatformSpecific* ourselves. The visual is now identical regardless of
the upstream flag and we no longer depend on InfoBarView's internal
structure.

Resolves - subtask of brave/brave-browser#48822

No regressions on existing infobars that uses BraveConfirmInfoBar.
2026-05-14 18:19:39 +09:00
Aleksei Khoroshilov d239f3a62b Keep container identity of a tab after a discard. (#36278) 2026-05-14 16:07:54 +07:00
Sangwoo Ko c488ae4249 [Containers] Make container icon on url bar bigger (#36334)
* Make container icon bigger

Previously, the icon used for PageActionView was too small, because the
size includes the background size. Introduces a new generator function
that generates the icon without the background.
2026-05-14 17:21:46 +09:00
Aleksei Seren 4e8529bc58 [ads] Center New Tab Takeover CTA button for NTP refresh (#36422)
Centers the CTA button on New Tab Takeover sponsored image pages in the
NTP refresh when the `brave://flags/#center-ntt-cta-button` flag is enabled.
The flag is disabled by default.
2026-05-14 03:46:12 +01:00
Simon Hong fc1f49123e [infobar] Refactor BraveConfirmInfoBar (2/N): cleanups (#36344)
Preparation to BraveConfirmInfoBar refactor

Deleted unused code to make refactoring more easier.
No production delegate ever used BUTTON_EXTRA.
Remove it together with the GetButtons override, GetButtonsOrder, IsProminent, and
ExtraButtonPressed virtuals that only existed to support it.
Delete the chromium_src patch that injected BUTTON_EXTRA into upstream's enum.
Cleaned up dead code from confirm_infobar.h overriding
Resolves - subtask of brave/brave-browser#48822
2026-05-14 09:12:03 +09:00
Terry Mancey 662fa38826 Smart NTT [virtual]:serp_metrics should return default values (#36407)
On a clean profile, engine keys are absent from the profile attributes
dict, causing virtual pref path traversal to fail with "Unknown pref
path". Initialize an empty list for each engine key on first
construction of ProfileAttributesTimePeriodStore so the paths always
resolve to 0.
2026-05-14 00:40:00 +01:00
Agustín Ruiz 50f7aaebcb Remove max-width and set left flex (#36421)
* Remove max-width and set left flex

Remove the hard max-width from the settings menu and left pane, and set #left to `flex: 0 !important` so the left column no longer relies on a fixed width. Adjusts layout behavior to use flex sizing and addresses overflow/scroll issues. Changes in browser/resources/settings/br/settings_menu.ts and settings_ui.ts (plus minor formatting tweaks).

* remove empty space
2026-05-13 22:32:02 +01:00
samartnik e65a010c7f [Android] Update string on adding custom search engine (#36426) 2026-05-13 17:12:49 -04:00
Netzenbot 6ef98b50a9 Fix race in AdBlockServiceTest initial engine wait (#36305)
Fix race in AdBlockServiceTest.PreRunTestOnMainThread

The RunUntil condition checked a histogram recorded on a background
thread. Due to the incoming-queue/work-queue split in Chromium's
SequenceManager, RunUntil could return after seeing the histogram
sample but before OnEngineLoaded dispatched OnFilterListLoaded on the
UI thread. The observer created in InstallComponent then caught this
stale notification, leaving the histogram count at 1 instead of 2.

Switch to IsFilterListLoadedForTesting(true), a UI-thread flag set
in OnEngineLoaded, which guarantees the reply callback has been fully
processed before RunUntil returns.

Resolves brave/brave-browser#55007
2026-05-13 12:28:01 -04:00
Kevin Smith 92cc082b49 [FocusMode] Introduce TabStripPlacementCoordinator (#36255)
Adds a TabStripPlacementCoordinator that owns the parenting of the
horizontal tab strip region view and selects an appropriate parent based
on browser state (vertical tabs, focus mode, default). Callers register
parents per PlacementKind and trigger reassignment via UpdatePlacement.

Migrates BraveVerticalTabStripRegionView off its ad-hoc reparenting
onto the coordinator.

The kTopContainer placement is wired up but left unused; Focus Mode
will register a parent for it in a follow-up.
2026-05-13 09:54:29 -04:00
Kamil Jozwiak bd7a5f9fee Upgrade from Chromium 148.0.7778.96 to Chromium 148.0.7778.167. (#36386)
<!-- Add brave-browser issue below that this PR will resolve -->
Resolves https://github.com/brave/brave-browser/issues/55472

<!-- CI-related labels that can be applied to this PR:
* CI/disable-pipeline-step-cache - instruct CI to not cache build steps
between runs for the same commit hash
* CI/enable-coverage - enable coverage reporting for your code changes
* CI/enable-test-only-affected - instruct CI to only run tests affected
by your change
* CI/run-audit-deps (1) - check for known npm/cargo vulnerabilities
(audit_deps)
* CI/run-network-audit (1) - run network-audit
* CI/run-perf-smoke-tests - run smoke performance tests
* CI/storybook-url (1) - deploy storybook and provide a unique URL for
each build
* CI/run-upstream-tests - run Chromium unit and browser tests on Linux
and Windows (otherwise only on Linux)
* CI/skip-upstream-tests - do not run Chromium unit, or browser tests
(otherwise only on Linux)
* CI/run-teamcity - run TeamCity
* CI/skip-teamcity - skip TeamCity
* CI/skip - do not run CI builds (except noplatform)
* CI/run-linux-arm64, CI/run-macos-x64, CI/run-windows-arm64,
CI/run-windows-x86 - run builds that would otherwise be skipped
* CI/skip-linux-x64, CI/skip-android, CI/skip-macos-arm64, CI/skip-ios,
CI/skip-windows-x64 - skip CI builds for specific platforms

(1) applied automatically when some files are changed (see:
https://github.com/brave/brave-core/blob/master/.github/labeler.yml)
-->

<!--
## Checklist:

- Review design docs
[Browser design
principles](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/chrome_browser_design_principles.md)
[Style
guide](https://chromium.googlesource.com/chromium/src/+/main/styleguide/c++/c++.md)
[Core principles](https://www.chromium.org/developers/core-principles/)
- Ensure there are
(tests)[https://www.chromium.org/developers/testing/]. Unit test as much
as possible (including edge cases), but also include browser tests
covering high level functionality.
- Ensure that there are comments explaining what classes/methods are/do.
The "why" is often more important than the "what" in comments. Also
update any relevant docs (moving docs from wiki to brave-core if
necessary).
- Request security or other review (third-party libraries, rust code,
etc...) if applicable [security/privacy review is
needed](https://github.com/brave/brave-browser/wiki/Security-reviews)
[other review](https://github.com/brave/reviews/issues/new/choose)
Also see [adding third-party
libraries](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/adding_to_third_party.md)
for general guidelines on using third party code
- Make sure there is a
[ticket](https://github.com/brave/brave-browser/issues) for your issue
- Use Github [auto-closing
keywords](https://docs.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue)
in the PR description above
- Write a good [PR/commit
description](https://google.github.io/eng-practices/review/developer/cl-descriptions.html)
- Squash any review feedback or "fixup" commits before merge, so that
history is a record of what happened in the repo, not your PR
- Add appropriate labels (`QA/Yes` or `QA/No`; `release-notes/include`
or `release-notes/exclude`; `OS/...`) to the associated issue
- Checked the PR locally:
* `npm run test -- brave_browser_tests`, `npm run test --
brave_unit_tests`
[wiki](https://github.com/brave/brave-browser/wiki/Tests)
* `npm run presubmit`
[wiki](https://github.com/brave/brave-browser/wiki/Presubmit-checks),
`npm run gn_check`, `npm run tslint`
- Run `git rebase master` (if needed)
-->
2026-05-13 01:00:17 -04:00
Jay Harris b6acbfbea5 [AI Chat]: Fix Leo context menu not starting conversation (#36233) 2026-05-13 11:26:13 +12:00
Simon Hong aa2ad1dfbd [infobar] Refactor BraveConfirmInfoBar (1/N): drop dev channel infobar (#36342)
First step of the BraveConfirmInfoBar refactor.

Before refactoring BraveConfirmInfoBar, removed unused BraveConfirmInfoBar subclass.

Dev channel deprecation infobar: not used anymore. Remove.

Resolves - subtask of brave/brave-browser#48822
2026-05-13 07:24:46 +09:00
Max Karolinskiy fd20360961 [148.0.7778.167] Contents capture border is now a view.
Chromium change:
https://source.chromium.org/chromium/chromium/src/+/14945ff5cc3dc87e5717a1c2e8f8a831d47c2929

commit 14945ff5cc3dc87e5717a1c2e8f8a831d47c2929
Author: Caroline Rising <corising@chromium.org>
Date:   Thu Apr 23 17:37:28 2026 -0700

    [Vertical tabs] Make the contents capture border a view instead of a widget.

    This change prevents the border from being drawn over the vertical tab
    strip when expanded on hover.

    Bug: 505366481
2026-05-12 18:24:02 -04:00
Darnell Andries 5ab1e39cd4 Add feature + params for backup results service (#36339) 2026-05-12 13:56:24 -07:00
Netzenbot 51176a84e1 Fix flaky EmailAliasesBrowserTest.ContextMenuAuthorizedManage (#36306)
The test intermittently fails with "deepQuery is not defined" because
InjectHelpers injects the helper function into the bubble's WebContents
before the WebUI navigation has committed. WaitForLoadStop returns
immediately when no navigation is pending (e.g., the WebContents is
still at about:blank), so deepQuery is injected into the pre-navigation
context, then lost when chrome://email-aliases.panel/ loads.

Wait for the WebContents to commit a non-empty, non-about:blank URL
before calling WaitForLoadStop and injecting JavaScript.

Fix brave/brave-browser#55000
2026-05-12 14:06:07 -04:00