This fixes a bug where Force Paste didn't work if you attempted to force paste into an iframe that had nested iframes. It also moves the script from being injected into all frames to only be injected in the main frame since thats the only frame we execute the JavaScript on.
Follow-up fix for #34329 where a WebKit configuration was being passed in when creating popup tabs since `tab.configuration` will be the underlying `WKWebView`'s configuration
Resolvesbrave/brave-browser#53298
Update the PolkadotTxMeta to store a "extrinsic_metadata" field which is
populated with relevant information used for implementing block tracking
required to find extrinsic submission status.
We update the PolkadotWalletService to now forward a data structure instead of
just the signed extrinsic bytes.
* [AI Chat] Add deep research event parsing and UI rendering
Parse 12 deep research streaming event types from OAI response deltas
(queries, analyzing, thinking, answer, progress, blindspots, complete,
error, search/fetch/analysis status, iteration complete) and render them
in the assistant response as an animated single-line progress indicator
with elapsed timer, culminating in a final answer with inline citation
links and a sources section.
Implements: https://github.com/brave/brave-browser/issues/53022
* [AI Chat] Address review feedback (#34082)
- Move deep research parsing out of oai_parsing.cc into its own file,
using the brave-chat.deepResearch.* custom object pattern
- Add unit tests for all deep research event parsing
- Consolidate deep research event types into a single mojom union
- Use mojom enums for status fields instead of raw strings
- Use uint32 with _count suffixes for count fields
- Add DeepResearchUrlInfo struct for url/favicon pairs
- Use constexpr key constants instead of inline string literals
- Pass model_key by value instead of const optional ref
- Extract frontend deep research logic into deep_research_utils.ts
- Add Storybook stories for the deep research component
- Add localized UI strings
- Fix copyright year in new files
* [AI Chat] Address second round of review feedback (#34082)
- Remove model_key parameter from ParseDeepResearchEvent; return
mojom::ConversationEntryEventPtr directly and wrap at call site so
model_key remains available for tool call handling
- Replace static_cast<uint32_t> with base::saturated_cast<uint32_t> to
clamp negative server values instead of wrapping
- Match "started" status explicitly in ParseSearchStatusEvent and
ParseAnalysisStatusEvent; return nullopt with VLOG(1) for unrecognized
values instead of silently defaulting to kStarted
- Fix alphabetical ordering of deep_research_parsing entries in BUILD.gn
- Revert unrelated cosmetic changes in oai_parsing.cc
- Add JSDoc to exported interfaces in deep_research_utils.ts
- Add unit tests for unknown status rejection
* [AI Chat] Address third round of review feedback (#34082)
- Remove disableLinkRestrictions bypass for deep research; use the same
allowedLinks-based link validation as regular search since
WebSourcesContentBlock is already emitted and extracted for deep
research tools
- Scope deep research event extraction to events after the last deep
research ToolUseEvent to handle multiple runs in a single response
- Memoize extractDeepResearchEvents with React.useMemo
- Remove redundant nonDeepResearchEvents filter since AssistantEvent
returns null for unhandled types
- Use {...props} spread for DeepResearchProgressLine
- Rename ambiguous `e` variables to descriptive names (search, analysis,
thinking, etc.)
- Fix stale "Memoize" comment
* [AI Chat] Return nullptr instead of nullopt from ParseDeepResearchEvent
mojom::ConversationEntryEventPtr is already nullable, so wrapping it
in std::optional is redundant. Return nullptr for parse failures instead.
* [AI Chat] Add missing deepResearchEvent to event templates
* Presubmit code formatting fix
* [AI Chat] Fix deep research progress hiding too early
The deep research progress panel was hidden as soon as the
completeEvent arrived, but the synthesis answer hasn't started
streaming yet at that point. Track whether a completionEvent
(the synthesis answer) has arrived after the tool call and use
that to decide when to hide the progress panel instead.
* [AI Chat] Address review feedback (#34082)
- Add GURL::is_valid() checks for parsed URLs in deep_research_parsing.cc
- Remove duplicate mojom include already present in header
- Pass deepResearch as single prop instead of 10 individual props
- Simplify startTimeRef useEffect logic per reviewer suggestion
- Type-safe iconName using IconName from @brave/leo/icons/meta
- Replace hardcoded spacing/radius/font values with design system
variables (--leo-spacing-*, --leo-radius-*, --leo-font-*)
- Add TODO for elapsed timer inaccuracy on re-render
- Add unit tests for extractDeepResearchEvents (21 tests)
- Add unit tests for DeepResearchEvent component (8 tests)
- Add DynamicProgress story with timed event sequence for animation
* [AI Chat] Recalibrate elapsed timer on progressEvent updates (#34082)
Recalibrate startTimeRef on every progressEvent instead of only on
first render, so the timer stays accurate when the UI re-mounts
mid-research (e.g. sidebar toggle, move to new tab).
* [AI Chat] Simplify elapsed timer to count from component mount (#34082)
Replace progressEvent-based time calibration with a simple counter
that starts from when DeepResearchProgressLine mounts. Removes the
startTimeRef recalibration logic and progressEvent dependency from
ElapsedTimeCounter.
Disable the upstream Captcha Provider component.
Note: due to what looks like a naming mistake upstream, this component
erroneously identifies itself as "Probabilistic Reveal Tokens" in
brave://components. It is a different component with its own unique component
ID, however.
Chromium changes:
https://source.chromium.org/chromium/chromium/src/+/8cd9c51cde3520cc70c09553bb5fb72c75e04a37
commit 8cd9c51cde3520cc70c09553bb5fb72c75e04a37
Author: Ryan Kalla <ryankalla@google.com>
Date: Tue Jan 20 14:59:58 2026 -0800
Add UMA metrics to track CAPTCHA frame loads and interactions
We are interested in measuring CAPTCHA frame loads and interactions with
UMA/UKM metrics to see how CAPTCHA challenge rates are changing over
time. Additionally, we would like to measure if CAPTCHA challenge rates
are different when an AI agent (in this case the Glic agent, Bluedog) is
active on the tab.
This is implemented with a new PageLoadMetricsObserver, which will
determine CAPTCHA frames based on the frame URL. The list of tracked
CAPTCHA URLs is provided via the Component Updater.
Bug: 473517428
Chrome privacy consultation can be found at b/470068830.
Bug: 473517428
Change-Id: I37054eb55f2f817c4482763e386e054df5a71c1c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7396984
Reviewed-by: Ian Clelland <iclelland@chromium.org>
Reviewed-by: Tommy Nyquist <nyquist@chromium.org>
Commit-Queue: Ryan Kalla <ryankalla@google.com>
Cr-Commit-Position: refs/heads/main@{#1571908}
The test intermittently times out due to a race condition in the
DevTools frontend async chain (DebuggerPaused → SourcesPanel module
loading → bringToFront IPC). Already disabled upstream on Windows ASAN
(crbug.com/337141755) with 0.2% flake rate per LUCI Analysis. No
Brave-specific code affects this path.
Resolves https://github.com/brave/brave-browser/issues/53358
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* [Polkadot] Present Polkadot import keyring
Polkadot import keyring required to store polkadot imported accounts.
This PR also moves encoding\decoding methods to polkadot_utils to reuse them.
* [NTP Next] Add AI chat inputbox
ensures we don't load any AI Chat code if AI Chat build flag is disabled
default pref to `true`
Introduces a feature flag, defaulted to enable
---------
Co-authored-by: Pete Miller <miller.pete@gmail.com>
* start manage dapp account permission for cardano coin type
1. start manage dapp account permission for cardano coin type
2. refactor SiteConnection with a list of BraveWallet.AccountInfo instead of account addresses
* fix unit tests
* fix typo
1. fix typo in comments
2. fix typo in data model attribute name and use renaming id to automatically map from the old to new
Migrate Origin settings icons from custom drawables with hardcoded fill
colors to Leo design token equivalents that use @color/icon_default for
proper dark theme support. Remove manual icon tinting code that was
working around the hardcoded colors.
Resolves: https://github.com/brave/brave-browser/issues/53334
The cr146 commit (a31fb1f6bc) updated the reading side of
endpoint from .endpoint.url to .endpoint to match the new
url.mojom.Url -> string typemap, but on the writing side it
changed `endpoint: mojomUrl` to `endpoint: mojomUrl.toString()`
instead of removing the { url: '' } wrapper object. This
caused toString() to produce "[object Object]" instead of
the actual URL string, breaking Mojo deserialization when
adding or editing custom models in Leo settings.
Fix by removing the mojomUrl wrapper and passing
this.endpointUrl directly, consistent with how the reading
side already works.
* Add pref and backend support for tab organization model key
Introduce kBraveAIChatTabOrganizationModelKey pref (default:
"chat-automatic") to allow users to choose which model is used
for tab organization. Update CreateTabOrganizationEngineIfNeeded
to read from this pref with fallback to "chat-automatic". Add
unit test for the invalid key fallback path.
* Add tab organization model selector in settings UI
Extract shared LeoModelSelector Lit component from personalization
page. Add tab organization model dropdown that appears when the tab
organization feature flag and pref are both enabled. Gate the tab
organization toggle behind the feature flag. Add localized string
for the model selector label.
* Improve tab focus prompts
When testing local model, found gemma tends to reply topics like
"['📰 News', '💻 Web Development', ... ]" which is failed to be parsed
because of the usage of single quotes on strings.
Improve tab focus prompts to mention valid JSON array and examples for
model to follow.
Fix Unlock and Cancel buttons not shown when creating new private tab with lock enabled
When "Require Touch ID/Face ID" was enabled for private tabs, the Unlock and Cancel buttons were hidden when creating a new private tab via the + button and cancelling the biometric prompt.
- Always show Unlock button when auth fails so user can retry
- Set isCancellable=true for non-external view types to show Cancel button
Signed-off-by: Eli Hini <8249954+EliHini@users.noreply.github.com>
* Show PageActionView for partitioned storage tab in location bar
When the current tab uses a Brave container (partitioned storage), show the
page action in the location bar with the container's icon, name, and
background color from ContainerModel.
- Register kPartitionedStorageActionIconType and enable it in the location
bar only when ENABLE_CONTAINERS and the Containers feature are on.
- Add PartitionedStoragePageActionController that resolves the tab's
container via GetContainerIdForWebContents and ContainerModel, and drives
the generic PageActionView (Show/Hide, OverrideImage/Text, etc.); the
action is hidden when the tab has no container.
The email aliases toggle in Brave Origin settings was always visible
regardless of whether the feature flag is enabled. Since the feature is
disabled by default, users would see a non-functional toggle.
Expose kEmailAliases to Java via ChromeFeatureList and hide the
preference when the flag is disabled.
Resolves: https://github.com/brave/brave-browser/issues/53323
* [iOS] Add package.json to control module type in iOS
This adds a new `package.json` in `//brave/ios` to ensure that usages of the iOS JS tooling `optimize_ts`/`compile_ts` use the correct module type (`nodenext`). This is a prerequisite to building Brave JavaScriptFeature's with TypeScript
* Migrate iOS webpack.config.js to ESM syntax
* Update to styles for upcoming wallet as sidepanel
effort to standadrize panels in desktop so the future wallet as a sidebar item can work correctly https://www.figma.com/design/Fbtxfv2ATGlfH7nPXiWAbR/%F0%9F%92%BB-Browser-Sidebar?node-id=1749-34459
* remove hardcoded background color that was messing up theming
* update backgrounds in panels so now they're themable
* update theme selector and toolbar customizer to be responsive.
Bonus, but it's very badly needed to have a properly responsive panel
* Address feedback
Address feedback from @fallaciousreasoning
* Delete unnecessary image files
* Formatting
---------
Co-authored-by: Simon Hong <shong@brave.com>