Allow IWAs to call navigator.credentials methods [chromium/src : main]

0 views
Skip to first unread message

Martin Kreichgauer (Gerrit)

unread,
Mar 16, 2026, 6:47:59 PMMar 16
to Olga Korokhina, Jerome Jiang, Mirko Bonadei, Andrew Rayskiy, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
Attention needed from Andrew Rayskiy and Olga Korokhina

Martin Kreichgauer added 5 comments

Patchset-level comments
File-level comment, Patchset 52 (Latest):
Martin Kreichgauer . resolved

It looks like in the latest PS you uploaded an outdated gclient sync state.

File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
Line 211, Patchset 50: scoped_feature_list.InitWithFeatures(
Martin Kreichgauer . unresolved

Nit: `scoped_feature_list_`.

But more generally, it's odd that the base test suite shouldn't enables IWAs if it's only relevant for a fraction of the tests. I suggest splitting this into its own test suite, or moving the ScopedFeatureList inline.

Olga Korokhina

We can't make it inline due to features should be set up in a constructor:
FATAL browser_tests[243908:243908]: [base/feature_list.cc:137] DCHECK failed: feature_overrides_allowed. FeatureList overrides must happen in the test constructor, before BrowserTestBase::SetUp() has run.
Can we still keep it in same test suite, please? For the sake of hermeticy.

Martin Kreichgauer

That is a fair point. But your most recent change made the ScopedFeatureList local to the constructor, which is certainly not what was intended.

Line 320, Patchset 52 (Latest): // we do not add any permission here because of it will fail before
Martin Kreichgauer . unresolved

Nit: W

File chrome/browser/webauthn/chrome_webauthn_iwa_remote_desktop_override_browsertest.cc
Line 275, Patchset 52 (Latest): ::testing::Values(true, false),
Martin Kreichgauer . unresolved

Nit: `testing::Bool()`

File content/browser/webauth/webauth_request_security_checker.cc
Line 201, Patchset 50: } else if (!webauthn::
OriginIsAllowedToUseWebAuthnWithoutRemoteDesktopClientOverride(
caller_origin)) {
// IWAs now can only use WebAuthn in VDI, so with remote desktop override
// extension only
std::move(callback).Run(blink::mojom::AuthenticatorStatus::NOT_IMPLEMENTED);
return nullptr;
}
Martin Kreichgauer . unresolved

I think it would be simpler to just update OriginIsAllowedToClaimRelyingPartyId() to always return false for `iwa://...` origins. I believe that's the semantics we want here, and then we don't need this additional method.

Olga Korokhina

No, this doesn't work because that check happens before check if remoteDesktopClientOverride is used or not. I tried the way you propose and it lead to any IWA calls were rejected. We need to disable local but enable VDIs (with remoteDesktopClientOverride used).

Martin Kreichgauer

I agree that only calls with remoteDesktopClientOverride should succeed, but…

this doesn't work because that check happens before check if remoteDesktopClientOverride is used or not.

Isn't the check for the remoteDesktopClientOverride happening on ll185-200 and the check for OriginIsAllowedToClaimRelyingPartyId() on l210 (which would be **after** and not before)?

I.e., if an IWA was using remoteDesktopClientOverride (and authorized to do so), relying_party_origin would be set to the origin override on l200, and then OriginIsAllowedToClaimRelyingPartyId() would succeed as if the caller was not an IWA. If an IWA was not using the override extension, OriginIsAllowedToClaimRelyingPartyId() would fail, because the caller is an IWA.

Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
  • Olga Korokhina
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: Ie485f5d8ace040f2bd4a52ba24606a2d2732d7d1
Gerrit-Change-Number: 6865592
Gerrit-PatchSet: 52
Gerrit-Owner: Olga Korokhina <koro...@google.com>
Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
Gerrit-Reviewer: Martin Kreichgauer <mart...@google.com>
Gerrit-Reviewer: Olga Korokhina <koro...@google.com>
Gerrit-CC: Chris Thompson <cth...@chromium.org>
Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
Gerrit-CC: Jerome Jiang <ji...@chromium.org>
Gerrit-CC: Mirko Bonadei <mbon...@chromium.org>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Attention: Olga Korokhina <koro...@google.com>
Gerrit-Comment-Date: Mon, 16 Mar 2026 22:47:48 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Martin Kreichgauer <mart...@google.com>
Comment-In-Reply-To: Olga Korokhina <koro...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Olga Korokhina (Gerrit)

unread,
Mar 17, 2026, 8:09:44 AMMar 17
to Jerome Jiang, Mirko Bonadei, Andrew Rayskiy, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
Attention needed from Andrew Rayskiy and Martin Kreichgauer

Olga Korokhina voted and added 4 comments

Votes added by Olga Korokhina

Commit-Queue+1

4 comments

File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
Line 211, Patchset 50: scoped_feature_list.InitWithFeatures(
Martin Kreichgauer . resolved

Nit: `scoped_feature_list_`.

But more generally, it's odd that the base test suite shouldn't enables IWAs if it's only relevant for a fraction of the tests. I suggest splitting this into its own test suite, or moving the ScopedFeatureList inline.

Olga Korokhina

We can't make it inline due to features should be set up in a constructor:
FATAL browser_tests[243908:243908]: [base/feature_list.cc:137] DCHECK failed: feature_overrides_allowed. FeatureList overrides must happen in the test constructor, before BrowserTestBase::SetUp() has run.
Can we still keep it in same test suite, please? For the sake of hermeticy.

Martin Kreichgauer

That is a fair point. But your most recent change made the ScopedFeatureList local to the constructor, which is certainly not what was intended.

Olga Korokhina

True! Still it somehow works, I believe we can keep it there (local to constructor) - looks lie it is injected properly and stays until end of execution.

Line 320, Patchset 52: // we do not add any permission here because of it will fail before
Martin Kreichgauer . resolved

Nit: W

Olga Korokhina

Thank you, fixed.

File chrome/browser/webauthn/chrome_webauthn_iwa_remote_desktop_override_browsertest.cc
Line 275, Patchset 52: ::testing::Values(true, false),
Martin Kreichgauer . resolved

Nit: `testing::Bool()`

Olga Korokhina

Cool, I didn't know it will work with both possible values this way, thank you very much!

File content/browser/webauth/webauth_request_security_checker.cc
Line 201, Patchset 50: } else if (!webauthn::
OriginIsAllowedToUseWebAuthnWithoutRemoteDesktopClientOverride(
caller_origin)) {
// IWAs now can only use WebAuthn in VDI, so with remote desktop override
// extension only
std::move(callback).Run(blink::mojom::AuthenticatorStatus::NOT_IMPLEMENTED);
return nullptr;
}
Martin Kreichgauer . unresolved

I think it would be simpler to just update OriginIsAllowedToClaimRelyingPartyId() to always return false for `iwa://...` origins. I believe that's the semantics we want here, and then we don't need this additional method.

Olga Korokhina

No, this doesn't work because that check happens before check if remoteDesktopClientOverride is used or not. I tried the way you propose and it lead to any IWA calls were rejected. We need to disable local but enable VDIs (with remoteDesktopClientOverride used).

Martin Kreichgauer

I agree that only calls with remoteDesktopClientOverride should succeed, but…

this doesn't work because that check happens before check if remoteDesktopClientOverride is used or not.

Isn't the check for the remoteDesktopClientOverride happening on ll185-200 and the check for OriginIsAllowedToClaimRelyingPartyId() on l210 (which would be **after** and not before)?

I.e., if an IWA was using remoteDesktopClientOverride (and authorized to do so), relying_party_origin would be set to the origin override on l200, and then OriginIsAllowedToClaimRelyingPartyId() would succeed as if the caller was not an IWA. If an IWA was not using the override extension, OriginIsAllowedToClaimRelyingPartyId() would fail, because the caller is an IWA.

Olga Korokhina

Oh, this way. Thank you, adjusted, hope understood it right.

Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
  • Martin Kreichgauer
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: Ie485f5d8ace040f2bd4a52ba24606a2d2732d7d1
Gerrit-Change-Number: 6865592
Gerrit-PatchSet: 54
Gerrit-Owner: Olga Korokhina <koro...@google.com>
Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
Gerrit-Reviewer: Martin Kreichgauer <mart...@google.com>
Gerrit-Reviewer: Olga Korokhina <koro...@google.com>
Gerrit-CC: Chris Thompson <cth...@chromium.org>
Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
Gerrit-CC: Jerome Jiang <ji...@chromium.org>
Gerrit-CC: Mirko Bonadei <mbon...@chromium.org>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Martin Kreichgauer <mart...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Comment-Date: Tue, 17 Mar 2026 12:09:29 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Martin Kreichgauer (Gerrit)

unread,
Mar 17, 2026, 12:25:41 PMMar 17
to Olga Korokhina, Jerome Jiang, Mirko Bonadei, Andrew Rayskiy, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
Attention needed from Andrew Rayskiy and Olga Korokhina

Martin Kreichgauer added 1 comment

File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
Line 211, Patchset 50: scoped_feature_list.InitWithFeatures(
Martin Kreichgauer . unresolved

Nit: `scoped_feature_list_`.

But more generally, it's odd that the base test suite shouldn't enables IWAs if it's only relevant for a fraction of the tests. I suggest splitting this into its own test suite, or moving the ScopedFeatureList inline.

Olga Korokhina

We can't make it inline due to features should be set up in a constructor:
FATAL browser_tests[243908:243908]: [base/feature_list.cc:137] DCHECK failed: feature_overrides_allowed. FeatureList overrides must happen in the test constructor, before BrowserTestBase::SetUp() has run.
Can we still keep it in same test suite, please? For the sake of hermeticy.

Martin Kreichgauer

That is a fair point. But your most recent change made the ScopedFeatureList local to the constructor, which is certainly not what was intended.

Olga Korokhina

True! Still it somehow works, I believe we can keep it there (local to constructor) - looks lie it is injected properly and stays until end of execution.

Attention is currently required from:
  • Andrew Rayskiy
  • Olga Korokhina
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: Ie485f5d8ace040f2bd4a52ba24606a2d2732d7d1
Gerrit-Change-Number: 6865592
Gerrit-PatchSet: 55
Gerrit-Owner: Olga Korokhina <koro...@google.com>
Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
Gerrit-Reviewer: Martin Kreichgauer <mart...@google.com>
Gerrit-Reviewer: Olga Korokhina <koro...@google.com>
Gerrit-CC: Chris Thompson <cth...@chromium.org>
Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
Gerrit-CC: Jerome Jiang <ji...@chromium.org>
Gerrit-CC: Mirko Bonadei <mbon...@chromium.org>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Attention: Olga Korokhina <koro...@google.com>
Gerrit-Comment-Date: Tue, 17 Mar 2026 16:25:30 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Olga Korokhina (Gerrit)

unread,
Mar 17, 2026, 12:29:16 PMMar 17
to Jerome Jiang, Mirko Bonadei, Andrew Rayskiy, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
Attention needed from Andrew Rayskiy and Martin Kreichgauer

Olga Korokhina added 1 comment

File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
Line 211, Patchset 50: scoped_feature_list.InitWithFeatures(
Martin Kreichgauer . unresolved

Nit: `scoped_feature_list_`.

But more generally, it's odd that the base test suite shouldn't enables IWAs if it's only relevant for a fraction of the tests. I suggest splitting this into its own test suite, or moving the ScopedFeatureList inline.

Olga Korokhina

We can't make it inline due to features should be set up in a constructor:
FATAL browser_tests[243908:243908]: [base/feature_list.cc:137] DCHECK failed: feature_overrides_allowed. FeatureList overrides must happen in the test constructor, before BrowserTestBase::SetUp() has run.
Can we still keep it in same test suite, please? For the sake of hermeticy.

Martin Kreichgauer

That is a fair point. But your most recent change made the ScopedFeatureList local to the constructor, which is certainly not what was intended.

Olga Korokhina

True! Still it somehow works, I believe we can keep it there (local to constructor) - looks lie it is injected properly and stays until end of execution.

Martin Kreichgauer

That's not how it works, I'm afraid. The ScopedFeatureList destructor resets any overrides. https://source.chromium.org/chromium/chromium/src/+/main:base/test/scoped_feature_list.cc;drc=6d57b3d63b080eb4f85344ff0782c962b8ba794b;bpv=1;bpt=1;l=303?q=base::test::ScopedFeatureList

Olga Korokhina

Copy, thank you! So I need to revert it, have scoped_feature_list be declared in class and be initialized in the constructor, let me do this.

Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
  • Martin Kreichgauer
Gerrit-Attention: Martin Kreichgauer <mart...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Comment-Date: Tue, 17 Mar 2026 16:28:59 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

Olga Korokhina (Gerrit)

unread,
Mar 18, 2026, 5:46:12 AMMar 18
to Jerome Jiang, Mirko Bonadei, Andrew Rayskiy, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
Attention needed from Andrew Rayskiy and Martin Kreichgauer

Olga Korokhina added 2 comments

File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
Line 211, Patchset 50: scoped_feature_list.InitWithFeatures(
Martin Kreichgauer . resolved

Nit: `scoped_feature_list_`.

But more generally, it's odd that the base test suite shouldn't enables IWAs if it's only relevant for a fraction of the tests. I suggest splitting this into its own test suite, or moving the ScopedFeatureList inline.

Olga Korokhina

We can't make it inline due to features should be set up in a constructor:
FATAL browser_tests[243908:243908]: [base/feature_list.cc:137] DCHECK failed: feature_overrides_allowed. FeatureList overrides must happen in the test constructor, before BrowserTestBase::SetUp() has run.
Can we still keep it in same test suite, please? For the sake of hermeticy.

Martin Kreichgauer

That is a fair point. But your most recent change made the ScopedFeatureList local to the constructor, which is certainly not what was intended.

Olga Korokhina

True! Still it somehow works, I believe we can keep it there (local to constructor) - looks lie it is injected properly and stays until end of execution.

Martin Kreichgauer

That's not how it works, I'm afraid. The ScopedFeatureList destructor resets any overrides. https://source.chromium.org/chromium/chromium/src/+/main:base/test/scoped_feature_list.cc;drc=6d57b3d63b080eb4f85344ff0782c962b8ba794b;bpv=1;bpt=1;l=303?q=base::test::ScopedFeatureList

Olga Korokhina

Copy, thank you! So I need to revert it, have scoped_feature_list be declared in class and be initialized in the constructor, let me do this.

Olga Korokhina

Done

File content/browser/webauth/webauth_request_security_checker.cc
Line 201, Patchset 50: } else if (!webauthn::
OriginIsAllowedToUseWebAuthnWithoutRemoteDesktopClientOverride(
caller_origin)) {
// IWAs now can only use WebAuthn in VDI, so with remote desktop override
// extension only
std::move(callback).Run(blink::mojom::AuthenticatorStatus::NOT_IMPLEMENTED);
return nullptr;
}
Martin Kreichgauer . resolved

I think it would be simpler to just update OriginIsAllowedToClaimRelyingPartyId() to always return false for `iwa://...` origins. I believe that's the semantics we want here, and then we don't need this additional method.

Olga Korokhina

No, this doesn't work because that check happens before check if remoteDesktopClientOverride is used or not. I tried the way you propose and it lead to any IWA calls were rejected. We need to disable local but enable VDIs (with remoteDesktopClientOverride used).

Martin Kreichgauer

I agree that only calls with remoteDesktopClientOverride should succeed, but…

this doesn't work because that check happens before check if remoteDesktopClientOverride is used or not.

Isn't the check for the remoteDesktopClientOverride happening on ll185-200 and the check for OriginIsAllowedToClaimRelyingPartyId() on l210 (which would be **after** and not before)?

I.e., if an IWA was using remoteDesktopClientOverride (and authorized to do so), relying_party_origin would be set to the origin override on l200, and then OriginIsAllowedToClaimRelyingPartyId() would succeed as if the caller was not an IWA. If an IWA was not using the override extension, OriginIsAllowedToClaimRelyingPartyId() would fail, because the caller is an IWA.

Olga Korokhina

Oh, this way. Thank you, adjusted, hope understood it right.

Olga Korokhina

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
  • Martin Kreichgauer
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: Ie485f5d8ace040f2bd4a52ba24606a2d2732d7d1
Gerrit-Change-Number: 6865592
Gerrit-PatchSet: 57
Gerrit-Owner: Olga Korokhina <koro...@google.com>
Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
Gerrit-Reviewer: Martin Kreichgauer <mart...@google.com>
Gerrit-Reviewer: Olga Korokhina <koro...@google.com>
Gerrit-CC: Chris Thompson <cth...@chromium.org>
Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
Gerrit-CC: Jerome Jiang <ji...@chromium.org>
Gerrit-CC: Mirko Bonadei <mbon...@chromium.org>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Martin Kreichgauer <mart...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Comment-Date: Wed, 18 Mar 2026 09:45:55 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

Andrew Rayskiy (Gerrit)

unread,
Mar 31, 2026, 7:07:36 AM (3 days ago) Mar 31
to Olga Korokhina, Jerome Jiang, Mirko Bonadei, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
Attention needed from Martin Kreichgauer and Olga Korokhina

Andrew Rayskiy voted Code-Review+1

Code-Review+1
Open in Gerrit

Related details

Attention is currently required from:
  • Martin Kreichgauer
  • Olga Korokhina
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: Ie485f5d8ace040f2bd4a52ba24606a2d2732d7d1
    Gerrit-Change-Number: 6865592
    Gerrit-PatchSet: 58
    Gerrit-Owner: Olga Korokhina <koro...@google.com>
    Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
    Gerrit-Reviewer: Martin Kreichgauer <mart...@google.com>
    Gerrit-Reviewer: Olga Korokhina <koro...@google.com>
    Gerrit-CC: Chris Thompson <cth...@chromium.org>
    Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
    Gerrit-CC: Jerome Jiang <ji...@chromium.org>
    Gerrit-CC: Mirko Bonadei <mbon...@chromium.org>
    Gerrit-CC: Simon Hangl <sim...@google.com>
    Gerrit-Attention: Martin Kreichgauer <mart...@google.com>
    Gerrit-Attention: Olga Korokhina <koro...@google.com>
    Gerrit-Comment-Date: Tue, 31 Mar 2026 11:07:17 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Martin Kreichgauer (Gerrit)

    unread,
    Mar 31, 2026, 6:06:09 PM (3 days ago) Mar 31
    to Olga Korokhina, Andrew Rayskiy, Jerome Jiang, Mirko Bonadei, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
    Attention needed from Olga Korokhina

    Martin Kreichgauer added 21 comments

    File chrome/browser/webauthn/chrome_web_authentication_delegate_base_unittest.cc
    Line 16, Patchset 58 (Latest):#include "chrome/common/url_constants.h"
    Martin Kreichgauer . unresolved

    Do you need this include?

    Line 297, Patchset 58 (Latest): base::ListValue list = base::ListValue().Append(kTestIsolatedAppOrigin);
    Martin Kreichgauer . unresolved

    Nit: I think this could reasonably be inlined to the SetList() call.

    Line 314, Patchset 58 (Latest): base::ListValue list = base::ListValue().Append(kExampleOrigin);
    Martin Kreichgauer . unresolved

    Same here, and throughout.

    File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
    Line 42, Patchset 58 (Latest):#include "chrome/browser/web_applications/web_app_command_scheduler.h"
    Martin Kreichgauer . unresolved

    Do you need this include?

    Line 211, Patchset 58 (Latest): scoped_feature_list_.InitWithFeatures(
    {device::kWebAuthnIWARemoteDesktopAllowedOriginsPolicy,
    features::kIsolatedWebApps},
    {});
    Martin Kreichgauer . unresolved

    Please move this into a separate fixture that inherits from this one, and move the new tests there.

    Line 294, Patchset 58 (Latest):content::RenderFrameHost* OpenApp(const webapps::AppId& app_id,
    Martin Kreichgauer . unresolved

    Please add a comment.

    ```suggestion
    // Launches the IWA with the given ID and returns its main frame.
    content::RenderFrameHost* OpenApp(const webapps::AppId& app_id,
    ```

    Line 314, Patchset 58 (Latest): IWAsNegativeCaseIWAHasNoCredentialsGetPolicySet) {
    Martin Kreichgauer . unresolved

    "Negative case" (here, and in other places) seems to be some kind of a shorthand for "WebAuthn doesn't work" or something like that. I think future readers will struggle understand the negative of _what_ exactly is implied here. We should be more descriptive and optimize for folks trying to understand the code/test who don't have all the current context in their head anymore (i.e., most likely ourselves in like 2-3 months)

    This seems to test that WebAuthn returns a NotAllowedError if an IWA tries to use it without the permission policy, right? If so, I think a good name would be something like `WebAuthnIWABrowserTest_MissingPermissionsPolicyYieldsNotAllowedError`.

    Line 315, Patchset 50: // Test that WebAuthn works inside of IWAs (call to navigator.credentials.get
    // allowed and processed). Negative case, permission kPublicKeyCredentialsGet
    Martin Kreichgauer . unresolved

    It appears to test the opposite, i.e. that the get() call is *not* allowed.

    Olga Korokhina

    I added details on this in a second sentence. Let me re-phrase then.

    Martin Kreichgauer

    How about

    ```suggestion
    // Test that invoking WebAuthn inside an IWA is rejected with a NotAllowedError, if the IWA manifest lacks the necessary permissions policy.
    ```

    (Also, minor nit, but ideally these comments describing the test go into the line immediately prior to the test definition (i.e., before the IN_PROC_BROWSER_TEST_F(...) or whatever))

    Line 322, Patchset 50: // Allow IWA to create and get creds, without permission to create
    Martin Kreichgauer . unresolved

    This comment doesn't appear to match the code.

    Olga Korokhina

    Removed comment and adding permission, updated comments, thank you

    Martin Kreichgauer

    I still don't understand what this means. Doesn't the previous comment say that the point of the test is to assert that if we _don't_ add the permission, n.c.get() will fail?

    Line 344, Patchset 58 (Latest): IWAsNegativeCasePolicySetPrefsMissingNoRemoteOriginOverrideExtension) {
    Martin Kreichgauer . unresolved

    Same comment about test naming here.

    Line 345, Patchset 58 (Latest): // Test that WebAuthn does not work inside of IWAs (call to
    // navigator.credentials.get not allowed and processed). Negative local case,
    // remoteDesktopClientOverride not used, prefs and affiliation not checked.
    // Behavior different from Chrome Extensions.
    Martin Kreichgauer . unresolved

    It's not really clear to me what this is testing exactly. The comment names a number of things; so if this test was failing, what would be going wrong?

    The only assertion in this test is that the WebAuthn get() call fails with a SecurityError. So I think what this is supposed to test is that without the extension, the app can't make this assertion. If that's what you're trying to test, you should probably allow the app to use the extension via the policy; and then, in a separate test, verify that the extension can't use the extension if the policy doesn't allow it.

    Line 355, Patchset 58 (Latest): // The 'publickey-credentials-create' feature is not enabled in
    // this document. Permissions Policy may be used to delegate Web
    Martin Kreichgauer . unresolved

    The opposite seems to be true. You add the permission policy for public-key-credentials-create below, and enable it.

    Line 394, Patchset 58 (Latest): IWAsNegativeCasePolicyAndPrefsSetNoRemoteOriginOverrideExtensionSameRp_id) {
    Martin Kreichgauer . unresolved

    Same comment about test naming.

    File chrome/browser/webauthn/chrome_webauthn_iwa_remote_desktop_override_browsertest.cc
    Line 187, Patchset 58 (Latest): // The 'publickey-credentials-create' feature is not enabled in
    // this document. Permissions Policy may be used to delegate Web
    Martin Kreichgauer . unresolved

    The opposite seems to be true.

    Line 188, Patchset 58 (Latest): // this document. Permissions Policy may be used to delegate Web
    // Authentication capabilities to cross-origin child frames."'
    Martin Kreichgauer . unresolved

    I don't see how cross-origin child frames are relevant in this test.

    Line 220, Patchset 58 (Latest): static constexpr char kMakeCredentialCrossDomainIWA[] = R"((() => {
    Martin Kreichgauer . unresolved

    It's odd that this is declared inline, while the GetAssertion script is declared up top. Move to l47?

    Line 239, Patchset 58 (Latest): // Credentials created OK
    Martin Kreichgauer . unresolved

    These comments seem superfluous.

    File components/webauthn/core/browser/webauthn_security_utils.cc
    Line 40, Patchset 58 (Latest): // `OriginAllowedToMakeWebAuthnRequests()` must have been called before.
    // IWAs can only use WebAuthn in VDI sessions with override extension
    if (caller_origin.scheme() == webapps::kIsolatedAppScheme) {
    return false;
    }
    Martin Kreichgauer . unresolved

    I think this should be called after OriginAllowedToMakeWebAuthnRequests() (which was a DCHECK before, but now is an explicit test). The comment needs updating.

    File content/browser/webauth/authenticator_impl_unittest.cc
    Line 1896, Patchset 58 (Latest): constexpr char kIWAId[] =
    "aerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
    static const std::string kIWAOrigin =
    std::string(kIWAScheme) + "://" + kIWAId;
    Martin Kreichgauer . unresolved

    You don't actually use the intermediate variable. This could be simplified to

    ```suggestion
    constexpr char[] kIWAOrigin =
    "iwa://aerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
    ```

    and moved to the top of the file.

    Line 2191, Patchset 58 (Latest): device::CredentialType::kPublicKey, std::move(credential_id));
    GetAssertionResult result = AuthenticatorGetAssertion(std::move(options));
    Martin Kreichgauer . unresolved

    Please fix this WARNING reported by ClangTidy: check: bugprone-use-after-move

    A `move` operation occurred here, which caused "...

    check: bugprone-use-after-move

    A `move` operation occurred here, which caused "'credential_id' used after it was moved" at content/browser/webauth/authenticator_impl_unittest.cc:2201 (https://clang.llvm.org/extra/clang-tidy/checks/bugprone/use-after-move.html)

    (Note: You can add `Skip-Clang-Tidy-Checks: bugprone-use-after-move` footer to the CL description to skip the check)

    (Lint observed on `linux-clang-tidy-rel`, but not on `android-clang-tidy-rel`)

    File content/browser/webauth/authenticator_test_base.cc
    Line 255, Patchset 58 (Latest):// IWAs if not using remoteDesktopClientOverride can assert any rp_id
    Martin Kreichgauer . unresolved

    Why would we need to override it like this in tests? That doesn't really reflect what we do in the production class, right?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Olga Korokhina
    Gerrit-Attention: Olga Korokhina <koro...@google.com>
    Gerrit-Comment-Date: Tue, 31 Mar 2026 22:05:58 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Olga Korokhina (Gerrit)

    unread,
    6:22 AM (11 hours ago) 6:22 AM
    to Andrew Rayskiy, Jerome Jiang, Mirko Bonadei, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
    Attention needed from Andrew Rayskiy and Martin Kreichgauer

    Olga Korokhina added 21 comments

    File chrome/browser/webauthn/chrome_web_authentication_delegate_base_unittest.cc
    Line 16, Patchset 58:#include "chrome/common/url_constants.h"
    Martin Kreichgauer . resolved

    Do you need this include?

    Olga Korokhina

    No, thank you, we do not need it, removed.

    Line 297, Patchset 58: base::ListValue list = base::ListValue().Append(kTestIsolatedAppOrigin);
    Martin Kreichgauer . resolved

    Nit: I think this could reasonably be inlined to the SetList() call.

    Olga Korokhina

    From which package? I failed to find a relevant usage example, please point me to it, thank you.

    Line 314, Patchset 58: base::ListValue list = base::ListValue().Append(kExampleOrigin);
    Martin Kreichgauer . resolved

    Same here, and throughout.

    Olga Korokhina

    Please see comment above, I failed to find the example, please provide.

    File chrome/browser/webauthn/chrome_webauthn_browsertest.cc
    Line 42, Patchset 58:#include "chrome/browser/web_applications/web_app_command_scheduler.h"
    Martin Kreichgauer . resolved

    Do you need this include?

    Olga Korokhina

    Yes, for the line around 299 this file befow.

    Line 211, Patchset 58: scoped_feature_list_.InitWithFeatures(

    {device::kWebAuthnIWARemoteDesktopAllowedOriginsPolicy,
    features::kIsolatedWebApps},
    {});
    Martin Kreichgauer . resolved

    Please move this into a separate fixture that inherits from this one, and move the new tests there.

    Olga Korokhina

    Done

    Line 294, Patchset 58:content::RenderFrameHost* OpenApp(const webapps::AppId& app_id,
    Martin Kreichgauer . resolved

    Please add a comment.

    ```suggestion
    // Launches the IWA with the given ID and returns its main frame.
    content::RenderFrameHost* OpenApp(const webapps::AppId& app_id,
    ```

    Olga Korokhina

    Added, thank you.

    Line 314, Patchset 58: IWAsNegativeCaseIWAHasNoCredentialsGetPolicySet) {
    Martin Kreichgauer . resolved

    "Negative case" (here, and in other places) seems to be some kind of a shorthand for "WebAuthn doesn't work" or something like that. I think future readers will struggle understand the negative of _what_ exactly is implied here. We should be more descriptive and optimize for folks trying to understand the code/test who don't have all the current context in their head anymore (i.e., most likely ourselves in like 2-3 months)

    This seems to test that WebAuthn returns a NotAllowedError if an IWA tries to use it without the permission policy, right? If so, I think a good name would be something like `WebAuthnIWABrowserTest_MissingPermissionsPolicyYieldsNotAllowedError`.

    Olga Korokhina

    Naming improved, thank you.

    Line 315, Patchset 50: // Test that WebAuthn works inside of IWAs (call to navigator.credentials.get
    // allowed and processed). Negative case, permission kPublicKeyCredentialsGet
    Martin Kreichgauer . resolved

    It appears to test the opposite, i.e. that the get() call is *not* allowed.

    Olga Korokhina

    I added details on this in a second sentence. Let me re-phrase then.

    Martin Kreichgauer

    How about

    ```suggestion
    // Test that invoking WebAuthn inside an IWA is rejected with a NotAllowedError, if the IWA manifest lacks the necessary permissions policy.
    ```

    (Also, minor nit, but ideally these comments describing the test go into the line immediately prior to the test definition (i.e., before the IN_PROC_BROWSER_TEST_F(...) or whatever))

    Olga Korokhina

    Addressed the comment change, thank you.

    Line 322, Patchset 50: // Allow IWA to create and get creds, without permission to create
    Martin Kreichgauer . resolved

    This comment doesn't appear to match the code.

    Olga Korokhina

    Removed comment and adding permission, updated comments, thank you

    Martin Kreichgauer

    I still don't understand what this means. Doesn't the previous comment say that the point of the test is to assert that if we _don't_ add the permission, n.c.get() will fail?

    Olga Korokhina

    We need to grant both create() and get() permissions. Adjusted the comment. We have now three tests for non-VDI case, all three fail: first fails with 'NotAllowedError' because of missing permissions on create and get in manifest. Second and third have manifest set up and differ in prefs values (emulates the WebAuthenticationRemoteDesktopAllowedOrigins policy-set values) set or not, both cases fails with security error because of no remoteDesktopClientOverride extension used. All three these cases are 'local', different 'level' or application readiness for WebAuthn usage, if I am allowed to say so. Reworked the naming and comments after moved three IWA-local-cases into dedicated class, please have a look if clearer. Thank you!

    Line 344, Patchset 58: IWAsNegativeCasePolicySetPrefsMissingNoRemoteOriginOverrideExtension) {
    Martin Kreichgauer . resolved

    Same comment about test naming here.

    Olga Korokhina

    Addressed, hope it is OK now, thank you.

    Line 345, Patchset 58: // Test that WebAuthn does not work inside of IWAs (call to

    // navigator.credentials.get not allowed and processed). Negative local case,
    // remoteDesktopClientOverride not used, prefs and affiliation not checked.
    // Behavior different from Chrome Extensions.
    Martin Kreichgauer . resolved

    It's not really clear to me what this is testing exactly. The comment names a number of things; so if this test was failing, what would be going wrong?

    The only assertion in this test is that the WebAuthn get() call fails with a SecurityError. So I think what this is supposed to test is that without the extension, the app can't make this assertion. If that's what you're trying to test, you should probably allow the app to use the extension via the policy; and then, in a separate test, verify that the extension can't use the extension if the policy doesn't allow it.

    Olga Korokhina

    please see comment above with differences between three test cases explanation. Comment addressed, thank you!

    Line 355, Patchset 58: // The 'publickey-credentials-create' feature is not enabled in

    // this document. Permissions Policy may be used to delegate Web
    Martin Kreichgauer . resolved

    The opposite seems to be true. You add the permission policy for public-key-credentials-create below, and enable it.

    Olga Korokhina

    This is the actual body of an error ("error NotAllowedError:
    The 'publickey-credentials-create' feature is not enabled in this document. Permissions Policy may be used to delegate Web Authentication capabilities to cross-origin child frames.") which we get if we do not grant the create permission.
    You're right, we not getting it in this case - because of we grant the create permission, error here is to explain the reason why we need it.

    Line 394, Patchset 58: IWAsNegativeCasePolicyAndPrefsSetNoRemoteOriginOverrideExtensionSameRp_id) {
    Martin Kreichgauer . resolved

    Same comment about test naming.

    Olga Korokhina

    Addressed, thank you.

    File chrome/browser/webauthn/chrome_webauthn_iwa_remote_desktop_override_browsertest.cc
    Line 187, Patchset 58: // The 'publickey-credentials-create' feature is not enabled in

    // this document. Permissions Policy may be used to delegate Web
    Martin Kreichgauer . resolved

    The opposite seems to be true.

    Olga Korokhina

    Yes, see comment above - probably it is hard to parse: this is the body of the error which we are not getting because of we set the create permission.

    Line 188, Patchset 58: // this document. Permissions Policy may be used to delegate Web

    // Authentication capabilities to cross-origin child frames."'
    Martin Kreichgauer . resolved

    I don't see how cross-origin child frames are relevant in this test.

    Olga Korokhina

    Sorry if it is hard to parse it. This is a quote of an error body which we get of not set the create permission - "..."

    Line 220, Patchset 58: static constexpr char kMakeCredentialCrossDomainIWA[] = R"((() => {
    Martin Kreichgauer . resolved

    It's odd that this is declared inline, while the GetAssertion script is declared up top. Move to l47?

    Olga Korokhina

    Moved up, thank you.

    Line 239, Patchset 58: // Credentials created OK
    Martin Kreichgauer . resolved

    These comments seem superfluous.

    Olga Korokhina

    Removed, thank you

    File components/webauthn/core/browser/webauthn_security_utils.cc
    Line 40, Patchset 58: // `OriginAllowedToMakeWebAuthnRequests()` must have been called before.

    // IWAs can only use WebAuthn in VDI sessions with override extension
    if (caller_origin.scheme() == webapps::kIsolatedAppScheme) {
    return false;
    }
    Martin Kreichgauer . resolved

    I think this should be called after OriginAllowedToMakeWebAuthnRequests() (which was a DCHECK before, but now is an explicit test). The comment needs updating.

    Olga Korokhina

    I decided to exit a bit earlier in this case, but I don't have a strong opinion, so moved below. Comment updated, thank you.

    File content/browser/webauth/authenticator_impl_unittest.cc
    Line 1896, Patchset 58: constexpr char kIWAId[] =

    "aerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
    static const std::string kIWAOrigin =
    std::string(kIWAScheme) + "://" + kIWAId;
    Martin Kreichgauer . resolved

    You don't actually use the intermediate variable. This could be simplified to

    ```suggestion
    constexpr char[] kIWAOrigin =
    "iwa://aerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic";
    ```

    and moved to the top of the file.

    Olga Korokhina

    Right, applied changes, thank you.

    Line 2191, Patchset 58: device::CredentialType::kPublicKey, std::move(credential_id));

    GetAssertionResult result = AuthenticatorGetAssertion(std::move(options));
    Martin Kreichgauer . resolved

    Please fix this WARNING reported by ClangTidy: check: bugprone-use-after-move

    A `move` operation occurred here, which caused "...

    check: bugprone-use-after-move

    A `move` operation occurred here, which caused "'credential_id' used after it was moved" at content/browser/webauth/authenticator_impl_unittest.cc:2201 (https://clang.llvm.org/extra/clang-tidy/checks/bugprone/use-after-move.html)

    (Note: You can add `Skip-Clang-Tidy-Checks: bugprone-use-after-move` footer to the CL description to skip the check)

    (Lint observed on `linux-clang-tidy-rel`, but not on `android-clang-tidy-rel`)

    Olga Korokhina

    I guess we don't need move() here, passing the credentials_id itself should fix it, let me try.

    File content/browser/webauth/authenticator_test_base.cc
    Line 255, Patchset 58:// IWAs if not using remoteDesktopClientOverride can assert any rp_id
    Martin Kreichgauer . resolved

    Why would we need to override it like this in tests? That doesn't really reflect what we do in the production class, right?

    Olga Korokhina

    I believe it is a left-over from a time when I assumed local IWAs can assert matching rp_ids, do not remember, to be honest. Let me see what if we don't do this.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Andrew Rayskiy
    • Martin Kreichgauer
    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: Ie485f5d8ace040f2bd4a52ba24606a2d2732d7d1
      Gerrit-Change-Number: 6865592
      Gerrit-PatchSet: 61
      Gerrit-Owner: Olga Korokhina <koro...@google.com>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Martin Kreichgauer <mart...@google.com>
      Gerrit-Reviewer: Olga Korokhina <koro...@google.com>
      Gerrit-CC: Chris Thompson <cth...@chromium.org>
      Gerrit-CC: Code Review Nudger <android-build...@prod.google.com>
      Gerrit-CC: Jerome Jiang <ji...@chromium.org>
      Gerrit-CC: Mirko Bonadei <mbon...@chromium.org>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Attention: Martin Kreichgauer <mart...@google.com>
      Gerrit-Attention: Andrew Rayskiy <green...@google.com>
      Gerrit-Comment-Date: Fri, 03 Apr 2026 10:22:29 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Martin Kreichgauer (Gerrit)

      unread,
      1:34 PM (4 hours ago) 1:34 PM
      to Olga Korokhina, Andrew Rayskiy, Jerome Jiang, Mirko Bonadei, AyeAye, Chris Thompson, Code Review Nudger, Simon Hangl, Martin Kreichgauer, Chromium LUCI CQ, chromium...@chromium.org, mar...@chromium.org, browser-comp...@chromium.org, net-r...@chromium.org, eme-r...@chromium.org, devtools...@chromium.org, titoua...@chromium.org, chrome-intell...@chromium.org, chrome-intelligence-te...@google.com, feature-me...@chromium.org, penghuan...@chromium.org, jz...@chromium.org, cblume...@chromium.org, oshima...@chromium.org, ortuno...@chromium.org, fgal...@chromium.org, chromotin...@chromium.org, jshin...@chromium.org, droger+w...@chromium.org, derinel+wat...@google.com, webauthn...@chromium.org
      Attention needed from Andrew Rayskiy and Olga Korokhina

      Martin Kreichgauer added 1 comment

      Patchset-level comments
      File-level comment, Patchset 61 (Latest):
      Martin Kreichgauer . resolved

      (Please make the tests pass before adding me back to the attention set)

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Andrew Rayskiy
      • Olga Korokhina
      Gerrit-Attention: Andrew Rayskiy <green...@google.com>
      Gerrit-Attention: Olga Korokhina <koro...@google.com>
      Gerrit-Comment-Date: Fri, 03 Apr 2026 17:34:02 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy
      Reply all
      Reply to author
      Forward
      0 new messages