Implement XRVisibilityMaskChange event [chromium/src : main]

41 views
Skip to first unread message

Alexander Cooper (Gerrit)

unread,
Oct 16, 2025, 1:14:19 PMOct 16
to Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
Attention needed from Brandon Jones

Alexander Cooper added 2 comments

Patchset-level comments
File-level comment, Patchset 10 (Latest):
Alexander Cooper . resolved

PTAL and sorry for the size.

File third_party/blink/renderer/modules/xr/xr_session.h
Line 432, Patchset 6: // This is an opportunity for the session to dispatch any initial set of
// events. Called by |XrSystem| after the session query has resolved.
void DispatchInitialEvents();
Alexander Cooper . unresolved

OpenXR doesn't actually need this because we don't query the mask until we're sending up views with frame data, we don't send it up with the initial set of views. I could remove this, and just leave the logic that on every platform we essentially send it up on the first frame, since `UpdateViews` always has to be called; but the spec *does* allow for us to send them early like this would do if we sent them up initially. Thoughts?

Open in Gerrit

Related details

Attention is currently required from:
  • Brandon Jones
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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
Gerrit-Change-Number: 7038648
Gerrit-PatchSet: 10
Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
Gerrit-CC: Kentaro Hara <har...@chromium.org>
Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
Gerrit-Attention: Brandon Jones <baj...@chromium.org>
Gerrit-Comment-Date: Thu, 16 Oct 2025 17:14:08 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Brandon Jones (Gerrit)

unread,
Oct 16, 2025, 2:45:27 PMOct 16
to Alexander Cooper, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
Attention needed from Alexander Cooper

Brandon Jones voted and added 5 comments

Votes added by Brandon Jones

Code-Review+1

5 comments

Patchset-level comments
Brandon Jones . resolved

LGTM with one must-fix (but simple) issue.

File chrome/browser/vr/webxr_vr_transition_browser_test.cc
Line 193, Patchset 10 (Latest): visibility_mask->indices = {0, 2, 4};
Brandon Jones . unresolved
This is a minor thing that doesn't affect the functionality being tested, but the indicies here are out of bounds. You've provided 3 vertices (X/Y pairs) but index into the 5th vertex (index 4). The indices are given in vertex counts, not array offsets.
```suggestion
visibility_mask->indices = {0, 1, 2};
```
File components/webxr/xr_test_hook_wrapper.cc
Line 54, Patchset 10 (Latest): for (uint32_t i = 0; i < device::kNumVisibilityMaskVerticesForTest; i++) {
Brandon Jones . resolved

Where does device::kNumVisibilityMaskVerticesForTest and device::kNumVisibilityMaskIndicesForTest come from?

(EDIT: NM, found it. Didn't come up in a search on the page for some reason.)

File device/vr/openxr/openxr_visibility_mask_handler.cc
Line 148, Patchset 10 (Latest): cached_mask.mask->indices.push_back(2 * index);
Brandon Jones . unresolved

Nope! Leave those indices alone! As mentioned above, they should refer to the vertex, not the flattened array index.

File third_party/blink/renderer/modules/xr/xr_session.h
Line 432, Patchset 6: // This is an opportunity for the session to dispatch any initial set of
// events. Called by |XrSystem| after the session query has resolved.
void DispatchInitialEvents();
Alexander Cooper . resolved

OpenXR doesn't actually need this because we don't query the mask until we're sending up views with frame data, we don't send it up with the initial set of views. I could remove this, and just leave the logic that on every platform we essentially send it up on the first frame, since `UpdateViews` always has to be called; but the spec *does* allow for us to send them early like this would do if we sent them up initially. Thoughts?

Brandon Jones

I think this is OK even if we know it won't trigger currently, as it's clearly the right thing to do if there was data and will get rid of a future gotcha if we do start exposing view data earlier.

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Cooper
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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
    Gerrit-Change-Number: 7038648
    Gerrit-PatchSet: 10
    Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-CC: Kentaro Hara <har...@chromium.org>
    Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
    Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
    Gerrit-Comment-Date: Thu, 16 Oct 2025 18:45:16 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Alexander Cooper <alco...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    AI Code Reviewer (Gerrit)

    unread,
    Oct 16, 2025, 6:24:30 PMOct 16
    to Alexander Cooper, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
    Attention needed from Alexander Cooper

    AI Code Reviewer added 1 comment

    File third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.h
    Line 19, Patchset 11 (Latest): static XRVisibilityMaskChangeEvent* Create(
    AI Code Reviewer . unresolved

    This class mixes static `Create()` factory methods with public constructors, which is discouraged. To comply with the style guide, please make the constructors private and use a `PassKey` pattern from the `Create` methods to construct the object. (Blink Style Guide: Don't mix Create () factory methods and public constructors in one class.)

    _To keep this interaction as brief and non-intrusive as possible, please consider responding with one of following options:
    **Done** | **Won't fix**: reason | **b/<bug_id>** | **Invalid:** reason

    This comment was generated by [Experimental Blink C++ Code Review Agent](http://go/blink-c++-code-review-agent).AI reviews can sometimes be inaccurate; We appreciate your 🙏 feedback 🙏 to help us improve.[File a bug](http://go/blink-c++-code-review-agent-feedback) | [Provide feedback on chat](https://chat.google.com/room/AAQA0zhQHe0?cls=4) | [Opt-out](https://ganpati2.corp.google.com/group/peep-genai-blink-agent-optout.prod)_

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alexander Cooper
    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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
    Gerrit-Change-Number: 7038648
    Gerrit-PatchSet: 11
    Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
    Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
    Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
    Gerrit-CC: Kentaro Hara <har...@chromium.org>
    Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
    Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
    Gerrit-Comment-Date: Thu, 16 Oct 2025 22:24:24 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Alexander Cooper (Gerrit)

    unread,
    Oct 16, 2025, 6:28:32 PMOct 16
    to AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org

    Alexander Cooper voted and added 4 comments

    Votes added by Alexander Cooper

    Commit-Queue+2

    4 comments

    Patchset-level comments
    File-level comment, Patchset 11 (Latest):
    Alexander Cooper . resolved

    Thanks!

    File chrome/browser/vr/webxr_vr_transition_browser_test.cc
    Line 193, Patchset 10: visibility_mask->indices = {0, 2, 4};
    Brandon Jones . resolved
    This is a minor thing that doesn't affect the functionality being tested, but the indicies here are out of bounds. You've provided 3 vertices (X/Y pairs) but index into the 5th vertex (index 4). The indices are given in vertex counts, not array offsets.
    ```suggestion
    visibility_mask->indices = {0, 1, 2};
    ```
    Alexander Cooper

    Done

    File device/vr/openxr/openxr_visibility_mask_handler.cc
    Line 148, Patchset 10: cached_mask.mask->indices.push_back(2 * index);
    Brandon Jones . resolved

    Nope! Leave those indices alone! As mentioned above, they should refer to the vertex, not the flattened array index.

    Alexander Cooper

    Done

    File third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.h
    Line 19, Patchset 11 (Latest): static XRVisibilityMaskChangeEvent* Create(
    AI Code Reviewer . resolved

    This class mixes static `Create()` factory methods with public constructors, which is discouraged. To comply with the style guide, please make the constructors private and use a `PassKey` pattern from the `Create` methods to construct the object. (Blink Style Guide: Don't mix Create () factory methods and public constructors in one class.)

    _To keep this interaction as brief and non-intrusive as possible, please consider responding with one of following options:
    **Done** | **Won't fix**: reason | **b/<bug_id>** | **Invalid:** reason

    This comment was generated by [Experimental Blink C++ Code Review Agent](http://go/blink-c++-code-review-agent).AI reviews can sometimes be inaccurate; We appreciate your 🙏 feedback 🙏 to help us improve.[File a bug](http://go/blink-c++-code-review-agent-feedback) | [Provide feedback on chat](https://chat.google.com/room/AAQA0zhQHe0?cls=4) | [Opt-out](https://ganpati2.corp.google.com/group/peep-genai-blink-agent-optout.prod)_

    Alexander Cooper

    **Won't fix:** Seems to be standard pattern for DOM events.

    Open in Gerrit

    Related details

    Attention set is empty
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
      Gerrit-Change-Number: 7038648
      Gerrit-PatchSet: 11
      Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
      Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
      Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
      Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
      Gerrit-CC: Kentaro Hara <har...@chromium.org>
      Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
      Gerrit-Comment-Date: Thu, 16 Oct 2025 22:28:22 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
      Comment-In-Reply-To: Brandon Jones <baj...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Alexander Cooper (Gerrit)

      unread,
      Oct 16, 2025, 6:32:34 PMOct 16
      to Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
      Attention needed from Alexander Cooper and Daniel Cheng

      Alexander Cooper voted and added 1 comment

      Votes added by Alexander Cooper

      Commit-Queue+2

      1 comment

      Patchset-level comments
      Alexander Cooper . resolved

      Daniel PTAL event_type_names.json5/runtime_enabled_features.json5 and for device/vr/public/mojom files.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Alexander Cooper
      • Daniel Cheng
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
      Gerrit-Change-Number: 7038648
      Gerrit-PatchSet: 11
      Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
      Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
      Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
      Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
      Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
      Gerrit-CC: Kentaro Hara <har...@chromium.org>
      Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
      Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
      Gerrit-Attention: Daniel Cheng <dch...@chromium.org>
      Gerrit-Comment-Date: Thu, 16 Oct 2025 22:32:17 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Daniel Cheng (Gerrit)

      unread,
      Oct 20, 2025, 8:15:36 PM (13 days ago) Oct 20
      to Alexander Cooper, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
      Attention needed from Alexander Cooper

      Daniel Cheng added 4 comments

      File device/vr/openxr/openxr_visibility_mask_handler.cc
      Line 50, Patchset 14 (Latest): visibility_masks_[type].contains(view_index)) {
      Daniel Cheng . unresolved

      It's a bit unfortunate to have multiple map lookups in a row like this–and similarly below.

      Line 58, Patchset 14 (Latest): if (!visibility_masks_.contains(type) ||
      !visibility_masks_[type].contains(view_index)) {
      UpdateOrCreateVisibilityMask(type, view_index);
      }

      const auto& mask = visibility_masks_[type][view_index].mask;
      Daniel Cheng . unresolved

      e.g. this function and the one below both do 4 lookups into `visibility_masks_` per call, which seems a bit excessive.

      At the very least, it seems like this could just call `UpdateOrCreateVisibilityMask()` if needed unconditionally, and that function should just return a reference to `visibility_masks_[type][view_index]` and we'd only need a single lookup here and below.

      `OnVisibilityMaskChanged()` could do something similar–we could extract the bits that actually update the cached mask out to a helper function that takes a reference to the cached mask value.

      File device/vr/public/mojom/vr_service.mojom
      Line 347, Patchset 14 (Latest): // build the visibility mask.
      Daniel Cheng . unresolved

      Does that mean this list is always expected to have an even number of elements? Or are x and y somehow packed into a single float? Based on what I'm reading, there's actually a secret invariant here that this is always a size that is a multiple of two.

      Can we use gfx.mojom.PointF or the like here and just have Blink flatten?

      Line 351, Patchset 14 (Latest): array<uint32> indices;
      Daniel Cheng . unresolved

      This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Alexander Cooper
      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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
        Gerrit-Change-Number: 7038648
        Gerrit-PatchSet: 14
        Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
        Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
        Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
        Gerrit-CC: Kentaro Hara <har...@chromium.org>
        Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
        Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 00:15:24 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Alexander Cooper (Gerrit)

        unread,
        Oct 20, 2025, 8:45:35 PM (12 days ago) Oct 20
        to Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Daniel Cheng

        Alexander Cooper added 4 comments

        File device/vr/openxr/openxr_visibility_mask_handler.cc
        Line 50, Patchset 14 (Latest): visibility_masks_[type].contains(view_index)) {
        Daniel Cheng . unresolved

        It's a bit unfortunate to have multiple map lookups in a row like this–and similarly below.

        Alexander Cooper

        From my understanding the absl::flat_hash_map lookup should be a cheap constant? This event is definitely not happening during a hot-path, and I'd definitely prefer to avoid creating/storing if we get events for masks we don't care about.

        Line 58, Patchset 14 (Latest): if (!visibility_masks_.contains(type) ||
        !visibility_masks_[type].contains(view_index)) {
        UpdateOrCreateVisibilityMask(type, view_index);
        }

        const auto& mask = visibility_masks_[type][view_index].mask;
        Daniel Cheng . unresolved

        e.g. this function and the one below both do 4 lookups into `visibility_masks_` per call, which seems a bit excessive.

        At the very least, it seems like this could just call `UpdateOrCreateVisibilityMask()` if needed unconditionally, and that function should just return a reference to `visibility_masks_[type][view_index]` and we'd only need a single lookup here and below.

        `OnVisibilityMaskChanged()` could do something similar–we could extract the bits that actually update the cached mask out to a helper function that takes a reference to the cached mask value.

        Alexander Cooper

        FWIW, my understanding was that the lookups should be cheap/constant (e.g. essentially free). It feels like it'd be making the code more complicated for practically no runtime gain? Unless I'm misunderstanding something about the flat_hash_map performance.

        The Update I *had* considered if you'd be okay with it is taking a `mojom::ViewDataPtr&` and assigning the mask and Id, to prevent the need to have both of these functions, which at least cuts down on it some?

        The general flow is that this call is really a `CreateIfNeeded` call, and the `OnVisibilityMask` call is really an `UpdateIfExists` call. Simply calling the operator doesn't give me information about if the item was created, and so I think I'd *have* to call the `.contains` in either method if I wanted to avoid calling the `xrGetVisibilityMaskKHR` function every frame or for each mask I got an event for, which seems like the better trade-off?

        I guess I could add a `newly_created` bool that defaults to `true` in the cached mask and set it to false, but then the `Changed` event would still be creating empty objects.

        File device/vr/public/mojom/vr_service.mojom
        Line 347, Patchset 14 (Latest): // build the visibility mask.
        Daniel Cheng . unresolved

        Does that mean this list is always expected to have an even number of elements? Or are x and y somehow packed into a single float? Based on what I'm reading, there's actually a secret invariant here that this is always a size that is a multiple of two.

        Can we use gfx.mojom.PointF or the like here and just have Blink flatten?

        Alexander Cooper

        Given that this is flowing from trusted->untrusted, my preference was to just unpack it before serializing it across, as otherwise that's two conversions that need to be done on the data.

        Technically yes, there would be an invariant that this has to have an even number of elements as it exists at present.

        Line 351, Patchset 14 (Latest): array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Daniel Cheng
        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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
        Gerrit-Change-Number: 7038648
        Gerrit-PatchSet: 14
        Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
        Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
        Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
        Gerrit-CC: Kentaro Hara <har...@chromium.org>
        Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
        Gerrit-Attention: Daniel Cheng <dch...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 00:45:21 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Daniel Cheng <dch...@chromium.org>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Daniel Cheng (Gerrit)

        unread,
        Oct 21, 2025, 2:43:15 AM (12 days ago) Oct 21
        to Alexander Cooper, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Alexander Cooper

        Daniel Cheng added 4 comments

        File device/vr/openxr/openxr_visibility_mask_handler.cc
        Line 50, Patchset 14 (Latest): visibility_masks_[type].contains(view_index)) {
        Daniel Cheng . unresolved

        It's a bit unfortunate to have multiple map lookups in a row like this–and similarly below.

        Alexander Cooper

        From my understanding the absl::flat_hash_map lookup should be a cheap constant? This event is definitely not happening during a hot-path, and I'd definitely prefer to avoid creating/storing if we get events for masks we don't care about.

        Daniel Cheng

        It's still possible to do all these operations with a single lookup into `visibility_masks_`, e.g. here:

        ```
        auto type_it = visibility_masks_.find(type);
        if (it == visibility_masks_.end()) {
        return;
        }
        auto mask_it = type_it->find(view_index);
        if (mask_it == type_it->end()) {
        return;
        }
        UpdateVisibilityMask(/* any additional args needed here */, &*mask_it);
        ```

        You can certainly shorten some of it if you want using `base::FindOrNull()`, though I think the expanded form is readable enough as-is.

        Line 58, Patchset 14 (Latest): if (!visibility_masks_.contains(type) ||
        !visibility_masks_[type].contains(view_index)) {
        UpdateOrCreateVisibilityMask(type, view_index);
        }

        const auto& mask = visibility_masks_[type][view_index].mask;
        Daniel Cheng . unresolved

        e.g. this function and the one below both do 4 lookups into `visibility_masks_` per call, which seems a bit excessive.

        At the very least, it seems like this could just call `UpdateOrCreateVisibilityMask()` if needed unconditionally, and that function should just return a reference to `visibility_masks_[type][view_index]` and we'd only need a single lookup here and below.

        `OnVisibilityMaskChanged()` could do something similar–we could extract the bits that actually update the cached mask out to a helper function that takes a reference to the cached mask value.

        Alexander Cooper

        FWIW, my understanding was that the lookups should be cheap/constant (e.g. essentially free). It feels like it'd be making the code more complicated for practically no runtime gain? Unless I'm misunderstanding something about the flat_hash_map performance.

        The Update I *had* considered if you'd be okay with it is taking a `mojom::ViewDataPtr&` and assigning the mask and Id, to prevent the need to have both of these functions, which at least cuts down on it some?

        The general flow is that this call is really a `CreateIfNeeded` call, and the `OnVisibilityMask` call is really an `UpdateIfExists` call. Simply calling the operator doesn't give me information about if the item was created, and so I think I'd *have* to call the `.contains` in either method if I wanted to avoid calling the `xrGetVisibilityMaskKHR` function every frame or for each mask I got an event for, which seems like the better trade-off?

        I guess I could add a `newly_created` bool that defaults to `true` in the cached mask and set it to false, but then the `Changed` event would still be creating empty objects.

        Daniel Cheng

        It's relatively low-overhead but it's certainly not "essentially free". google3 widely uses Abseil's swisstables and yet there's still an internal totw (go/totw/132) to avoid redundant map lookups.

        File device/vr/public/mojom/vr_service.mojom
        Line 347, Patchset 14 (Latest): // build the visibility mask.
        Daniel Cheng . unresolved

        Does that mean this list is always expected to have an even number of elements? Or are x and y somehow packed into a single float? Based on what I'm reading, there's actually a secret invariant here that this is always a size that is a multiple of two.

        Can we use gfx.mojom.PointF or the like here and just have Blink flatten?

        Alexander Cooper

        Given that this is flowing from trusted->untrusted, my preference was to just unpack it before serializing it across, as otherwise that's two conversions that need to be done on the data.

        Technically yes, there would be an invariant that this has to have an even number of elements as it exists at present.

        Daniel Cheng

        If this isn't a hot path, then using better types seems fine to me?

        I don't think we would consider this (passing an array of 2d points as a flattened array) as a reasonable way to pass arguments across API boundaries in Chrome, even if that's how the underlying JS API is specified.

        Line 351, Patchset 14 (Latest): array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Daniel Cheng

        It comes from a trusted source today. But for things crossing trust boundaries, we should try to default to expressing things in ways that it's impossible to violate invariants.

        TBH I don't really understand the data format here and why we need to include points that aren't in vertices. I suppose that's probably obvious to someone with more background, but right now there really isn't enough context for less-informed readers (such as myself) to make that judgement.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Alexander Cooper
        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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
        Gerrit-Change-Number: 7038648
        Gerrit-PatchSet: 14
        Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
        Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
        Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
        Gerrit-CC: Kentaro Hara <har...@chromium.org>
        Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
        Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 06:43:05 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Alexander Cooper <alco...@chromium.org>
        Comment-In-Reply-To: Daniel Cheng <dch...@chromium.org>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Brandon Jones (Gerrit)

        unread,
        Oct 21, 2025, 12:41:21 PM (12 days ago) Oct 21
        to Alexander Cooper, Daniel Cheng, AI Code Reviewer, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Alexander Cooper

        Brandon Jones voted and added 1 comment

        Votes added by Brandon Jones

        Code-Review+1

        1 comment

        File device/vr/public/mojom/vr_service.mojom
        Line 351, Patchset 14 (Latest): array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Daniel Cheng

        It comes from a trusted source today. But for things crossing trust boundaries, we should try to default to expressing things in ways that it's impossible to violate invariants.

        TBH I don't really understand the data format here and why we need to include points that aren't in vertices. I suppose that's probably obvious to someone with more background, but right now there really isn't enough context for less-informed readers (such as myself) to make that judgement.

        Brandon Jones

        For some additional context: Both the vertices and indices are formatted in a way that in intended for them to be fed directly to the GPU via WebGL or WebGPU. The split between the vertices/indices here is because that is the most efficient form for a GPU to consume and render this data. Removing the indices would require significant data duplication for the vertices and be slower to render.

        While technically the indices *could* refer to a vertex that is out of bounds, that would be indicative of a implementation bug, and the sources that may use that data for a vertex lookup (either one of the GPU APIs or JavaScript) all have robustness guarantees for handling out of bounds array accesses.

        Gerrit-Comment-Date: Tue, 21 Oct 2025 16:41:10 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Alexander Cooper (Gerrit)

        unread,
        Oct 21, 2025, 2:06:10 PM (12 days ago) Oct 21
        to Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Brandon Jones and Daniel Cheng

        Alexander Cooper added 4 comments

        File device/vr/openxr/openxr_visibility_mask_handler.cc
        Line 50, Patchset 14: visibility_masks_[type].contains(view_index)) {
        Daniel Cheng . resolved

        It's a bit unfortunate to have multiple map lookups in a row like this–and similarly below.

        Alexander Cooper

        From my understanding the absl::flat_hash_map lookup should be a cheap constant? This event is definitely not happening during a hot-path, and I'd definitely prefer to avoid creating/storing if we get events for masks we don't care about.

        Daniel Cheng

        It's still possible to do all these operations with a single lookup into `visibility_masks_`, e.g. here:

        ```
        auto type_it = visibility_masks_.find(type);
        if (it == visibility_masks_.end()) {
        return;
        }
        auto mask_it = type_it->find(view_index);
        if (mask_it == type_it->end()) {
        return;
        }
        UpdateVisibilityMask(/* any additional args needed here */, &*mask_it);
        ```

        You can certainly shorten some of it if you want using `base::FindOrNull()`, though I think the expanded form is readable enough as-is.

        Alexander Cooper

        I ended up adding an `initialized` bool to simplify some code; but overall I think you'll be satisfied with the resulting logic.

        Line 58, Patchset 14: if (!visibility_masks_.contains(type) ||

        !visibility_masks_[type].contains(view_index)) {
        UpdateOrCreateVisibilityMask(type, view_index);
        }

        const auto& mask = visibility_masks_[type][view_index].mask;
        Daniel Cheng . resolved

        e.g. this function and the one below both do 4 lookups into `visibility_masks_` per call, which seems a bit excessive.

        At the very least, it seems like this could just call `UpdateOrCreateVisibilityMask()` if needed unconditionally, and that function should just return a reference to `visibility_masks_[type][view_index]` and we'd only need a single lookup here and below.

        `OnVisibilityMaskChanged()` could do something similar–we could extract the bits that actually update the cached mask out to a helper function that takes a reference to the cached mask value.

        Alexander Cooper

        FWIW, my understanding was that the lookups should be cheap/constant (e.g. essentially free). It feels like it'd be making the code more complicated for practically no runtime gain? Unless I'm misunderstanding something about the flat_hash_map performance.

        The Update I *had* considered if you'd be okay with it is taking a `mojom::ViewDataPtr&` and assigning the mask and Id, to prevent the need to have both of these functions, which at least cuts down on it some?

        The general flow is that this call is really a `CreateIfNeeded` call, and the `OnVisibilityMask` call is really an `UpdateIfExists` call. Simply calling the operator doesn't give me information about if the item was created, and so I think I'd *have* to call the `.contains` in either method if I wanted to avoid calling the `xrGetVisibilityMaskKHR` function every frame or for each mask I got an event for, which seems like the better trade-off?

        I guess I could add a `newly_created` bool that defaults to `true` in the cached mask and set it to false, but then the `Changed` event would still be creating empty objects.

        Daniel Cheng

        It's relatively low-overhead but it's certainly not "essentially free". google3 widely uses Abseil's swisstables and yet there's still an internal totw (go/totw/132) to avoid redundant map lookups.

        Alexander Cooper

        Done

        File device/vr/public/mojom/vr_service.mojom
        Line 347, Patchset 14: // build the visibility mask.
        Daniel Cheng . resolved

        Does that mean this list is always expected to have an even number of elements? Or are x and y somehow packed into a single float? Based on what I'm reading, there's actually a secret invariant here that this is always a size that is a multiple of two.

        Can we use gfx.mojom.PointF or the like here and just have Blink flatten?

        Alexander Cooper

        Given that this is flowing from trusted->untrusted, my preference was to just unpack it before serializing it across, as otherwise that's two conversions that need to be done on the data.

        Technically yes, there would be an invariant that this has to have an even number of elements as it exists at present.

        Daniel Cheng

        If this isn't a hot path, then using better types seems fine to me?

        I don't think we would consider this (passing an array of 2d points as a flattened array) as a reasonable way to pass arguments across API boundaries in Chrome, even if that's how the underlying JS API is specified.

        Alexander Cooper

        Done

        Line 351, Patchset 14: array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Daniel Cheng

        It comes from a trusted source today. But for things crossing trust boundaries, we should try to default to expressing things in ways that it's impossible to violate invariants.

        TBH I don't really understand the data format here and why we need to include points that aren't in vertices. I suppose that's probably obvious to someone with more background, but right now there really isn't enough context for less-informed readers (such as myself) to make that judgement.

        Brandon Jones

        For some additional context: Both the vertices and indices are formatted in a way that in intended for them to be fed directly to the GPU via WebGL or WebGPU. The split between the vertices/indices here is because that is the most efficient form for a GPU to consume and render this data. Removing the indices would require significant data duplication for the vertices and be slower to render.

        While technically the indices *could* refer to a vertex that is out of bounds, that would be indicative of a implementation bug, and the sources that may use that data for a vertex lookup (either one of the GPU APIs or JavaScript) all have robustness guarantees for handling out of bounds array accesses.

        Alexander Cooper

        The indices are also typically representing triangles, so to give an example, we may represent a square by passing e.g.:
        vertices: (0,0), (1,0), (1,1), (0,1)
        indices: 0, 1, 2, 1, 2, 3

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Brandon Jones
        • Daniel Cheng
        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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
        Gerrit-Change-Number: 7038648
        Gerrit-PatchSet: 15
        Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
        Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
        Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
        Gerrit-CC: Kentaro Hara <har...@chromium.org>
        Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
        Gerrit-Attention: Brandon Jones <baj...@chromium.org>
        Gerrit-Attention: Daniel Cheng <dch...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 18:05:59 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Brandon Jones <baj...@chromium.org>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Alexander Cooper (Gerrit)

        unread,
        Oct 21, 2025, 3:54:27 PM (12 days ago) Oct 21
        to Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Brandon Jones and Daniel Cheng

        Alexander Cooper voted and added 1 comment

        Votes added by Alexander Cooper

        Commit-Queue+1

        1 comment

        Patchset-level comments
        File-level comment, Patchset 15 (Latest):
        Alexander Cooper . resolved

        Issues appear to be with device setup, not actual logic.

        Gerrit-Comment-Date: Tue, 21 Oct 2025 19:54:16 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Daniel Cheng (Gerrit)

        unread,
        Oct 21, 2025, 5:36:11 PM (12 days ago) Oct 21
        to Alexander Cooper, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Alexander Cooper and Brandon Jones

        Daniel Cheng voted and added 4 comments

        Votes added by Daniel Cheng

        Code-Review+1

        4 comments

        Patchset-level comments
        File-level comment, Patchset 17 (Latest):
        Daniel Cheng . resolved

        LGTM w/nits addressed

        File device/vr/openxr/openxr_visibility_mask_handler.cc
        Line 67, Patchset 15: // The operator[] returns a reference of the value type, creating it if it
        // needs to be created.
        auto& mask = visibility_masks_[type][view_index];
        if (!mask.initialized) {
        UpdateVisibilityMask(type, view_index, mask);
        mask.initialized = true;
        }
        Daniel Cheng . unresolved
        I think we can eliminate the need to have the `initialized` field; use `try_emplace()` instead.
        ```
        auto [it, inserted] = visibility_masks_[type].try_emplace(view_index);
        if (inserted) {
        UpdateVisibilityMask(...);
        }
        ```
        File device/vr/public/mojom/vr_service.mojom
        Line 351, Patchset 14: array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Daniel Cheng

        It comes from a trusted source today. But for things crossing trust boundaries, we should try to default to expressing things in ways that it's impossible to violate invariants.

        TBH I don't really understand the data format here and why we need to include points that aren't in vertices. I suppose that's probably obvious to someone with more background, but right now there really isn't enough context for less-informed readers (such as myself) to make that judgement.

        Brandon Jones

        For some additional context: Both the vertices and indices are formatted in a way that in intended for them to be fed directly to the GPU via WebGL or WebGPU. The split between the vertices/indices here is because that is the most efficient form for a GPU to consume and render this data. Removing the indices would require significant data duplication for the vertices and be slower to render.

        While technically the indices *could* refer to a vertex that is out of bounds, that would be indicative of a implementation bug, and the sources that may use that data for a vertex lookup (either one of the GPU APIs or JavaScript) all have robustness guarantees for handling out of bounds array accesses.

        Alexander Cooper

        The indices are also typically representing triangles, so to give an example, we may represent a square by passing e.g.:
        vertices: (0,0), (1,0), (1,1), (0,1)
        indices: 0, 1, 2, 1, 2, 3

        Daniel Cheng

        OK, thanks. I would give this example in the Mojom comments.

        Can we also rename `indices` to `unvalidated_indices` or `potentially_invalid_indices` or the like? That way it'll hopefully a bit more obvious if we do end up reusing this to send data in the other direction (untrustworthy -> more trustworthy).

        File third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.cc
        Line 23, Patchset 15: // We need to flatten the vertices before sendign to the page.
        Daniel Cheng . unresolved

        Please fix this WARNING reported by Spellchecker: "sendign" is a possible misspelling of "sending".

        To bypass Spellchecker, add a...

        "sendign" is a possible misspelling of "sending".

        To bypass Spellchecker, add a footer with DISABLE_SPELLCHECKER

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Alexander Cooper
        • Brandon Jones
        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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
        Gerrit-Change-Number: 7038648
        Gerrit-PatchSet: 17
        Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
        Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
        Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
        Gerrit-CC: Kentaro Hara <har...@chromium.org>
        Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
        Gerrit-Attention: Brandon Jones <baj...@chromium.org>
        Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 21:35:59 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Alexander Cooper (Gerrit)

        unread,
        Oct 21, 2025, 6:07:25 PM (12 days ago) Oct 21
        to Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Brandon Jones and Daniel Cheng

        Alexander Cooper added 3 comments

        File device/vr/openxr/openxr_visibility_mask_handler.cc
        Line 67, Patchset 15: // The operator[] returns a reference of the value type, creating it if it
        // needs to be created.
        auto& mask = visibility_masks_[type][view_index];
        if (!mask.initialized) {
        UpdateVisibilityMask(type, view_index, mask);
        mask.initialized = true;
        }
        Daniel Cheng . resolved
        I think we can eliminate the need to have the `initialized` field; use `try_emplace()` instead.
        ```
        auto [it, inserted] = visibility_masks_[type].try_emplace(view_index);
        if (inserted) {
        UpdateVisibilityMask(...);
        }
        ```
        Alexander Cooper

        TBH, it feels slightly less readable, especially because the `try_emplace` name is a bit weird with our goal here, even if it does and guarantees what we want; but it is nice to not "worry" about `initialized` flag.

        File device/vr/public/mojom/vr_service.mojom
        Line 351, Patchset 14: array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Daniel Cheng

        It comes from a trusted source today. But for things crossing trust boundaries, we should try to default to expressing things in ways that it's impossible to violate invariants.

        TBH I don't really understand the data format here and why we need to include points that aren't in vertices. I suppose that's probably obvious to someone with more background, but right now there really isn't enough context for less-informed readers (such as myself) to make that judgement.

        Brandon Jones

        For some additional context: Both the vertices and indices are formatted in a way that in intended for them to be fed directly to the GPU via WebGL or WebGPU. The split between the vertices/indices here is because that is the most efficient form for a GPU to consume and render this data. Removing the indices would require significant data duplication for the vertices and be slower to render.

        While technically the indices *could* refer to a vertex that is out of bounds, that would be indicative of a implementation bug, and the sources that may use that data for a vertex lookup (either one of the GPU APIs or JavaScript) all have robustness guarantees for handling out of bounds array accesses.

        Alexander Cooper

        The indices are also typically representing triangles, so to give an example, we may represent a square by passing e.g.:
        vertices: (0,0), (1,0), (1,1), (0,1)
        indices: 0, 1, 2, 1, 2, 3

        Daniel Cheng

        OK, thanks. I would give this example in the Mojom comments.

        Can we also rename `indices` to `unvalidated_indices` or `potentially_invalid_indices` or the like? That way it'll hopefully a bit more obvious if we do end up reusing this to send data in the other direction (untrustworthy -> more trustworthy).

        Alexander Cooper

        I've included the comment; though there's nothing special here as this is a standard mesh representation.

        I thought practice was that we should be validating all mojom inputs from untrusted processes anyways? We'd need a second mojom review to send this from an untrusted->trusted process; so this feels like overkill that only ends up with a more unwieldy name with our 80 character limit that reduces readability.

        File third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.cc
        Line 23, Patchset 15: // We need to flatten the vertices before sendign to the page.
        Daniel Cheng . resolved

        Please fix this WARNING reported by Spellchecker: "sendign" is a possible misspelling of "sending".

        To bypass Spellchecker, add a...

        "sendign" is a possible misspelling of "sending".

        To bypass Spellchecker, add a footer with DISABLE_SPELLCHECKER

        Alexander Cooper

        Already fixed.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Brandon Jones
        • Daniel Cheng
        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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
        Gerrit-Change-Number: 7038648
        Gerrit-PatchSet: 18
        Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
        Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
        Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
        Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
        Gerrit-CC: Kentaro Hara <har...@chromium.org>
        Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
        Gerrit-Attention: Brandon Jones <baj...@chromium.org>
        Gerrit-Attention: Daniel Cheng <dch...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 22:07:14 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Daniel Cheng (Gerrit)

        unread,
        Oct 21, 2025, 6:13:39 PM (12 days ago) Oct 21
        to Alexander Cooper, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Alexander Cooper and Brandon Jones

        Daniel Cheng voted and added 1 comment

        Votes added by Daniel Cheng

        Code-Review+1

        1 comment

        File device/vr/public/mojom/vr_service.mojom
        Line 351, Patchset 14: array<uint32> indices;
        Daniel Cheng . unresolved

        This isn't great either, but I don't have a better recommendation (because it can contain invalid indices). I'm assuming it's not possible/reasonable to simply split it into two lists, so we can haven't invalid indices at all?

        Alexander Cooper

        I'm not sure I follow your suggestion of splitting it into two lists? If you're saying e.g. do the processing to make a single list of points that we send across and then unpack it I think that's definitely not feasible. Again, this is something that I'd think is mitigated by coming from a trusted process and being sent to an untrusted one.

        Daniel Cheng

        It comes from a trusted source today. But for things crossing trust boundaries, we should try to default to expressing things in ways that it's impossible to violate invariants.

        TBH I don't really understand the data format here and why we need to include points that aren't in vertices. I suppose that's probably obvious to someone with more background, but right now there really isn't enough context for less-informed readers (such as myself) to make that judgement.

        Brandon Jones

        For some additional context: Both the vertices and indices are formatted in a way that in intended for them to be fed directly to the GPU via WebGL or WebGPU. The split between the vertices/indices here is because that is the most efficient form for a GPU to consume and render this data. Removing the indices would require significant data duplication for the vertices and be slower to render.

        While technically the indices *could* refer to a vertex that is out of bounds, that would be indicative of a implementation bug, and the sources that may use that data for a vertex lookup (either one of the GPU APIs or JavaScript) all have robustness guarantees for handling out of bounds array accesses.

        Alexander Cooper

        The indices are also typically representing triangles, so to give an example, we may represent a square by passing e.g.:
        vertices: (0,0), (1,0), (1,1), (0,1)
        indices: 0, 1, 2, 1, 2, 3

        Daniel Cheng

        OK, thanks. I would give this example in the Mojom comments.

        Can we also rename `indices` to `unvalidated_indices` or `potentially_invalid_indices` or the like? That way it'll hopefully a bit more obvious if we do end up reusing this to send data in the other direction (untrustworthy -> more trustworthy).

        Alexander Cooper

        I've included the comment; though there's nothing special here as this is a standard mesh representation.

        I thought practice was that we should be validating all mojom inputs from untrusted processes anyways? We'd need a second mojom review to send this from an untrusted->trusted process; so this feels like overkill that only ends up with a more unwieldy name with our 80 character limit that reduces readability.

        Daniel Cheng

        as this is a standard mesh representation.

        It just helps to have basic/high-level pointers; I believe you that it's standard, but it's somewhat domain-specific knowledge.

        so this feels like overkill that only ends up with a more unwieldy name with our 80 character limit that reduces readability.

        The alternative is to typemap it and validate it always. But that's more heavyweight in terms of boilerplate. But if you want to do that, I certainly wouldn't say no :)

        The goal here is to reduce the possibility for mistakes. You're right that it would need additional review. But the reviewer would have to notice that this is a list of indices into the `vertices` array, which TBH, is something that seems quite missable in a larger review.

        Should a reviewer catch this? Ideally. But we can still do things to highlight more risky/non-idiomatic constructs like this.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Alexander Cooper
        • Brandon Jones
        Gerrit-Attention: Alexander Cooper <alco...@chromium.org>
        Gerrit-Comment-Date: Tue, 21 Oct 2025 22:13:26 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Alexander Cooper (Gerrit)

        unread,
        Oct 21, 2025, 7:05:31 PM (12 days ago) Oct 21
        to Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
        Attention needed from Brandon Jones

        Alexander Cooper voted and added 2 comments

        Votes added by Alexander Cooper

        Commit-Queue+2

        2 comments

        Patchset-level comments
        File-level comment, Patchset 19 (Latest):
        Alexander Cooper . resolved

        Thanks!

        File device/vr/public/mojom/vr_service.mojom
        Line 351, Patchset 14: array<uint32> indices;
        Daniel Cheng . resolved
        Alexander Cooper

        Done

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Brandon Jones
        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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
          Gerrit-Change-Number: 7038648
          Gerrit-PatchSet: 19
          Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
          Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
          Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
          Gerrit-CC: Kentaro Hara <har...@chromium.org>
          Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
          Gerrit-Attention: Brandon Jones <baj...@chromium.org>
          Gerrit-Comment-Date: Tue, 21 Oct 2025 23:05:21 +0000
          satisfied_requirement
          open
          diffy

          Blink W3C Test Autoroller (Gerrit)

          unread,
          Oct 21, 2025, 7:13:57 PM (12 days ago) Oct 21
          to Alexander Cooper, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
          Attention needed from Brandon Jones

          Message from Blink W3C Test Autoroller

          Exportable changes to web-platform-tests were detected in this CL and a pull request in the upstream repo has been made: https://github.com/web-platform-tests/wpt/pull/55583.

          When this CL lands, the bot will automatically merge the PR on GitHub if the required GitHub checks pass; otherwise, ecosystem-infra@ team will triage the failures and may contact you.

          WPT Export docs:
          https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md#Automatic-export-process

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Brandon Jones
          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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
          Gerrit-Change-Number: 7038648
          Gerrit-PatchSet: 19
          Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
          Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
          Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
          Gerrit-CC: Blink W3C Test Autoroller <blink-w3c-te...@chromium.org>
          Gerrit-CC: Kentaro Hara <har...@chromium.org>
          Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
          Gerrit-Attention: Brandon Jones <baj...@chromium.org>
          Gerrit-Comment-Date: Tue, 21 Oct 2025 23:13:49 +0000
          Gerrit-HasComments: No
          Gerrit-Has-Labels: No
          satisfied_requirement
          open
          diffy

          Alexander Cooper (Gerrit)

          unread,
          Oct 22, 2025, 1:18:51 PM (11 days ago) Oct 22
          to Blink W3C Test Autoroller, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, Chromium LUCI CQ, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org
          Attention needed from Brandon Jones

          Alexander Cooper voted Commit-Queue+2

          Commit-Queue+2
          Open in Gerrit

          Related details

          Attention is currently required from:
          • Brandon Jones
          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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
          Gerrit-Change-Number: 7038648
          Gerrit-PatchSet: 20
          Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
          Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
          Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
          Gerrit-CC: Blink W3C Test Autoroller <blink-w3c-te...@chromium.org>
          Gerrit-CC: Kentaro Hara <har...@chromium.org>
          Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
          Gerrit-Attention: Brandon Jones <baj...@chromium.org>
          Gerrit-Comment-Date: Wed, 22 Oct 2025 17:18:39 +0000
          Gerrit-HasComments: No
          Gerrit-Has-Labels: Yes
          satisfied_requirement
          open
          diffy

          Chromium LUCI CQ (Gerrit)

          unread,
          Oct 22, 2025, 2:47:13 PM (11 days ago) Oct 22
          to Alexander Cooper, Blink W3C Test Autoroller, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org

          Chromium LUCI CQ submitted the change with unreviewed changes

          Unreviewed changes

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

          ```
          The name of the file: device/vr/openxr/openxr_visibility_mask_handler.cc
          Insertions: 1, Deletions: 1.

          The diff is too large to show. Please review the diff.
          ```
          ```
          The name of the file: device/vr/public/mojom/vr_service.mojom
          Insertions: 1, Deletions: 1.

          The diff is too large to show. Please review the diff.
          ```
          ```
          The name of the file: third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.cc
          Insertions: 4, Deletions: 1.

          The diff is too large to show. Please review the diff.
          ```
          ```
          The name of the file: third_party/blink/renderer/modules/xr/xr_session.h
          Insertions: 2, Deletions: 0.

          The diff is too large to show. Please review the diff.
          ```

          Change information

          Commit message:
          Implement XRVisibilityMaskChange event

          Implements the XRVisibilityMaskChange event in blink, including all
          infrastructure needed to send the real data for the event as well as
          adding a minor test case for the scenario. Note that because it is
          related to the VisibilityMaskChange event, the index of the XRView is
          also now exposed per the spec.
          Bug: 450538226
          Change-Id: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
          Reviewed-by: Daniel Cheng <dch...@chromium.org>
          Reviewed-by: Brandon Jones <baj...@chromium.org>
          Commit-Queue: Alexander Cooper <alco...@chromium.org>
          Cr-Commit-Position: refs/heads/main@{#1533799}
          Files:
          • M chrome/browser/vr/test/mock_xr_device_hook_base.cc
          • M chrome/browser/vr/test/mock_xr_device_hook_base.h
          • M chrome/browser/vr/test/webxr_vr_browser_test.cc
          • M chrome/browser/vr/webxr_vr_transition_browser_test.cc
          • A chrome/test/data/xr/e2e_test_files/html/test_visibility_mask_change_event.html
          • M components/webxr/xr_test_hook_wrapper.cc
          • M components/webxr/xr_test_hook_wrapper.h
          • M device/vr/BUILD.gn
          • M device/vr/DEPS
          • M device/vr/openxr/openxr_api_wrapper.cc
          • M device/vr/openxr/openxr_api_wrapper.h
          • M device/vr/openxr/openxr_extension_helper.cc
          • M device/vr/openxr/openxr_extension_helper.h
          • M device/vr/openxr/openxr_platform_helper.cc
          • A device/vr/openxr/openxr_visibility_mask_handler.cc
          • A device/vr/openxr/openxr_visibility_mask_handler.h
          • M device/vr/openxr/test/fake_openxr_impl_api.cc
          • M device/vr/openxr/test/openxr_test_helper.cc
          • M device/vr/openxr/test/openxr_test_helper.h
          • M device/vr/public/mojom/BUILD.gn
          • M device/vr/public/mojom/browser_test_interfaces.mojom
          • A device/vr/public/mojom/visibility_mask_id.h
          • M device/vr/public/mojom/vr_service.mojom
          • M device/vr/public/mojom/vr_service_mojom_traits.h
          • M device/vr/test/test_hook.h
          • M third_party/blink/renderer/bindings/generated_in_modules.gni
          • M third_party/blink/renderer/bindings/idl_in_modules.gni
          • M third_party/blink/renderer/core/events/event_type_names.json5
          • M third_party/blink/renderer/modules/xr/BUILD.gn
          • M third_party/blink/renderer/modules/xr/DEPS
          • M third_party/blink/renderer/modules/xr/xr_session.cc
          • M third_party/blink/renderer/modules/xr/xr_session.h
          • M third_party/blink/renderer/modules/xr/xr_session.idl
          • M third_party/blink/renderer/modules/xr/xr_system.cc
          • M third_party/blink/renderer/modules/xr/xr_utils.cc
          • M third_party/blink/renderer/modules/xr/xr_utils.h
          • M third_party/blink/renderer/modules/xr/xr_view.cc
          • M third_party/blink/renderer/modules/xr/xr_view.h
          • M third_party/blink/renderer/modules/xr/xr_view.idl
          • A third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.cc
          • A third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.h
          • A third_party/blink/renderer/modules/xr/xr_visibility_mask_change_event.idl
          • M third_party/blink/renderer/platform/runtime_enabled_features.json5
          • M third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
          • M third_party/blink/web_tests/external/wpt/webxr/idlharness.https.window-expected.txt
          • M third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
          Change size: L
          Delta: 46 files changed, 820 insertions(+), 40 deletions(-)
          Branch: refs/heads/main
          Submit Requirements:
          • requirement satisfiedCode-Review: +1 by Daniel Cheng, +1 by Brandon Jones
          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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
          Gerrit-Change-Number: 7038648
          Gerrit-PatchSet: 21
          Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
          Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
          Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
          Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
          Gerrit-CC: Blink W3C Test Autoroller <blink-w3c-te...@chromium.org>
          open
          diffy
          satisfied_requirement

          Blink W3C Test Autoroller (Gerrit)

          unread,
          Oct 28, 2025, 2:31:44 PM (5 days ago) Oct 28
          to Chromium LUCI CQ, Alexander Cooper, Daniel Cheng, AI Code Reviewer, Brandon Jones, AyeAye, chromium...@chromium.org, Kentaro Hara, Raphael Kubo da Costa, kinuko...@chromium.org, blink-revie...@chromium.org, blink-revie...@chromium.org, blink-...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, feature-v...@chromium.org, ipc-securi...@chromium.org, jmedle...@chromium.org

          Message from Blink W3C Test Autoroller

          The WPT PR for this CL has been merged upstream! https://github.com/web-platform-tests/wpt/pull/55583

          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: I0e63805bc2f64695e5feeb75e2418de4c204a8a8
          Gerrit-Change-Number: 7038648
          Gerrit-PatchSet: 21
          Gerrit-Owner: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Alexander Cooper <alco...@chromium.org>
          Gerrit-Reviewer: Brandon Jones <baj...@chromium.org>
          Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
          Gerrit-Reviewer: Daniel Cheng <dch...@chromium.org>
          Gerrit-CC: AI Code Reviewer <peep-gen...@system.gserviceaccount.com>
          Gerrit-CC: Blink W3C Test Autoroller <blink-w3c-te...@chromium.org>
          Gerrit-CC: Kentaro Hara <har...@chromium.org>
          Gerrit-CC: Raphael Kubo da Costa <ku...@igalia.com>
          Gerrit-Comment-Date: Tue, 28 Oct 2025 18:31:39 +0000
          Gerrit-HasComments: No
          Gerrit-Has-Labels: No
          satisfied_requirement
          open
          diffy
          Reply all
          Reply to author
          Forward
          0 new messages