[a11y] Prevent incorrect text edit reporting for spin buttons on macOS. [chromium/src : main]

0 views
Skip to first unread message

Carlos Marcelo Barrera Nolasco (Gerrit)

unread,
Mar 25, 2026, 7:22:49 PMMar 25
to AyeAye, David Tseng, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from David Tseng and Nektarios Paisios

Carlos Marcelo Barrera Nolasco added 5 comments

File third_party/blink/renderer/core/editing/commands/typing_command.cc
Line 277, Patchset 3: ScopedBlinkAXEventIntent scoped_blink_ax_event_intent(
David Tseng . unresolved

Did you get the chance to see how the existing intents are wired up and if this is the right place for this to be added? (e.g. if we are doubling the way we track intent sin some cases, if the scopes for the intents are not overlapping, why we didn't get typihng intents before, etc)?

I'm not familiar with this call path enough to comment, and maybe OWNERS here can verify.

Carlos Marcelo Barrera Nolasco

These intents are no longer necessary as I've created new intents for increment/decrement. This change was removed.

File third_party/blink/renderer/core/html/forms/text_field_input_type.cc
Line 769, Patchset 5 (Latest):
Carlos Marcelo Barrera Nolasco . unresolved

Why here?
When using the arrows, the user is performing a Value Change on a form control, it's not a "Command" in the editing sense, it bypasses the Editor module entirely and calls the value update logic directly. Therefore, it never touches the Apply() method of the CompositeEditCommand base class, which is the method that adds the intents for edits due to typing. Instead, we can attach the increment/decrement intents to the following methods that handle those scenarios.

File ui/accessibility/platform/ax_event_intent_mac.mm
Line 192, Patchset 5 (Latest): case ax::mojom::Command::kDecrement:
Carlos Marcelo Barrera Nolasco . unresolved

@dts...@chromium.org I think AXTextEditType::kInsert is the best available text edit type for this action.
@nek...@chromium.org I've noticed that you implemented this enum in this CL https://chromium-review.googlesource.com/c/chromium/src/+/2424166. There's a comment asking not to renumber this enum; however, I think it's out of sync. Checking its WebKit counterpart (https://github.com/WebKit/WebKit/blob/386d6232aa5bbe3ad751b37f5761ef1d681f5949/Source/WebCore/accessibility/AXTextStateChangeIntent.h#L40-L41), there's a value that hasn't been taken into account (Replace) which should be 7 (AttributesChange should change to 8). Is there a reason why this value wasn't considered (perhaps it didn't exist at the time of the Chrome implementation)? If there's no compelling reason to omit that value, can I update the enum?

File ui/accessibility/platform/browser_accessibility_manager_mac.h
Line 101, Patchset 3: // Maps AXNode IDs to the intents associated with events in the current batch.
David Tseng . unresolved

Maybe be a little more explicit e.g. events received in OnAccessibilityEvents? And which events e.g. AXTreeUpdate.events or generated events etc?

Carlos Marcelo Barrera Nolasco

I've updated the comment to reflect the purpose.

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 359, Patchset 3: if (!is_typing) {
David Tseng . unresolved

Which intent do we get when the value changes due to up/down arrow changing the value?

The other way we can possibly handle this is to trace the exact point where the spin button changes the value and just explicitly mark it in the node. That's likely an even more robust way to differentiate here I think.
I don't have a clear sense of what that looks like, but maybe you could consider it e.g. using intents there too.

Otherwise, the current change definitely looks more reasonable than before.

Carlos Marcelo Barrera Nolasco

There were no intents when the value changed for the text field due to increment/decrement, I've created the new intents for this scenario and used them when the increment/decrement is handled.

Open in Gerrit

Related details

Attention is currently required from:
  • David Tseng
  • Nektarios Paisios
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 5
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Joanmarie Diggs <jdi...@igalia.com>
Gerrit-Reviewer: Nektarios Paisios <nek...@chromium.org>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Attention: Nektarios Paisios <nek...@chromium.org>
Gerrit-Comment-Date: Wed, 25 Mar 2026 23:22:43 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: David Tseng <dts...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Mar 25, 2026, 8:54:49 PMMar 25
to Carlos Marcelo Barrera Nolasco, AyeAye, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco and Nektarios Paisios

David Tseng added 2 comments

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 345, Patchset 5 (Latest): case AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED:
David Tseng . unresolved

I wonder if we should move the logic to AXEventGenerator. i.e. if we see an increment, decrement intent, then the generated event should be a new increment, decrement generated event?
If you agree, this could also avoid us doing more bookkeeping with active_batch_intents_ (there's some already on AXTree, AXEventGenerator).

(This would be a cross platform change though, so feel free to think it through/push back/defer to another change).

Line 532, Patchset 5 (Latest): batch_intents[event.id] = event.event_intents;
David Tseng . unresolved

Note that intents are set for *both* AXTreeUpdate and AXEvent (the two collections in a single AXUpdatesAndEvents).

You only store the latter, but we really want both. When an AXTreeUpdate gets unserialized, that is the path for the generated event. An AXEvent is the path when Blink fires an explicit event.

If the AXUpdatesAndEvents has no explicit events, then we would not actually process any of this.

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
  • Nektarios Paisios
Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Attention: Nektarios Paisios <nek...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Mar 2026 00:54:41 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Mar 26, 2026, 10:57:01 AMMar 26
to Carlos Marcelo Barrera Nolasco, AyeAye, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco and Nektarios Paisios

David Tseng added 1 comment

File ui/accessibility/platform/ax_event_intent_mac.mm
Line 192, Patchset 5 (Latest): case ax::mojom::Command::kDecrement:
Carlos Marcelo Barrera Nolasco . unresolved

@dts...@chromium.org I think AXTextEditType::kInsert is the best available text edit type for this action.
@nek...@chromium.org I've noticed that you implemented this enum in this CL https://chromium-review.googlesource.com/c/chromium/src/+/2424166. There's a comment asking not to renumber this enum; however, I think it's out of sync. Checking its WebKit counterpart (https://github.com/WebKit/WebKit/blob/386d6232aa5bbe3ad751b37f5761ef1d681f5949/Source/WebCore/accessibility/AXTextStateChangeIntent.h#L40-L41), there's a value that hasn't been taken into account (Replace) which should be 7 (AttributesChange should change to 8). Is there a reason why this value wasn't considered (perhaps it didn't exist at the time of the Chrome implementation)? If there's no compelling reason to omit that value, can I update the enum?

David Tseng

@dts...@chromium.org I think AXTextEditType::kInsert is the best available text edit type for this action.

Ack. Looks like you introduced increment/decrement to Command.

@nek...@chromium.org I've noticed that you implemented this enum in this CL https://chromium-review.googlesource.com/c/chromium/src/+/2424166. There's a comment asking not to renumber this enum; however, I think it's out of sync. Checking its WebKit counterpart (https://github.com/WebKit/WebKit/blob/386d6232aa5bbe3ad751b37f5761ef1d681f5949/Source/WebCore/accessibility/AXTextStateChangeIntent.h#L40-L41), there's a value that hasn't been taken into account (Replace) which should be 7 (AttributesChange should change to 8). Is there a reason why this value wasn't considered (perhaps it didn't exist at the time of the Chrome implementation)? If there's no compelling reason to omit that value, can I update the enum?


nektar@ isn't working on CHromium or at Google anymore.

The internal enums (CHrome's Command mojo enum here I guess) isn't public (e.g. defined in a Mac sdk). Both webkit and blink probably pull from similar W3C specs, so the values resemble each other, but I think it's ok to have different enum values. Both webkit and blink at some point have to map these directly or indirectly to a public Mac a11y api.

Gerrit-Comment-Date: Thu, 26 Mar 2026 14:56:51 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Carlos Marcelo Barrera Nolasco (Gerrit)

unread,
Mar 26, 2026, 6:43:25 PMMar 26
to AyeAye, David Tseng, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from David Tseng

Carlos Marcelo Barrera Nolasco voted and added 8 comments

Votes added by Carlos Marcelo Barrera Nolasco

Commit-Queue+1

8 comments

File third_party/blink/renderer/core/editing/commands/typing_command.cc
Line 277, Patchset 3: ScopedBlinkAXEventIntent scoped_blink_ax_event_intent(
David Tseng . resolved

Did you get the chance to see how the existing intents are wired up and if this is the right place for this to be added? (e.g. if we are doubling the way we track intent sin some cases, if the scopes for the intents are not overlapping, why we didn't get typihng intents before, etc)?

I'm not familiar with this call path enough to comment, and maybe OWNERS here can verify.

Carlos Marcelo Barrera Nolasco

These intents are no longer necessary as I've created new intents for increment/decrement. This change was removed.

Carlos Marcelo Barrera Nolasco

Done

File third_party/blink/renderer/core/html/forms/text_field_input_type.cc
Line 769, Patchset 5:
Carlos Marcelo Barrera Nolasco . resolved

Why here?
When using the arrows, the user is performing a Value Change on a form control, it's not a "Command" in the editing sense, it bypasses the Editor module entirely and calls the value update logic directly. Therefore, it never touches the Apply() method of the CompositeEditCommand base class, which is the method that adds the intents for edits due to typing. Instead, we can attach the increment/decrement intents to the following methods that handle those scenarios.

Carlos Marcelo Barrera Nolasco

Done

File ui/accessibility/platform/ax_event_intent_mac.mm
Line 192, Patchset 5: case ax::mojom::Command::kDecrement:
Carlos Marcelo Barrera Nolasco . resolved

@dts...@chromium.org I think AXTextEditType::kInsert is the best available text edit type for this action.
@nek...@chromium.org I've noticed that you implemented this enum in this CL https://chromium-review.googlesource.com/c/chromium/src/+/2424166. There's a comment asking not to renumber this enum; however, I think it's out of sync. Checking its WebKit counterpart (https://github.com/WebKit/WebKit/blob/386d6232aa5bbe3ad751b37f5761ef1d681f5949/Source/WebCore/accessibility/AXTextStateChangeIntent.h#L40-L41), there's a value that hasn't been taken into account (Replace) which should be 7 (AttributesChange should change to 8). Is there a reason why this value wasn't considered (perhaps it didn't exist at the time of the Chrome implementation)? If there's no compelling reason to omit that value, can I update the enum?

David Tseng

@dts...@chromium.org I think AXTextEditType::kInsert is the best available text edit type for this action.

Ack. Looks like you introduced increment/decrement to Command.

@nek...@chromium.org I've noticed that you implemented this enum in this CL https://chromium-review.googlesource.com/c/chromium/src/+/2424166. There's a comment asking not to renumber this enum; however, I think it's out of sync. Checking its WebKit counterpart (https://github.com/WebKit/WebKit/blob/386d6232aa5bbe3ad751b37f5761ef1d681f5949/Source/WebCore/accessibility/AXTextStateChangeIntent.h#L40-L41), there's a value that hasn't been taken into account (Replace) which should be 7 (AttributesChange should change to 8). Is there a reason why this value wasn't considered (perhaps it didn't exist at the time of the Chrome implementation)? If there's no compelling reason to omit that value, can I update the enum?


nektar@ isn't working on CHromium or at Google anymore.

The internal enums (CHrome's Command mojo enum here I guess) isn't public (e.g. defined in a Mac sdk). Both webkit and blink probably pull from similar W3C specs, so the values resemble each other, but I think it's ok to have different enum values. Both webkit and blink at some point have to map these directly or indirectly to a public Mac a11y api.

Carlos Marcelo Barrera Nolasco

Done

File ui/accessibility/platform/browser_accessibility_cocoa.mm
Line 1036, Patchset 1: // If the node is an <input type="number"> (identified as a spin button) and
David Tseng . resolved
I haven't dug into the history of when the surrounding code landed, but 
// TODO(nektar) Remove this once editing intents are implemented,
// and the actual inserted and deleted text is passed over from Blink.

is really the right way to do this.

Many editing intents did land (see
u/a/mojom/ax_event_intent.mojom
u/a/ax_enums.mojom
).

We should be able to do a bit better e.g. detect value or selection changes based on typing vs insertions by Blink. I don't think we pass over the inserted, deleted text though, but should at least be able to know if the text was inserted/deleted as opposed to typed.

Carlos Marcelo Barrera Nolasco

I've changed the fix implementation to account for event intents. With the current state of the intents, we can detect when a change in value was caused by typing (either deletion or insertion). Since the increment/decrement action doesn't have an associated intent, if the field value has changed and the intent array is empty, it means the change wasn't caused by typing.

Carlos Marcelo Barrera Nolasco

Done

File ui/accessibility/platform/browser_accessibility_manager_mac.h
Line 101, Patchset 3: // Maps AXNode IDs to the intents associated with events in the current batch.
David Tseng . resolved

Maybe be a little more explicit e.g. events received in OnAccessibilityEvents? And which events e.g. AXTreeUpdate.events or generated events etc?

Carlos Marcelo Barrera Nolasco

I've updated the comment to reflect the purpose.

Carlos Marcelo Barrera Nolasco

Done

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 345, Patchset 5: case AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED:
David Tseng . unresolved

I wonder if we should move the logic to AXEventGenerator. i.e. if we see an increment, decrement intent, then the generated event should be a new increment, decrement generated event?
If you agree, this could also avoid us doing more bookkeeping with active_batch_intents_ (there's some already on AXTree, AXEventGenerator).

(This would be a cross platform change though, so feel free to think it through/push back/defer to another change).

Carlos Marcelo Barrera Nolasco

Since this is a cross-platform change, I would prefer a separate change to be made. Do you agree?

Line 359, Patchset 3: if (!is_typing) {
David Tseng . resolved

Which intent do we get when the value changes due to up/down arrow changing the value?

The other way we can possibly handle this is to trace the exact point where the spin button changes the value and just explicitly mark it in the node. That's likely an even more robust way to differentiate here I think.
I don't have a clear sense of what that looks like, but maybe you could consider it e.g. using intents there too.

Otherwise, the current change definitely looks more reasonable than before.

Carlos Marcelo Barrera Nolasco

There were no intents when the value changed for the text field due to increment/decrement, I've created the new intents for this scenario and used them when the increment/decrement is handled.

Carlos Marcelo Barrera Nolasco

Done

Line 532, Patchset 5: batch_intents[event.id] = event.event_intents;
David Tseng . unresolved

Note that intents are set for *both* AXTreeUpdate and AXEvent (the two collections in a single AXUpdatesAndEvents).

You only store the latter, but we really want both. When an AXTreeUpdate gets unserialized, that is the path for the generated event. An AXEvent is the path when Blink fires an explicit event.

If the AXUpdatesAndEvents has no explicit events, then we would not actually process any of this.

Carlos Marcelo Barrera Nolasco

Thanks for the heads up, I've updated the code.

Open in Gerrit

Related details

Attention is currently required from:
  • David Tseng
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 6
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Joanmarie Diggs <jdi...@igalia.com>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Mar 2026 22:43:15 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Comment-In-Reply-To: David Tseng <dts...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Mar 27, 2026, 11:31:56 AMMar 27
to Carlos Marcelo Barrera Nolasco, AyeAye, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco

David Tseng added 1 comment

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 345, Patchset 5: case AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED:
David Tseng . unresolved

I wonder if we should move the logic to AXEventGenerator. i.e. if we see an increment, decrement intent, then the generated event should be a new increment, decrement generated event?
If you agree, this could also avoid us doing more bookkeeping with active_batch_intents_ (there's some already on AXTree, AXEventGenerator).

(This would be a cross platform change though, so feel free to think it through/push back/defer to another change).

Carlos Marcelo Barrera Nolasco

Since this is a cross-platform change, I would prefer a separate change to be made. Do you agree?

David Tseng

Sure; I mean, the generated event could just be ignored or treated equall to a value in text field generated event on other platforms. It's all in if you think that approach would be cleaner and valuable for other platforms as well.

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 6
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Joanmarie Diggs <jdi...@igalia.com>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Comment-Date: Fri, 27 Mar 2026 15:31:47 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Carlos Marcelo Barrera Nolasco (Gerrit)

unread,
Mar 30, 2026, 10:10:35 AMMar 30
to Devlin Cronin, James Cook, AyeAye, David Tseng, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from David Tseng, Devlin Cronin and James Cook

Carlos Marcelo Barrera Nolasco added 1 comment

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 345, Patchset 5: case AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED:
David Tseng . unresolved

I wonder if we should move the logic to AXEventGenerator. i.e. if we see an increment, decrement intent, then the generated event should be a new increment, decrement generated event?
If you agree, this could also avoid us doing more bookkeeping with active_batch_intents_ (there's some already on AXTree, AXEventGenerator).

(This would be a cross platform change though, so feel free to think it through/push back/defer to another change).

Carlos Marcelo Barrera Nolasco

Since this is a cross-platform change, I would prefer a separate change to be made. Do you agree?

David Tseng

Sure; I mean, the generated event could just be ignored or treated equall to a value in text field generated event on other platforms. It's all in if you think that approach would be cleaner and valuable for other platforms as well.

Carlos Marcelo Barrera Nolasco

I've moved the logic to AXEventGenerator to handle this and generate two new events one for increment and one for decrement. For other platforms I am treating the new events as value in text field changed events, so it should not be disruptive.

Open in Gerrit

Related details

Attention is currently required from:
  • David Tseng
  • Devlin Cronin
  • James Cook
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 9
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Reviewer: James Cook <jame...@chromium.org>
Gerrit-Reviewer: Joanmarie Diggs <jdi...@igalia.com>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Attention: James Cook <jame...@chromium.org>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Comment-Date: Mon, 30 Mar 2026 14:10:22 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

James Cook (Gerrit)

unread,
Mar 30, 2026, 2:14:12 PMMar 30
to Carlos Marcelo Barrera Nolasco, Devlin Cronin, AyeAye, David Tseng, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco and David Tseng

James Cook added 1 comment

Patchset-level comments
File-level comment, Patchset 9 (Latest):
James Cook . resolved

Devlin, would you mind taking the extensions owners review for this? I'm pretty sure this is a private API, but not 100% sure, and I don't want to get it wrong.

This comment says the API should be named private but isn't:
https://source.chromium.org/chromium/chromium/src/+/main:extensions/common/api/_manifest_features.json;drc=dd2c073b4c6e20368c527fdeb29e3092ae959574;l=49

Carlos, if you need me for non-extensions files (which I doubt, I mostly own ash and chromeos) just add me back as a reviewer. Thanks.

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
  • David Tseng
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 9
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Reviewer: Joanmarie Diggs <jdi...@igalia.com>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: James Cook <jame...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Comment-Date: Mon, 30 Mar 2026 18:14:05 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Mar 30, 2026, 6:21:55 PMMar 30
to Carlos Marcelo Barrera Nolasco, James Cook, Devlin Cronin, AyeAye, Joanmarie Diggs, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco

David Tseng added 3 comments

File ui/accessibility/ax_event_generator.cc
Line 582, Patchset 9 (Latest): tree->event_data() && node->data().IsTextField()) {
David Tseng . unresolved
Can we move this entire block into
} else if (node->data().IsTextField()) {
below and integrate it there?

That way, we can see exactly how the logic resolves into value in text field changed, vs this new generated event.

Line 585, Patchset 9 (Latest): AddEvent(node, Event::EDITABLE_TEXT_CHANGED);
David Tseng . unresolved

I don't think we should add this. Was it to ensure other platforms still work? The original event was value in text field changed (we can if def this for !OS_MAC specifically, or have all platforms handle the new increment/decrement events explicitly the same way as value in text field changed for now; they can adopt it in the future if needed).

I'd probably go with the latter even though it'll be a little more code.

Line 1137, Patchset 9 (Latest): // For spin buttons, we handle value changes specifically in
David Tseng . unresolved

Is this primarily called through the kName change in AXEventGenerator::OnStringAttributeChanged?

Did the kName actually change for you when incrementing/decrementing the spinner?

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
Gerrit-Comment-Date: Mon, 30 Mar 2026 22:21:47 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Carlos Marcelo Barrera Nolasco (Gerrit)

unread,
Apr 7, 2026, 3:15:03 PMApr 7
to James Cook, Devlin Cronin, AyeAye, David Tseng, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from David Tseng

Carlos Marcelo Barrera Nolasco added 4 comments

File third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
Line 5642, Patchset 12 (Latest): for (const auto& intent : ActiveEventIntents()) {
Carlos Marcelo Barrera Nolasco . unresolved

@dts...@chromium.org This method creates an empty event_intents vector and passes it to the serialization queue, completely ignoring any active intents on the stack.
Mouse clicks on the spin button UI trigger a direct `kValue` update. This calls `MarkAXObjectDirty`, which hits this helper method. Since the helper method hardcodes an empty vector, the `ScopedBlinkAXEventIntent` is ignored.
This change is made to capture the intents from the cache.

File ui/accessibility/ax_event_generator.cc
Line 582, Patchset 9: tree->event_data() && node->data().IsTextField()) {
David Tseng . unresolved
Can we move this entire block into
} else if (node->data().IsTextField()) {
below and integrate it there?

That way, we can see exactly how the logic resolves into value in text field changed, vs this new generated event.

Carlos Marcelo Barrera Nolasco

We cannot move this code block to the `} else if (node->data().IsTextField()) {` statement because the spin button never reaches it because spin button controls return `true` to `IsRangeValueSupported()`. Instead, I moved it inside the first `if (node->data().IsRangeValueSupported())` statement, which is more appropriate.

Line 585, Patchset 9: AddEvent(node, Event::EDITABLE_TEXT_CHANGED);
David Tseng . unresolved

I don't think we should add this. Was it to ensure other platforms still work? The original event was value in text field changed (we can if def this for !OS_MAC specifically, or have all platforms handle the new increment/decrement events explicitly the same way as value in text field changed for now; they can adopt it in the future if needed).

I'd probably go with the latter even though it'll be a little more code.

Carlos Marcelo Barrera Nolasco

This event is no longer necessary. I was using it because in the `AXEventGenerator::FireValueInTextFieldChangedEventIfNecessary` method, I had already suppressed the sending of the `EDITABLE_TEXT_CHANGED` and `VALUE_IN_TEXT_FIELD_CHANGED` events for any interaction with spin buttons. The code for that method has been updated to suppress the events only if the intents are increment or decrement, so it's no longer necessary to include it here. For other platforms I’ve already updated the `browser_accessibility_manager_*` files in order to handle the new increment/decrement events in the same way as value in text field changed.

Line 1137, Patchset 9: // For spin buttons, we handle value changes specifically in
David Tseng . unresolved

Is this primarily called through the kName change in AXEventGenerator::OnStringAttributeChanged?

Did the kName actually change for you when incrementing/decrementing the spinner?

Carlos Marcelo Barrera Nolasco

It is not being called through the kName change in `AXEventGenerator::OnStringAttributeChanged`, but by the `AXEventGenerator::OnNodeCreated` method.
The native `<input type="number"> `contains an Inner Editor and The text inside that editor is represented by a StaticText node, when the user increments or decrements the spin button, Blink destroys the internal StaticText node and creates a new one with the updated numeric value. In this case, `FireValueInTextFieldChangedEventIfNecessary` is called and the `VALUE_IN_TEXT_FIELD_CHANGED` event is added, which leads to the problem of announcing only the section of the string that changes instead of the entire value.

Open in Gerrit

Related details

Attention is currently required from:
  • David Tseng
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 12
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: James Cook <jame...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Comment-Date: Tue, 07 Apr 2026 19:14:54 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: David Tseng <dts...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Apr 13, 2026, 2:04:48 PMApr 13
to Carlos Marcelo Barrera Nolasco, James Cook, Devlin Cronin, android-bu...@system.gserviceaccount.com, chromiu...@luci-project-accounts.iam.gserviceaccount.com, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco

David Tseng added 4 comments

File ui/accessibility/ax_event_generator.cc
Line 595, Patchset 12 (Latest): if (intent.command != ax::mojom::Command::kInsert &&
David Tseng . unresolved

I'm not clear on this. It's also not clear this will scale well whenever we add new values to the command enum.

Do you know for sure we want to drop range events for every intent other than insert/delete?

Line 1137, Patchset 12 (Latest): return;
David Tseng . unresolved

nit: add the blank line below back.

Line 1140, Patchset 12 (Latest): // double-firing when child text nodes are updated.
David Tseng . unresolved

Why do we suppress almost all intents? Can we just suppress increment/decrement?
Also, can we do so for all roles?

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 515, Patchset 12 (Latest): ;
David Tseng . unresolved

nit: remove.

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 12
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: James Cook <jame...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Comment-Date: Mon, 13 Apr 2026 18:04:34 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Apr 13, 2026, 2:25:33 PMApr 13
to Carlos Marcelo Barrera Nolasco, James Cook, Devlin Cronin, android-bu...@system.gserviceaccount.com, chromiu...@luci-project-accounts.iam.gserviceaccount.com, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco

David Tseng added 1 comment

File ui/accessibility/ax_event_generator.cc
Line 1137, Patchset 9: // For spin buttons, we handle value changes specifically in
David Tseng . resolved

Is this primarily called through the kName change in AXEventGenerator::OnStringAttributeChanged?

Did the kName actually change for you when incrementing/decrementing the spinner?

Carlos Marcelo Barrera Nolasco

It is not being called through the kName change in `AXEventGenerator::OnStringAttributeChanged`, but by the `AXEventGenerator::OnNodeCreated` method.
The native `<input type="number"> `contains an Inner Editor and The text inside that editor is represented by a StaticText node, when the user increments or decrements the spin button, Blink destroys the internal StaticText node and creates a new one with the updated numeric value. In this case, `FireValueInTextFieldChangedEventIfNecessary` is called and the `VALUE_IN_TEXT_FIELD_CHANGED` event is added, which leads to the problem of announcing only the section of the string that changes instead of the entire value.

David Tseng

Ack.

Gerrit-Comment-Date: Mon, 13 Apr 2026 18:25:24 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Comment-In-Reply-To: David Tseng <dts...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Carlos Marcelo Barrera Nolasco (Gerrit)

unread,
Apr 15, 2026, 11:19:45 AMApr 15
to James Cook, Devlin Cronin, android-bu...@system.gserviceaccount.com, David Tseng, chromiu...@luci-project-accounts.iam.gserviceaccount.com, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from David Tseng

Carlos Marcelo Barrera Nolasco added 9 comments

File third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
Line 5642, Patchset 12: for (const auto& intent : ActiveEventIntents()) {
Carlos Marcelo Barrera Nolasco . resolved

@dts...@chromium.org This method creates an empty event_intents vector and passes it to the serialization queue, completely ignoring any active intents on the stack.
Mouse clicks on the spin button UI trigger a direct `kValue` update. This calls `MarkAXObjectDirty`, which hits this helper method. Since the helper method hardcodes an empty vector, the `ScopedBlinkAXEventIntent` is ignored.
This change is made to capture the intents from the cache.

Carlos Marcelo Barrera Nolasco

Done

File ui/accessibility/ax_event_generator.cc
Line 582, Patchset 9: tree->event_data() && node->data().IsTextField()) {
David Tseng . resolved
Can we move this entire block into
} else if (node->data().IsTextField()) {
below and integrate it there?

That way, we can see exactly how the logic resolves into value in text field changed, vs this new generated event.

Carlos Marcelo Barrera Nolasco

We cannot move this code block to the `} else if (node->data().IsTextField()) {` statement because the spin button never reaches it because spin button controls return `true` to `IsRangeValueSupported()`. Instead, I moved it inside the first `if (node->data().IsRangeValueSupported())` statement, which is more appropriate.

Carlos Marcelo Barrera Nolasco

Done

Line 585, Patchset 9: AddEvent(node, Event::EDITABLE_TEXT_CHANGED);
David Tseng . resolved

I don't think we should add this. Was it to ensure other platforms still work? The original event was value in text field changed (we can if def this for !OS_MAC specifically, or have all platforms handle the new increment/decrement events explicitly the same way as value in text field changed for now; they can adopt it in the future if needed).

I'd probably go with the latter even though it'll be a little more code.

Carlos Marcelo Barrera Nolasco

This event is no longer necessary. I was using it because in the `AXEventGenerator::FireValueInTextFieldChangedEventIfNecessary` method, I had already suppressed the sending of the `EDITABLE_TEXT_CHANGED` and `VALUE_IN_TEXT_FIELD_CHANGED` events for any interaction with spin buttons. The code for that method has been updated to suppress the events only if the intents are increment or decrement, so it's no longer necessary to include it here. For other platforms I’ve already updated the `browser_accessibility_manager_*` files in order to handle the new increment/decrement events in the same way as value in text field changed.

Carlos Marcelo Barrera Nolasco

Done

Line 595, Patchset 12: if (intent.command != ax::mojom::Command::kInsert &&
David Tseng . unresolved

I'm not clear on this. It's also not clear this will scale well whenever we add new values to the command enum.

Do you know for sure we want to drop range events for every intent other than insert/delete?

Carlos Marcelo Barrera Nolasco

This if was unnecessary. Also I removed the returns from the previous if statements in order to keep the Event::RANGE_VALUE_CHANGED event.

David Tseng . unresolved

nit: add the blank line below back.

Carlos Marcelo Barrera Nolasco

Added

Line 1140, Patchset 12: // double-firing when child text nodes are updated.
David Tseng . unresolved

Why do we suppress almost all intents? Can we just suppress increment/decrement?
Also, can we do so for all roles?

Carlos Marcelo Barrera Nolasco

I've changed the implementation to suppress the VALUE_IN_TEXT_FIELD_CHANGED event just for increment/decrement, I've also removed the role filter. This is safe as spin buttons are the only elements that have those intents and is open for new elements that implements increment/decrement.

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 345, Patchset 5: case AXEventGenerator::Event::VALUE_IN_TEXT_FIELD_CHANGED:
David Tseng . resolved

I wonder if we should move the logic to AXEventGenerator. i.e. if we see an increment, decrement intent, then the generated event should be a new increment, decrement generated event?
If you agree, this could also avoid us doing more bookkeeping with active_batch_intents_ (there's some already on AXTree, AXEventGenerator).

(This would be a cross platform change though, so feel free to think it through/push back/defer to another change).

Carlos Marcelo Barrera Nolasco

Since this is a cross-platform change, I would prefer a separate change to be made. Do you agree?

David Tseng

Sure; I mean, the generated event could just be ignored or treated equall to a value in text field generated event on other platforms. It's all in if you think that approach would be cleaner and valuable for other platforms as well.

Carlos Marcelo Barrera Nolasco

I've moved the logic to AXEventGenerator to handle this and generate two new events one for increment and one for decrement. For other platforms I am treating the new events as value in text field changed events, so it should not be disruptive.

Carlos Marcelo Barrera Nolasco

Done

David Tseng . unresolved

nit: remove.

Carlos Marcelo Barrera Nolasco

Removed

Line 532, Patchset 5: batch_intents[event.id] = event.event_intents;
David Tseng . resolved

Note that intents are set for *both* AXTreeUpdate and AXEvent (the two collections in a single AXUpdatesAndEvents).

You only store the latter, but we really want both. When an AXTreeUpdate gets unserialized, that is the path for the generated event. An AXEvent is the path when Blink fires an explicit event.

If the AXUpdatesAndEvents has no explicit events, then we would not actually process any of this.

Carlos Marcelo Barrera Nolasco

Thanks for the heads up, I've updated the code.

Carlos Marcelo Barrera Nolasco

Done

Open in Gerrit

Related details

Attention is currently required from:
  • David Tseng
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 16
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-CC: James Cook <jame...@chromium.org>
Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Comment-Date: Wed, 15 Apr 2026 15:19:35 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Apr 15, 2026, 1:26:22 PMApr 15
to Carlos Marcelo Barrera Nolasco, James Cook, Devlin Cronin, android-bu...@system.gserviceaccount.com, chromiu...@luci-project-accounts.iam.gserviceaccount.com, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco

David Tseng added 6 comments

Message

Thanks for working through changes; mostly looking good now.

6 comments

File ui/accessibility/ax_event_generator.cc
Line 590, Patchset 16 (Latest): if (intent.command == ax::mojom::Command::kIncrement) {
David Tseng . unresolved

Since we're still playing around a bit with the naming here, do we foresee ever needing increment/decrement intents for other roles?

If so, then perhaps we don't need to restrict the generated event i.e. name it
VALUE_INCREMENTED.

If not, then perhaps we should rename the intents to
Command::kSpinButtonIncrement

and not need to check the role here.

Line 595, Patchset 16 (Latest): AddEvent(node, Event::RANGE_VALUE_CHANGED);
David Tseng . unresolved

SHould this be added if we added a value in spin button incremented|decremented? Does it matter?

Line 1134, Patchset 16 (Latest): // descendant-driven event to avoid double-firing when child text
David Tseng . unresolved

Maybe clarify that this occurrs due to the call from on node created? (since you took the time to figure that out).

File ui/accessibility/platform/browser_accessibility_cocoa.mm
Line 1037, Patchset 16 (Latest):
David Tseng . unresolved

nit: probably unnecessary addition.

File ui/accessibility/platform/browser_accessibility_manager_mac.h
Line 101, Patchset 16 (Latest): // Maps AXNode IDs to the intents associated with AXEvents from
David Tseng . unresolved

Remove; no longer used.

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
Line 348, Patchset 16 (Latest):
David Tseng . unresolved

nit/ditto.

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Comment-Date: Wed, 15 Apr 2026 17:26:12 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Carlos Marcelo Barrera Nolasco (Gerrit)

unread,
Apr 16, 2026, 11:17:21 AM (14 days ago) Apr 16
to James Cook, Devlin Cronin, android-bu...@system.gserviceaccount.com, David Tseng, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from David Tseng

Carlos Marcelo Barrera Nolasco added 6 comments

File ui/accessibility/ax_event_generator.cc
Line 590, Patchset 16: if (intent.command == ax::mojom::Command::kIncrement) {
David Tseng . unresolved

Since we're still playing around a bit with the naming here, do we foresee ever needing increment/decrement intents for other roles?

If so, then perhaps we don't need to restrict the generated event i.e. name it
VALUE_INCREMENTED.

If not, then perhaps we should rename the intents to
Command::kSpinButtonIncrement

and not need to check the role here.

Carlos Marcelo Barrera Nolasco

Updated

Line 595, Patchset 16: AddEvent(node, Event::RANGE_VALUE_CHANGED);
David Tseng . unresolved

SHould this be added if we added a value in spin button incremented|decremented? Does it matter?

Carlos Marcelo Barrera Nolasco

This is not necessary for increment/decrement as they have their own intents.

Line 1134, Patchset 16: // descendant-driven event to avoid double-firing when child text
David Tseng . unresolved

Maybe clarify that this occurrs due to the call from on node created? (since you took the time to figure that out).

Carlos Marcelo Barrera Nolasco

Updated

File ui/accessibility/platform/browser_accessibility_cocoa.mm
David Tseng . unresolved

nit: probably unnecessary addition.

Carlos Marcelo Barrera Nolasco

Removed

File ui/accessibility/platform/browser_accessibility_manager_mac.h
Line 101, Patchset 16: // Maps AXNode IDs to the intents associated with AXEvents from
David Tseng . unresolved

Remove; no longer used.

Carlos Marcelo Barrera Nolasco

Removed

File ui/accessibility/platform/browser_accessibility_manager_mac.mm
David Tseng . unresolved

nit/ditto.

Carlos Marcelo Barrera Nolasco

Removed

Open in Gerrit

Related details

Attention is currently required from:
  • David Tseng
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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
Gerrit-Change-Number: 7689054
Gerrit-PatchSet: 17
Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
Gerrit-Reviewer: David Tseng <dts...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
Gerrit-Attention: David Tseng <dts...@chromium.org>
Gerrit-Comment-Date: Thu, 16 Apr 2026 15:17:06 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: David Tseng <dts...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

David Tseng (Gerrit)

unread,
Apr 16, 2026, 1:58:43 PM (14 days ago) Apr 16
to Carlos Marcelo Barrera Nolasco, James Cook, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
Attention needed from Carlos Marcelo Barrera Nolasco

David Tseng voted and added 1 comment

David Tseng added votes with a message

lgtm with a question/request.

Code-Review+1

1 comment

File ui/accessibility/platform/ax_event_intent_mac.mm
Line 193, Patchset 17 (Latest): case ax::mojom::Command::kSpinButtonIncrement:
David Tseng . unresolved

Do we get a input type of kInsert? Is that what ultimately causes the right VoiceOver output?

Consider adding a test to make this more explicitly spelled out if possible.

Open in Gerrit

Related details

Attention is currently required from:
  • Carlos Marcelo Barrera Nolasco
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
    Gerrit-Change-Number: 7689054
    Gerrit-PatchSet: 17
    Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Reviewer: David Tseng <dts...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
    Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
    Gerrit-CC: James Cook <jame...@chromium.org>
    Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
    Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Comment-Date: Thu, 16 Apr 2026 17:58:31 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    gwsq (Gerrit)

    unread,
    Apr 16, 2026, 4:49:41 PM (14 days ago) Apr 16
    to Carlos Marcelo Barrera Nolasco, Chromium IPC Reviews, Fred Shih, James Cook, David Baron, David Tseng, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
    Attention needed from David Baron, Fred Shih, James Cook and Joey Arhar

    Message from gwsq

    From googleclient/chrome/chromium_gwsq/ipc/config.gwsq:
    IPC: ff...@chromium.org

    📎 It looks like you’re making a possibly security-sensitive change! 📎 IPC security review isn’t a rubberstamp, so your friendly security reviewer will need a fair amount of context to review your CL effectively. Please review your CL description and code comments to make sure they provide context for someone unfamiliar with your project/area. Pay special attention to where data comes from and which processes it flows between (and their privilege levels). Feel free to point your security reviewer at design docs, bugs, or other links if you can’t reasonably make a self-contained CL description. (Also see https://cbea.ms/git-commit/).

    IPC reviewer(s): ff...@chromium.org


    Reviewer source(s):
    ff...@chromium.org is from context(googleclient/chrome/chromium_gwsq/ipc/config.gwsq)

    Open in Gerrit

    Related details

    Attention is currently required from:
    • David Baron
    • Fred Shih
    • James Cook
    • Joey Arhar
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
    Gerrit-Change-Number: 7689054
    Gerrit-PatchSet: 17
    Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Reviewer: David Baron <dba...@chromium.org>
    Gerrit-Reviewer: David Tseng <dts...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
    Gerrit-Reviewer: James Cook <jame...@chromium.org>
    Gerrit-Reviewer: Joey Arhar <jar...@chromium.org>
    Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
    Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
    Gerrit-CC: Chromium IPC Reviews <chrome-ip...@google.com>
    Gerrit-CC: gwsq
    Gerrit-Attention: James Cook <jame...@chromium.org>
    Gerrit-Attention: Joey Arhar <jar...@chromium.org>
    Gerrit-Attention: David Baron <dba...@chromium.org>
    Gerrit-Attention: Fred Shih <ff...@chromium.org>
    Gerrit-Comment-Date: Thu, 16 Apr 2026 20:49:01 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Avi Drissman (Gerrit)

    unread,
    Apr 16, 2026, 4:54:14 PM (14 days ago) Apr 16
    to Carlos Marcelo Barrera Nolasco, Avi Drissman, Chromium IPC Reviews, Fred Shih, James Cook, David Baron, David Tseng, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
    Attention needed from Carlos Marcelo Barrera Nolasco, David Baron, Fred Shih, James Cook and Joey Arhar

    Avi Drissman added 1 comment

    Patchset-level comments
    File-level comment, Patchset 17 (Latest):
    Avi Drissman . resolved

    Drive-by: this is so cool! That old behavior, ugh, this is so much better.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Carlos Marcelo Barrera Nolasco
    Gerrit-CC: Avi Drissman <a...@chromium.org>
    Gerrit-CC: Chromium IPC Reviews <chrome-ip...@google.com>
    Gerrit-CC: Kevin Babbitt <kbab...@microsoft.com>
    Gerrit-CC: gwsq
    Gerrit-Attention: James Cook <jame...@chromium.org>
    Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Attention: Joey Arhar <jar...@chromium.org>
    Gerrit-Attention: David Baron <dba...@chromium.org>
    Gerrit-Attention: Fred Shih <ff...@chromium.org>
    Gerrit-Comment-Date: Thu, 16 Apr 2026 20:54:02 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    James Cook (Gerrit)

    unread,
    Apr 16, 2026, 4:56:51 PM (14 days ago) Apr 16
    to Carlos Marcelo Barrera Nolasco, Avi Drissman, Chromium IPC Reviews, Fred Shih, David Baron, David Tseng, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
    Attention needed from Carlos Marcelo Barrera Nolasco, David Baron, Fred Shih and Joey Arhar

    James Cook added 1 comment

    Patchset-level comments
    James Cook . resolved

    Devlin, can you take this one for extensions owners? See my comment on patchset 9. Thanks.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Carlos Marcelo Barrera Nolasco
    • David Baron
    • Fred Shih
    • Joey Arhar
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
    Gerrit-Change-Number: 7689054
    Gerrit-PatchSet: 17
    Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Reviewer: David Baron <dba...@chromium.org>
    Gerrit-Reviewer: David Tseng <dts...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
    Gerrit-Reviewer: Joey Arhar <jar...@chromium.org>
    Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
    Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
    Gerrit-CC: Avi Drissman <a...@chromium.org>
    Gerrit-CC: Chromium IPC Reviews <chrome-ip...@google.com>
    Gerrit-CC: James Cook <jame...@chromium.org>
    Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
    Gerrit-Attention: Joey Arhar <jar...@chromium.org>
    Gerrit-Attention: David Baron <dba...@chromium.org>
    Gerrit-Attention: Fred Shih <ff...@chromium.org>
    Gerrit-Comment-Date: Thu, 16 Apr 2026 20:56:36 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Joey Arhar (Gerrit)

    unread,
    Apr 17, 2026, 11:28:35 AM (13 days ago) Apr 17
    to Carlos Marcelo Barrera Nolasco, James Cook, Avi Drissman, Chromium IPC Reviews, Fred Shih, David Baron, David Tseng, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
    Attention needed from Carlos Marcelo Barrera Nolasco, David Baron, Devlin Cronin and Fred Shih

    Joey Arhar voted and added 1 comment

    Votes added by Joey Arhar

    Code-Review+1

    1 comment

    Patchset-level comments
    Joey Arhar . resolved

    third_party/blink/renderer/core lgtm

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Carlos Marcelo Barrera Nolasco
    • David Baron
    • Devlin Cronin
    • Fred Shih
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
      Gerrit-Attention: David Baron <dba...@chromium.org>
      Gerrit-Attention: Fred Shih <ff...@chromium.org>
      Gerrit-Comment-Date: Fri, 17 Apr 2026 15:28:23 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      James Cook (Gerrit)

      unread,
      Apr 17, 2026, 12:25:19 PM (13 days ago) Apr 17
      to Carlos Marcelo Barrera Nolasco, Avi Drissman, Chromium IPC Reviews, Fred Shih, David Baron, David Tseng, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
      Attention needed from Carlos Marcelo Barrera Nolasco, David Baron, Devlin Cronin and Fred Shih

      James Cook added 1 comment

      Patchset-level comments
      James Cook . resolved

      Carlos, I asked Devlin if he could take a look for extensions, since this is an API change. I'm a junior extensions reviewer. :-)

      Gerrit-Comment-Date: Fri, 17 Apr 2026 16:25:07 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      David Baron (Gerrit)

      unread,
      Apr 17, 2026, 4:45:02 PM (13 days ago) Apr 17
      to Carlos Marcelo Barrera Nolasco, David Baron, James Cook, Avi Drissman, Chromium IPC Reviews, Fred Shih, David Tseng, Devlin Cronin, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
      Attention needed from Carlos Marcelo Barrera Nolasco, Devlin Cronin and Fred Shih

      David Baron voted and added 1 comment

      Votes added by David Baron

      Code-Review+1

      1 comment

      Patchset-level comments
      David Baron . resolved

      `third_party/blink/renderer/core/html/forms/text_field_input_type.cc` LGTM too (although I don't think you actually needed both me and @jar...@chromium.org)

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Carlos Marcelo Barrera Nolasco
      • Devlin Cronin
      • Fred Shih
      Gerrit-Attention: Fred Shih <ff...@chromium.org>
      Gerrit-Comment-Date: Fri, 17 Apr 2026 20:44:50 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Devlin Cronin (Gerrit)

      unread,
      Apr 17, 2026, 5:08:50 PM (13 days ago) Apr 17
      to Carlos Marcelo Barrera Nolasco, Devlin Cronin, David Baron, James Cook, Avi Drissman, Chromium IPC Reviews, Fred Shih, David Tseng, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
      Attention needed from Carlos Marcelo Barrera Nolasco and Fred Shih

      Devlin Cronin voted and added 1 comment

      Votes added by Devlin Cronin

      Code-Review+1

      1 comment

      Patchset-level comments
      Devlin Cronin . resolved

      extensions/common/api/automation.webidl LGTM

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Carlos Marcelo Barrera Nolasco
      • Fred Shih
      Gerrit-Attention: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
      Gerrit-Attention: Fred Shih <ff...@chromium.org>
      Gerrit-Comment-Date: Fri, 17 Apr 2026 21:08:29 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Fred Shih (Gerrit)

      unread,
      Apr 17, 2026, 6:01:08 PM (12 days ago) Apr 17
      to Carlos Marcelo Barrera Nolasco, Devlin Cronin, David Baron, James Cook, Avi Drissman, Chromium IPC Reviews, David Tseng, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org
      Attention needed from Carlos Marcelo Barrera Nolasco

      Fred Shih voted Code-Review+1

      Code-Review+1
      Open in Gerrit

      Related details

      Attention is currently required from:
      • Carlos Marcelo Barrera Nolasco
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement satisfiedCode-Owners
      Gerrit-Comment-Date: Fri, 17 Apr 2026 22:00:51 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Carlos Marcelo Barrera Nolasco (Gerrit)

      unread,
      Apr 17, 2026, 6:53:35 PM (12 days ago) Apr 17
      to Fred Shih, Devlin Cronin, David Baron, James Cook, Avi Drissman, Chromium IPC Reviews, David Tseng, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org

      Carlos Marcelo Barrera Nolasco added 12 comments

      Patchset-level comments
      File-level comment, Patchset 1:
      Joanmarie Diggs . resolved

      I'm afraid I cannot view the bug or the videos due to access restriction.

      Having said that, did you also test to be sure that legitimate text edits and selection changes continue to be reported, such as arrowing left/right, selecting/unselecting text via keyboard navigation, using backspace/delete, typing new values, etc.?

      Carlos Marcelo Barrera Nolasco

      With the change proposed by David (using intents to detect if the field value was modified by typing), we can effectively separate the two behaviors.
      Using this approach, legitimate text edits fired by typing remain untouched and keep their current behavior.

      Carlos Marcelo Barrera Nolasco

      Done

      File ui/accessibility/ax_event_generator.cc
      Line 590, Patchset 16: if (intent.command == ax::mojom::Command::kIncrement) {
      David Tseng . resolved

      Since we're still playing around a bit with the naming here, do we foresee ever needing increment/decrement intents for other roles?

      If so, then perhaps we don't need to restrict the generated event i.e. name it
      VALUE_INCREMENTED.

      If not, then perhaps we should rename the intents to
      Command::kSpinButtonIncrement

      and not need to check the role here.

      Carlos Marcelo Barrera Nolasco

      Updated

      Carlos Marcelo Barrera Nolasco

      Done

      Line 595, Patchset 12: if (intent.command != ax::mojom::Command::kInsert &&
      David Tseng . resolved

      I'm not clear on this. It's also not clear this will scale well whenever we add new values to the command enum.

      Do you know for sure we want to drop range events for every intent other than insert/delete?

      Carlos Marcelo Barrera Nolasco

      This if was unnecessary. Also I removed the returns from the previous if statements in order to keep the Event::RANGE_VALUE_CHANGED event.

      Carlos Marcelo Barrera Nolasco

      Done

      Line 595, Patchset 16: AddEvent(node, Event::RANGE_VALUE_CHANGED);
      David Tseng . resolved

      SHould this be added if we added a value in spin button incremented|decremented? Does it matter?

      Carlos Marcelo Barrera Nolasco

      This is not necessary for increment/decrement as they have their own intents.

      Carlos Marcelo Barrera Nolasco

      Done

      Line 1134, Patchset 16: // descendant-driven event to avoid double-firing when child text
      David Tseng . resolved

      Maybe clarify that this occurrs due to the call from on node created? (since you took the time to figure that out).

      Carlos Marcelo Barrera Nolasco

      Updated

      Carlos Marcelo Barrera Nolasco

      Done

      Line 1137, Patchset 12: return;
      David Tseng . resolved

      nit: add the blank line below back.

      Carlos Marcelo Barrera Nolasco

      Added

      Carlos Marcelo Barrera Nolasco

      Done

      Line 1140, Patchset 12: // double-firing when child text nodes are updated.
      David Tseng . resolved

      Why do we suppress almost all intents? Can we just suppress increment/decrement?
      Also, can we do so for all roles?

      Carlos Marcelo Barrera Nolasco

      I've changed the implementation to suppress the VALUE_IN_TEXT_FIELD_CHANGED event just for increment/decrement, I've also removed the role filter. This is safe as spin buttons are the only elements that have those intents and is open for new elements that implements increment/decrement.

      Carlos Marcelo Barrera Nolasco

      Done

      File ui/accessibility/platform/ax_event_intent_mac.mm
      Line 193, Patchset 17 (Latest): case ax::mojom::Command::kSpinButtonIncrement:
      David Tseng . resolved

      Do we get a input type of kInsert? Is that what ultimately causes the right VoiceOver output?

      Consider adding a test to make this more explicitly spelled out if possible.

      Carlos Marcelo Barrera Nolasco

      I will add the test in a new CL

      File ui/accessibility/platform/browser_accessibility_cocoa.mm
      Line 1037, Patchset 16:
      David Tseng . resolved

      nit: probably unnecessary addition.

      Carlos Marcelo Barrera Nolasco

      Removed

      Carlos Marcelo Barrera Nolasco

      Done

      File ui/accessibility/platform/browser_accessibility_manager_mac.h
      Line 101, Patchset 16: // Maps AXNode IDs to the intents associated with AXEvents from
      David Tseng . resolved

      Remove; no longer used.

      Carlos Marcelo Barrera Nolasco

      Removed

      Carlos Marcelo Barrera Nolasco

      Done

      File ui/accessibility/platform/browser_accessibility_manager_mac.mm
      Line 348, Patchset 16:
      David Tseng . resolved

      nit/ditto.

      Carlos Marcelo Barrera Nolasco

      Removed

      Carlos Marcelo Barrera Nolasco

      Done

      Line 515, Patchset 12: ;
      David Tseng . resolved

      nit: remove.

      Carlos Marcelo Barrera Nolasco

      Removed

      Carlos Marcelo Barrera Nolasco

      Done

      Open in Gerrit

      Related details

      Attention set is empty
      Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement satisfiedCode-Owners
        • requirement satisfiedCode-Review
        • requirement satisfiedReview-Enforcement
        Gerrit-Comment-Date: Fri, 17 Apr 2026 22:53:19 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
        Comment-In-Reply-To: Joanmarie Diggs <jdi...@igalia.com>
        Comment-In-Reply-To: David Tseng <dts...@chromium.org>
        satisfied_requirement
        open
        diffy

        Carlos Marcelo Barrera Nolasco (Gerrit)

        unread,
        Apr 17, 2026, 6:53:43 PM (12 days ago) Apr 17
        to Fred Shih, Devlin Cronin, David Baron, James Cook, Avi Drissman, Chromium IPC Reviews, David Tseng, android-bu...@system.gserviceaccount.com, Chromium LUCI CQ, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org

        Carlos Marcelo Barrera Nolasco voted Commit-Queue+2

        Commit-Queue+2
        Gerrit-Comment-Date: Fri, 17 Apr 2026 22:53:29 +0000
        Gerrit-HasComments: No
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        open
        diffy

        Chromium LUCI CQ (Gerrit)

        unread,
        Apr 17, 2026, 8:24:08 PM (12 days ago) Apr 17
        to Carlos Marcelo Barrera Nolasco, Fred Shih, Devlin Cronin, David Baron, James Cook, Avi Drissman, Chromium IPC Reviews, David Tseng, android-bu...@system.gserviceaccount.com, Akihiro Ota, chromium...@chromium.org, (Julie)Jeongeun Kim, Kevin Babbitt, blink-rev...@chromium.org, jatapiaro+wat...@google.com, trewin...@google.com, lwinston+watc...@google.com, michaelchec...@google.com, yongshun+...@google.com, blink-rev...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org, blink-...@chromium.org, abigailbk...@google.com, dtseng...@chromium.org, francisjp...@google.com, josiah...@chromium.org, kyungjunle...@google.com, lucasrada...@google.com, mac-r...@chromium.org, nektar...@chromium.org, yuzo+...@chromium.org

        Chromium LUCI CQ submitted the change

        Change information

        Commit message:
        [a11y] Prevent incorrect text edit reporting for spin buttons on macOS.

        When an <input type="number"> (spin button) changes value, and both
        inserted and deleted text are present, VoiceOver can misinterpret this
        as a text edit. This change ensures that for spin buttons, we return an
        empty AXTextEdit in such cases, allowing VoiceOver to announce the full
        new value rather than just the changed digits.

        When a number is entered into a number field like <input type="number">
        (spin button) and the user increments or decrements the value by
        pressing the up/down arrow keys or clicking the field buttons, Chrome
        automatically selects the entire value and updates it.

        Subsequently, when communicating the value update, Chrome interprets it
        as a change in the selected text and announces only the "delta." For
        example, if it changes from 24 to 25, it only announces the 5 because
        the 2 didn't change.

        This change adds AX event intents for spin button steps and suppress
        wrong notifications on Mac.

        Blink now sends `kIncrement` and `kDecrement` accessibility event
        intents when a spin button's value is changed via its step up/down
        functionality.

        [EDITED 03/27]

        `AXEventGenerator` now checks for these intents and defines two new
        generated events `VALUE_IN_SPIN_BUTTON_DECREMENTED` and
        `VALUE_IN_SPIN_BUTTON_INCREMENTED`

        If an increment or decrement event is detected,
        `BrowserAccessibilityManagerMac::FireGeneratedEvent` simply ignores it,
        so VoiceOver handles the value change and announces the full value. On
        other platforms, if an increment or decrement event is detected, it is
        treated as a regular `VALUE_IN_TEXT_FIELD_CHANGED` event (this is the
        current behavior).

        Legitimate text edits fired by typing remain untouched and keep their
        current behavior.

        Videos comparing current vs expected behavior were added in buganizer.
        Bug: 341062852
        Change-Id: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
        Reviewed-by: David Baron <dba...@chromium.org>
        Reviewed-by: Fred Shih <ff...@chromium.org>
        Commit-Queue: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
        Reviewed-by: Devlin Cronin <rdevlin...@chromium.org>
        Reviewed-by: David Tseng <dts...@chromium.org>
        Reviewed-by: Joey Arhar <jar...@chromium.org>
        Cr-Commit-Position: refs/heads/main@{#1616967}
        Files:
        • M chrome/renderer/accessibility/read_anything/read_anything_app_model.cc
        • M content/browser/accessibility/browser_accessibility_manager_android.cc
        • M extensions/common/api/automation.webidl
        • M third_party/blink/renderer/core/html/forms/text_field_input_type.cc
        • M third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
        • M ui/accessibility/ax_enum_util.cc
        • M ui/accessibility/ax_enums.mojom
        • M ui/accessibility/ax_event_generator.cc
        • M ui/accessibility/ax_event_generator.h
        • M ui/accessibility/platform/automation/automation_api_util.cc
        • M ui/accessibility/platform/ax_event_intent_mac.mm
        • M ui/accessibility/platform/browser_accessibility_manager_auralinux.cc
        • M ui/accessibility/platform/browser_accessibility_manager_mac.mm
        • M ui/accessibility/platform/browser_accessibility_manager_win.cc
        Change size: M
        Delta: 14 files changed, 67 insertions(+), 2 deletions(-)
        Branch: refs/heads/main
        Submit Requirements:
        • requirement satisfiedCode-Review: +1 by Devlin Cronin, +1 by Fred Shih, +1 by David Tseng, +1 by David Baron, +1 by Joey Arhar
        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: Ie505aacbf63ae3fe0b12515c2914a0a4433b54cb
        Gerrit-Change-Number: 7689054
        Gerrit-PatchSet: 18
        Gerrit-Owner: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
        Gerrit-Reviewer: Carlos Marcelo Barrera Nolasco <carlos...@google.com>
        Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
        Gerrit-Reviewer: David Baron <dba...@chromium.org>
        Gerrit-Reviewer: David Tseng <dts...@chromium.org>
        Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
        Gerrit-Reviewer: Fred Shih <ff...@chromium.org>
        Gerrit-Reviewer: Joey Arhar <jar...@chromium.org>
        Gerrit-CC: (Julie)Jeongeun Kim <je_jul...@chromium.org>
        Gerrit-CC: Akihiro Ota <akihi...@chromium.org>
        Gerrit-CC: Avi Drissman <a...@chromium.org>
        Gerrit-CC: Chromium IPC Reviews <chrome-ip...@google.com>
        open
        diffy
        satisfied_requirement
        Reply all
        Reply to author
        Forward
        0 new messages