Title: [275358] trunk
Revision
275358
Author
[email protected]
Date
2021-04-01 08:05:24 -0700 (Thu, 01 Apr 2021)

Log Message

Limit the number of buttons shown in media controls
https://bugs.webkit.org/show_bug.cgi?id=223909

Reviewed by Eric Carlson.

Source/WebCore:

When in fullscreen, it's possible to have five different buttons to the right of "Play":
 - AirPlay
 - Enter Picture in Picture
 - Audio/Languages
 - Exit Full Screen
 - More...
This turns the UI into something of an "icon soup" and should really be avoided, especially
now that `OverflowButton` allows for a single button to have multiple actions (via a native
contextmenu). This matches AVKit behavior.

Tests: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html:
       media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html:
       media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html:
       media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html:
       media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html:

* Modules/modern-media-controls/controls/inline-media-controls.js:
(InlineMediaControls.prototype.layout):
(InlineMediaControls.prototype._droppableButtons):
(InlineMediaControls.prototype._collapsableButtons): Added.
* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
(MacOSFullscreenMediaControls):
(MacOSFullscreenMediaControls.prototype.layout):
(MacOSFullscreenMediaControls.prototype._collapsableButtons): Added.
Limit the number of `visible` buttons in `rightContainer.children` by iteratively marking
`dropped = true` on buttons that are also in `_collapsableButtons` until either there are
no iterations left (`i < 0`) or the number of visible buttons is below the maximum (2 for
inline and 3 for fullscreen).

* Modules/modern-media-controls/controls/pip-button.js:
(PiPButton.prototype.get contextMenuOptions): Added.
* Modules/mediacontrols/MediaControlsHost.cpp:
(WebCore::MediaControlsHost::showMediaControlsContextMenu):
Add support for `includePictureInPicture` to the native contextmenu.

* en.lproj/Localizable.strings:

* testing/Internals.idl:
* testing/Internals.h:
* testing/Internals.cpp:
(WebCore::Internals::setMediaControlsMaximumRightContainerButtonCountOverride): Added.
* html/HTMLMediaElement.h:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::setMediaControlsMaximumRightContainerButtonCountOverride): Added.
* Modules/modern-media-controls/media/media-controller.js:
(MediaController.prototype.set maximumRightContainerButtonCountOverride): Added.
Add a way to override the default maximum right container button count for testing. This is
useful for testing the functionality of a specific button when not in the collapsed state,
allowing for tests to not have to worry about other state that may affect collapsing (e.g.
the AirPlay button is shown when there are AirPlay targets).

LayoutTests:

* media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html:
* media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls-expected.txt:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles-expected.txt:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles-expected.txt:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls-expected.txt:

* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor-expected.txt:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html: Removed.
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt: Removed.
macOS fullscreen controls don't adjust the `buttonMargin` anymore as buttons are moved into
the overflow menu instead.

* media/modern-media-controls/tracks-support/auto-text-track.html:
* media/modern-media-controls/tracks-support/click-track-in-contextmenu.html:
* media/modern-media-controls/tracks-support/hidden-tracks.html:
* media/modern-media-controls/tracks-support/off-text-track.html:
* media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button.html:
* media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html:
Override the default maximum right container button count so that the tracks button is shown.

Modified Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (275357 => 275358)


--- trunk/LayoutTests/ChangeLog	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/ChangeLog	2021-04-01 15:05:24 UTC (rev 275358)
@@ -1,3 +1,34 @@
+2021-04-01  Devin Rousso  <[email protected]>
+
+        Limit the number of buttons shown in media controls
+        https://bugs.webkit.org/show_bug.cgi?id=223909
+
+        Reviewed by Eric Carlson.
+
+        * media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html:
+        * media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls-expected.txt:
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html:
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles-expected.txt:
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html:
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles-expected.txt:
+        * media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html:
+        * media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls-expected.txt:
+
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html:
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor-expected.txt:
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html: Removed.
+        * media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt: Removed.
+        macOS fullscreen controls don't adjust the `buttonMargin` anymore as buttons are moved into
+        the overflow menu instead.
+
+        * media/modern-media-controls/tracks-support/auto-text-track.html:
+        * media/modern-media-controls/tracks-support/click-track-in-contextmenu.html:
+        * media/modern-media-controls/tracks-support/hidden-tracks.html:
+        * media/modern-media-controls/tracks-support/off-text-track.html:
+        * media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button.html:
+        * media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html:
+        Override the default maximum right container button count so that the tracks button is shown.
+
 2021-04-01  Commit Queue  <[email protected]>
 
         Unreviewed, reverting r275295.

Modified: trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls-expected.txt (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls-expected.txt	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls-expected.txt	2021-04-01 15:05:24 UTC (rev 275358)
@@ -5,10 +5,14 @@
 
 PASS ready() became true
 
-SkipForwardButton was dropped at 384.
-SkipBackButton was dropped at 355.
-AirplayButton was dropped at 326.
-TracksButton was dropped at 294.
+TracksButton was dropped at 681.
+PiPButton was dropped at 681.
+SkipForwardButton was dropped at 453.
+SkipBackButton was dropped at 424.
+MuteButton was dropped at 395.
+AirplayButton was dropped at 357.
+FullscreenButton was dropped at 325.
+OverflowButton was dropped at 294.
 
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -9,12 +9,17 @@
 window.jsTestIsAsync = true;
 
 const mediaControls = new IOSInlineMediaControls({ width: 680, height: 300 });
+mediaControls.shouldUseSingleBarLayout = true;
 
 const droppableControls = [
+    mediaControls.overflowButton,
+    mediaControls.fullscreenButton,
+    mediaControls.airplayButton,
+    mediaControls.muteButton,
+    mediaControls.skipBackButton,
     mediaControls.skipForwardButton,
-    mediaControls.skipBackButton,
-    mediaControls.airplayButton,
-    mediaControls.tracksButton
+    mediaControls.pipButton,
+    mediaControls.tracksButton,
 ];
 
 function ready()
@@ -24,11 +29,16 @@
 
 shouldBecomeEqual("ready()", "true", () => {
     debug("");
-    droppableControls.forEach(control => {
-        while (control.visible)
-            mediaControls.width--;
-        debug(`${control.constructor.name} was dropped at ${mediaControls.width + 1}.`);
-    });
+    while (droppableControls.length) {
+        for (let i = droppableControls.length - 1; i >= 0; --i) {
+            if (!droppableControls[i].visible) {
+                debug(`${droppableControls[i].constructor.name} was dropped at ${mediaControls.width + 1}.`);
+                droppableControls.splice(i, 1);
+            }
+        }
+
+        mediaControls.width--;
+    }
     debug("");
     finishJSTest();
 });

Modified: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles-expected.txt (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles-expected.txt	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles-expected.txt	2021-04-01 15:05:24 UTC (rev 275358)
@@ -8,8 +8,8 @@
 PASS centerContainer.element.getBoundingClientRect().top is 503
 PASS centerContainer.element.getBoundingClientRect().height is 44
 
-PASS Math.floor(rightContainer.element.getBoundingClientRect().width) became 131
-PASS rightContainer.element.getBoundingClientRect().left is within 0.5 of 503
+PASS Math.floor(rightContainer.element.getBoundingClientRect().width) became 123
+PASS rightContainer.element.getBoundingClientRect().left is within 0.5 of 511
 PASS rightContainer.element.getBoundingClientRect().top is 500
 PASS rightContainer.element.getBoundingClientRect().height is 44
 

Modified: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -41,8 +41,8 @@
     shouldBe("centerContainer.element.getBoundingClientRect().height", "44");
 
     debug("");
-    shouldBecomeEqual("Math.floor(rightContainer.element.getBoundingClientRect().width)", "131", () => {
-        shouldBeCloseTo("rightContainer.element.getBoundingClientRect().left", 503, 0.5);
+    shouldBecomeEqual("Math.floor(rightContainer.element.getBoundingClientRect().width)", "123", () => {
+        shouldBeCloseTo("rightContainer.element.getBoundingClientRect().left", 511, 0.5);
         shouldBe("rightContainer.element.getBoundingClientRect().top", "500");
         shouldBe("rightContainer.element.getBoundingClientRect().height", "44");
 

Modified: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles-expected.txt (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles-expected.txt	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles-expected.txt	2021-04-01 15:05:24 UTC (rev 275358)
@@ -26,17 +26,17 @@
 
 PiPButton
 PASS getComputedStyle(button.element).top became "18px"
-PASS getComputedStyle(button.element).left is "43px"
+PASS getComputedStyle(button.element).left is "36px"
 PASS getComputedStyle(button.element).height is "16px"
 
 TracksButton
 PASS getComputedStyle(button.element).top became "18px"
-PASS getComputedStyle(button.element).left is "74px"
+PASS getComputedStyle(button.element).left is "60px"
 PASS getComputedStyle(button.element).height is "16px"
 
 FullscreenButton
 PASS getComputedStyle(button.element).top became "18px"
-PASS getComputedStyle(button.element).left is "103px"
+PASS getComputedStyle(button.element).left is "55px"
 PASS getComputedStyle(button.element).height is "16px"
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -16,9 +16,9 @@
     [mediaControls.playPauseButton, 78, 9, 26],
     [mediaControls.forwardButton, 127, 14, 16],
     [mediaControls.airplayButton, 12, 18, 16],
-    [mediaControls.pipButton, 43, 18, 16],
-    [mediaControls.tracksButton, 74, 18, 16],
-    [mediaControls.fullscreenButton, 103, 18, 16],
+    [mediaControls.pipButton, 36, 18, 16],
+    [mediaControls.tracksButton, 60, 18, 16],
+    [mediaControls.fullscreenButton, 55, 18, 16],
 ];
 
 let button, x, y;

Modified: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor-expected.txt (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor-expected.txt	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor-expected.txt	2021-04-01 15:05:24 UTC (rev 275358)
@@ -32,7 +32,7 @@
 PASS mediaControls.bottomControlsBar.children[3].element.className is "buttons-container right"
 PASS mediaControls.bottomControlsBar.children[3].leftMargin is 12
 PASS mediaControls.bottomControlsBar.children[3].rightMargin is 12
-PASS mediaControls.bottomControlsBar.children[3].buttonMargin is 16
+PASS mediaControls.bottomControlsBar.children[3].buttonMargin is 24
 
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -40,7 +40,7 @@
 shouldBeEqualToString("mediaControls.bottomControlsBar.children[3].element.className", "buttons-container right");
 shouldBe("mediaControls.bottomControlsBar.children[3].leftMargin", "12");
 shouldBe("mediaControls.bottomControlsBar.children[3].rightMargin", "12");
-shouldBe("mediaControls.bottomControlsBar.children[3].buttonMargin", "16");
+shouldBe("mediaControls.bottomControlsBar.children[3].buttonMargin", "24");
 
 debug("");
 

Deleted: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt	2021-04-01 15:05:24 UTC (rev 275358)
@@ -1,18 +0,0 @@
-Testing the MacOSFullscreenMediaControls right container buttonMargin.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-4 enabled buttons
-PASS rightContainer.buttonMargin is 12
-
-3 enabled buttons
-PASS rightContainer.buttonMargin is 16
-
-2 enabled buttons
-PASS rightContainer.buttonMargin is 24
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-

Deleted: trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -1,39 +0,0 @@
-<script src=""
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<body>
-<script type="text/_javascript_">
-
-description("Testing the <code>MacOSFullscreenMediaControls</code> right container buttonMargin.");
-
-window.jsTestIsAsync = true;
-
-const mediaControls = new MacOSFullscreenMediaControls;
-const rightContainer = mediaControls.bottomControlsBar.children[3];
-
-let numberOfFrames = 0;
-scheduler.frameDidFire = function()
-{
-    numberOfFrames++;
-
-    if (numberOfFrames == 1) {
-        debug("4 enabled buttons")
-        shouldBe("rightContainer.buttonMargin", "12");
-        debug("");
-        mediaControls.tracksButton.enabled = false;
-    } else if (numberOfFrames == 2) {
-        debug("3 enabled buttons")
-        shouldBe("rightContainer.buttonMargin", "16");
-        mediaControls.pipButton.enabled = false;
-        debug("");
-    } else if (numberOfFrames == 3) {
-        debug("2 enabled buttons")
-        shouldBe("rightContainer.buttonMargin", "24");
-        debug("");
-        finishMediaControlsTest();
-    }
-};
-
-</script>
-<script src=""
-</body>

Modified: trunk/LayoutTests/media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls-expected.txt (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls-expected.txt	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls-expected.txt	2021-04-01 15:05:24 UTC (rev 275358)
@@ -5,13 +5,14 @@
 
 PASS ready() became true
 
-SkipForwardButton was dropped at 482.
-SkipBackButton was dropped at 453.
-AirplayButton was dropped at 424.
-TracksButton was dropped at 392.
-PiPButton was dropped at 392.
+TracksButton was dropped at 681.
+PiPButton was dropped at 681.
+SkipForwardButton was dropped at 447.
+SkipBackButton was dropped at 418.
+MuteButton was dropped at 389.
+AirplayButton was dropped at 351.
 FullscreenButton was dropped at 319.
-MuteButton was dropped at 319.
+OverflowButton was dropped at 288.
 
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -12,13 +12,14 @@
 mediaControls.shouldUseSingleBarLayout = true;
 
 const droppableControls = [
+    mediaControls.overflowButton,
+    mediaControls.fullscreenButton,
+    mediaControls.airplayButton,
+    mediaControls.muteButton,
+    mediaControls.skipBackButton,
     mediaControls.skipForwardButton,
-    mediaControls.skipBackButton,
-    mediaControls.airplayButton,
+    mediaControls.pipButton,
     mediaControls.tracksButton,
-    mediaControls.pipButton,
-    mediaControls.fullscreenButton,
-    mediaControls.muteButton
 ];
 
 function ready()
@@ -28,11 +29,16 @@
 
 shouldBecomeEqual("ready()", "true", () => {
     debug("");
-    droppableControls.forEach(control => {
-        while (control.visible)
-            mediaControls.width--;
-        debug(`${control.constructor.name} was dropped at ${mediaControls.width + 1}.`);
-    });
+    while (droppableControls.length) {
+        for (let i = droppableControls.length - 1; i >= 0; --i) {
+            if (!droppableControls[i].visible) {
+                debug(`${droppableControls[i].constructor.name} was dropped at ${mediaControls.width + 1}.`);
+                droppableControls.splice(i, 1);
+            }
+        }
+
+        mediaControls.width--;
+    }
     debug("");
     finishJSTest();
 });

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-support/auto-text-track.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/auto-text-track.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/auto-text-track.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -3,7 +3,7 @@
 <script src=""
 <script src=""
 <body>
-<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" autoplay controls muted playsinline></video>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" autoplay controls muted playsinline></video>
 <script type="text/_javascript_">
 
 window.jsTestIsAsync = true;
@@ -13,6 +13,8 @@
 const media = document.querySelector("video");
 const shadowRoot = window.internals.shadowRoot(media);
 
+window.internals.setMediaControlsMaximumRightContainerButtonCountOverride(media, 100); // A finite value larger than anything likely.
+
 let checkedItems = null;
 
 media.addEventListener("play", () => {

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-support/click-track-in-contextmenu.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/click-track-in-contextmenu.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/click-track-in-contextmenu.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -3,7 +3,7 @@
 <script src=""
 <script src=""
 <body>
-<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" controls autoplay muted playsinline></video>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" controls autoplay muted playsinline></video>
 <script type="text/_javascript_">
 
 window.jsTestIsAsync = true;
@@ -13,6 +13,8 @@
 const media = document.querySelector("video");
 const shadowRoot = window.internals.shadowRoot(media);
 
+window.internals.setMediaControlsMaximumRightContainerButtonCountOverride(media, 100); // A finite value larger than anything likely.
+
 let selectedTrack = null;
 
 media.addEventListener("play", () => {

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-support/hidden-tracks.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/hidden-tracks.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/hidden-tracks.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -3,7 +3,7 @@
 <script src=""
 <script src=""
 <body>
-<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" controls autoplay muted playsinline></video>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" controls autoplay muted playsinline></video>
 <script type="text/_javascript_">
 
 window.jsTestIsAsync = true;
@@ -13,6 +13,8 @@
 const media = document.querySelector("video");
 const shadowRoot = window.internals.shadowRoot(media);
 
+window.internals.setMediaControlsMaximumRightContainerButtonCountOverride(media, 100); // A finite value larger than anything likely.
+
 let checkedItems = null;
 
 media.addEventListener("play", () => {

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-support/off-text-track.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/off-text-track.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/off-text-track.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -3,7 +3,7 @@
 <script src=""
 <script src=""
 <body>
-<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" autoplay controls muted playsinline></video>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" autoplay controls muted playsinline></video>
 <script type="text/_javascript_">
 
 window.jsTestIsAsync = true;
@@ -13,6 +13,8 @@
 const media = document.querySelector("video");
 const shadowRoot = window.internals.shadowRoot(media);
 
+window.internals.setMediaControlsMaximumRightContainerButtonCountOverride(media, 100); // A finite value larger than anything likely.
+
 let checkedItems = null;
 
 media.addEventListener("play", () => {

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -3,7 +3,7 @@
 <script src=""
 <script src=""
 <body>
-<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" autoplay controls muted playsinline></video>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" autoplay controls muted playsinline></video>
 <script type="text/_javascript_">
 
 window.jsTestIsAsync = true;
@@ -13,6 +13,8 @@
 const media = document.querySelector("video");
 const shadowRoot = window.internals.shadowRoot(media);
 
+window.internals.setMediaControlsMaximumRightContainerButtonCountOverride(media, 100); // A finite value larger than anything likely.
+
 media.addEventListener("play", () => {
     media.pause();
 

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html (275357 => 275358)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html	2021-04-01 15:05:24 UTC (rev 275358)
@@ -3,7 +3,7 @@
 <script src=""
 <script src=""
 <body>
-<video src="" style="position: absolute; left: 0; top: 0; width: 400px;" autoplay controls muted playsinline></video>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" autoplay controls muted playsinline></video>
 <script type="text/_javascript_">
 
 window.jsTestIsAsync = true;
@@ -14,6 +14,8 @@
 const media = document.querySelector("video");
 const shadowRoot = window.internals.shadowRoot(media);
 
+window.internals.setMediaControlsMaximumRightContainerButtonCountOverride(media, 100); // A finite value larger than anything likely.
+
 let contextmenu = null;
 
 function subtitleTrack(language) {

Modified: trunk/Source/WebCore/ChangeLog (275357 => 275358)


--- trunk/Source/WebCore/ChangeLog	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/ChangeLog	2021-04-01 15:05:24 UTC (rev 275358)
@@ -1,3 +1,61 @@
+2021-04-01  Devin Rousso  <[email protected]>
+
+        Limit the number of buttons shown in media controls
+        https://bugs.webkit.org/show_bug.cgi?id=223909
+
+        Reviewed by Eric Carlson.
+
+        When in fullscreen, it's possible to have five different buttons to the right of "Play":
+         - AirPlay
+         - Enter Picture in Picture
+         - Audio/Languages
+         - Exit Full Screen
+         - More...
+        This turns the UI into something of an "icon soup" and should really be avoided, especially
+        now that `OverflowButton` allows for a single button to have multiple actions (via a native
+        contextmenu). This matches AVKit behavior.
+
+        Tests: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-dropping-controls.html:
+               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-containers-styles.html:
+               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-buttons-styles.html:
+               media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html:
+               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls.html:
+
+        * Modules/modern-media-controls/controls/inline-media-controls.js:
+        (InlineMediaControls.prototype.layout):
+        (InlineMediaControls.prototype._droppableButtons):
+        (InlineMediaControls.prototype._collapsableButtons): Added.
+        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
+        (MacOSFullscreenMediaControls):
+        (MacOSFullscreenMediaControls.prototype.layout):
+        (MacOSFullscreenMediaControls.prototype._collapsableButtons): Added.
+        Limit the number of `visible` buttons in `rightContainer.children` by iteratively marking
+        `dropped = true` on buttons that are also in `_collapsableButtons` until either there are
+        no iterations left (`i < 0`) or the number of visible buttons is below the maximum (2 for
+        inline and 3 for fullscreen).
+
+        * Modules/modern-media-controls/controls/pip-button.js:
+        (PiPButton.prototype.get contextMenuOptions): Added.
+        * Modules/mediacontrols/MediaControlsHost.cpp:
+        (WebCore::MediaControlsHost::showMediaControlsContextMenu):
+        Add support for `includePictureInPicture` to the native contextmenu.
+
+        * en.lproj/Localizable.strings:
+
+        * testing/Internals.idl:
+        * testing/Internals.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::setMediaControlsMaximumRightContainerButtonCountOverride): Added.
+        * html/HTMLMediaElement.h:
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::setMediaControlsMaximumRightContainerButtonCountOverride): Added.
+        * Modules/modern-media-controls/media/media-controller.js:
+        (MediaController.prototype.set maximumRightContainerButtonCountOverride): Added.
+        Add a way to override the default maximum right container button count for testing. This is
+        useful for testing the functionality of a specific button when not in the collapsed state,
+        allowing for tests to not have to worry about other state that may affect collapsing (e.g.
+        the AirPlay button is shown when there are AirPlay targets).
+
 2021-04-01  Zalan Bujtas  <[email protected]>
 
         Cleanup shouldComputeLogicalWidthFromAspectRatio and shouldComputeLogicalWidthFromAspectRatioAndInsets

Modified: trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp (275357 => 275358)


--- trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp	2021-04-01 15:05:24 UTC (rev 275358)
@@ -45,6 +45,7 @@
 #include "FloatRect.h"
 #include "HTMLElement.h"
 #include "HTMLMediaElement.h"
+#include "HTMLVideoElement.h"
 #include "LocalizedStrings.h"
 #include "Logging.h"
 #include "MediaControlTextTrackContainerElement.h"
@@ -55,6 +56,7 @@
 #include "RenderTheme.h"
 #include "TextTrack.h"
 #include "TextTrackList.h"
+#include "UserGestureIndicator.h"
 #include "VoidCallback.h"
 #include <_javascript_Core/JSCJSValueInlines.h>
 #include <wtf/CompletionHandler.h>
@@ -500,7 +502,18 @@
     constexpr auto invalidMenuItemIdentifier = ContextMenuItemTagNoAction;
 #endif
 
-    using MenuData = Variant<RefPtr<AudioTrack>, RefPtr<TextTrack> MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData>;
+#if ENABLE(VIDEO_PRESENTATION_MODE)
+    enum class PictureInPictureTag { IncludePictureInPicture };
+#endif // ENABLE(VIDEO_PRESENTATION_MODE)
+
+    using MenuData = Variant<
+#if ENABLE(VIDEO_PRESENTATION_MODE)
+        PictureInPictureTag,
+#endif // ENABLE(VIDEO_PRESENTATION_MODE)
+        RefPtr<AudioTrack>,
+        RefPtr<TextTrack>
+        MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData
+    >;
     HashMap<MenuItemIdentifier, MenuData> idMap;
 
     auto createSubmenu = [] (const String& title, const String& icon, Vector<MenuItem>&& children) -> MenuItem {
@@ -512,13 +525,14 @@
 #endif
     };
 
-    auto createMenuItem = [&] (MenuData data, const String& title, bool checked = false) -> MenuItem {
+    auto createMenuItem = [&] (MenuData data, const String& title, bool checked = false, const String& icon = nullString()) -> MenuItem {
         auto id = idMap.size() + 1;
         idMap.add(id, data);
 
 #if USE(UICONTEXTMENU)
-        return { id, title, /* icon */ nullString(), checked, /* children */ { } };
+        return { id, title, icon, checked, /* children */ { } };
 #elif ENABLE(CONTEXT_MENUS) && USE(ACCESSIBILITY_CONTEXT_MENUS)
+        UNUSED_PARAM(icon);
         return { CheckableActionType, static_cast<ContextMenuAction>(ContextMenuItemBaseCustomTag + id), title, /* enabled */ true, checked };
 #endif
     };
@@ -525,6 +539,14 @@
 
     Vector<MenuItem> items;
 
+#if ENABLE(VIDEO_PRESENTATION_MODE)
+    if (optionsJSONObject->getBoolean("includePictureInPicture"_s).valueOr(false)) {
+        ASSERT(is<HTMLVideoElement>(mediaElement));
+        ASSERT(downcast<HTMLVideoElement>(mediaElement).webkitSupportsPresentationMode(HTMLVideoElement::VideoPresentationMode::PictureInPicture));
+        items.append(createMenuItem(PictureInPictureTag::IncludePictureInPicture, WEB_UI_STRING_KEY("Picture in Picture", "Picture in Picture (Media Controls Menu)", "Picture in Picture media controls context menu title"), false, "pip.enter"_s));
+    }
+#endif // ENABLE(VIDEO_PRESENTATION_MODE)
+
     if (optionsJSONObject->getBoolean("includeLanguages"_s).valueOr(false)) {
         if (auto* audioTracks = mediaElement.audioTracks(); audioTracks && audioTracks->length() > 1) {
             Vector<MenuItem> languageMenuItems;
@@ -601,8 +623,16 @@
 
         auto& mediaElement = *weakMediaElement;
 
+        UserGestureIndicator gestureIndicator(ProcessingUserGesture, &mediaElement.document());
+
         auto selectedItem = idMap.get(selectedItemID);
         WTF::switchOn(selectedItem,
+#if ENABLE(VIDEO_PRESENTATION_MODE)
+            [&] (PictureInPictureTag) {
+                // Media controls are not shown when in PiP so we can assume that we're not in PiP.
+                downcast<HTMLVideoElement>(mediaElement).webkitSetPresentationMode(HTMLVideoElement::VideoPresentationMode::PictureInPicture);
+            },
+#endif // ENABLE(VIDEO_PRESENTATION_MODE)
             [&] (RefPtr<AudioTrack>& selectedAudioTrack) {
                 for (auto& track : idMap.values()) {
                     if (auto* audioTrack = WTF::get_if<RefPtr<AudioTrack>>(track))

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/inline-media-controls.js (275357 => 275358)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/inline-media-controls.js	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/inline-media-controls.js	2021-04-01 15:05:24 UTC (rev 275358)
@@ -184,6 +184,18 @@
                 this.overflowButton.addContextMenuOptions(button.contextMenuOptions);
         }
 
+        let collapsableButtons = this._collapsableButtons();
+        let shownRightContainerButtons = this.rightContainer.children.filter(button => button.enabled && !button.dropped);
+        let maximumRightContainerButtonCount = this.maximumRightContainerButtonCountOverride ?? 2; // Allow AirPlay and overflow if all buttons are shown.
+        for (let i = shownRightContainerButtons.length - 1; i >= 0 && shownRightContainerButtons.length > maximumRightContainerButtonCount; --i) {
+            let button = shownRightContainerButtons[i];
+            if (!collapsableButtons.has(button))
+                continue;
+
+            button.dropped = true;
+            this.overflowButton.addContextMenuOptions(button.contextMenuOptions);
+        }
+
         // Update layouts once more.
         this.leftContainer.layout();
         this.rightContainer.layout();
@@ -269,13 +281,25 @@
 
     _droppableButtons()
     {
+        let buttons = this._collapsableButtons();
+        buttons.add(this.skipForwardButton);
+        buttons.add(this.skipBackButton);
+        if (this._shouldUseSingleBarLayout || this.preferredMuteButtonStyle === Button.Styles.Bar)
+            buttons.add(this.muteButton);
+        buttons.add(this.airplayButton);
         if (this._shouldUseSingleBarLayout)
-            return [this.skipForwardButton, this.skipBackButton, this.airplayButton, this.tracksButton, this.pipButton, this.muteButton, this.fullscreenButton, this.overflowButton];
+            buttons.add(this.fullscreenButton);
+        buttons.add(this.overflowButton);
+        return buttons;
+    }
 
-        const buttons = [this.skipForwardButton, this.skipBackButton, this.airplayButton, this.tracksButton];
-        if (this.preferredMuteButtonStyle === Button.Styles.Bar)
-            buttons.push(this.muteButton);
-        buttons.push(this.overflowButton);
+    _collapsableButtons()
+    {
+        let buttons = new Set([
+            this.tracksButton,
+        ]);
+        if (this._shouldUseSingleBarLayout)
+            buttons.add(this.pipButton);
         return buttons;
     }
 

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js (275357 => 275358)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js	2021-04-01 15:05:24 UTC (rev 275358)
@@ -23,9 +23,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-const ButtonMarginForThreeButtonsOrLess = 24;
-const ButtonMarginForFourButtons = 16;
-const ButtonMarginForFiveButtons = 12;
 const FullscreenTimeControlWidth = 448;
 
 class MacOSFullscreenMediaControls extends MediaControls
@@ -68,7 +65,8 @@
             children: [this.airplayButton, this.pipButton, this.tracksButton, this.fullscreenButton, this.overflowButton],
             cssClassName: "right",
             leftMargin: 12,
-            rightMargin: 12
+            rightMargin: 12,
+            buttonMargin: 24
         });
 
         this.bottomControlsBar.children = [this._leftContainer, this._centerContainer, this._rightContainer];
@@ -111,19 +109,24 @@
         if (!this._rightContainer)
             return;
 
-        const numberOfEnabledButtons = this._rightContainer.children.filter(button => button.enabled).length;
+        this._rightContainer.children.forEach(button => delete button.dropped)
+        this.overflowButton.clearContextMenuOptions();
 
-        let buttonMargin = ButtonMarginForFiveButtons;
-        if (numberOfEnabledButtons === 4)
-            buttonMargin = ButtonMarginForFourButtons;
-        else if (numberOfEnabledButtons <= 3)
-            buttonMargin = ButtonMarginForThreeButtonsOrLess;
-
-        this._rightContainer.buttonMargin = buttonMargin;
-
         this._leftContainer.visible = this.muteButton.enabled;
         this._leftContainer.children = this._volumeControlsForCurrentDirection();
 
+        let collapsableButtons = this._collapsableButtons();
+        let shownRightContainerButtons = this._rightContainer.children.filter(button => button.enabled && !button.dropped);
+        let maximumRightContainerButtonCount = this.maximumRightContainerButtonCountOverride ?? 3; // Allow AirPlay, Exit Fullscreen, and overflow if all buttons are shown.
+        for (let i = shownRightContainerButtons.length - 1; i >= 0 && shownRightContainerButtons.length > maximumRightContainerButtonCount; --i) {
+            let button = shownRightContainerButtons[i];
+            if (!collapsableButtons.has(button))
+                continue;
+
+            button.dropped = true;
+            this.overflowButton.addContextMenuOptions(button.contextMenuOptions);
+        }
+
         this._leftContainer.layout();
         this._centerContainer.layout();
         this._rightContainer.layout();
@@ -147,6 +150,14 @@
         return this.usesLTRUserInterfaceLayoutDirection ? [this.muteButton, this.volumeSlider] : [this.volumeSlider, this.muteButton];
     }
 
+    _collapsableButtons()
+    {
+        return new Set([
+            this.tracksButton,
+            this.pipButton,
+        ]);
+    }
+
     _handleMousedown(event)
     {
         // We don't allow dragging when the interaction is initiated on an interactive element. 

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/pip-button.js (275357 => 275358)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/pip-button.js	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/pip-button.js	2021-04-01 15:05:24 UTC (rev 275358)
@@ -35,4 +35,13 @@
         });
     }
 
+    // Public
+
+    get contextMenuOptions()
+    {
+        return {
+            includePictureInPicture: true,
+        };
+    }
+
 }

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


--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js	2021-04-01 15:05:24 UTC (rev 275358)
@@ -373,4 +373,11 @@
         this.controls.visible = shouldControlsBeAvailable;
     }
 
+    // Testing
+
+    set maximumRightContainerButtonCountOverride(count)
+    {
+        this.controls.maximumRightContainerButtonCountOverride = count;
+    }
+
 }

Modified: trunk/Source/WebCore/en.lproj/Localizable.strings (275357 => 275358)


--- trunk/Source/WebCore/en.lproj/Localizable.strings	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/en.lproj/Localizable.strings	2021-04-01 15:05:24 UTC (rev 275358)
@@ -661,6 +661,9 @@
 /* File Upload alert sheet button string for choosing an existing media item from the Photo Library */
 "Photo Library (file upload action sheet)" = "Photo Library";
 
+/* Picture in Picture media controls context menu title */
+"Picture in Picture (Media Controls Menu)" = "Picture in Picture";
+
 /* Media Play context menu item */
 "Play" = "Play";
 

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (275357 => 275358)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2021-04-01 15:05:24 UTC (rev 275358)
@@ -7388,6 +7388,11 @@
     return status;
 }
 
+void HTMLMediaElement::setMediaControlsMaximumRightContainerButtonCountOverride(size_t count)
+{
+    setControllerJSProperty("maximumRightContainerButtonCountOverride", JSC::jsNumber(count));
+}
+
 unsigned long long HTMLMediaElement::fileSize() const
 {
     if (m_player)

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (275357 => 275358)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2021-04-01 15:05:24 UTC (rev 275358)
@@ -494,6 +494,7 @@
     void pageScaleFactorChanged();
     void userInterfaceLayoutDirectionChanged();
     WEBCORE_EXPORT String getCurrentMediaControlsStatus();
+    WEBCORE_EXPORT void setMediaControlsMaximumRightContainerButtonCountOverride(size_t);
     MediaControlsHost* mediaControlsHost() { return m_mediaControlsHost.get(); }
 
     bool isDisablingSleep() const { return m_sleepDisabler.get(); }

Modified: trunk/Source/WebCore/testing/Internals.cpp (275357 => 275358)


--- trunk/Source/WebCore/testing/Internals.cpp	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/testing/Internals.cpp	2021-04-01 15:05:24 UTC (rev 275358)
@@ -4764,16 +4764,20 @@
     SystemSoundManager::singleton().systemBeep();
 }
 
+#if ENABLE(VIDEO)
+
 String Internals::getCurrentMediaControlsStatusForElement(HTMLMediaElement& mediaElement)
 {
-#if ENABLE(VIDEO)
     return mediaElement.getCurrentMediaControlsStatus();
-#else
-    UNUSED_PARAM(mediaElement);
-    return { };
-#endif
 }
 
+void Internals::setMediaControlsMaximumRightContainerButtonCountOverride(HTMLMediaElement& mediaElement, size_t count)
+{
+    mediaElement.setMediaControlsMaximumRightContainerButtonCountOverride(count);
+}
+
+#endif // ENABLE(VIDEO)
+
 #if !PLATFORM(COCOA)
 
 String Internals::userVisibleString(const DOMURL& url)

Modified: trunk/Source/WebCore/testing/Internals.h (275357 => 275358)


--- trunk/Source/WebCore/testing/Internals.h	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/testing/Internals.h	2021-04-01 15:05:24 UTC (rev 275358)
@@ -728,7 +728,10 @@
 
     ExceptionOr<String> pathStringWithShrinkWrappedRects(const Vector<double>& rectComponents, double radius);
 
+#if ENABLE(VIDEO)
     String getCurrentMediaControlsStatusForElement(HTMLMediaElement&);
+    void setMediaControlsMaximumRightContainerButtonCountOverride(HTMLMediaElement&, size_t);
+#endif // ENABLE(VIDEO)
 
     String userVisibleString(const DOMURL&);
     void setShowAllPlugins(bool);

Modified: trunk/Source/WebCore/testing/Internals.idl (275357 => 275358)


--- trunk/Source/WebCore/testing/Internals.idl	2021-04-01 14:47:52 UTC (rev 275357)
+++ trunk/Source/WebCore/testing/Internals.idl	2021-04-01 15:05:24 UTC (rev 275358)
@@ -763,6 +763,7 @@
     DOMString pathStringWithShrinkWrappedRects(sequence<double> rectComponents, double radius);
 
     [Conditional=VIDEO] DOMString getCurrentMediaControlsStatusForElement(HTMLMediaElement element);
+    [Conditional=VIDEO] undefined setMediaControlsMaximumRightContainerButtonCountOverride(HTMLMediaElement element, unsigned long count);
 
     DOMString userVisibleString(DOMURL url);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to