CRD multi-process Linux: Fetch systemd environment in desktop process [chromium/src : main]

0 views
Skip to first unread message

Yuwei Huang (Gerrit)

unread,
Mar 27, 2026, 9:25:53 PM (7 days ago) Mar 27
to Lambros Lambrou, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org
Attention needed from Lambros Lambrou

Yuwei Huang voted and added 1 comment

Votes added by Yuwei Huang

Commit-Queue+1

1 comment

Patchset-level comments
File-level comment, Patchset 6 (Latest):
Yuwei Huang . resolved

PTAL thanks!

Open in Gerrit

Related details

Attention is currently required from:
  • Lambros Lambrou
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement 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: I0820330212f70b2c197285d03f3e6005d4fa3438
Gerrit-Change-Number: 7709232
Gerrit-PatchSet: 6
Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
Gerrit-Attention: Lambros Lambrou <lambros...@chromium.org>
Gerrit-Comment-Date: Sat, 28 Mar 2026 01:25:45 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Lambros Lambrou (Gerrit)

unread,
Mar 30, 2026, 6:59:41 PM (4 days ago) Mar 30
to Yuwei Huang, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org
Attention needed from Yuwei Huang

Lambros Lambrou added 1 comment

Commit Message
Line 10, Patchset 6 (Latest):systemd environment before the desktop process is launched. So, instead
of launching a separate helper process (`user_systemd_env`), the desktop
process now directly fetches these variables using a new
`SystemdUserEnvFetcher` utility class.
Lambros Lambrou . unresolved

This approach feels fragile. We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

I would prefer that we launch a clean process with the changed environment. Otherwise we are trying to split the Chromium initialization into 2 parts, and I don't think the Chromium tooling was designed for this use-case. Even if it works today, I can see Chromium changing in ways that break us.

We don't need a separate process type or command-line. We could do this:
```
if WAYLAND_DISPLAY,DISPLAY not found in env:
wait for them to show up in systemd
exec() with modified environment (maybe no need to fork)
else
Initialize and run desktop process normally
end
```

This way, the 2nd process falls into the "else" case, because it has the correct environment set by the 1st process.

Open in Gerrit

Related details

Attention is currently required from:
  • Yuwei Huang
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement 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: I0820330212f70b2c197285d03f3e6005d4fa3438
    Gerrit-Change-Number: 7709232
    Gerrit-PatchSet: 6
    Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
    Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Attention: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Comment-Date: Mon, 30 Mar 2026 22:59:29 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Yuwei Huang (Gerrit)

    unread,
    Mar 30, 2026, 7:13:39 PM (4 days ago) Mar 30
    to Lambros Lambrou, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org
    Attention needed from Lambros Lambrou

    Yuwei Huang added 1 comment

    Commit Message
    Line 10, Patchset 6 (Latest):systemd environment before the desktop process is launched. So, instead
    of launching a separate helper process (`user_systemd_env`), the desktop
    process now directly fetches these variables using a new
    `SystemdUserEnvFetcher` utility class.
    Lambros Lambrou . unresolved

    This approach feels fragile. We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

    I would prefer that we launch a clean process with the changed environment. Otherwise we are trying to split the Chromium initialization into 2 parts, and I don't think the Chromium tooling was designed for this use-case. Even if it works today, I can see Chromium changing in ways that break us.

    We don't need a separate process type or command-line. We could do this:
    ```
    if WAYLAND_DISPLAY,DISPLAY not found in env:
    wait for them to show up in systemd
    exec() with modified environment (maybe no need to fork)
    else
    Initialize and run desktop process normally
    end
    ```

    This way, the 2nd process falls into the "else" case, because it has the correct environment set by the 1st process.

    Yuwei Huang

    We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

    None of the Chromium initialization code relies on the systemd environment variables. Only things like `gtk_init()` do, but that's our code. I could technically reorganize the code so that Chromium initialization code goes before the systemd setter.

    Even if it works today, I can see Chromium changing in ways that break us.

    Could you give an example?

    Or I can switch to use libsystemd synchronized D-Bus helpers instead, which does not need Chromium initialization and I can move it to the top of the main function. WDYT?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Lambros Lambrou
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement 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: I0820330212f70b2c197285d03f3e6005d4fa3438
    Gerrit-Change-Number: 7709232
    Gerrit-PatchSet: 6
    Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
    Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Attention: Lambros Lambrou <lambros...@chromium.org>
    Gerrit-Comment-Date: Mon, 30 Mar 2026 23:13:33 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Lambros Lambrou <lambros...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Lambros Lambrou (Gerrit)

    unread,
    Mar 30, 2026, 7:59:25 PM (4 days ago) Mar 30
    to Yuwei Huang, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org
    Attention needed from Yuwei Huang

    Lambros Lambrou added 1 comment

    Commit Message
    Line 10, Patchset 6 (Latest):systemd environment before the desktop process is launched. So, instead
    of launching a separate helper process (`user_systemd_env`), the desktop
    process now directly fetches these variables using a new
    `SystemdUserEnvFetcher` utility class.
    Lambros Lambrou . unresolved

    This approach feels fragile. We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

    I would prefer that we launch a clean process with the changed environment. Otherwise we are trying to split the Chromium initialization into 2 parts, and I don't think the Chromium tooling was designed for this use-case. Even if it works today, I can see Chromium changing in ways that break us.

    We don't need a separate process type or command-line. We could do this:
    ```
    if WAYLAND_DISPLAY,DISPLAY not found in env:
    wait for them to show up in systemd
    exec() with modified environment (maybe no need to fork)
    else
    Initialize and run desktop process normally
    end
    ```

    This way, the 2nd process falls into the "else" case, because it has the correct environment set by the 1st process.

    Yuwei Huang

    We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

    None of the Chromium initialization code relies on the systemd environment variables. Only things like `gtk_init()` do, but that's our code. I could technically reorganize the code so that Chromium initialization code goes before the systemd setter.

    Even if it works today, I can see Chromium changing in ways that break us.

    Could you give an example?

    Or I can switch to use libsystemd synchronized D-Bus helpers instead, which does not need Chromium initialization and I can move it to the top of the main function. WDYT?

    Lambros Lambrou

    The example I had in mind was: we create UI threads and a `RunLoop` before `DISPLAY` or `WAYLAND_DISPLAY` are set. That might work today, but in future the implementation might try to connect to a Wayland server.

    We might address this by only using IO threads. But after we set the env variables, we want the proper UI threads. Does Chromium let us change the type of the main thread mid-process?

    Another issue is that `setenv()` is not safe with multiple threads. In `base/environment.h`, there is a warning about this for `SetVar()`

    The libsystemd helpers might work if we can use them before any Chromium initialization. That seems more effort than calling exec() to restart the process with the correct environment.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Yuwei Huang
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement 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: I0820330212f70b2c197285d03f3e6005d4fa3438
    Gerrit-Change-Number: 7709232
    Gerrit-PatchSet: 6
    Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
    Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Attention: Yuwei Huang <yuw...@chromium.org>
    Gerrit-Comment-Date: Mon, 30 Mar 2026 23:59:15 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Lambros Lambrou <lambros...@chromium.org>
    Comment-In-Reply-To: Yuwei Huang <yuw...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Yuwei Huang (Gerrit)

    unread,
    Mar 30, 2026, 11:44:41 PM (4 days ago) Mar 30
    to Lambros Lambrou, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org
    Attention needed from Lambros Lambrou

    Yuwei Huang voted and added 1 comment

    Votes added by Yuwei Huang

    Commit-Queue+1

    1 comment

    Commit Message
    Line 10, Patchset 6:systemd environment before the desktop process is launched. So, instead

    of launching a separate helper process (`user_systemd_env`), the desktop
    process now directly fetches these variables using a new
    `SystemdUserEnvFetcher` utility class.
    Lambros Lambrou . resolved

    This approach feels fragile. We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

    I would prefer that we launch a clean process with the changed environment. Otherwise we are trying to split the Chromium initialization into 2 parts, and I don't think the Chromium tooling was designed for this use-case. Even if it works today, I can see Chromium changing in ways that break us.

    We don't need a separate process type or command-line. We could do this:
    ```
    if WAYLAND_DISPLAY,DISPLAY not found in env:
    wait for them to show up in systemd
    exec() with modified environment (maybe no need to fork)
    else
    Initialize and run desktop process normally
    end
    ```

    This way, the 2nd process falls into the "else" case, because it has the correct environment set by the 1st process.

    Yuwei Huang

    We are doing some Chromium initialization, then changing the local environment, then doing more initialization.

    None of the Chromium initialization code relies on the systemd environment variables. Only things like `gtk_init()` do, but that's our code. I could technically reorganize the code so that Chromium initialization code goes before the systemd setter.

    Even if it works today, I can see Chromium changing in ways that break us.

    Could you give an example?

    Or I can switch to use libsystemd synchronized D-Bus helpers instead, which does not need Chromium initialization and I can move it to the top of the main function. WDYT?

    Lambros Lambrou

    The example I had in mind was: we create UI threads and a `RunLoop` before `DISPLAY` or `WAYLAND_DISPLAY` are set. That might work today, but in future the implementation might try to connect to a Wayland server.

    We might address this by only using IO threads. But after we set the env variables, we want the proper UI threads. Does Chromium let us change the type of the main thread mid-process?

    Another issue is that `setenv()` is not safe with multiple threads. In `base/environment.h`, there is a warning about this for `SetVar()`

    The libsystemd helpers might work if we can use them before any Chromium initialization. That seems more effort than calling exec() to restart the process with the correct environment.

    Yuwei Huang

    Just switched to use the libsystemd functions. It wasn't difficult at all with the help of Gemini :)

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Lambros Lambrou
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement 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: I0820330212f70b2c197285d03f3e6005d4fa3438
      Gerrit-Change-Number: 7709232
      Gerrit-PatchSet: 15
      Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
      Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
      Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
      Gerrit-Attention: Lambros Lambrou <lambros...@chromium.org>
      Gerrit-Comment-Date: Tue, 31 Mar 2026 03:44:32 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Lambros Lambrou (Gerrit)

      unread,
      Mar 31, 2026, 5:33:55 PM (3 days ago) Mar 31
      to Yuwei Huang, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org
      Attention needed from Yuwei Huang

      Lambros Lambrou voted and added 4 comments

      Votes added by Lambros Lambrou

      Code-Review+1

      4 comments

      File remoting/host/linux/systemd_user_env_setter.cc
      Line 41, Patchset 16 (Latest):struct SdBusError {
      Lambros Lambrou . unresolved

      Can this object be safely copied? If so, can you add the default copy-operations to document this? Otherwise, please make this move-only.

      Line 46, Patchset 16 (Latest): sd_bus_error* get() { return &error; }
      Lambros Lambrou . unresolved

      Since the returned ptr can never be null, it's more idiomatic to return an object reference, and to name the getter method as `error()` to match the field name. I feel that `get()` is more suited to classes that wrap a pointer, rather than an object. Up to your discretion, since my suggestion does make the call-site more ugly 😊

      Line 47, Patchset 16 (Latest): sd_bus_error* operator->() { return &error; }
      Lambros Lambrou . unresolved

      Is this used anywhere? This seems confusing as the class doesn't behave like a smart pointer.

      Line 69, Patchset 16 (Latest): env_map[std::string(split_result->first)] = split_result->second;
      Lambros Lambrou . unresolved

      Do you need the explicit cast to `std::string` here?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Yuwei Huang
      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: I0820330212f70b2c197285d03f3e6005d4fa3438
        Gerrit-Change-Number: 7709232
        Gerrit-PatchSet: 16
        Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
        Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
        Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
        Gerrit-Attention: Yuwei Huang <yuw...@chromium.org>
        Gerrit-Comment-Date: Tue, 31 Mar 2026 21:33:45 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Yuwei Huang (Gerrit)

        unread,
        Mar 31, 2026, 6:13:25 PM (3 days ago) Mar 31
        to Lambros Lambrou, AyeAye, Chromium LUCI CQ, chromotin...@chromium.org

        Yuwei Huang voted and added 6 comments

        Votes added by Yuwei Huang

        Commit-Queue+2

        6 comments

        Patchset-level comments
        File-level comment, Patchset 17 (Latest):
        Yuwei Huang . resolved

        Thanks!

        File remoting/host/linux/systemd_user_env_setter.cc
        Line 41, Patchset 16:struct SdBusError {
        Lambros Lambrou . resolved

        Can this object be safely copied? If so, can you add the default copy-operations to document this? Otherwise, please make this move-only.

        Yuwei Huang

        Done

        Line 41, Patchset 16:struct SdBusError {
        Lambros Lambrou . resolved

        Can this object be safely copied? If so, can you add the default copy-operations to document this? Otherwise, please make this move-only.

        Yuwei Huang

        Done. Deleted the copy constructor.

        Line 46, Patchset 16: sd_bus_error* get() { return &error; }
        Lambros Lambrou . resolved

        Since the returned ptr can never be null, it's more idiomatic to return an object reference, and to name the getter method as `error()` to match the field name. I feel that `get()` is more suited to classes that wrap a pointer, rather than an object. Up to your discretion, since my suggestion does make the call-site more ugly 😊

        Yuwei Huang

        Acknowledged.

        I feel that `get()` is more suited to classes that wrap a pointer

        Whether it wraps a pointer feels like an implementation detail to me, and the caller shouldn't care. An example of this pattern can be found [here](https://source.chromium.org/chromium/chromium/src/+/main:base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/no_destructor.h;l=110;drc=4dfdbe14e150479629e696c5b0ce8e9140ce0c70).

        Line 47, Patchset 16: sd_bus_error* operator->() { return &error; }
        Lambros Lambrou . resolved

        Is this used anywhere? This seems confusing as the class doesn't behave like a smart pointer.

        Yuwei Huang

        Yes, in `error->message`. Again, I don't think callers should care whether the scoped object is a smart pointer or not, and this class is anonymous anyway. This pattern can be found [here](https://source.chromium.org/gn/gn/+/main:src/base/value_iterators.h;l=40;drc=69ec4fca1fa69ddadae13f9e6b7507efa0675263).

        Line 69, Patchset 16: env_map[std::string(split_result->first)] = split_result->second;
        Lambros Lambrou . resolved

        Do you need the explicit cast to `std::string` here?

        Yuwei Huang

        Yes. There is no implicit string_view->string conversion by design.

        Open in Gerrit

        Related details

        Attention set is empty
        Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement satisfiedCode-Owners
          • requirement satisfiedCode-Review
          • requirement satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I0820330212f70b2c197285d03f3e6005d4fa3438
          Gerrit-Change-Number: 7709232
          Gerrit-PatchSet: 17
          Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
          Gerrit-Reviewer: Lambros Lambrou <lambros...@chromium.org>
          Gerrit-Reviewer: Yuwei Huang <yuw...@chromium.org>
          Gerrit-Comment-Date: Tue, 31 Mar 2026 22:13:15 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: Yes
          Comment-In-Reply-To: Lambros Lambrou <lambros...@chromium.org>
          satisfied_requirement
          open
          diffy

          Chromium LUCI CQ (Gerrit)

          unread,
          Mar 31, 2026, 8:21:41 PM (3 days ago) Mar 31
          to Yuwei Huang, Lambros Lambrou, AyeAye, chromotin...@chromium.org

          Chromium LUCI CQ submitted the change with unreviewed changes

          Unreviewed changes

          16 is the latest approved patch-set.
          The change was submitted with unreviewed changes in the following files:

          ```
          The name of the file: remoting/host/linux/systemd_user_env_setter.cc
          Insertions: 2, Deletions: 0.

          @@ -39,6 +39,8 @@
          })>;

          struct SdBusError {
          + SdBusError() = default;
          + SdBusError(const SdBusError&) = delete;
          ~SdBusError() {
          // This only frees resources held by `error`, but not `error` itself.
          sd_bus_error_free(&error);
          ```

          Change information

          Commit message:
          CRD multi-process Linux: Fetch systemd environment in desktop process

          With the session reporter logic removed, there is no need to fetch the

          systemd environment before the desktop process is launched. So, instead
          of launching a separate helper process (`user_systemd_env`), the desktop
          process now directly fetches these variables via a new
          `SetSystemdUserEnvironment` helper function.

          `SetSystemdUserEnvironment` connects to the user's session bus, polls
          for the systemd environment, and waits for the display variables to be
          set. The fetched environment variables are then applied to the desktop
          process's environment. This eliminates the need for the
          `kProcessTypeUserSystemdEnv` process type and associated switches.
          Bug: 475611769
          Change-Id: I0820330212f70b2c197285d03f3e6005d4fa3438
          Reviewed-by: Lambros Lambrou <lambros...@chromium.org>
          Commit-Queue: Yuwei Huang <yuw...@chromium.org>
          Cr-Commit-Position: refs/heads/main@{#1608202}
          Files:
          • M remoting/host/base/switches.cc
          • M remoting/host/base/switches.h
          • M remoting/host/desktop_process_main.cc
          • M remoting/host/host_main.cc
          • M remoting/host/linux/BUILD.gn
          • M remoting/host/linux/desktop_session_factory_linux.cc
          • M remoting/host/linux/remote_display_session_manager.cc
          • M remoting/host/linux/remote_display_session_manager.h
          • A remoting/host/linux/systemd_user_env_setter.cc
          • A remoting/host/linux/systemd_user_env_setter.h
          • D remoting/host/linux/user_systemd_env.cc
          Change size: L
          Delta: 11 files changed, 199 insertions(+), 356 deletions(-)
          Branch: refs/heads/main
          Submit Requirements:
          • requirement satisfiedCode-Review: +1 by Lambros Lambrou
          Open in Gerrit
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: merged
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I0820330212f70b2c197285d03f3e6005d4fa3438
          Gerrit-Change-Number: 7709232
          Gerrit-PatchSet: 18
          Gerrit-Owner: Yuwei Huang <yuw...@chromium.org>
          Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
          open
          diffy
          satisfied_requirement
          Reply all
          Reply to author
          Forward
          0 new messages