Enforce security checks in DevTools child sessions and strengthen extension trust. [chromium/src : main]

1 view
Skip to first unread message

Danil Somsikov (Gerrit)

unread,
Apr 30, 2026, 11:11:15 AM (4 days ago) Apr 30
to Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
Attention needed from Andrey Kosyakov and Devlin Cronin

Danil Somsikov voted Auto-Submit+1

Auto-Submit+1
Open in Gerrit

Related details

Attention is currently required from:
  • Andrey Kosyakov
  • Devlin Cronin
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • 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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
Gerrit-Change-Number: 7802063
Gerrit-PatchSet: 9
Gerrit-Owner: Danil Somsikov <d...@chromium.org>
Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
Gerrit-Comment-Date: Thu, 30 Apr 2026 15:11:00 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Devlin Cronin (Gerrit)

unread,
Apr 30, 2026, 1:17:44 PM (4 days ago) Apr 30
to Danil Somsikov, Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
Attention needed from Andrey Kosyakov and Danil Somsikov

Devlin Cronin added 8 comments

Patchset-level comments
File-level comment, Patchset 10 (Latest):
Devlin Cronin . resolved

Thanks, Danil! One big question here (and some nits)

File chrome/browser/extensions/api/debugger/debugger_api.cc
Line 231, Patchset 10 (Latest): Manifest::IsComponentLocation(extension.location());
Devlin Cronin . unresolved

this would be great, but is the perfetto extension loaded as a component extension?

I see it in the webstore [here](https://chromewebstore.google.com/detail/perfetto-ui/lfmkphfpdbjijhpomgecfikhfohaoine), and I don't see references to it being loaded as a component extension elsehwere in the code (e.g. in component_loader and friends).

File chrome/browser/extensions/api/debugger/debugger_apitest.cc
Line 328, Patchset 10 (Latest):constexpr char kPerfettoUIExtensionId[] = "lfmkphfpdbjijhpomgecfikhfohaoine";
Line 340, Patchset 10 (Latest): new DebuggerAttachFunction();
Devlin Cronin . unresolved

nit: prefer base::MakeRefCounted<>; here and below

Line 343, Patchset 10 (Latest): std::string actual_error;
if (!api_test_utils::RunFunction(attach_function.get(),
"[{\"targetId\": \"browser\"}, \"1.1\"]",
profile())) {
actual_error = attach_function->GetError();
}
Devlin Cronin . unresolved

nit: cleaner to use RunFunctionAndReturnError()

Line 366, Patchset 10 (Latest): std::string actual_error;
if (!api_test_utils::RunFunction(attach_function.get(),
"[{\"targetId\": \"browser\"}, \"1.1\"]",
profile())) {
actual_error = attach_function->GetError();
}

EXPECT_EQ("", actual_error);
Devlin Cronin . unresolved

and then here, just EXPECT_TRUE(RunFunction(...)) (which will fail if it throws an error)

Line 410, Patchset 10 (Latest): "[{\"targetId\": \"browser\"}, \"Target.attachToTarget\", {\"targetId\": "
"\"%s\"}]",
Devlin Cronin . unresolved

nit: prefer R"(a string literal)" so that you don't have to escape all these quotes.

File content/browser/devtools/protocol/target_handler.cc
Line 464, Patchset 10 (Latest): base::WrapUnique(new Session(handler, agent_host, id, flatten_protocol));
Devlin Cronin . unresolved

nit: git cl format

Open in Gerrit

Related details

Attention is currently required from:
  • Andrey Kosyakov
  • Danil Somsikov
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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 10
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Thu, 30 Apr 2026 17:17:35 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Andrey Kosyakov (Gerrit)

    unread,
    Apr 30, 2026, 1:33:39 PM (4 days ago) Apr 30
    to Danil Somsikov, Eric Seckler, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Danil Somsikov and Eric Seckler

    Andrey Kosyakov added 3 comments

    Commit Message
    Line 18, Patchset 10 (Latest):using child sessions to attach to privileged WebUI contexts (e.g.,
    Andrey Kosyakov . unresolved

    What's the practical possibility for that? We only deny this sort of things to extension clients, which can't use flattened mode so far. As for the front-end, the permissions would still allow this?

    File chrome/browser/extensions/api/debugger/debugger_api.cc
    Line 231, Patchset 10 (Latest): Manifest::IsComponentLocation(extension.location());
    Andrey Kosyakov . unresolved

    +esec...@chromium.org on this one to assure it would not interfere with thier development workflow.

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    File content/browser/devtools/protocol/target_handler.cc
    Line 483, Patchset 10 (Latest): return "";
    Andrey Kosyakov . unresolved

    Let's make the function return `std::optional<string>` (or `base::expected<string, protocol::Response>`) for a bit more robustness.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Danil Somsikov
    • Eric Seckler
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 10
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Thu, 30 Apr 2026 17:33:30 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Eric Seckler (Gerrit)

    unread,
    Apr 30, 2026, 2:00:47 PM (4 days ago) Apr 30
    to Danil Somsikov, Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Danil Somsikov

    Eric Seckler added 2 comments

    File chrome/browser/extensions/api/debugger/debugger_api.cc
    Line 231, Patchset 10 (Latest): Manifest::IsComponentLocation(extension.location());
    Devlin Cronin . unresolved

    this would be great, but is the perfetto extension loaded as a component extension?

    I see it in the webstore [here](https://chromewebstore.google.com/detail/perfetto-ui/lfmkphfpdbjijhpomgecfikhfohaoine), and I don't see references to it being loaded as a component extension elsehwere in the code (e.g. in component_loader and friends).

    Eric Seckler

    It's a webstore extension, yes, not a component.

    Line 231, Patchset 10 (Latest): Manifest::IsComponentLocation(extension.location());
    Andrey Kosyakov . unresolved

    +esec...@chromium.org on this one to assure it would not interfere with thier development workflow.

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Eric Seckler

    +1 😊 We also would need a way to develop and test the extension locally, so we'd at least need a commandline flag for Chrome or similar to support a non-webstore / locally-loaded extension.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Danil Somsikov
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 10
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Thu, 30 Apr 2026 18:00:32 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Devlin Cronin <rdevlin...@chromium.org>
    Comment-In-Reply-To: Andrey Kosyakov <ca...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Danil Somsikov (Gerrit)

    unread,
    Apr 30, 2026, 3:36:01 PM (4 days ago) Apr 30
    to Eric Seckler, Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov, Devlin Cronin and Eric Seckler

    Danil Somsikov voted and added 9 comments

    Votes added by Danil Somsikov

    Auto-Submit+1

    9 comments

    File chrome/browser/extensions/api/debugger/debugger_api.cc
    Line 231, Patchset 10: Manifest::IsComponentLocation(extension.location());
    Andrey Kosyakov . unresolved

    +esec...@chromium.org on this one to assure it would not interfere with thier development workflow.

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Eric Seckler

    +1 😊 We also would need a way to develop and test the extension locally, so we'd at least need a commandline flag for Chrome or similar to support a non-webstore / locally-loaded extension.

    Danil Somsikov

    we could piggy back on --silent-debugger-extension-api or introduce a dedicated flag. What does everyone think?

    Line 231, Patchset 10: Manifest::IsComponentLocation(extension.location());
    Devlin Cronin . resolved

    this would be great, but is the perfetto extension loaded as a component extension?

    I see it in the webstore [here](https://chromewebstore.google.com/detail/perfetto-ui/lfmkphfpdbjijhpomgecfikhfohaoine), and I don't see references to it being loaded as a component extension elsehwere in the code (e.g. in component_loader and friends).

    Eric Seckler

    It's a webstore extension, yes, not a component.

    Danil Somsikov

    Done

    File chrome/browser/extensions/api/debugger/debugger_apitest.cc
    Line 328, Patchset 10:constexpr char kPerfettoUIExtensionId[] = "lfmkphfpdbjijhpomgecfikhfohaoine";
    Devlin Cronin . resolved
    Danil Somsikov

    Done

    Line 340, Patchset 10: new DebuggerAttachFunction();
    Devlin Cronin . resolved

    nit: prefer base::MakeRefCounted<>; here and below

    Danil Somsikov

    Done

    Line 343, Patchset 10: std::string actual_error;

    if (!api_test_utils::RunFunction(attach_function.get(),
    "[{\"targetId\": \"browser\"}, \"1.1\"]",
    profile())) {
    actual_error = attach_function->GetError();
    }
    Devlin Cronin . resolved

    nit: cleaner to use RunFunctionAndReturnError()

    Danil Somsikov

    Done

    Line 366, Patchset 10: std::string actual_error;

    if (!api_test_utils::RunFunction(attach_function.get(),
    "[{\"targetId\": \"browser\"}, \"1.1\"]",
    profile())) {
    actual_error = attach_function->GetError();
    }

    EXPECT_EQ("", actual_error);
    Devlin Cronin . resolved

    and then here, just EXPECT_TRUE(RunFunction(...)) (which will fail if it throws an error)

    Danil Somsikov

    Done

    Line 410, Patchset 10: "[{\"targetId\": \"browser\"}, \"Target.attachToTarget\", {\"targetId\": "
    "\"%s\"}]",
    Devlin Cronin . resolved

    nit: prefer R"(a string literal)" so that you don't have to escape all these quotes.

    Danil Somsikov

    Done

    File content/browser/devtools/protocol/target_handler.cc
    Line 464, Patchset 10: base::WrapUnique(new Session(handler, agent_host, id, flatten_protocol));
    Devlin Cronin . resolved

    nit: git cl format

    Danil Somsikov

    Done

    Line 483, Patchset 10: return "";
    Andrey Kosyakov . resolved

    Let's make the function return `std::optional<string>` (or `base::expected<string, protocol::Response>`) for a bit more robustness.

    Danil Somsikov

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Devlin Cronin
    • Eric Seckler
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 17
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Eric Seckler <esec...@chromium.org>
    Gerrit-Comment-Date: Thu, 30 Apr 2026 19:35:36 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Devlin Cronin <rdevlin...@chromium.org>
    Comment-In-Reply-To: Andrey Kosyakov <ca...@chromium.org>
    Comment-In-Reply-To: Eric Seckler <esec...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    Apr 30, 2026, 4:00:06 PM (4 days ago) Apr 30
    to Danil Somsikov, Eric Seckler, Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov, Danil Somsikov and Eric Seckler

    Devlin Cronin added 2 comments

    Patchset-level comments
    File-level comment, Patchset 18 (Latest):
    Devlin Cronin . resolved

    (just responding)

    File chrome/browser/extensions/api/debugger/debugger_api.cc
    Line 231, Patchset 10: Manifest::IsComponentLocation(extension.location());
    Andrey Kosyakov . unresolved

    +esec...@chromium.org on this one to assure it would not interfere with thier development workflow.

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Eric Seckler

    +1 😊 We also would need a way to develop and test the extension locally, so we'd at least need a commandline flag for Chrome or similar to support a non-webstore / locally-loaded extension.

    Danil Somsikov

    we could piggy back on --silent-debugger-extension-api or introduce a dedicated flag. What does everyone think?

    Devlin Cronin

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Strictly speaking, yes, we consider loading an unpacked extension to be the same as local access, which isn't in our threat model.

    That said, we also know that social engineering attacks exist that trick people into loading unpacked extensions. We can't fully prevent these, but we can raise the bar a bit, and a commandline flag (or similar) helps a bit. I'd be supportive of that (and would lean towards just having a dedicated one; commandline flags are cheap : ))

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Danil Somsikov
    • Eric Seckler
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 18
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Thu, 30 Apr 2026 19:59:58 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Andrey Kosyakov <ca...@chromium.org>
    Comment-In-Reply-To: Eric Seckler <esec...@chromium.org>
    Comment-In-Reply-To: Danil Somsikov <d...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Eric Seckler (Gerrit)

    unread,
    May 1, 2026, 7:08:37 PM (3 days ago) May 1
    to Danil Somsikov, Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov and Danil Somsikov

    Eric Seckler added 2 comments

    File chrome/browser/extensions/api/debugger/debugger_api.cc
    Line 231, Patchset 10: Manifest::IsComponentLocation(extension.location());
    Andrey Kosyakov . unresolved

    +esec...@chromium.org on this one to assure it would not interfere with thier development workflow.

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Eric Seckler

    +1 😊 We also would need a way to develop and test the extension locally, so we'd at least need a commandline flag for Chrome or similar to support a non-webstore / locally-loaded extension.

    Danil Somsikov

    we could piggy back on --silent-debugger-extension-api or introduce a dedicated flag. What does everyone think?

    Devlin Cronin

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Strictly speaking, yes, we consider loading an unpacked extension to be the same as local access, which isn't in our threat model.

    That said, we also know that social engineering attacks exist that trick people into loading unpacked extensions. We can't fully prevent these, but we can raise the bar a bit, and a commandline flag (or similar) helps a bit. I'd be supportive of that (and would lean towards just having a dedicated one; commandline flags are cheap : ))

    Eric Seckler

    OK, a dedicated cmdline flag sgtm. +steve...@google.com FYI

    File chrome/browser/extensions/api/debugger/debugger_apitest.cc
    Line 330, Patchset 18 (Latest): BrowserTargetNotAllowedForUnpackedPerfettoUI) {
    Eric Seckler . unresolved

    Assuming we add a commandline flag, let's add a test that still allows this when flag is provided as well please 😊

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Danil Somsikov
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 18
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Fri, 01 May 2026 23:08:27 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Devlin Cronin <rdevlin...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Danil Somsikov (Gerrit)

    unread,
    8:27 AM (7 hours ago) 8:27 AM
    to Eric Seckler, Andrey Kosyakov, Devlin Cronin, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov and Devlin Cronin

    Danil Somsikov voted and added 2 comments

    Votes added by Danil Somsikov

    Auto-Submit+1

    2 comments

    File chrome/browser/extensions/api/debugger/debugger_api.cc
    Line 231, Patchset 10: Manifest::IsComponentLocation(extension.location());
    Andrey Kosyakov . resolved

    +esec...@chromium.org on this one to assure it would not interfere with thier development workflow.

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Eric Seckler

    +1 😊 We also would need a way to develop and test the extension locally, so we'd at least need a commandline flag for Chrome or similar to support a non-webstore / locally-loaded extension.

    Danil Somsikov

    we could piggy back on --silent-debugger-extension-api or introduce a dedicated flag. What does everyone think?

    Devlin Cronin

    I'm not quite sure what scenario we're fixing here. If an attacker is able to load an unpacked extension, that's the end of the game already, isn't it?

    Strictly speaking, yes, we consider loading an unpacked extension to be the same as local access, which isn't in our threat model.

    That said, we also know that social engineering attacks exist that trick people into loading unpacked extensions. We can't fully prevent these, but we can raise the bar a bit, and a commandline flag (or similar) helps a bit. I'd be supportive of that (and would lean towards just having a dedicated one; commandline flags are cheap : ))

    Eric Seckler

    OK, a dedicated cmdline flag sgtm. +steve...@google.com FYI

    Danil Somsikov

    Done

    File chrome/browser/extensions/api/debugger/debugger_apitest.cc
    Line 330, Patchset 18: BrowserTargetNotAllowedForUnpackedPerfettoUI) {
    Eric Seckler . resolved

    Assuming we add a commandline flag, let's add a test that still allows this when flag is provided as well please 😊

    Danil Somsikov

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Devlin Cronin
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 18
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Comment-Date: Mon, 04 May 2026 12:27:15 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    1:22 PM (2 hours ago) 1:22 PM
    to Danil Somsikov, Devlin Cronin, Eric Seckler, Andrey Kosyakov, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov and Danil Somsikov

    Devlin Cronin voted and added 3 comments

    Votes added by Devlin Cronin

    Code-Review+1

    3 comments

    Patchset-level comments
    File-level comment, Patchset 21 (Latest):
    Devlin Cronin . resolved

    Thanks, Danil! LGTM % naming nit.

    File chrome/browser/extensions/api/debugger/debugger_apitest.cc
    Line 423, Patchset 21 (Latest): R"([{"targetId": "browser"}, "Target.attachToTarget", {"targetId": "%s"}])",
    Devlin Cronin . unresolved

    nit: can we break this line up to wrap at 80 char?

    File chrome/common/chrome_switches.cc
    Line 61, Patchset 21 (Latest):const char kAllowUnpackedExtensionTrust[] = "allow-unpacked-extension-trust";
    Devlin Cronin . unresolved

    nit: let's be more specific. Maybe "allow-unpacked-perfetto-extension"? (Similarly for the switch variable name)

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Danil Somsikov
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement 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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 21
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Mon, 04 May 2026 17:22:01 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    1:23 PM (2 hours ago) 1:23 PM
    to Danil Somsikov, Devlin Cronin, Eric Seckler, Andrey Kosyakov, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov and Danil Somsikov

    Devlin Cronin voted and added 1 comment

    Votes added by Devlin Cronin

    Code-Review+0

    1 comment

    Commit Message
    Line 21, Patchset 21 (Latest):2. Strengthen extension trust: ExtensionIsTrusted in debugger_api.cc is
    updated to verify that the extension is not from an unpacked location. This prevents attackers from gaining "trusted" status by
    loading an unpacked extension with the Perfetto UI extension ID.
    Devlin Cronin . unresolved

    nit: maybe also update this

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Danil Somsikov
    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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 21
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Mon, 04 May 2026 17:22:41 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    1:23 PM (2 hours ago) 1:23 PM
    to Danil Somsikov, Devlin Cronin, Eric Seckler, Andrey Kosyakov, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, extension...@chromium.org, devtools...@chromium.org, chromium-a...@chromium.org
    Attention needed from Andrey Kosyakov and Danil Somsikov

    Devlin Cronin voted Code-Review+1

    Code-Review+1
    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrey Kosyakov
    • Danil Somsikov
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement 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: I00dad3f1515032eca5296e9aa2876bed2bf5c851
    Gerrit-Change-Number: 7802063
    Gerrit-PatchSet: 21
    Gerrit-Owner: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Reviewer: Danil Somsikov <d...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Eric Seckler <esec...@chromium.org>
    Gerrit-Attention: Andrey Kosyakov <ca...@chromium.org>
    Gerrit-Attention: Danil Somsikov <d...@chromium.org>
    Gerrit-Comment-Date: Mon, 04 May 2026 17:22:51 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy
    Reply all
    Reply to author
    Forward
    0 new messages