diff --git a/lib/web_ui/lib/src/engine/pointer_binding.dart b/lib/web_ui/lib/src/engine/pointer_binding.dart index c3ba7524a440d..af024173ebfa1 100644 --- a/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -690,6 +690,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { } }, useCapture: false, checkModifiers: false); + // TODO(dit): This must happen in the glassPane, https://github.com/flutter/flutter/issues/116561 _addPointerEventListener(domWindow, 'pointerup', (DomPointerEvent event) { final int device = _getPointerId(event); if (_hasSanitizer(device)) { @@ -703,6 +704,8 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { } }); + // TODO(dit): Synthesize a "cancel" event when 'pointerup' happens outside of the glassPane, https://github.com/flutter/flutter/issues/116561 + // A browser fires cancel event if it concludes the pointer will no longer // be able to generate events (example: device is deactivated) _addPointerEventListener(glassPaneElement, 'pointercancel', (DomPointerEvent event) { @@ -1039,6 +1042,7 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { } }, useCapture: false); + // TODO(dit): This must happen in the glassPane, https://github.com/flutter/flutter/issues/116561 _addMouseEventListener(domWindow, 'mouseup', (DomMouseEvent event) { final List pointerData = []; final _SanitizedDetails? sanitizedDetails = _sanitizer.sanitizeUpEvent(buttons: event.buttons?.toInt()); diff --git a/lib/web_ui/test/engine/pointer_binding_test.dart b/lib/web_ui/test/engine/pointer_binding_test.dart index 3c2c4b225c6ce..3ffcd33a350c3 100644 --- a/lib/web_ui/test/engine/pointer_binding_test.dart +++ b/lib/web_ui/test/engine/pointer_binding_test.dart @@ -23,13 +23,15 @@ typedef _ContextTestBody = void Function(T); void _testEach( Iterable contexts, String description, - _ContextTestBody body, + _ContextTestBody body, { + Object? skip, + } ) { for (final T context in contexts) { if (context.isSupported) { test('${context.name} $description', () { body(context); - }); + }, skip: skip); } } } @@ -867,6 +869,7 @@ void testMain() { semanticsPlaceholder.remove(); }, + skip: isFirefox, // https://bugzilla.mozilla.org/show_bug.cgi?id=1804190 ); // BUTTONED ADAPTERS @@ -2263,7 +2266,7 @@ void testMain() { packets.clear(); // Release outside the glasspane. - domWindow.dispatchEvent(context.primaryUp( + glassPane.dispatchEvent(context.primaryUp( clientX: 1000.0, clientY: 2000.0, )); @@ -3328,6 +3331,7 @@ class _PointerEventContext extends _BasicEventContext String? pointerType, }) { return createDomPointerEvent('pointerup', { + 'bubbles': true, 'pointerId': pointer, 'button': button, 'buttons': buttons,