[FedCM] Better parsing for Set-Login headers in IdentityUrlLoaderThrottle [chromium/src : main]

0 views
Skip to first unread message

Christian Biesinger (Gerrit)

unread,
Jul 28, 2026, 1:18:40 PM (3 days ago) Jul 28
to Ryan Qin, Peter Beverloo, android-bu...@system.gserviceaccount.com, Nicolás Peña, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
Attention needed from Nicolás Peña and Ryan Qin

Christian Biesinger added 3 comments

File content/common/webid/identity_url_loader_throttle.cc
Line 113, Patchset 1: net::structured_headers::ParseItem(*header_value);
Christian Biesinger . resolved

So, in general, parsing untrusted data (like random websites' headers) is only allowed in a sandboxed process. This code can run in either the browser process or a renderer process and only the latter is sandboxed.

It may be easiest to always use this method for parsing:
https://source.chromium.org/chromium/chromium/src/+/main:services/data_decoder/public/cpp/data_decoder.h;l=108?q=ParseStructuredH&ss=chromium

Christian Biesinger

Acknowledged

File content/common/webid/identity_url_loader_throttle_unittest.cc
Line 34, Patchset 5 (Latest): ParseSetLoginHeaderCallback CreateParseCallback() {
Christian Biesinger . unresolved

why can't this use content::GetSetLoginHeaderInProcessParser?

File content/public/common/web_identity.h
Line 32, Patchset 5 (Latest): base::OnceCallback<void(std::optional<std::string> token)> callback)>;
Christian Biesinger . unresolved

IMO this should be something like `std::optional<net::structured_headers::ParameterizedItem>` for two reasons:

  • otherwise, the two parsing functions have to have identical code to get the token out of the Item, and
  • if we ever extend this to make use of more parameters in this header it will be easier if the throttle class has the full item available
Open in Gerrit

Related details

Attention is currently required from:
  • Nicolás Peña
  • Ryan Qin
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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
Gerrit-Change-Number: 8141324
Gerrit-PatchSet: 5
Gerrit-Owner: Ryan Qin <ry...@google.com>
Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
Gerrit-Reviewer: Nicolás Peña <n...@chromium.org>
Gerrit-CC: Peter Beverloo <pe...@chromium.org>
Gerrit-CC: Yi Gu <yi...@chromium.org>
Gerrit-Attention: Ryan Qin <ry...@google.com>
Gerrit-Attention: Nicolás Peña <n...@chromium.org>
Gerrit-Comment-Date: Tue, 28 Jul 2026 17:18:29 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Christian Biesinger <cbies...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Ryan Qin (Gerrit)

unread,
Jul 28, 2026, 2:57:28 PM (3 days ago) Jul 28
to Peter Beverloo, android-bu...@system.gserviceaccount.com, Nicolás Peña, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
Attention needed from Christian Biesinger and Nicolás Peña

Ryan Qin added 2 comments

File content/common/webid/identity_url_loader_throttle_unittest.cc
Line 34, Patchset 5: ParseSetLoginHeaderCallback CreateParseCallback() {
Christian Biesinger . resolved

why can't this use content::GetSetLoginHeaderInProcessParser?

Ryan Qin

we can, done:)

File content/public/common/web_identity.h
Line 32, Patchset 5: base::OnceCallback<void(std::optional<std::string> token)> callback)>;
Christian Biesinger . resolved

IMO this should be something like `std::optional<net::structured_headers::ParameterizedItem>` for two reasons:

  • otherwise, the two parsing functions have to have identical code to get the token out of the Item, and
  • if we ever extend this to make use of more parameters in this header it will be easier if the throttle class has the full item available
Ryan Qin

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Christian Biesinger
  • Nicolás Peña
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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
    Gerrit-Change-Number: 8141324
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ryan Qin <ry...@google.com>
    Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
    Gerrit-Reviewer: Nicolás Peña <n...@chromium.org>
    Gerrit-CC: Peter Beverloo <pe...@chromium.org>
    Gerrit-CC: Yi Gu <yi...@chromium.org>
    Gerrit-Attention: Christian Biesinger <cbies...@chromium.org>
    Gerrit-Attention: Nicolás Peña <n...@chromium.org>
    Gerrit-Comment-Date: Tue, 28 Jul 2026 18:57:18 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Christian Biesinger (Gerrit)

    unread,
    Jul 28, 2026, 3:09:47 PM (3 days ago) Jul 28
    to Ryan Qin, Peter Beverloo, android-bu...@system.gserviceaccount.com, Nicolás Peña, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
    Attention needed from Nicolás Peña and Ryan Qin

    Christian Biesinger added 2 comments

    File content/common/webid/identity_url_loader_throttle.cc
    Line 154, Patchset 6 (Latest): if (parse_set_login_header_cb_) {
    Christian Biesinger . unresolved

    I don't think this is ever null, can this be a CHECK() instead?

    Line 159, Patchset 6 (Latest): }
    Christian Biesinger . unresolved

    Please fix this WARNING reported by autoreview issue finding: In the browser process, GetSetLoginHeaderDataDecoderParser() returns an asynchronous parser. Since HandleResponseOrRedirect does not defer the response (by setting *defer = true), the URLLoader will continue processing the response immediately.

    If the response is small (e.g., a redirect or an empty body), the URLLoader and this throttle may be destroyed before the DataDecoder returns the result. This would cause the sign-in status update to be dropped, creating a race condition that makes the FedCM sign-in status unreliable.

    Consider passing the 'defer' pointer to HandleResponseOrRedirect, setting it to true if a parser is active, and calling delegate_->Resume() in OnHeaderParsed.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Nicolás Peña
    • Ryan Qin
    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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
      Gerrit-Change-Number: 8141324
      Gerrit-PatchSet: 6
      Gerrit-Owner: Ryan Qin <ry...@google.com>
      Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
      Gerrit-Reviewer: Nicolás Peña <n...@chromium.org>
      Gerrit-CC: Peter Beverloo <pe...@chromium.org>
      Gerrit-CC: Yi Gu <yi...@chromium.org>
      Gerrit-Attention: Ryan Qin <ry...@google.com>
      Gerrit-Attention: Nicolás Peña <n...@chromium.org>
      Gerrit-Comment-Date: Tue, 28 Jul 2026 19:09:37 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Ryan Qin (Gerrit)

      unread,
      Jul 29, 2026, 8:32:27 AM (2 days ago) Jul 29
      to Peter Beverloo, android-bu...@system.gserviceaccount.com, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
      Attention needed from Christian Biesinger

      Ryan Qin added 2 comments

      File content/common/webid/identity_url_loader_throttle.cc
      Line 154, Patchset 6: if (parse_set_login_header_cb_) {
      Christian Biesinger . resolved

      I don't think this is ever null, can this be a CHECK() instead?

      Ryan Qin

      Done

      Line 159, Patchset 6: }
      Christian Biesinger . resolved

      Please fix this WARNING reported by autoreview issue finding: In the browser process, GetSetLoginHeaderDataDecoderParser() returns an asynchronous parser. Since HandleResponseOrRedirect does not defer the response (by setting *defer = true), the URLLoader will continue processing the response immediately.

      If the response is small (e.g., a redirect or an empty body), the URLLoader and this throttle may be destroyed before the DataDecoder returns the result. This would cause the sign-in status update to be dropped, creating a race condition that makes the FedCM sign-in status unreliable.

      Consider passing the 'defer' pointer to HandleResponseOrRedirect, setting it to true if a parser is active, and calling delegate_->Resume() in OnHeaderParsed.

      Ryan Qin

      Done

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Christian Biesinger
      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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
        Gerrit-Change-Number: 8141324
        Gerrit-PatchSet: 7
        Gerrit-Owner: Ryan Qin <ry...@google.com>
        Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
        Gerrit-Attention: Christian Biesinger <cbies...@chromium.org>
        Gerrit-Comment-Date: Wed, 29 Jul 2026 12:32:10 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Christian Biesinger <cbies...@chromium.org>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Arthur Sonzogni (Gerrit)

        unread,
        Jul 29, 2026, 1:30:55 PM (2 days ago) Jul 29
        to Ryan Qin, Alex Ilin, Alex Moshchuk, Kouhei Ueno, Peter Beverloo, android-bu...@system.gserviceaccount.com, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
        Attention needed from Alex Ilin, Alex Moshchuk, Arthur Sonzogni, Christian Biesinger, Kouhei Ueno, Peter Beverloo and Ryan Qin

        Arthur Sonzogni added 1 comment

        Message

        **[Early Review]** This is an automated early review generated by an LLM. It is intended to help you catch obvious issues early and **potentially save a round of code review**.

        If you find any suggestion irrelevant, please feel free to *ignore* or *close* it.

        _I am going to take a look immediately._

        Please see suggestions below.

        1 comment

        File content/common/webid/identity_url_loader_throttle.cc
        Line 155, Patchset 7 (Latest): CHECK(parse_set_login_header_cb_);
        Arthur Sonzogni . unresolved

        **[Early Review]**
        If `parse_set_login_header_cb_` runs synchronously, `OnHeaderParsed` will be called immediately. This sets `deferred_` to `false` and calls `delegate_->Resume()` before `HandleResponseOrRedirect` returns. Subsequently, `HandleResponseOrRedirect` sets `*defer = false`. This has two issues: 1) It calls `delegate_->Resume()` when the loader is not actually deferred (since `*defer` is returned as `false`), which can cause mismatched state in `ThrottlingURLLoader`. 2) It unconditionally overwrites `*defer` to `false`, potentially overriding a `true` value set by a prior throttle. You should track synchronous execution to avoid calling `Resume()` prematurely, and restore the original `defer` value rather than blindly setting it to `false`.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Alex Ilin
        • Alex Moshchuk
        • Arthur Sonzogni
        • Christian Biesinger
        • Kouhei Ueno
        • Peter Beverloo
        • Ryan Qin
        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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
          Gerrit-Change-Number: 8141324
          Gerrit-PatchSet: 7
          Gerrit-Owner: Ryan Qin <ry...@google.com>
          Gerrit-Reviewer: Alex Ilin <alex...@chromium.org>
          Gerrit-Reviewer: Alex Moshchuk <ale...@chromium.org>
          Gerrit-Reviewer: Arthur Sonzogni <arthurs...@chromium.org>
          Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
          Gerrit-Reviewer: Kouhei Ueno <kou...@chromium.org>
          Gerrit-Reviewer: Peter Beverloo <pe...@chromium.org>
          Gerrit-Attention: Alex Moshchuk <ale...@chromium.org>
          Gerrit-Attention: Alex Ilin <alex...@chromium.org>
          Gerrit-Attention: Christian Biesinger <cbies...@chromium.org>
          Gerrit-Attention: Arthur Sonzogni <arthurs...@chromium.org>
          Gerrit-Attention: Ryan Qin <ry...@google.com>
          Gerrit-Attention: Kouhei Ueno <kou...@chromium.org>
          Gerrit-Attention: Peter Beverloo <pe...@chromium.org>
          Gerrit-Comment-Date: Wed, 29 Jul 2026 17:30:50 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Christian Biesinger (Gerrit)

          unread,
          Jul 29, 2026, 1:54:55 PM (2 days ago) Jul 29
          to Ryan Qin, Alex Ilin, Alex Moshchuk, Kouhei Ueno, Arthur Sonzogni, Peter Beverloo, android-bu...@system.gserviceaccount.com, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
          Attention needed from Alex Ilin, Alex Moshchuk, Arthur Sonzogni, Kouhei Ueno, Peter Beverloo and Ryan Qin

          Christian Biesinger added 1 comment

          File content/common/webid/identity_url_loader_throttle.cc
          Line 157, Patchset 7 (Latest): deferred_ = true;
          Christian Biesinger . unresolved

          Thinking through this is making my head hurt

          I think the desired behavior is:

          • If OnHeaderParsed is called synchronously, set defer to false
          • Otherwise, set defer to true
          • OnHeaderParsed should only call Resume() if it was called asynchronously

          So maybe we need a member variable `is_inside_handleresponse_` that is set to true before we call parse_set_login_header_cb_.Run and set to false afterwards (we can use AutoReset for this), and OnHeaderParsed checks for that member variable when deciding whether to call Resume

          And similarly we can have a member variable is_header_parsed_ that OnHeaderParsed will set to true

          I think this will auto fix Arthur's LLM-generated comment.

          wdyt?

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Alex Ilin
          • Alex Moshchuk
          • Arthur Sonzogni
          Gerrit-Attention: Arthur Sonzogni <arthurs...@chromium.org>
          Gerrit-Attention: Ryan Qin <ry...@google.com>
          Gerrit-Attention: Kouhei Ueno <kou...@chromium.org>
          Gerrit-Attention: Peter Beverloo <pe...@chromium.org>
          Gerrit-Comment-Date: Wed, 29 Jul 2026 17:54:20 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Ryan Qin (Gerrit)

          unread,
          Jul 30, 2026, 1:49:29 PM (16 hours ago) Jul 30
          to android-bu...@system.gserviceaccount.com, Yi Gu, Christian Biesinger, chromium...@chromium.org, loading...@chromium.org
          Attention needed from Christian Biesinger

          Ryan Qin added 3 comments

          File content/common/webid/identity_url_loader_throttle.cc
          Line 155, Patchset 7: CHECK(parse_set_login_header_cb_);
          Arthur Sonzogni . resolved

          **[Early Review]**
          If `parse_set_login_header_cb_` runs synchronously, `OnHeaderParsed` will be called immediately. This sets `deferred_` to `false` and calls `delegate_->Resume()` before `HandleResponseOrRedirect` returns. Subsequently, `HandleResponseOrRedirect` sets `*defer = false`. This has two issues: 1) It calls `delegate_->Resume()` when the loader is not actually deferred (since `*defer` is returned as `false`), which can cause mismatched state in `ThrottlingURLLoader`. 2) It unconditionally overwrites `*defer` to `false`, potentially overriding a `true` value set by a prior throttle. You should track synchronous execution to avoid calling `Resume()` prematurely, and restore the original `defer` value rather than blindly setting it to `false`.

          Ryan Qin

          Done

          Line 157, Patchset 7: deferred_ = true;
          Christian Biesinger . resolved

          Thinking through this is making my head hurt

          I think the desired behavior is:

          • If OnHeaderParsed is called synchronously, set defer to false
          • Otherwise, set defer to true
          • OnHeaderParsed should only call Resume() if it was called asynchronously

          So maybe we need a member variable `is_inside_handleresponse_` that is set to true before we call parse_set_login_header_cb_.Run and set to false afterwards (we can use AutoReset for this), and OnHeaderParsed checks for that member variable when deciding whether to call Resume

          And similarly we can have a member variable is_header_parsed_ that OnHeaderParsed will set to true

          I think this will auto fix Arthur's LLM-generated comment.

          wdyt?

          Ryan Qin

          Done

          Line 157, Patchset 7: deferred_ = true;
          Christian Biesinger . resolved

          Thinking through this is making my head hurt

          I think the desired behavior is:

          • If OnHeaderParsed is called synchronously, set defer to false
          • Otherwise, set defer to true
          • OnHeaderParsed should only call Resume() if it was called asynchronously

          So maybe we need a member variable `is_inside_handleresponse_` that is set to true before we call parse_set_login_header_cb_.Run and set to false afterwards (we can use AutoReset for this), and OnHeaderParsed checks for that member variable when deciding whether to call Resume

          And similarly we can have a member variable is_header_parsed_ that OnHeaderParsed will set to true

          I think this will auto fix Arthur's LLM-generated comment.

          wdyt?

          Ryan Qin

          Done

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Christian Biesinger
          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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
            Gerrit-Change-Number: 8141324
            Gerrit-PatchSet: 8
            Gerrit-Owner: Ryan Qin <ry...@google.com>
            Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
            Gerrit-Attention: Christian Biesinger <cbies...@chromium.org>
            Gerrit-Comment-Date: Thu, 30 Jul 2026 17:49:16 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: No
            Comment-In-Reply-To: Christian Biesinger <cbies...@chromium.org>
            Comment-In-Reply-To: Arthur Sonzogni <arthurs...@chromium.org>
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Christian Biesinger (Gerrit)

            unread,
            Jul 30, 2026, 2:44:25 PM (15 hours ago) Jul 30
            to Ryan Qin, Christian Biesinger, android-bu...@system.gserviceaccount.com, Yi Gu, chromium...@chromium.org, loading...@chromium.org
            Attention needed from Ryan Qin

            Christian Biesinger voted and added 2 comments

            Votes added by Christian Biesinger

            Code-Review+1

            2 comments

            Patchset-level comments
            File-level comment, Patchset 8 (Latest):
            Christian Biesinger . resolved

            lgtm

            File content/common/webid/identity_url_loader_throttle.cc
            Line 192, Patchset 8 (Latest): if (!is_inside_handler_response_ && deferred_) {
            Christian Biesinger . unresolved

            is this necessary? I thought deferred_ would always be true here if is_inside_handler_response_ is false

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Ryan Qin
            Submit Requirements:
              • requirement satisfiedCode-Coverage
              • requirement is not satisfiedCode-Owners
              • requirement is not 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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
              Gerrit-Change-Number: 8141324
              Gerrit-PatchSet: 8
              Gerrit-Owner: Ryan Qin <ry...@google.com>
              Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
              Gerrit-CC: Yi Gu <yi...@chromium.org>
              Gerrit-Attention: Ryan Qin <ry...@google.com>
              Gerrit-Comment-Date: Thu, 30 Jul 2026 18:44:15 +0000
              Gerrit-HasComments: Yes
              Gerrit-Has-Labels: Yes
              satisfied_requirement
              unsatisfied_requirement
              open
              diffy

              Ryan Qin (Gerrit)

              unread,
              Jul 30, 2026, 3:43:42 PM (14 hours ago) Jul 30
              to Christian Biesinger, android-bu...@system.gserviceaccount.com, Yi Gu, chromium...@chromium.org, loading...@chromium.org
              Attention needed from Christian Biesinger

              Ryan Qin added 1 comment

              File content/common/webid/identity_url_loader_throttle.cc
              Line 192, Patchset 8: if (!is_inside_handler_response_ && deferred_) {
              Christian Biesinger . resolved

              is this necessary? I thought deferred_ would always be true here if is_inside_handler_response_ is false

              Ryan Qin

              Yep, we can actualy remove deferred_ and it looks cleaner

              Open in Gerrit

              Related details

              Attention is currently required from:
              • Christian Biesinger
              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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
                Gerrit-Change-Number: 8141324
                Gerrit-PatchSet: 9
                Gerrit-Owner: Ryan Qin <ry...@google.com>
                Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
                Gerrit-CC: Yi Gu <yi...@chromium.org>
                Gerrit-Attention: Christian Biesinger <cbies...@chromium.org>
                Gerrit-Comment-Date: Thu, 30 Jul 2026 19:43:29 +0000
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Christian Biesinger (Gerrit)

                unread,
                Jul 30, 2026, 3:44:08 PM (14 hours ago) Jul 30
                to Ryan Qin, Christian Biesinger, android-bu...@system.gserviceaccount.com, Yi Gu, chromium...@chromium.org, loading...@chromium.org
                Attention needed from Ryan Qin

                Christian Biesinger voted Code-Review+1

                Code-Review+1
                Open in Gerrit

                Related details

                Attention is currently required from:
                • Ryan Qin
                Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement is not 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: I66f696f34f807ee6f0c2cf71f2b8f99f404012db
                  Gerrit-Change-Number: 8141324
                  Gerrit-PatchSet: 9
                  Gerrit-Owner: Ryan Qin <ry...@google.com>
                  Gerrit-Reviewer: Christian Biesinger <cbies...@chromium.org>
                  Gerrit-CC: Yi Gu <yi...@chromium.org>
                  Gerrit-Attention: Ryan Qin <ry...@google.com>
                  Gerrit-Comment-Date: Thu, 30 Jul 2026 19:43:58 +0000
                  Gerrit-HasComments: No
                  Gerrit-Has-Labels: Yes
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy
                  Reply all
                  Reply to author
                  Forward
                  0 new messages