Split trusted and untrusted webui registries [chromium/src : main]

0 views
Skip to first unread message

Giovanni Ortuno Urquidi (Gerrit)

unread,
Nov 25, 2025, 12:19:41 PM (11 days ago) Nov 25
to Fred Shih, Jay Harris, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org
Attention needed from Fred Shih and Jay Harris

Giovanni Ortuno Urquidi added 3 comments

File chrome/browser/chrome_browser_interface_binders_webui.h
Line 27, Patchset 10 (Latest):// PopulateChromeWebUIFrameInterfaceBrokers() registers BrowserInterfaceBrokers
// for each WebUI, these brokers are used to handle that WebUI's JavaScript
// Mojo.bindInterface calls.
void PopulateChromeWebUIFrameInterfaceBrokers(
content::WebUIBrowserInterfaceBrokerRegistry& registry);
Giovanni Ortuno Urquidi . unresolved

We can remove this one now, right?

File chrome/browser/chrome_browser_interface_binders_webui.cc
Line 165, Patchset 10 (Latest): // When possible, please one one of the Parts functions above and avoid making
// this function longer.
Giovanni Ortuno Urquidi . unresolved

nit: let's copy this comment below as well.

File content/public/browser/web_ui_controller.cc
Line 71, Patchset 10 (Latest):std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
Giovanni Ortuno Urquidi . unresolved

We could also override this method in UntrustedWebUIController. Have this one only check the trusted broker and have the UntrustedWebUIController override check the untrusted broker.

Open in Gerrit

Related details

Attention is currently required from:
  • Fred Shih
  • Jay Harris
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
Gerrit-Change-Number: 7201507
Gerrit-PatchSet: 10
Gerrit-Owner: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
Gerrit-Attention: Jay Harris <harr...@chromium.org>
Gerrit-Attention: Fred Shih <ff...@chromium.org>
Gerrit-Comment-Date: Tue, 25 Nov 2025 17:19:35 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Jay Harris (Gerrit)

unread,
Nov 25, 2025, 7:39:17 PM (10 days ago) Nov 25
to Fred Shih, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org
Attention needed from Fred Shih

Jay Harris added 2 comments

Patchset-level comments
File-level comment, Patchset 11 (Latest):
Jay Harris . resolved

Hey, so this approach seems pretty sensible to me and should be a great improvement.

One thing is that now we're adding support for multiple registries its probably worth thinking about how we'd extend this to support a per-profile registries, as @dpapad needed in this CL:
https://chromium-review.googlesource.com/c/chromium/src/+/7113879/comment/641afd01_debac3fd/ (which I don't think we'll be able to do using base::NoDestructor).

I think once we have that piece in place, we'll have all the use cases of the old `RegisterWebUIControllerInterfaceBinder` in `WebUIBrowserInterfaceBrokerRegistry`

That said, lgtm, and I think its worth landing this as-is (but I'm not an owner, so can't +1 sorry).

File chrome/browser/chrome_browser_interface_binders_webui.cc
Line 165, Patchset 10: // When possible, please one one of the Parts functions above and avoid making
// this function longer.
Giovanni Ortuno Urquidi . unresolved

nit: let's copy this comment below as well.

Jay Harris

nit: "please one one of" --> "please use one of"

Open in Gerrit

Related details

Attention is currently required from:
  • Fred Shih
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
Gerrit-Change-Number: 7201507
Gerrit-PatchSet: 11
Gerrit-Owner: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
Gerrit-Attention: Fred Shih <ff...@chromium.org>
Gerrit-Comment-Date: Wed, 26 Nov 2025 00:38:42 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Giovanni Ortuno Urquidi <ort...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Fred Shih (Gerrit)

unread,
Nov 25, 2025, 8:24:32 PM (10 days ago) Nov 25
to Demetrios Papadopoulos, Jay Harris, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org
Attention needed from Giovanni Ortuno Urquidi and Jay Harris

Fred Shih added 5 comments

Patchset-level comments
Jay Harris . resolved

Hey, so this approach seems pretty sensible to me and should be a great improvement.

One thing is that now we're adding support for multiple registries its probably worth thinking about how we'd extend this to support a per-profile registries, as @dpapad needed in this CL:
https://chromium-review.googlesource.com/c/chromium/src/+/7113879/comment/641afd01_debac3fd/ (which I don't think we'll be able to do using base::NoDestructor).

I think once we have that piece in place, we'll have all the use cases of the old `RegisterWebUIControllerInterfaceBinder` in `WebUIBrowserInterfaceBrokerRegistry`

That said, lgtm, and I think its worth landing this as-is (but I'm not an owner, so can't +1 sorry).

Fred Shih

Interesting, good that we're breaking apart the registries. Per-profile registries doesn't seem too hard, although we'd need to consider several things:

1. What happens if the same webui is registered in multiple registries.
2. Where we'd put the registry. IIUC, the NoDestructor is really meant as an optimization

We'd probably be able to construct it each time if necessary, for a per-profile registry, this might not be too bad? I'd imagine we'd just need tighter rules around resolution if we're going to have multiple registries.

Thanks for taking a look! Always good to get more eyes on a change.

Fred Shih . resolved

+dpapad@ who's apparently working in this area too!

File chrome/browser/chrome_browser_interface_binders_webui.h
Line 27, Patchset 10:// PopulateChromeWebUIFrameInterfaceBrokers() registers BrowserInterfaceBrokers

// for each WebUI, these brokers are used to handle that WebUI's JavaScript
// Mojo.bindInterface calls.
void PopulateChromeWebUIFrameInterfaceBrokers(
content::WebUIBrowserInterfaceBrokerRegistry& registry);
Giovanni Ortuno Urquidi . resolved

We can remove this one now, right?

Fred Shih

yep! forgot to remove this after copy and pasting D:

File chrome/browser/chrome_browser_interface_binders_webui.cc
Line 165, Patchset 10: // When possible, please one one of the Parts functions above and avoid making
// this function longer.
Giovanni Ortuno Urquidi . resolved

nit: let's copy this comment below as well.

Fred Shih

Done

File content/public/browser/web_ui_controller.cc
Line 71, Patchset 10:std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
Giovanni Ortuno Urquidi . unresolved

We could also override this method in UntrustedWebUIController. Have this one only check the trusted broker and have the UntrustedWebUIController override check the untrusted broker.

Fred Shih

oh! I didn't realize this existed. I do think it's kind of weird to have UntrustedWebUIController inherit from the (implicitly trusted) WebUIController. Would it be reasonable to make WebUIController an ABC with a TrustedWebUIController and UntrustedWebUIController as implementations (in a followup CL)?

Made the change.

Open in Gerrit

Related details

Attention is currently required from:
  • Giovanni Ortuno Urquidi
  • Jay Harris
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
Gerrit-Change-Number: 7201507
Gerrit-PatchSet: 11
Gerrit-Owner: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
Gerrit-CC: Demetrios Papadopoulos <dpa...@chromium.org>
Gerrit-Attention: Jay Harris <harr...@chromium.org>
Gerrit-Attention: Giovanni Ortuno Urquidi <ort...@chromium.org>
Gerrit-Comment-Date: Wed, 26 Nov 2025 01:24:21 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Jay Harris <harr...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Giovanni Ortuno Urquidi (Gerrit)

unread,
Nov 26, 2025, 12:51:15 PM (10 days ago) Nov 26
to Fred Shih, Demetrios Papadopoulos, Jay Harris, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org
Attention needed from Fred Shih and Jay Harris

Giovanni Ortuno Urquidi added 3 comments

Patchset-level comments
File-level comment, Patchset 11:
Jay Harris . unresolved

Hey, so this approach seems pretty sensible to me and should be a great improvement.

One thing is that now we're adding support for multiple registries its probably worth thinking about how we'd extend this to support a per-profile registries, as @dpapad needed in this CL:
https://chromium-review.googlesource.com/c/chromium/src/+/7113879/comment/641afd01_debac3fd/ (which I don't think we'll be able to do using base::NoDestructor).

I think once we have that piece in place, we'll have all the use cases of the old `RegisterWebUIControllerInterfaceBinder` in `WebUIBrowserInterfaceBrokerRegistry`

That said, lgtm, and I think its worth landing this as-is (but I'm not an owner, so can't +1 sorry).

Fred Shih

Interesting, good that we're breaking apart the registries. Per-profile registries doesn't seem too hard, although we'd need to consider several things:

1. What happens if the same webui is registered in multiple registries.
2. Where we'd put the registry. IIUC, the NoDestructor is really meant as an optimization

We'd probably be able to construct it each time if necessary, for a per-profile registry, this might not be too bad? I'd imagine we'd just need tighter rules around resolution if we're going to have multiple registries.

Thanks for taking a look! Always good to get more eyes on a change.

Giovanni Ortuno Urquidi

I'm not sure why we ended up with a global registry. It might have been an oversight during the implementation or maybe just an optimization to avoid creating the registry on each navigation. Maybe qjw remembers. Original design doc: https://docs.google.com/document/d/1hvyYFBcobMzG6-HZHLuzaKuvirAPSdkBp5ThDR3Z4Ns/edit?usp=sharing&resourcekey=0-LBl1HzbJ2ZN3WfwcUNCOgQ

It would be pretty straightforward to make this into a browser context keyed service, but maybe it would be better to make this a per-render-frame-host (like the other binder map) or even per-webui-controller and keep it more scoped.

If we do make it more scoped, we could change ForWebUI and Add() to be no ops to reduce the overhead of creating the map for every navigation, basically:

1. Add an optional current_webui_type to the WebUIBrowserInterfaceBrokerRegistry constructor.
2. When ForWebUI<ControllerType>() is called to register binders, the registry will check if ControllerType matches current_webui_type.
* Match: It proceeds as normal, registering the binders.
* No Match: It returns a "dummy" helper that ignores all subsequent .Add<Interface>() calls.
3. In WebUIController::WebUIReadyToCommitNavigation, instead of using a global or shared registry, create a local registry specifically interested in this->GetType()
File chrome/test/base/ash/mojo_web_ui_browser_test.cc
Line 96, Patchset 12 (Latest): registry.AddGlobal(base::BindLambdaForTesting(
Giovanni Ortuno Urquidi . unresolved

Nice!

File content/public/browser/web_ui_controller.cc
Line 71, Patchset 10:std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
Giovanni Ortuno Urquidi . unresolved

We could also override this method in UntrustedWebUIController. Have this one only check the trusted broker and have the UntrustedWebUIController override check the untrusted broker.

Fred Shih

oh! I didn't realize this existed. I do think it's kind of weird to have UntrustedWebUIController inherit from the (implicitly trusted) WebUIController. Would it be reasonable to make WebUIController an ABC with a TrustedWebUIController and UntrustedWebUIController as implementations (in a followup CL)?

Made the change.

Giovanni Ortuno Urquidi

I'm still paging back my WebUI knowledge here, but that seems reasonable.

I would go with BaseWebUIController and WebUIController/UntrustedWebUIController. Historically, we've used the absence of "Untrusted" to mean trusted e.g. chrome:// and chrome-untrusted://; it just keeps things less verbose, but not a super hard rule.

Open in Gerrit

Related details

Attention is currently required from:
  • Fred Shih
  • Jay Harris
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
Gerrit-Change-Number: 7201507
Gerrit-PatchSet: 12
Gerrit-Owner: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
Gerrit-CC: Demetrios Papadopoulos <dpa...@chromium.org>
Gerrit-Attention: Jay Harris <harr...@chromium.org>
Gerrit-Attention: Fred Shih <ff...@chromium.org>
Gerrit-Comment-Date: Wed, 26 Nov 2025 17:51:10 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Jay Harris <harr...@chromium.org>
Comment-In-Reply-To: Giovanni Ortuno Urquidi <ort...@chromium.org>
Comment-In-Reply-To: Fred Shih <ff...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Giovanni Ortuno Urquidi (Gerrit)

unread,
Nov 26, 2025, 12:51:22 PM (10 days ago) Nov 26
to Fred Shih, Giovanni Ortuno Urquidi, Demetrios Papadopoulos, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
Attention needed from Fred Shih and Jay Harris

Giovanni Ortuno Urquidi voted Code-Review+1

Code-Review+1
Open in Gerrit

Related details

Attention is currently required from:
  • Fred Shih
  • Jay Harris
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
    Gerrit-Change-Number: 7201507
    Gerrit-PatchSet: 12
    Gerrit-Owner: Fred Shih <ff...@chromium.org>
    Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
    Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
    Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
    Gerrit-CC: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Jay Harris <harr...@chromium.org>
    Gerrit-Attention: Fred Shih <ff...@chromium.org>
    Gerrit-Comment-Date: Wed, 26 Nov 2025 17:51:14 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Giovanni Ortuno Urquidi (Gerrit)

    unread,
    Nov 26, 2025, 1:06:45 PM (10 days ago) Nov 26
    to Fred Shih, Giovanni Ortuno Urquidi, Demetrios Papadopoulos, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
    Attention needed from Fred Shih and Jay Harris

    Giovanni Ortuno Urquidi added 1 comment

    Patchset-level comments
    Jay Harris . unresolved

    Hey, so this approach seems pretty sensible to me and should be a great improvement.

    One thing is that now we're adding support for multiple registries its probably worth thinking about how we'd extend this to support a per-profile registries, as @dpapad needed in this CL:
    https://chromium-review.googlesource.com/c/chromium/src/+/7113879/comment/641afd01_debac3fd/ (which I don't think we'll be able to do using base::NoDestructor).

    I think once we have that piece in place, we'll have all the use cases of the old `RegisterWebUIControllerInterfaceBinder` in `WebUIBrowserInterfaceBrokerRegistry`

    That said, lgtm, and I think its worth landing this as-is (but I'm not an owner, so can't +1 sorry).

    Fred Shih

    Interesting, good that we're breaking apart the registries. Per-profile registries doesn't seem too hard, although we'd need to consider several things:

    1. What happens if the same webui is registered in multiple registries.
    2. Where we'd put the registry. IIUC, the NoDestructor is really meant as an optimization

    We'd probably be able to construct it each time if necessary, for a per-profile registry, this might not be too bad? I'd imagine we'd just need tighter rules around resolution if we're going to have multiple registries.

    Thanks for taking a look! Always good to get more eyes on a change.

    Giovanni Ortuno Urquidi

    I'm not sure why we ended up with a global registry. It might have been an oversight during the implementation or maybe just an optimization to avoid creating the registry on each navigation. Maybe qjw remembers. Original design doc: https://docs.google.com/document/d/1hvyYFBcobMzG6-HZHLuzaKuvirAPSdkBp5ThDR3Z4Ns/edit?usp=sharing&resourcekey=0-LBl1HzbJ2ZN3WfwcUNCOgQ

    It would be pretty straightforward to make this into a browser context keyed service, but maybe it would be better to make this a per-render-frame-host (like the other binder map) or even per-webui-controller and keep it more scoped.

    If we do make it more scoped, we could change ForWebUI and Add() to be no ops to reduce the overhead of creating the map for every navigation, basically:

    1. Add an optional current_webui_type to the WebUIBrowserInterfaceBrokerRegistry constructor.
    2. When ForWebUI<ControllerType>() is called to register binders, the registry will check if ControllerType matches current_webui_type.
    * Match: It proceeds as normal, registering the binders.
    * No Match: It returns a "dummy" helper that ignores all subsequent .Add<Interface>() calls.
    3. In WebUIController::WebUIReadyToCommitNavigation, instead of using a global or shared registry, create a local registry specifically interested in this->GetType()
    Giovanni Ortuno Urquidi

    Another way to achieve what that CL chain is trying to do that would require a less fundamental change would be to add an optional "should_bind" `base::RepeatingCallback<bool(WebUIController)>` to `Add()`. We would call it before adding the binder to the internal map, so it only gets registered when it returns true.

    Gerrit-Comment-Date: Wed, 26 Nov 2025 18:06:36 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Fred Shih (Gerrit)

    unread,
    Nov 26, 2025, 3:48:00 PM (9 days ago) Nov 26
    to Giovanni Ortuno Urquidi, Demetrios Papadopoulos, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
    Attention needed from Jay Harris

    Fred Shih voted and added 2 comments

    Votes added by Fred Shih

    Commit-Queue+2

    2 comments

    Patchset-level comments

    Hey, so this approach seems pretty sensible to me and should be a great improvement.

    One thing is that now we're adding support for multiple registries its probably worth thinking about how we'd extend this to support a per-profile registries, as @dpapad needed in this CL:
    https://chromium-review.googlesource.com/c/chromium/src/+/7113879/comment/641afd01_debac3fd/ (which I don't think we'll be able to do using base::NoDestructor).

    I think once we have that piece in place, we'll have all the use cases of the old `RegisterWebUIControllerInterfaceBinder` in `WebUIBrowserInterfaceBrokerRegistry`

    That said, lgtm, and I think its worth landing this as-is (but I'm not an owner, so can't +1 sorry).

    Fred Shih

    Interesting, good that we're breaking apart the registries. Per-profile registries doesn't seem too hard, although we'd need to consider several things:

    1. What happens if the same webui is registered in multiple registries.
    2. Where we'd put the registry. IIUC, the NoDestructor is really meant as an optimization

    We'd probably be able to construct it each time if necessary, for a per-profile registry, this might not be too bad? I'd imagine we'd just need tighter rules around resolution if we're going to have multiple registries.

    Thanks for taking a look! Always good to get more eyes on a change.

    Giovanni Ortuno Urquidi

    I'm not sure why we ended up with a global registry. It might have been an oversight during the implementation or maybe just an optimization to avoid creating the registry on each navigation. Maybe qjw remembers. Original design doc: https://docs.google.com/document/d/1hvyYFBcobMzG6-HZHLuzaKuvirAPSdkBp5ThDR3Z4Ns/edit?usp=sharing&resourcekey=0-LBl1HzbJ2ZN3WfwcUNCOgQ

    It would be pretty straightforward to make this into a browser context keyed service, but maybe it would be better to make this a per-render-frame-host (like the other binder map) or even per-webui-controller and keep it more scoped.

    If we do make it more scoped, we could change ForWebUI and Add() to be no ops to reduce the overhead of creating the map for every navigation, basically:

    1. Add an optional current_webui_type to the WebUIBrowserInterfaceBrokerRegistry constructor.
    2. When ForWebUI<ControllerType>() is called to register binders, the registry will check if ControllerType matches current_webui_type.
    * Match: It proceeds as normal, registering the binders.
    * No Match: It returns a "dummy" helper that ignores all subsequent .Add<Interface>() calls.
    3. In WebUIController::WebUIReadyToCommitNavigation, instead of using a global or shared registry, create a local registry specifically interested in this->GetType()
    Giovanni Ortuno Urquidi

    Another way to achieve what that CL chain is trying to do that would require a less fundamental change would be to add an optional "should_bind" `base::RepeatingCallback<bool(WebUIController)>` to `Add()`. We would call it before adding the binder to the internal map, so it only gets registered when it returns true.

    Fred Shih

    Ack -- I'll throw this in a crbug.com/464033838 for followup work. Thanks for the suggestions!

    File content/public/browser/web_ui_controller.cc
    Line 71, Patchset 10:std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
    Giovanni Ortuno Urquidi . resolved

    We could also override this method in UntrustedWebUIController. Have this one only check the trusted broker and have the UntrustedWebUIController override check the untrusted broker.

    Fred Shih

    oh! I didn't realize this existed. I do think it's kind of weird to have UntrustedWebUIController inherit from the (implicitly trusted) WebUIController. Would it be reasonable to make WebUIController an ABC with a TrustedWebUIController and UntrustedWebUIController as implementations (in a followup CL)?

    Made the change.

    Giovanni Ortuno Urquidi

    I'm still paging back my WebUI knowledge here, but that seems reasonable.

    I would go with BaseWebUIController and WebUIController/UntrustedWebUIController. Historically, we've used the absence of "Untrusted" to mean trusted e.g. chrome:// and chrome-untrusted://; it just keeps things less verbose, but not a super hard rule.

    Fred Shih

    Acknowledged, thanks!

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Jay Harris
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
    Gerrit-Change-Number: 7201507
    Gerrit-PatchSet: 12
    Gerrit-Owner: Fred Shih <ff...@chromium.org>
    Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
    Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
    Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
    Gerrit-CC: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Jay Harris <harr...@chromium.org>
    Gerrit-Comment-Date: Wed, 26 Nov 2025 20:47:53 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Fred Shih (Gerrit)

    unread,
    Nov 26, 2025, 3:48:32 PM (9 days ago) Nov 26
    to Giovanni Ortuno Urquidi, Demetrios Papadopoulos, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
    Attention needed from Fred Shih and Jay Harris

    Fred Shih voted and added 1 comment

    Votes added by Fred Shih

    Commit-Queue+2

    1 comment

    File chrome/test/base/ash/mojo_web_ui_browser_test.cc
    Line 96, Patchset 12 (Latest): registry.AddGlobal(base::BindLambdaForTesting(
    Giovanni Ortuno Urquidi . resolved

    Nice!

    Fred Shih

    Acknowledged

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Fred Shih
    • Jay Harris
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
      Gerrit-Change-Number: 7201507
      Gerrit-PatchSet: 12
      Gerrit-Owner: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
      Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
      Gerrit-CC: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Attention: Jay Harris <harr...@chromium.org>
      Gerrit-Attention: Fred Shih <ff...@chromium.org>
      Gerrit-Comment-Date: Wed, 26 Nov 2025 20:48:22 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Giovanni Ortuno Urquidi <ort...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Fred Shih (Gerrit)

      unread,
      Nov 26, 2025, 3:52:46 PM (9 days ago) Nov 26
      to Ashley Prasad, Dmitry Gozman, Chromium UI WebUI Reviews, Demetrios Papadopoulos, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
      Attention needed from Ashley Prasad, Chromium UI WebUI Reviews, Dmitry Gozman and Jay Harris

      Fred Shih voted Commit-Queue+2

      Commit-Queue+2
      Open in Gerrit

      Related details

      Attention is currently required from:
      • Ashley Prasad
      • Chromium UI WebUI Reviews
      • Dmitry Gozman
      • Jay Harris
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
      Gerrit-Change-Number: 7201507
      Gerrit-PatchSet: 12
      Gerrit-Owner: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Ashley Prasad <ashl...@google.com>
      Gerrit-Reviewer: Chromium UI WebUI Reviews <chromium-ui-...@google.com>
      Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
      Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
      Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
      Gerrit-CC: Demetrios Papadopoulos <dpa...@google.com>
      Gerrit-Attention: Jay Harris <harr...@chromium.org>
      Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
      Gerrit-Attention: Chromium UI WebUI Reviews <chromium-ui-...@google.com>
      Gerrit-Attention: Ashley Prasad <ashl...@google.com>
      Gerrit-Comment-Date: Wed, 26 Nov 2025 20:52:35 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Fred Shih (Gerrit)

      unread,
      Nov 26, 2025, 3:54:47 PM (9 days ago) Nov 26
      to Demetrios Papadopoulos, Ashley Prasad, Dmitry Gozman, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
      Attention needed from Ashley Prasad, Demetrios Papadopoulos, Dmitry Gozman and Jay Harris

      Fred Shih added 1 comment

      Patchset-level comments
      File-level comment, Patchset 12 (Latest):
      Fred Shih . resolved

      moving dpapad@ to reviewer for ui/webui/...

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Ashley Prasad
      • Demetrios Papadopoulos
      • Dmitry Gozman
      • Jay Harris
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
      Gerrit-Change-Number: 7201507
      Gerrit-PatchSet: 12
      Gerrit-Owner: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Ashley Prasad <ashl...@google.com>
      Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
      Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
      Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
      Gerrit-Attention: Jay Harris <harr...@chromium.org>
      Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
      Gerrit-Attention: Ashley Prasad <ashl...@google.com>
      Gerrit-Comment-Date: Wed, 26 Nov 2025 20:54:40 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Fred Shih (Gerrit)

      unread,
      Nov 26, 2025, 3:55:21 PM (9 days ago) Nov 26
      to Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
      Attention needed from Demetrios Papadopoulos, Dmitry Gozman and Jay Harris

      Fred Shih added 1 comment

      Patchset-level comments
      Fred Shih . resolved

      removing dup reviewer

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Demetrios Papadopoulos
      • Dmitry Gozman
      • Jay Harris
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
      Gerrit-Change-Number: 7201507
      Gerrit-PatchSet: 12
      Gerrit-Owner: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
      Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
      Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
      Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
      Gerrit-Attention: Jay Harris <harr...@chromium.org>
      Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
      Gerrit-Comment-Date: Wed, 26 Nov 2025 20:55:13 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Demetrios Papadopoulos (Gerrit)

      unread,
      Nov 26, 2025, 5:07:22 PM (9 days ago) Nov 26
      to Fred Shih, Dmitry Gozman, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
      Attention needed from Dmitry Gozman, Fred Shih and Jay Harris

      Demetrios Papadopoulos voted and added 3 comments

      Votes added by Demetrios Papadopoulos

      Code-Review+1

      3 comments

      Patchset-level comments
      Demetrios Papadopoulos . resolved

      LGTM although I am not too knowledgeable about these parts.

      Commit Message
      Line 18, Patchset 12 (Latest):work is here: crbug.com/463472166
      Demetrios Papadopoulos . unresolved

      Let's put this is the `Bug` line too?

      Line 19, Patchset 12 (Latest):
      Demetrios Papadopoulos . unresolved

      Should this be linked to a bug? Or is there no bug tracking the general problem being fixed?

      Or if this is helping with https://issues.chromium.org/issues/452983498 as a side-effect should we at least link to that?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Dmitry Gozman
      • Fred Shih
      • Jay Harris
      Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement is not satisfiedCode-Owners
        • requirement satisfiedCode-Review
        • requirement is not satisfiedNo-Unresolved-Comments
        • requirement satisfiedReview-Enforcement
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
        Gerrit-Change-Number: 7201507
        Gerrit-PatchSet: 12
        Gerrit-Owner: Fred Shih <ff...@chromium.org>
        Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
        Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
        Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
        Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
        Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
        Gerrit-Attention: Jay Harris <harr...@chromium.org>
        Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
        Gerrit-Attention: Fred Shih <ff...@chromium.org>
        Gerrit-Comment-Date: Wed, 26 Nov 2025 22:07:09 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Fred Shih (Gerrit)

        unread,
        Nov 26, 2025, 5:13:49 PM (9 days ago) Nov 26
        to Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
        Attention needed from Dmitry Gozman and Jay Harris

        Fred Shih voted and added 2 comments

        Votes added by Fred Shih

        Commit-Queue+1

        2 comments

        Commit Message
        Line 18, Patchset 12:work is here: crbug.com/463472166
        Demetrios Papadopoulos . resolved

        Let's put this is the `Bug` line too?

        Fred Shih

        Done

        Line 19, Patchset 12:
        Demetrios Papadopoulos . resolved

        Should this be linked to a bug? Or is there no bug tracking the general problem being fixed?

        Or if this is helping with https://issues.chromium.org/issues/452983498 as a side-effect should we at least link to that?

        Fred Shih

        I linked it to the original bug which introduced AddGlobal to the registry because it's a followup work which fixed globals being added to both trusted and untrusted.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Dmitry Gozman
        • Jay Harris
        Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement satisfiedCode-Review
          • requirement satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
          Gerrit-Change-Number: 7201507
          Gerrit-PatchSet: 13
          Gerrit-Owner: Fred Shih <ff...@chromium.org>
          Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
          Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
          Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
          Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
          Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
          Gerrit-Attention: Jay Harris <harr...@chromium.org>
          Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
          Gerrit-Comment-Date: Wed, 26 Nov 2025 22:13:39 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: Yes
          Comment-In-Reply-To: Demetrios Papadopoulos <dpa...@chromium.org>
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Dmitry Gozman (Gerrit)

          unread,
          Nov 28, 2025, 4:23:56 AM (8 days ago) Nov 28
          to Fred Shih, Demetrios Papadopoulos, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org
          Attention needed from Fred Shih

          Dmitry Gozman added 7 comments

          File content/public/browser/content_browser_client.h
          Line 1713, Patchset 13 (Latest): virtual void RegisterUntrustedWebUIInterfaceBrokers(
          Dmitry Gozman . unresolved

          This method is never called in `content`, so it should not be here.

          To quote [content API guidelines](https://source.chromium.org/chromium/chromium/src/+/main:content/public/README.md):

          ```
          Methods in the API should be there because either content is calling out to its embedder, or the embedder is calling to content. There shouldn't be any methods which are used to call from the embedder to the embedder.
          ```

          File content/public/browser/web_ui_browser_interface_broker_registry.h
          Line 100, Patchset 13 (Latest): WebUIBrowserInterfaceBrokerRegistry(
          Dmitry Gozman . unresolved

          Why do we now need to copy the registry? That sounds counter-intuitive to me. I'd assume it's moved around if needed, not copied.

          File content/public/browser/web_ui_controller.h
          Line 93, Patchset 13 (Latest): ContentClient* content_client);
          Dmitry Gozman . unresolved

          This should be `ContentBrowserClient`, not `ContentClient`, because we are talking about `content/public/browser` classes that are only used in the browser.

          Line 92, Patchset 13 (Latest): virtual std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
          Dmitry Gozman . unresolved

          It seems like there are [no protected methods in `content/public`](https://source.chromium.org/search?q=%22protected:%22%20f:content%2Fpublic%20-f:content%2Fpublic%2Ftest&sq=), except for constructors/destructors of pure abstract interfaces. Can we keep this public?

          Line 92, Patchset 13 (Latest): virtual std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
          Dmitry Gozman . unresolved

          I wonder why do we have two ways for content to ask embedder to create interface brokers - one here, and another in `ContentBrowserClient::RegisterTrustedWebUIInterfaceBrokers`? Having just one would seem to be enough? That would certainly make things easier to understand.

          File content/public/browser/web_ui_controller.cc
          Line 61, Patchset 13 (Latest): return GetTrustedWebUIBrowserInterfaceBrokerRegistry(content_client)
          Dmitry Gozman . unresolved

          Having non-pure interfaces with some partial implementation is against the [content API guidelines](https://source.chromium.org/chromium/chromium/src/+/main:content/public/README.md):

          ```
          //content/public should contain only interfaces, enums, structs and (rarely) static functions
          ```

          I'd recommend to rename this into `CreateUntrustedInterfaceBroker()` or something like that, leave it no-op in `WebUIController`, and call it alongside the trusted registry somewhere in content impl.

          Line 65, Patchset 13 (Latest):void WebUIController::WebUIReadyToCommitNavigation(
          Dmitry Gozman . unresolved

          To be honest, I think this method violates content API guidelines as well. I'd prefer to store `broker_` somewhere in `content::WebUIImpl` and update it there directly from `WebUIMainFrameObserver::ReadyToCommitNavigation`. This way, interface broker business stays in content impl, and we get the (almost) pure interface `WebUIController` for embedders to implement.

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Fred Shih
          Submit Requirements:
            • requirement satisfiedCode-Coverage
            • requirement is not satisfiedCode-Owners
            • requirement satisfiedCode-Review
            • requirement is not satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: comment
            Gerrit-Project: chromium/src
            Gerrit-Branch: main
            Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
            Gerrit-Change-Number: 7201507
            Gerrit-PatchSet: 13
            Gerrit-Owner: Fred Shih <ff...@chromium.org>
            Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
            Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
            Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
            Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
            Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
            Gerrit-Attention: Fred Shih <ff...@chromium.org>
            Gerrit-Comment-Date: Fri, 28 Nov 2025 09:23:36 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: No
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Fred Shih (Gerrit)

            unread,
            Dec 4, 2025, 5:35:02 PM (2 days ago) Dec 4
            to AyeAye, Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Jay Harris, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
            Attention needed from Dmitry Gozman

            Fred Shih added 10 comments

            Patchset-level comments
            File-level comment, Patchset 21:
            Fred Shih . resolved

            @Dmitry, sorry it took so long to respond. It took me some time to understand //content guidelines better and untangle some of the violations. I appreciate the feedback!

            File chrome/test/data/webui/mojo/mojo_js_interface_broker_browsertest.cc
            Line 287, Patchset 20 (Parent): auto* broker1 =
            web_contents->GetWebUI()->GetController()->broker_for_testing();
            Fred Shih . resolved

            I don't think these tests are interesting. We can already see that a new broker is created for each new web ui, because it is referenced by a unique_ptr. I don't think it makes a lot of sense to verify that a new instance of WebUIController does actually create a new broker.

            File content/public/browser/content_browser_client.h
            Line 1713, Patchset 13: virtual void RegisterUntrustedWebUIInterfaceBrokers(
            Dmitry Gozman . resolved

            This method is never called in `content`, so it should not be here.

            To quote [content API guidelines](https://source.chromium.org/chromium/chromium/src/+/main:content/public/README.md):

            ```
            Methods in the API should be there because either content is calling out to its embedder, or the embedder is calling to content. There shouldn't be any methods which are used to call from the embedder to the embedder.
            ```

            Fred Shih

            Done

            File content/public/browser/web_ui_browser_interface_broker_registry.h
            Line 100, Patchset 13: WebUIBrowserInterfaceBrokerRegistry(
            Dmitry Gozman . unresolved

            Why do we now need to copy the registry? That sounds counter-intuitive to me. I'd assume it's moved around if needed, not copied.

            Fred Shih

            it's mainly because of the static (global) init, which I'd like to get rid of too. I changed it to a unique_ptr and got rid of this copy construction.

            BTW -- just to pick your brain, doesn't this class violates the API guideline for //content/public because it's a concrete impl and not an interface?

            File content/public/browser/web_ui_controller.h
            Line 91, Patchset 21: virtual TrustPolicy GetTrustPolicy();
            Fred Shih . unresolved

            @Dmitry: I know that this still violates the content guideline. I would like to fix this, but that would trigger a lot more changes, because the browser directly instantiates WebUI. What I'd like to do is:

            1. Make this class pure virtual.
            2. Create a TrustedWebUIController and UntrustedWebUIController subclasses.
            3. Swap over all the existing instantiation sites in the browser to either of the two classes.

            Unfortunately that will touch a lot more files, so I'd like to leave it to a followup CL. I did get rid of the WebUIReadyToCommitNavigation method though :)

            Line 93, Patchset 13: ContentClient* content_client);
            Dmitry Gozman . resolved

            This should be `ContentBrowserClient`, not `ContentClient`, because we are talking about `content/public/browser` classes that are only used in the browser.

            Fred Shih

            No longer needed.

            Line 92, Patchset 13: virtual std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
            Dmitry Gozman . resolved

            I wonder why do we have two ways for content to ask embedder to create interface brokers - one here, and another in `ContentBrowserClient::RegisterTrustedWebUIInterfaceBrokers`? Having just one would seem to be enough? That would certainly make things easier to understand.

            Fred Shih

            No longer needed.

            Line 92, Patchset 13: virtual std::unique_ptr<PerWebUIBrowserInterfaceBroker> CreateInterfaceBroker(
            Dmitry Gozman . resolved

            It seems like there are [no protected methods in `content/public`](https://source.chromium.org/search?q=%22protected:%22%20f:content%2Fpublic%20-f:content%2Fpublic%2Ftest&sq=), except for constructors/destructors of pure abstract interfaces. Can we keep this public?

            Fred Shih

            No longer needed.

            File content/public/browser/web_ui_controller.cc
            Line 61, Patchset 13: return GetTrustedWebUIBrowserInterfaceBrokerRegistry(content_client)
            Dmitry Gozman . resolved

            Having non-pure interfaces with some partial implementation is against the [content API guidelines](https://source.chromium.org/chromium/chromium/src/+/main:content/public/README.md):

            ```
            //content/public should contain only interfaces, enums, structs and (rarely) static functions
            ```

            I'd recommend to rename this into `CreateUntrustedInterfaceBroker()` or something like that, leave it no-op in `WebUIController`, and call it alongside the trusted registry somewhere in content impl.

            Fred Shih

            I moved the registry stuff to the contents impl. I think that makes a lot more sense, because it is a bizzare that web contents controller is creating a broker for itself.

            Line 65, Patchset 13:void WebUIController::WebUIReadyToCommitNavigation(
            Dmitry Gozman . resolved

            To be honest, I think this method violates content API guidelines as well. I'd prefer to store `broker_` somewhere in `content::WebUIImpl` and update it there directly from `WebUIMainFrameObserver::ReadyToCommitNavigation`. This way, interface broker business stays in content impl, and we get the (almost) pure interface `WebUIController` for embedders to implement.

            Fred Shih

            I think that makes a lot of sense! Moved this over to web ui. Now the web ui is responsible for wiring up the controller with the content.

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Dmitry Gozman
            Submit Requirements:
              • requirement satisfiedCode-Coverage
              • requirement is not satisfiedCode-Owners
              • requirement is not satisfiedCode-Review
              • requirement is not satisfiedNo-Unresolved-Comments
              • requirement is not satisfiedReview-Enforcement
              Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
              Gerrit-MessageType: comment
              Gerrit-Project: chromium/src
              Gerrit-Branch: main
              Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
              Gerrit-Change-Number: 7201507
              Gerrit-PatchSet: 21
              Gerrit-Owner: Fred Shih <ff...@chromium.org>
              Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
              Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
              Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
              Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
              Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
              Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
              Gerrit-Comment-Date: Thu, 04 Dec 2025 22:34:51 +0000
              Gerrit-HasComments: Yes
              Gerrit-Has-Labels: No
              Comment-In-Reply-To: Dmitry Gozman <dgo...@chromium.org>
              satisfied_requirement
              unsatisfied_requirement
              open
              diffy

              Jay Harris (Gerrit)

              unread,
              Dec 4, 2025, 6:34:46 PM (2 days ago) Dec 4
              to Fred Shih, AyeAye, Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
              Attention needed from Dmitry Gozman

              Jay Harris voted and added 2 comments

              Votes added by Jay Harris

              Code-Review+1

              2 comments

              File chrome/browser/ui/webui_browser/webui_browser_ui.h
              Line 93, Patchset 23 (Latest): // TODO(crbug.com/464033838): we should not allow subclasses to override
              Jay Harris . unresolved

              Could we make this bug visible to people outside Google (can't view it with my chromium.org account)

              File content/public/browser/web_ui_controller.h
              Line 91, Patchset 21: virtual TrustPolicy GetTrustPolicy();
              Fred Shih . unresolved

              @Dmitry: I know that this still violates the content guideline. I would like to fix this, but that would trigger a lot more changes, because the browser directly instantiates WebUI. What I'd like to do is:

              1. Make this class pure virtual.
              2. Create a TrustedWebUIController and UntrustedWebUIController subclasses.
              3. Swap over all the existing instantiation sites in the browser to either of the two classes.

              Unfortunately that will touch a lot more files, so I'd like to leave it to a followup CL. I did get rid of the WebUIReadyToCommitNavigation method though :)

              Jay Harris

              This would be great! Its always confused me that `UntrustedWebUIController` extends the (presumably trusted) `WebUIController`

              Open in Gerrit

              Related details

              Attention is currently required from:
              • Dmitry Gozman
              Submit Requirements:
                • requirement satisfiedCode-Coverage
                • requirement is not satisfiedCode-Owners
                • requirement satisfiedCode-Review
                • requirement is not satisfiedNo-Unresolved-Comments
                • requirement is not satisfiedReview-Enforcement
                Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                Gerrit-MessageType: comment
                Gerrit-Project: chromium/src
                Gerrit-Branch: main
                Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
                Gerrit-Change-Number: 7201507
                Gerrit-PatchSet: 23
                Gerrit-Owner: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
                Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
                Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
                Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Comment-Date: Thu, 04 Dec 2025 23:34:07 +0000
                Gerrit-HasComments: Yes
                Gerrit-Has-Labels: Yes
                Comment-In-Reply-To: Fred Shih <ff...@chromium.org>
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Giovanni Ortuno Urquidi (Gerrit)

                unread,
                Dec 5, 2025, 12:08:01 PM (15 hours ago) Dec 5
                to Fred Shih, Jay Harris, AyeAye, Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
                Attention needed from Dmitry Gozman and Fred Shih

                Giovanni Ortuno Urquidi added 2 comments

                File content/browser/webui/web_ui_impl.cc
                Line 147, Patchset 23 (Latest): broker_.reset();
                controller_.reset();

                remote_.reset();
                receiver_.reset();
                Giovanni Ortuno Urquidi . unresolved

                Hmm I wonder why we manually delete these instead of changing the declaration order to destroy things in the right order.

                File content/public/browser/web_ui_controller.h
                Line 91, Patchset 21: virtual TrustPolicy GetTrustPolicy();
                Fred Shih . unresolved

                @Dmitry: I know that this still violates the content guideline. I would like to fix this, but that would trigger a lot more changes, because the browser directly instantiates WebUI. What I'd like to do is:

                1. Make this class pure virtual.
                2. Create a TrustedWebUIController and UntrustedWebUIController subclasses.
                3. Swap over all the existing instantiation sites in the browser to either of the two classes.

                Unfortunately that will touch a lot more files, so I'd like to leave it to a followup CL. I did get rid of the WebUIReadyToCommitNavigation method though :)

                Jay Harris

                This would be great! Its always confused me that `UntrustedWebUIController` extends the (presumably trusted) `WebUIController`

                Giovanni Ortuno Urquidi

                So is the plan to eventually get rid of this method? How would WebUIImpl::GetRegistryFor() work in that world? Or is the plan to have TrustedWebUIController and UntrustedWebUIController override this method? Wouldn't that violate content guidelines?

                Open in Gerrit

                Related details

                Attention is currently required from:
                • Dmitry Gozman
                • Fred Shih
                Submit Requirements:
                • requirement satisfiedCode-Coverage
                • requirement is not satisfiedCode-Owners
                • requirement satisfiedCode-Review
                • requirement is not satisfiedNo-Unresolved-Comments
                • requirement is not satisfiedReview-Enforcement
                Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                Gerrit-MessageType: comment
                Gerrit-Project: chromium/src
                Gerrit-Branch: main
                Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
                Gerrit-Change-Number: 7201507
                Gerrit-PatchSet: 23
                Gerrit-Owner: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
                Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
                Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
                Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Attention: Fred Shih <ff...@chromium.org>
                Gerrit-Comment-Date: Fri, 05 Dec 2025 17:07:55 +0000
                Gerrit-HasComments: Yes
                Gerrit-Has-Labels: No
                Comment-In-Reply-To: Jay Harris <harr...@chromium.org>
                Comment-In-Reply-To: Fred Shih <ff...@chromium.org>
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Dmitry Gozman (Gerrit)

                unread,
                Dec 5, 2025, 5:12:25 PM (10 hours ago) Dec 5
                to Fred Shih, Jay Harris, AyeAye, Demetrios Papadopoulos, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
                Attention needed from Fred Shih

                Dmitry Gozman added 5 comments

                Patchset-level comments
                File-level comment, Patchset 23 (Latest):
                Dmitry Gozman . resolved

                Thank you for following through, this looks almost ideal now!

                Splitting into TrustedWebUIController and UntrustedWebUIController subclasses works as well. As I understand, that would be contained in chrome/ or ui/ entirely, and won't touch content at all, so I have no official say in that 😊

                File content/public/browser/web_ui.h
                Line 59, Patchset 23 (Latest): virtual void SetUpMojoInterfaceBroker() = 0;
                Dmitry Gozman . unresolved

                This method is not used outside of content (rightfully so), so declare it in `WebUIImpl` right away.

                File content/public/browser/web_ui_browser_interface_broker_registry.h
                Line 100, Patchset 13: WebUIBrowserInterfaceBrokerRegistry(
                Dmitry Gozman . unresolved

                Why do we now need to copy the registry? That sounds counter-intuitive to me. I'd assume it's moved around if needed, not copied.

                Fred Shih

                it's mainly because of the static (global) init, which I'd like to get rid of too. I changed it to a unique_ptr and got rid of this copy construction.

                BTW -- just to pick your brain, doesn't this class violates the API guideline for //content/public because it's a concrete impl and not an interface?

                Dmitry Gozman

                Yes, this one also violates the guidelines. However, sometime we have to put template methods in the header, and if those need a private field, the interface stops being a pure one. Perhaps it's possible to untangle this one, but I'm not sure.

                File content/public/browser/web_ui_controller.h
                Line 100, Patchset 23 (Latest): friend class content::WebUIBrowserInterfaceBrokerRegistry
                Dmitry Gozman . unresolved

                Perhaps this friend is not needed anymore?

                Line 91, Patchset 21: virtual TrustPolicy GetTrustPolicy();
                Fred Shih . unresolved

                @Dmitry: I know that this still violates the content guideline. I would like to fix this, but that would trigger a lot more changes, because the browser directly instantiates WebUI. What I'd like to do is:

                1. Make this class pure virtual.
                2. Create a TrustedWebUIController and UntrustedWebUIController subclasses.
                3. Swap over all the existing instantiation sites in the browser to either of the two classes.

                Unfortunately that will touch a lot more files, so I'd like to leave it to a followup CL. I did get rid of the WebUIReadyToCommitNavigation method though :)

                Jay Harris

                This would be great! Its always confused me that `UntrustedWebUIController` extends the (presumably trusted) `WebUIController`

                Giovanni Ortuno Urquidi

                So is the plan to eventually get rid of this method? How would WebUIImpl::GetRegistryFor() work in that world? Or is the plan to have TrustedWebUIController and UntrustedWebUIController override this method? Wouldn't that violate content guidelines?

                Dmitry Gozman

                I think what we have in this CL is alright. We do sometimes allow minimal base implementation in content for embedder-implemented interface that provide common getters. This `web_ui()` getter and field are like that.

                Another common example would be `WebContentsObserver` and other observer interfaces. Perhaps we can move constructor/destructor of `WebUIController` into `protected` section to align with observers pattern?

                Open in Gerrit

                Related details

                Attention is currently required from:
                • Fred Shih
                Submit Requirements:
                • requirement satisfiedCode-Coverage
                • requirement is not satisfiedCode-Owners
                • requirement satisfiedCode-Review
                • requirement is not satisfiedNo-Unresolved-Comments
                • requirement is not satisfiedReview-Enforcement
                Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                Gerrit-MessageType: comment
                Gerrit-Project: chromium/src
                Gerrit-Branch: main
                Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
                Gerrit-Change-Number: 7201507
                Gerrit-PatchSet: 23
                Gerrit-Owner: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
                Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
                Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
                Gerrit-Attention: Fred Shih <ff...@chromium.org>
                Gerrit-Comment-Date: Fri, 05 Dec 2025 22:12:05 +0000
                Gerrit-HasComments: Yes
                Gerrit-Has-Labels: No
                Comment-In-Reply-To: Jay Harris <harr...@chromium.org>
                Comment-In-Reply-To: Dmitry Gozman <dgo...@chromium.org>
                Comment-In-Reply-To: Giovanni Ortuno Urquidi <ort...@chromium.org>
                Comment-In-Reply-To: Fred Shih <ff...@chromium.org>
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Fred Shih (Gerrit)

                unread,
                Dec 5, 2025, 7:53:16 PM (7 hours ago) Dec 5
                to Keren Zhu, Jay Harris, AyeAye, Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
                Attention needed from Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi and Keren Zhu

                Fred Shih added 7 comments

                Patchset-level comments
                Fred Shih . resolved

                adding keren for the webui_browser changes.

                File chrome/browser/ui/webui_browser/webui_browser_ui.h
                Line 93, Patchset 23 (Latest): // TODO(crbug.com/464033838): we should not allow subclasses to override
                Jay Harris . resolved

                Could we make this bug visible to people outside Google (can't view it with my chromium.org account)

                Fred Shih

                Done

                File content/browser/webui/web_ui_impl.cc
                Line 147, Patchset 23 (Latest): broker_.reset();
                controller_.reset();

                remote_.reset();
                receiver_.reset();
                Giovanni Ortuno Urquidi . resolved

                Hmm I wonder why we manually delete these instead of changing the declaration order to destroy things in the right order.

                Fred Shih

                I don't know either, but it was a really nasty surprise :\ My guess is that the ownership model is screwed up, especially since WebUIs can be reused (which was in itself, another nasty surprise...)

                File content/public/browser/web_ui.h
                Line 59, Patchset 23 (Latest): virtual void SetUpMojoInterfaceBroker() = 0;
                Dmitry Gozman . resolved

                This method is not used outside of content (rightfully so), so declare it in `WebUIImpl` right away.

                Fred Shih

                Done

                File content/public/browser/web_ui_browser_interface_broker_registry.h
                Line 100, Patchset 13: WebUIBrowserInterfaceBrokerRegistry(
                Dmitry Gozman . resolved

                Why do we now need to copy the registry? That sounds counter-intuitive to me. I'd assume it's moved around if needed, not copied.

                Fred Shih

                it's mainly because of the static (global) init, which I'd like to get rid of too. I changed it to a unique_ptr and got rid of this copy construction.

                BTW -- just to pick your brain, doesn't this class violates the API guideline for //content/public because it's a concrete impl and not an interface?

                Dmitry Gozman

                Yes, this one also violates the guidelines. However, sometime we have to put template methods in the header, and if those need a private field, the interface stops being a pure one. Perhaps it's possible to untangle this one, but I'm not sure.

                Fred Shih

                Ah I see, just wanted to verify my understanding. Thank you!

                File content/public/browser/web_ui_controller.h
                Line 100, Patchset 23 (Latest): friend class content::WebUIBrowserInterfaceBrokerRegistry
                Dmitry Gozman . resolved

                Perhaps this friend is not needed anymore?

                Fred Shih

                Unfortunately not, because this depends where the macro is invoked (yuck...). If this was in the private section, then the registry would be doing a private access. I definitely want to get rid of the macro here and below..

                Line 91, Patchset 21: virtual TrustPolicy GetTrustPolicy();
                Fred Shih . unresolved

                @Dmitry: I know that this still violates the content guideline. I would like to fix this, but that would trigger a lot more changes, because the browser directly instantiates WebUI. What I'd like to do is:

                1. Make this class pure virtual.
                2. Create a TrustedWebUIController and UntrustedWebUIController subclasses.
                3. Swap over all the existing instantiation sites in the browser to either of the two classes.

                Unfortunately that will touch a lot more files, so I'd like to leave it to a followup CL. I did get rid of the WebUIReadyToCommitNavigation method though :)

                Jay Harris

                This would be great! Its always confused me that `UntrustedWebUIController` extends the (presumably trusted) `WebUIController`

                Giovanni Ortuno Urquidi

                So is the plan to eventually get rid of this method? How would WebUIImpl::GetRegistryFor() work in that world? Or is the plan to have TrustedWebUIController and UntrustedWebUIController override this method? Wouldn't that violate content guidelines?

                Dmitry Gozman

                I think what we have in this CL is alright. We do sometimes allow minimal base implementation in content for embedder-implemented interface that provide common getters. This `web_ui()` getter and field are like that.

                Another common example would be `WebContentsObserver` and other observer interfaces. Perhaps we can move constructor/destructor of `WebUIController` into `protected` section to align with observers pattern?

                Fred Shih

                My plan is to make this method pure virtual and have the new subclasses override it. If I understand the intent of this class correctly, it's really meant to interface webui implementers with the WebUI class.

                Eventually I'd like to combine off the trust type and all the binding stuff into its own configuration. It doesn't really make sense for client code to be able to configure all these settings. For example, we really shouldn't allow kWebUI (which enables chrome.send) when the trust policy is kUntrusted.

                Open in Gerrit

                Related details

                Attention is currently required from:
                • Demetrios Papadopoulos
                • Dmitry Gozman
                • Giovanni Ortuno Urquidi
                • Keren Zhu
                Submit Requirements:
                • requirement satisfiedCode-Coverage
                • requirement is not satisfiedCode-Owners
                • requirement satisfiedCode-Review
                • requirement is not satisfiedNo-Unresolved-Comments
                • requirement is not satisfiedReview-Enforcement
                Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                Gerrit-MessageType: comment
                Gerrit-Project: chromium/src
                Gerrit-Branch: main
                Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
                Gerrit-Change-Number: 7201507
                Gerrit-PatchSet: 23
                Gerrit-Owner: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
                Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
                Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
                Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
                Gerrit-Reviewer: Keren Zhu <kere...@chromium.org>
                Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
                Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
                Gerrit-Attention: Keren Zhu <kere...@chromium.org>
                Gerrit-Attention: Giovanni Ortuno Urquidi <ort...@chromium.org>
                Gerrit-Comment-Date: Sat, 06 Dec 2025 00:53:04 +0000
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Keren Zhu (Gerrit)

                unread,
                12:10 AM (3 hours ago) 12:10 AM
                to Fred Shih, Jay Harris, AyeAye, Demetrios Papadopoulos, Dmitry Gozman, Giovanni Ortuno Urquidi, Chromium LUCI CQ, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
                Attention needed from Demetrios Papadopoulos, Dmitry Gozman, Fred Shih, Giovanni Ortuno Urquidi and Jay Harris

                Keren Zhu added 2 comments

                File chrome/browser/ui/webui_browser/webui_browser_extensions_container.cc
                Line 21, Patchset 24 (Latest):#include "content/public/browser/web_ui.h"
                Keren Zhu . unresolved

                I don't seem to find where this header is used.

                File chrome/browser/ui/webui_browser/webui_browser_ui.cc
                Line 258, Patchset 24 (Latest): return content::WebUIController::TrustPolicy::kUntrusted;
                Keren Zhu . unresolved

                This should be trusted - WebUIBrowserUI runs `chrome://webui-browser`.

                Open in Gerrit

                Related details

                Attention is currently required from:
                • Demetrios Papadopoulos
                • Dmitry Gozman
                • Fred Shih
                • Giovanni Ortuno Urquidi
                • Jay Harris
                Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement is not satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement is not satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: Ie403442f8344ee81186a8d2a05bdc2732f5da4f4
                  Gerrit-Change-Number: 7201507
                  Gerrit-PatchSet: 24
                  Gerrit-Owner: Fred Shih <ff...@chromium.org>
                  Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
                  Gerrit-Reviewer: Dmitry Gozman <dgo...@chromium.org>
                  Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
                  Gerrit-Reviewer: Giovanni Ortuno Urquidi <ort...@chromium.org>
                  Gerrit-Reviewer: Jay Harris <harr...@chromium.org>
                  Gerrit-Reviewer: Keren Zhu <kere...@chromium.org>
                  Gerrit-Attention: Jay Harris <harr...@chromium.org>
                  Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
                  Gerrit-Attention: Dmitry Gozman <dgo...@chromium.org>
                  Gerrit-Attention: Giovanni Ortuno Urquidi <ort...@chromium.org>
                  Gerrit-Attention: Fred Shih <ff...@chromium.org>
                  Gerrit-Comment-Date: Sat, 06 Dec 2025 05:10:10 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy
                  Reply all
                  Reply to author
                  Forward
                  0 new messages