Title: [294959] trunk
Revision
294959
Author
drou...@apple.com
Date
2022-05-27 15:10:16 -0700 (Fri, 27 May 2022)

Log Message

[Modern Media Controls] REGRESSION(r293684) cannot pause `<video>` if `controls` are added after `"play"`
https://bugs.webkit.org/show_bug.cgi?id=240985
<rdar://problem/93822316>

Reviewed by Eric Carlson.

* Source/WebCore/Modules/modern-media-controls/media/media-controller.js:
(MediaController):
Actually check if the `media` is playing and/or has played instead of always assuming `false`.

* Source/WebCore/Modules/modern-media-controls/media/start-support.js:
(StartSupport.prototype._shouldShowStartButton):
Drive-by: It's no longer necessary to check `media.played.length` here it's part of `mediaController.hasPlayed`.

* LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play.html: Added.
* LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play-expected.txt: Added.

Canonical link: https://commits.webkit.org/251062@main

Modified Paths

Added Paths

Diff

Added: trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play-expected.txt (0 => 294959)


--- trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play-expected.txt	2022-05-27 22:10:16 UTC (rev 294959)
@@ -0,0 +1,17 @@
+Check that tapping the start button pauses the video if controls are added after it has started playing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+'play' event.
+PASS shadowRoot.querySelector('button.play-pause') became different from null
+PASS shadowRoot.querySelector('button.play-pause').getBoundingClientRect().width became different from 0
+Tapping start button...
+Waiting for pause...
+PASS media.paused became true
+Checking again...
+PASS media.paused is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play.html (0 => 294959)


--- trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play.html	                        (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/touch/ios-inline-media-controls-added-after-play.html	2022-05-27 22:10:16 UTC (rev 294959)
@@ -0,0 +1,45 @@
+<script src=""
+<script src=""
+<body>
+<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" muted playsinline autoplay></video>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Check that tapping the start button pauses the video if controls are added after it has started playing.");
+
+const media = document.querySelector("video");
+const shadowRoot = window.internals.shadowRoot(media);
+
+media.addEventListener("play", async () => {
+    debug("'play' event");
+
+    if (media.controls)
+        return;
+
+    media.controls = true;
+
+    shouldBeFalse("media.paused");
+
+    await shouldBecomeDifferent("shadowRoot.querySelector('button.play-pause')", "null");
+    await shouldBecomeDifferent("shadowRoot.querySelector('button.play-pause').getBoundingClientRect().width", "0");
+
+    debug("Tapping start button...");
+    pressOnElement(shadowRoot.querySelector("button.play-pause"));
+
+    debug("Waiting for pause...");
+    await shouldBecomeEqual("media.paused", "true");
+
+    // Wait to see if the video is still paused.
+    debug("Checking again...");
+    setTimeout(() => {
+        shouldBeTrue("media.paused");
+
+        media.remove();
+        finishJSTest();
+    });
+});
+
+</script>
+<script src=""
+</body>

Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js (294958 => 294959)


--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js	2022-05-27 22:10:00 UTC (rev 294958)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js	2022-05-27 22:10:16 UTC (rev 294959)
@@ -34,7 +34,7 @@
 
         this.fullscreenChangeEventType = media.webkitSupportsPresentationMode ? "webkitpresentationmodechanged" : "webkitfullscreenchange";
 
-        this.hasPlayed = false;
+        this.hasPlayed = !media.paused || !!media.played.length;
 
         this.container = shadowRoot.appendChild(document.createElement("div"));
 

Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js (294958 => 294959)


--- trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js	2022-05-27 22:10:00 UTC (rev 294958)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js	2022-05-27 22:10:16 UTC (rev 294959)
@@ -74,7 +74,7 @@
         if (host && host.shouldForceControlsDisplay)
             return true;
 
-        if (this.mediaController.hasPlayed || media.played.length)
+        if (this.mediaController.hasPlayed)
             return false;
 
         if (!media.paused)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to