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