NEW321330
[iOS] Pinching native video controls requests fullscreen repeatedly
https://bugs.webkit.org/show_bug.cgi?id=321330
Summary [iOS] Pinching native video controls requests fullscreen repeatedly
ingram.kalina
Reported 2026-08-07 14:43:43 PDT
Steps to reproduce: 1. On iPhone, load a page containing an inline <video controls playsinline controlslist="nofullscreen"> element. 2. Place two fingers over the native controls and pinch outward past the threshold that enters fullscreen. Observed behavior: The native media controls request fullscreen repeatedly while the same pinch continues. The first request starts the fullscreen transition, while subsequent requests reach HTMLVideoElement.webkitEnterFullscreen() during the transition and raise InvalidStateError: The object is in an invalid state. Expected behavior: The native media controls should request fullscreen once per pinch gesture. The issue is in IOSInlineMediaControls._pinchGestureRecognizerStateDidChange(). Once recognizer.scale exceeds MinimumScaleToEnterFullscreen, the method invokes iOSInlineMediaControlsRecognizedPinchInGesture() for every Changed state and again for the terminal Recognized/Ended state. MediaController then calls webkitEnterFullscreen() for each invocation. Reproduced with a real two-finger gesture in the iOS 26.5 simulator. The same repeated requests occur when controlslist="nofullscreen" is removed, so controlslist is part of the original reproduction but is not the cause. The behavior is also independent of playback state and playsinline.
Attachments
testcase (255 bytes, text/html)
2026-10-15 02:28 PDT, Frédéric Wang Nélar
no flags
ingram.kalina
Comment 1 2026-08-07 14:55:59 PDT
Radar WebKit Bug Importer
Comment 2 2026-08-14 14:44:11 PDT
Frédéric Wang Nélar
Comment 3 2026-10-15 02:28:05 PDT
Created attachment 481836 [details] testcase
Frédéric Wang Nélar
Comment 4 2026-10-15 02:37:57 PDT
I uploaded a tentative testcase, but I'm not sure how to emulate the pinch in Device Hub without a trackpad.
ingram.kalina
Comment 5 2026-10-15 03:28:28 PDT
The layout test in PR 71185 lets you check the repeated fullscreen-request callback without emulating a pinch in Device Hub. The test is: LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-pinch-enters-fullscreen-once.html With the test and its expected-results file from the PR in your checkout, run from the repository root: Tools/Scripts/run-webkit-tests --ios-simulator media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-pinch-enters-fullscreen-once.html It drives the recognizer through Began, Changed, Changed, Ended, then starts a second gesture. The cumulative delegate-call counts are: Unpatched Patched First Changed 1 1 Second Changed 2 1 Ended 3 1 Changed in a new gesture 4 2 This isolates the duplicate-request behavior; it doesn't exercise the actual fullscreen transition. My end-to-end reproduction used XCUITest on the iOS 26.5 simulator. A window error listener displayed repeated “InvalidStateError: The object is in an invalid state.” messages on the diagnostic page. I haven't run your attachment yet. Entering fullscreen itself is expected—the bug is the repeated requests within one gesture.
ingram.kalina
Comment 6 2026-10-15 03:31:11 PDT
For clarity, the counts above are unpatched → patched: - First Changed: 1 → 1 - Second Changed: 2 → 1 - Ended: 3 → 1 - Changed in a new gesture: 4 → 2
Note You need to log in before you can comment on or make changes to this bug.