Skip to content

Web engine must not send SemanticsAction during Frame #162472

@goderbauer

Description

@goderbauer

SemanticsActions (like pointer and key events) should only be dispatched between frames. The engine should not synchronously dispatch events while the framework is sending a semantics update to the engine.

In the strack trace below, invokeOnSemanticsAction must not be synchronously invoked from inside sendSemanticsUpdate.

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 307:3     throw_
package:flutter/src/widgets/binding.dart 1093:9                                 <fn>
package:flutter/src/widgets/binding.dart 1115:14                                [_handleBuildScheduled]
package:flutter/src/widgets/framework.dart 2942:7                               scheduleBuildFor
package:flutter/src/widgets/framework.dart 5306:5                               markNeedsBuild
package:flutter/src/widgets/framework.dart 1227:5                               setState
package:flutter/src/material/ink_well.dart 1098:5                               handleFocusHighlightModeChange
package:flutter/src/widgets/focus_manager.dart 2152:11                          notifyListeners
package:flutter/src/widgets/focus_manager.dart 2333:7                           updateMode
package:flutter/src/widgets/focus_manager.dart 2300:7                           handleSemanticsAction
package:flutter/src/semantics/binding.dart 149:9                                [_handleSemanticsActionEvent]
lib/_engine/engine/platform_dispatcher.dart 1362:5                              invoke1
lib/_engine/engine/platform_dispatcher.dart 1245:5                              invokeOnSemanticsAction
lib/_engine/engine/semantics/text_field.dart 273:34                             <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 224:27  _callDartFunctionFast1
lib/_engine/engine/dom.dart 668:8                                               DomElementExtension.focusWithoutScroll
lib/_engine/engine/text_editing/text_editing.dart 1584:22                       moveFocusToActiveDomElement
lib/_engine/engine/text_editing/text_editing.dart 1551:5                        enable
lib/_engine/engine/semantics/text_field.dart 81:11                              activate
lib/_engine/engine/semantics/text_field.dart 310:47                             update
lib/_engine/engine/semantics/semantics.dart 1783:28                             [_updateRole]
lib/_engine/engine/semantics/semantics.dart 1512:5                              updateSelf
lib/_engine/engine/semantics/semantics.dart 2592:13                             updateSemantics
lib/_engine/engine/window.dart 110:5                                            updateSemantics
package:flutter/src/rendering/view.dart 386:5                                   updateSemantics
package:flutter/src/rendering/binding.dart 255:48                               <fn>
package:flutter/src/semantics/semantics.dart 3848:22                            sendSemanticsUpdate
package:flutter/src/rendering/object.dart 1381:7                                flushSemantics
package:flutter/src/rendering/object.dart 1383:14                               flushSemantics
package:flutter/src/rendering/binding.dart 623:7                                drawFrame
package:flutter/src/widgets/binding.dart 1231:13                                drawFrame
package:flutter/src/rendering/binding.dart 482:5                                [_handlePersistentFrameCallback]
package:flutter/src/scheduler/binding.dart 1442:7                               [_invokeFrameCallback]
package:flutter/src/scheduler/binding.dart 1355:9                               handleDrawFrame
package:flutter/src/scheduler/binding.dart 1208:5                               [_handleDrawFrame]
lib/_engine/engine/platform_dispatcher.dart 1347:5                              invoke
lib/_engine/engine/platform_dispatcher.dart 301:5                               invokeOnDrawFrame
lib/_engine/engine/initialization.dart 190:36                                   <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 224:27  _callDartFunctionFast1

See also https://github.com/flutter/flutter/blob/a3fced5da1e6734a6087d246094865997cd4b083/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart#L277C43-L277C66

This is blocking #162417.

Metadata

Metadata

Assignees

Labels

P1High-priority issues at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)engineflutter/engine related. See also e: labels.platform-webWeb applications specificallyteam-webOwned by Web platform teamtriaged-webTriaged by Web platform team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions