Diff
Modified: trunk/LayoutTests/ChangeLog (278617 => 278618)
--- trunk/LayoutTests/ChangeLog 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/LayoutTests/ChangeLog 2021-06-08 17:27:33 UTC (rev 278618)
@@ -1,3 +1,21 @@
+2021-06-08 Devin Rousso <[email protected]>
+
+ [Modern Media Controls] upstream new features
+ https://bugs.webkit.org/show_bug.cgi?id=226736
+ <rdar://problem/78957464>
+
+ Reviewed by Eric Carlson.
+
+ * media/modern-media-controls/overflow-button/overflow-button.html: Added.
+ * media/modern-media-controls/overflow-button/overflow-button-expected.txt: Added.
+ * media/modern-media-controls/overflow-support/chapters.html: Added.
+ * media/modern-media-controls/overflow-support/chapters-expected.txt: Added.
+ * media/modern-media-controls/overflow-support/playback-speed.html: Added.
+ * media/modern-media-controls/overflow-support/playback-speed-expected.txt: Added.
+
+ * TestExpectations:
+ * platform/mac-wk2/TestExpectations:
+
2021-06-08 Antoine Quint <[email protected]>
REGRESSION (r256095): Adding a border-radius, border, or box-shadow breaks animations from scale(0)
Modified: trunk/LayoutTests/TestExpectations (278617 => 278618)
--- trunk/LayoutTests/TestExpectations 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/LayoutTests/TestExpectations 2021-06-08 17:27:33 UTC (rev 278618)
@@ -65,6 +65,7 @@
fast/text/mac [ Skip ]
scrollingcoordinator [ Skip ]
media/ios [ Skip ]
+media/modern-media-controls/overflow-support [ Skip ]
media/modern-media-controls/tracks-support [ Skip ]
fast/text-autosizing [ Skip ]
fast/css/variables/env/ios [ Skip ]
Added: trunk/LayoutTests/media/modern-media-controls/overflow-button/overflow-button-expected.txt (0 => 278618)
--- trunk/LayoutTests/media/modern-media-controls/overflow-button/overflow-button-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/overflow-button/overflow-button-expected.txt 2021-06-08 17:27:33 UTC (rev 278618)
@@ -0,0 +1,14 @@
+Testing the OverflowButton class.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS overflowButton.element.localName is "button"
+PASS overflowButton.element.classList.contains("overflow") is true
+PASS overflowButton.iconName is Icons.Overflow
+PASS overflowButton.image.element.style.webkitMaskImage.includes("macOS/Overflow.svg") became true
+PASS iOSOverflowButton.image.element.style.webkitMaskImage.includes("iOS/Overflow.svg") became true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/overflow-button/overflow-button.html (0 => 278618)
--- trunk/LayoutTests/media/modern-media-controls/overflow-button/overflow-button.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/overflow-button/overflow-button.html 2021-06-08 17:27:33 UTC (rev 278618)
@@ -0,0 +1,25 @@
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>OverflowButton</code> class.");
+
+const overflowButton = new OverflowButton({ layoutTraits: LayoutTraits.macOS });
+
+shouldBeEqualToString("overflowButton.element.localName", "button");
+shouldBeTrue('overflowButton.element.classList.contains("overflow")');
+shouldBe("overflowButton.iconName", "Icons.Overflow");
+
+const iOSOverflowButton = new OverflowButton({ layoutTraits: LayoutTraits.iOS });
+
+shouldBecomeEqual('overflowButton.image.element.style.webkitMaskImage.includes("macOS/Overflow.svg")', "true", () => {
+ shouldBecomeEqual('iOSOverflowButton.image.element.style.webkitMaskImage.includes("iOS/Overflow.svg")', "true", finishJSTest);
+});
+
+</script>
+<script src=""
+</body>
Added: trunk/LayoutTests/media/modern-media-controls/overflow-support/chapters-expected.txt (0 => 278618)
--- trunk/LayoutTests/media/modern-media-controls/overflow-support/chapters-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/overflow-support/chapters-expected.txt 2021-06-08 17:27:33 UTC (rev 278618)
@@ -0,0 +1,14 @@
+Testing the OverflowSupport behavior for Playback Speed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS shadowRoot.querySelector('button.overflow') became different from null
+PASS shadowRoot.querySelector('button.overflow').getBoundingClientRect().width became different from 0
+Tapping overflow button...
+Selecting first chapter cue...
+PASS media.currentTime is >= 5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/overflow-support/chapters.html (0 => 278618)
--- trunk/LayoutTests/media/modern-media-controls/overflow-support/chapters.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/overflow-support/chapters.html 2021-06-08 17:27:33 UTC (rev 278618)
@@ -0,0 +1,46 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+<meta name="viewport" content="width=device-width">
+<script src=""
+<script src=""
+<script src=""
+<body>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" controls autoplay muted playsinline>
+ <track src="" kind="chapters">
+</video>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>OverflowSupport</code> behavior for Playback Speed.");
+
+const media = document.querySelector("video");
+const shadowRoot = window.internals.shadowRoot(media);
+
+window.internals.setMediaControlsHidePlaybackRates(media, true);
+
+let contextmenu = null;
+
+media.addEventListener("play", function() {
+ media.pause();
+
+ shouldBecomeDifferent("shadowRoot.querySelector('button.overflow')", "null", () => {
+ shouldBecomeDifferent("shadowRoot.querySelector('button.overflow').getBoundingClientRect().width", "0", async () => {
+ debug("Tapping overflow button...");
+ await pressOnElement(shadowRoot.querySelector("button.overflow"));
+ contextmenu = await getTracksContextMenu();
+
+ debug("Selecting first chapter cue...");
+ await UIHelper.chooseMenuAction("ipsum");
+ await UIHelper.waitForContextMenuToHide();
+
+ shouldBeGreaterThanOrEqual("media.currentTime", "5");
+
+ media.remove();
+ finishJSTest();
+ });
+ });
+});
+
+</script>
+<script src=""
+</body>
Added: trunk/LayoutTests/media/modern-media-controls/overflow-support/playback-speed-expected.txt (0 => 278618)
--- trunk/LayoutTests/media/modern-media-controls/overflow-support/playback-speed-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/overflow-support/playback-speed-expected.txt 2021-06-08 17:27:33 UTC (rev 278618)
@@ -0,0 +1,23 @@
+Testing the OverflowSupport behavior for Playback Speed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS shadowRoot.querySelector('button.overflow') became different from null
+PASS shadowRoot.querySelector('button.overflow').getBoundingClientRect().width became different from 0
+Tapping overflow button...
+PASS checkedItems.length is 1
+PASS checkedItems[0].title is "1×"
+Changing playback speed via _javascript_...
+Tapping overflow button...
+PASS checkedItems.length is 1
+PASS checkedItems[0].title is "2×"
+Selecting '1.5×' playback speed...
+PASS media.playbackRate is 1.5
+Tapping overflow button...
+PASS checkedItems.length is 1
+PASS checkedItems[0].title is "1.5×"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/overflow-support/playback-speed.html (0 => 278618)
--- trunk/LayoutTests/media/modern-media-controls/overflow-support/playback-speed.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/overflow-support/playback-speed.html 2021-06-08 17:27:33 UTC (rev 278618)
@@ -0,0 +1,66 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+<meta name="viewport" content="width=device-width">
+<script src=""
+<script src=""
+<script src=""
+<body>
+<video src="" style="position: absolute; left: 0; top: 0; width: 600px;" controls autoplay muted playsinline></video>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the <code>OverflowSupport</code> behavior for Playback Speed.");
+
+const multiplicationSign = "\u00d7";
+
+const media = document.querySelector("video");
+const shadowRoot = window.internals.shadowRoot(media);
+
+let contextmenu = null;
+let checkedItems = null;
+
+media.addEventListener("play", function() {
+ media.pause();
+
+ shouldBecomeDifferent("shadowRoot.querySelector('button.overflow')", "null", () => {
+ shouldBecomeDifferent("shadowRoot.querySelector('button.overflow').getBoundingClientRect().width", "0", async () => {
+ debug("Tapping overflow button...");
+ await pressOnElement(shadowRoot.querySelector("button.overflow"));
+ contextmenu = await getTracksContextMenu();
+ checkedItems = contextmenu[0].children.filter((item) => item.checked);
+ shouldBe("checkedItems.length", "1");
+ shouldBeEqualToString("checkedItems[0].title", `1${multiplicationSign}`);
+ await UIHelper.waitForContextMenuToHide();
+
+ debug("Changing playback speed via _javascript_...");
+ media.playbackRate = 2.0;
+
+ debug("Tapping overflow button...");
+ await pressOnElement(shadowRoot.querySelector("button.overflow"));
+ contextmenu = await getTracksContextMenu();
+ checkedItems = contextmenu[0].children.filter((item) => item.checked);
+ shouldBe("checkedItems.length", "1");
+ shouldBeEqualToString("checkedItems[0].title", `2${multiplicationSign}`);
+
+ debug(`Selecting '1.5${multiplicationSign}' playback speed...`);
+ await UIHelper.chooseMenuAction(`1.5${multiplicationSign}`);
+ await UIHelper.waitForContextMenuToHide();
+
+ shouldBe("media.playbackRate", "1.5");
+
+ debug("Tapping overflow button...");
+ await pressOnElement(shadowRoot.querySelector("button.overflow"));
+ contextmenu = await getTracksContextMenu();
+ checkedItems = contextmenu[0].children.filter((item) => item.checked);
+ shouldBe("checkedItems.length", "1");
+ shouldBeEqualToString("checkedItems[0].title", `1.5${multiplicationSign}`);
+
+ media.remove();
+ finishJSTest();
+ });
+ });
+});
+
+</script>
+<script src=""
+</body>
Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (278617 => 278618)
--- trunk/LayoutTests/platform/mac-wk2/TestExpectations 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations 2021-06-08 17:27:33 UTC (rev 278618)
@@ -19,6 +19,7 @@
fast/visual-viewport/tiled-drawing [ Pass ]
fast/web-share [ Pass ]
imported/w3c/web-platform-tests/web-share [ Pass ]
+media/modern-media-controls/overflow-support [ Pass ]
media/modern-media-controls/tracks-support [ Pass ]
scrollingcoordinator [ Pass ]
scrollingcoordinator/ios [ Skip ]
Modified: trunk/Source/WTF/ChangeLog (278617 => 278618)
--- trunk/Source/WTF/ChangeLog 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WTF/ChangeLog 2021-06-08 17:27:33 UTC (rev 278618)
@@ -1,3 +1,17 @@
+2021-06-08 Devin Rousso <[email protected]>
+
+ [Modern Media Controls] upstream new features
+ https://bugs.webkit.org/show_bug.cgi?id=226736
+ <rdar://problem/78957464>
+
+ Reviewed by Eric Carlson.
+
+ - bring the "Audio"/"Languages" tracks menu to iOS
+ - add a new "Playback Speed" menu on iOS and macOS in the overflow menu
+ - add support for showing the most relevant `<track kind="chapters">` in the overflow menu
+
+ * wtf/PlatformEnableCocoa.h:
+
2021-06-08 Sam Weinig <[email protected]>
Add copy of std::span so that we can use it pre-moving to c++20
Modified: trunk/Source/WTF/wtf/PlatformEnableCocoa.h (278617 => 278618)
--- trunk/Source/WTF/wtf/PlatformEnableCocoa.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WTF/wtf/PlatformEnableCocoa.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -321,7 +321,7 @@
#define ENABLE_MEDIA_CONTROLS_SCRIPT 1
#endif
-#if !defined(ENABLE_MEDIA_CONTROLS_CONTEXT_MENUS) && PLATFORM(MAC)
+#if !defined(ENABLE_MEDIA_CONTROLS_CONTEXT_MENUS) && (PLATFORM(MAC) || ((PLATFORM(IOS) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 150000))
#define ENABLE_MEDIA_CONTROLS_CONTEXT_MENUS 1
#endif
Modified: trunk/Source/WebCore/ChangeLog (278617 => 278618)
--- trunk/Source/WebCore/ChangeLog 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/ChangeLog 2021-06-08 17:27:33 UTC (rev 278618)
@@ -1,5 +1,52 @@
2021-06-08 Devin Rousso <[email protected]>
+ [Modern Media Controls] upstream new features
+ https://bugs.webkit.org/show_bug.cgi?id=226736
+ <rdar://problem/78957464>
+
+ Reviewed by Eric Carlson.
+
+ - bring the "Audio"/"Languages" tracks menu to iOS
+ - add a new "Playback Speed" menu in the overflow menu on iOS and macOS
+ - add support for showing the most relevant `<track kind="chapters">` in the overflow menu on iOS and macOS
+
+ Tests: media/modern-media-controls/overflow-button/overflow-button.html
+ media/modern-media-controls/overflow-support/chapters.html
+ media/modern-media-controls/overflow-support/playback-speed.html
+
+ * Modules/mediacontrols/MediaControlsHost.cpp:
+ (WebCore::MediaControlsHost::showMediaControlsContextMenu):
+ * Modules/modern-media-controls/media/overflow-support.js:
+ (OverflowSupport.prototype.get mediaEvents):
+ (OverflowSupport.prototype.get tracksToMonitor):
+ (OverflowSupport.prototype.syncControl):
+ * en.lproj/Localizable.strings:
+
+ * rendering/RenderTheme.h:
+ (WebCore::RenderTheme::mediaControlsScripts):
+ * rendering/RenderThemeAdwaita.cpp:
+ (WebCore::RenderThemeAdwaita::mediaControlsScripts):
+ * rendering/RenderThemeAdwaita.h:
+ * rendering/RenderThemeCocoa.h:
+ * rendering/RenderThemeCocoa.mm:
+ (WebCore::RenderThemeCocoa::purgeCaches):
+ (WebCore::RenderThemeCocoa::mediaControlsScripts):
+ * rendering/RenderThemeWin.h:
+ * rendering/RenderThemeWin.cpp:
+ (WebCore::RenderThemeWin::mediaControlsScripts):
+ Drop the "additional script" and lower the inline capacity of the `Vector`.
+
+ * testing/Internals.idl:
+ * testing/Internals.h:
+ * testing/Internals.cpp:
+ (WebCore::Internals::setMediaControlsHidePlaybackRates): Added.
+ * html/HTMLMediaElement.h:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::setMediaControlsHidePlaybackRates): Added.
+ Since Playback Rates is always shown, provide a way for tests to turn it off.
+
+2021-06-08 Devin Rousso <[email protected]>
+
Require that callsites of `SnapshotOptions` specify a `PixelFormat` and `DestinationColorSpace`
https://bugs.webkit.org/show_bug.cgi?id=226756
Modified: trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp (278617 => 278618)
--- trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp 2021-06-08 17:27:33 UTC (rev 278618)
@@ -55,8 +55,10 @@
#include "PageGroup.h"
#include "RenderTheme.h"
#include "TextTrack.h"
+#include "TextTrackCueList.h"
#include "TextTrackList.h"
#include "UserGestureIndicator.h"
+#include "VTTCue.h"
#include "VoidCallback.h"
#include <_javascript_Core/JSCJSValueInlines.h>
#include <wtf/CompletionHandler.h>
@@ -65,10 +67,6 @@
#include <wtf/UUID.h>
#include <wtf/Variant.h>
-#if USE(APPLE_INTERNAL_SDK)
-#include <WebKitAdditions/MediaControlsHostAdditions.cpp>
-#endif
-
namespace WebCore {
const AtomString& MediaControlsHost::automaticKeyword()
@@ -358,14 +356,6 @@
#if ENABLE(MEDIA_CONTROLS_CONTEXT_MENUS)
-#if !defined(MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData)
-#define MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData
-#endif
-
-#if !defined(MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData_switchOn)
-#define MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData_switchOn
-#endif
-
#if ENABLE(CONTEXT_MENUS) && USE(ACCESSIBILITY_CONTEXT_MENUS)
class MediaControlsContextMenuProvider final : public ContextMenuProvider {
public:
@@ -506,13 +496,22 @@
enum class PictureInPictureTag { IncludePictureInPicture };
#endif // ENABLE(VIDEO_PRESENTATION_MODE)
+ enum class PlaybackSpeed {
+ x0_5,
+ x1_0,
+ x1_25,
+ x1_5,
+ x2_0,
+ };
+
using MenuData = Variant<
#if ENABLE(VIDEO_PRESENTATION_MODE)
PictureInPictureTag,
#endif // ENABLE(VIDEO_PRESENTATION_MODE)
RefPtr<AudioTrack>,
- RefPtr<TextTrack>
- MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData
+ RefPtr<TextTrack>,
+ RefPtr<VTTCue>,
+ PlaybackSpeed
>;
HashMap<MenuItemIdentifier, MenuData> idMap;
@@ -586,10 +585,46 @@
}
}
-#if defined(MediaControlsHostAdditions_showMediaControlsContextMenu_options)
- MediaControlsHostAdditions_showMediaControlsContextMenu_options
-#endif
+ if (optionsJSONObject->getBoolean("includeChapters"_s).value_or(false)) {
+ if (auto* textTracks = mediaElement.textTracks(); textTracks && textTracks->length()) {
+ auto& captionPreferences = page->group().captionPreferences();
+ for (auto& textTrack : captionPreferences.sortedTrackListForMenu(textTracks, { TextTrack::Kind::Chapters })) {
+ Vector<MenuItem> chapterMenuItems;
+
+ if (auto* cues = textTrack->cues()) {
+ for (unsigned i = 0; i < cues->length(); ++i) {
+ auto* cue = cues->item(i);
+ if (!is<VTTCue>(cue))
+ continue;
+
+ auto& vttCue = downcast<VTTCue>(*cue);
+ chapterMenuItems.append(createMenuItem(makeRefPtr(vttCue), vttCue.text()));
+ }
+ }
+
+ if (!chapterMenuItems.isEmpty()) {
+ items.append(createSubmenu(captionPreferences.displayNameForTrack(textTrack.get()), "list.bullet"_s, WTFMove(chapterMenuItems)));
+
+ /* Only show the first valid chapters track. */
+ break;
+ }
+ }
+ }
+ }
+
+ if (optionsJSONObject->getBoolean("includePlaybackRates"_s).value_or(false)) {
+ auto playbackRate = mediaElement.playbackRate();
+
+ items.append(createSubmenu(WEB_UI_STRING_KEY("Playback Speed", "Playback Speed (Media Controls Menu)", "Playback Speed media controls context menu title"), "speedometer"_s, {
+ createMenuItem(PlaybackSpeed::x0_5, WEB_UI_STRING_KEY("0.5×", "0.5× (Media Controls Menu Playback Speed)", "0.5× media controls context menu playback speed label"), playbackRate == 0.5),
+ createMenuItem(PlaybackSpeed::x1_0, WEB_UI_STRING_KEY("1×", "1× (Media Controls Menu Playback Speed)", "1× media controls context menu playback speed label"), playbackRate == 1.0),
+ createMenuItem(PlaybackSpeed::x1_25, WEB_UI_STRING_KEY("1.25×", "1.25× (Media Controls Menu Playback Speed)", "1.25× media controls context menu playback speed label"), playbackRate == 1.25),
+ createMenuItem(PlaybackSpeed::x1_5, WEB_UI_STRING_KEY("1.5×", "1.5× (Media Controls Menu Playback Speed)", "1.5× media controls context menu playback speed label"), playbackRate == 1.5),
+ createMenuItem(PlaybackSpeed::x2_0, WEB_UI_STRING_KEY("2×", "2× (Media Controls Menu Playback Speed)", "2× media controls context menu playback speed label"), playbackRate == 2.0),
+ }));
+ }
+
#if ENABLE(CONTEXT_MENUS) && USE(ACCESSIBILITY_CONTEXT_MENUS)
if ((items.size() == 1 && items[0].type() == SubmenuType) || optionsJSONObject->getBoolean("promoteSubMenus"_s).value_or(false)) {
for (auto&& item : std::exchange(items, { })) {
@@ -645,9 +680,42 @@
(*textTrack)->setMode(TextTrack::Mode::Disabled);
}
mediaElement.setSelectedTextTrack(selectedTextTrack.get());
+ },
+ [&] (RefPtr<VTTCue>& cue) {
+ mediaElement.setCurrentTime(cue->startMediaTime());
+ },
+ [&] (PlaybackSpeed playbackSpeed) {
+ switch (playbackSpeed) {
+ case PlaybackSpeed::x0_5:
+ mediaElement.setDefaultPlaybackRate(0.5);
+ mediaElement.setPlaybackRate(0.5);
+ return;
+
+ case PlaybackSpeed::x1_0:
+ mediaElement.setDefaultPlaybackRate(1.0);
+ mediaElement.setPlaybackRate(1.0);
+ return;
+
+ case PlaybackSpeed::x1_25:
+ mediaElement.setDefaultPlaybackRate(1.25);
+ mediaElement.setPlaybackRate(1.25);
+ return;
+
+ case PlaybackSpeed::x1_5:
+ mediaElement.setDefaultPlaybackRate(1.5);
+ mediaElement.setPlaybackRate(1.5);
+ return;
+
+ case PlaybackSpeed::x2_0:
+ mediaElement.setDefaultPlaybackRate(2.0);
+ mediaElement.setPlaybackRate(2.0);
+ return;
+ }
+
+ ASSERT_NOT_REACHED();
}
- MediaControlsHostAdditions_showMediaControlsContextMenu_MenuData_switchOn
);
+
};
auto bounds = target.boundsInRootViewSpace();
Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/overflow-support.js (278617 => 278618)
--- trunk/Source/WebCore/Modules/modern-media-controls/media/overflow-support.js 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/overflow-support.js 2021-06-08 17:27:33 UTC (rev 278618)
@@ -30,16 +30,12 @@
get mediaEvents()
{
- let mediaEvents = [];
- window["WebKitAdditions.OverflowSupport.prototype.get_mediaEvents"]?.(this, mediaEvents);
- return mediaEvents;
+ return ["loadstart", "loadedmetadata"];
}
get tracksToMonitor()
{
- let tracksToMonitor = [];
- window["WebKitAdditions.OverflowSupport.prototype.get_tracksToMonitor"]?.(this, tracksToMonitor);
- return tracksToMonitor;
+ return [this.mediaController.media.textTracks];
}
get control()
@@ -57,7 +53,19 @@
this.control.enabled = this.mediaController.canShowMediaControlsContextMenu;
let defaultContextMenuOptions = {};
- window["WebKitAdditions.OverflowSupport.prototype.syncControl"]?.(this, defaultContextMenuOptions);
+
+ if (!this.mediaController.hidePlaybackRates && (!window.MediaStream || !(this.mediaController.media.srcObject instanceof MediaStream)))
+ defaultContextMenuOptions.includePlaybackRates = true;
+
+ for (let textTrack of this.mediaController.media.textTracks) {
+ if (textTrack.kind !== "chapters")
+ continue;
+
+ if (textTrack.mode === "disabled")
+ textTrack.mode = "hidden";
+ defaultContextMenuOptions.includeChapters = true;
+ }
+
this.control.defaultContextMenuOptions = defaultContextMenuOptions;
}
Modified: trunk/Source/WebCore/en.lproj/Localizable.strings (278617 => 278618)
--- trunk/Source/WebCore/en.lproj/Localizable.strings 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/en.lproj/Localizable.strings 2021-06-08 17:27:33 UTC (rev 278618)
@@ -97,12 +97,27 @@
/* Present the element <select multiple> when no <option> items are selected (iOS only) */
"0 Items" = "0 Items";
+/* 0.5× media controls context menu playback speed label */
+"0.5× (Media Controls Menu Playback Speed)" = "0.5×";
+
/* Present the element <select multiple> when a single <option> is selected (iOS only) */
"1 Item" = "1 Item";
+/* 1× media controls context menu playback speed label */
+"1× (Media Controls Menu Playback Speed)" = "1×";
+
+/* 1.25× media controls context menu playback speed label */
+"1.25× (Media Controls Menu Playback Speed)" = "1.25×";
+
+/* 1.5× media controls context menu playback speed label */
+"1.5× (Media Controls Menu Playback Speed)" = "1.5×";
+
/* Option in segmented control for choosing list type in text editing */
"1. 2. 3." = "1. 2. 3.";
+/* 2× media controls context menu playback speed label */
+"2× (Media Controls Menu Playback Speed)" = "2×";
+
/* Menu item title for KEYGEN pop-up menu */
"2048 (High Grade)" = "2048 (High Grade)";
@@ -706,6 +721,9 @@
/* Media Play context menu item */
"Play" = "Play";
+/* Playback Speed media controls context menu title */
+"Playback Speed (Media Controls Menu)" = "Playback Speed";
+
/* accessibility help text for enter full screen button */
"Play movie in full screen mode" = "Play movie in full screen mode";
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (278617 => 278618)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2021-06-08 17:27:33 UTC (rev 278618)
@@ -7490,6 +7490,11 @@
setControllerJSProperty("maximumRightContainerButtonCountOverride", JSC::jsNumber(count));
}
+void HTMLMediaElement::setMediaControlsHidePlaybackRates(bool hidePlaybackRates)
+{
+ setControllerJSProperty("hidePlaybackRates", JSC::jsBoolean(hidePlaybackRates));
+}
+
unsigned long long HTMLMediaElement::fileSize() const
{
if (m_player)
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (278617 => 278618)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -494,6 +494,7 @@
void userInterfaceLayoutDirectionChanged();
WEBCORE_EXPORT String getCurrentMediaControlsStatus();
WEBCORE_EXPORT void setMediaControlsMaximumRightContainerButtonCountOverride(size_t);
+ WEBCORE_EXPORT void setMediaControlsHidePlaybackRates(bool);
MediaControlsHost* mediaControlsHost() { return m_mediaControlsHost.get(); }
bool isDisablingSleep() const { return m_sleepDisabler.get(); }
Modified: trunk/Source/WebCore/rendering/RenderTheme.h (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderTheme.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderTheme.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -86,7 +86,7 @@
#if ENABLE(VIDEO)
virtual String mediaControlsStyleSheet() { return String(); }
virtual String extraMediaControlsStyleSheet() { return String(); }
- virtual Vector<String, 3> mediaControlsScripts() { return { }; }
+ virtual Vector<String, 2> mediaControlsScripts() { return { }; }
#if ENABLE(MODERN_MEDIA_CONTROLS)
virtual String mediaControlsBase64StringForIconNameAndType(const String&, const String&) { return String(); }
virtual String mediaControlsFormattedStringForDuration(double) { return String(); }
Modified: trunk/Source/WebCore/rendering/RenderThemeAdwaita.cpp (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderThemeAdwaita.cpp 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderThemeAdwaita.cpp 2021-06-08 17:27:33 UTC (rev 278618)
@@ -172,7 +172,7 @@
return StringImpl::createWithoutCopying(mediaControlsAdwaitaUserAgentStyleSheet, sizeof(mediaControlsAdwaitaUserAgentStyleSheet));
}
-Vector<String, 3> RenderThemeAdwaita::mediaControlsScripts()
+Vector<String, 2> RenderThemeAdwaita::mediaControlsScripts()
{
return { StringImpl::createWithoutCopying(mediaControlsAdwaitaJavaScript, sizeof(mediaControlsAdwaitaJavaScript)) };
}
Modified: trunk/Source/WebCore/rendering/RenderThemeAdwaita.h (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderThemeAdwaita.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderThemeAdwaita.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -37,7 +37,7 @@
String extraDefaultStyleSheet() final;
#if ENABLE(VIDEO)
String extraMediaControlsStyleSheet() final;
- Vector<String, 3> mediaControlsScripts() final;
+ Vector<String, 2> mediaControlsScripts() final;
#endif
bool supportsHover(const RenderStyle&) const final { return true; }
Modified: trunk/Source/WebCore/rendering/RenderThemeCocoa.h (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderThemeCocoa.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderThemeCocoa.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -53,13 +53,12 @@
#if ENABLE(VIDEO) && ENABLE(MODERN_MEDIA_CONTROLS)
String mediaControlsStyleSheet() override;
- Vector<String, 3> mediaControlsScripts() override;
+ Vector<String, 2> mediaControlsScripts() override;
String mediaControlsBase64StringForIconNameAndType(const String&, const String&) override;
String mediaControlsFormattedStringForDuration(double) override;
String m_mediaControlsLocalizedStringsScript;
String m_mediaControlsScript;
- String m_mediaControlsAdditionalScript;
String m_mediaControlsStyleSheet;
RetainPtr<NSDateComponentsFormatter> m_durationFormatter;
#endif // ENABLE(VIDEO) && ENABLE(MODERN_MEDIA_CONTROLS)
Modified: trunk/Source/WebCore/rendering/RenderThemeCocoa.mm (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderThemeCocoa.mm 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderThemeCocoa.mm 2021-06-08 17:27:33 UTC (rev 278618)
@@ -50,10 +50,6 @@
#import <pal/cocoa/PassKitSoftLink.h>
#endif
-#if USE(APPLE_INTERNAL_SDK)
-#include <WebKitAdditions/RenderThemeCocoaAdditions.cpp>
-#endif
-
@interface WebCoreRenderThemeBundle : NSObject
@end
@@ -72,7 +68,6 @@
#if ENABLE(VIDEO) && ENABLE(MODERN_MEDIA_CONTROLS)
m_mediaControlsLocalizedStringsScript.clearImplIfNotShared();
m_mediaControlsScript.clearImplIfNotShared();
- m_mediaControlsAdditionalScript.clearImplIfNotShared();
m_mediaControlsStyleSheet.clearImplIfNotShared();
#endif // ENABLE(VIDEO) && ENABLE(MODERN_MEDIA_CONTROLS)
@@ -188,7 +183,7 @@
return m_mediaControlsStyleSheet;
}
-Vector<String, 3> RenderThemeCocoa::mediaControlsScripts()
+Vector<String, 2> RenderThemeCocoa::mediaControlsScripts()
{
// FIXME: Localized strings are not worth having a script. We should make it JSON data etc. instead.
if (m_mediaControlsLocalizedStringsScript.isEmpty()) {
@@ -199,15 +194,9 @@
if (m_mediaControlsScript.isEmpty())
m_mediaControlsScript = StringImpl::createWithoutCopying(ModernMediaControlsJavaScript, sizeof(ModernMediaControlsJavaScript));
-#if defined(RenderThemeCocoaAdditions_mediaControlsAdditionalScript)
- if (m_mediaControlsAdditionalScript.isEmpty())
- m_mediaControlsAdditionalScript = String(RenderThemeCocoaAdditions_mediaControlsAdditionalScript);
-#endif
-
return {
m_mediaControlsLocalizedStringsScript,
m_mediaControlsScript,
- m_mediaControlsAdditionalScript,
};
}
Modified: trunk/Source/WebCore/rendering/RenderThemeWin.cpp (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderThemeWin.cpp 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderThemeWin.cpp 2021-06-08 17:27:33 UTC (rev 278618)
@@ -1079,7 +1079,7 @@
#endif
}
-Vector<String, 3> RenderThemeWin::mediaControlsScripts()
+Vector<String, 2> RenderThemeWin::mediaControlsScripts()
{
#if ENABLE(MEDIA_CONTROLS_SCRIPT)
if (m_mediaControlsScript.isEmpty()) {
Modified: trunk/Source/WebCore/rendering/RenderThemeWin.h (278617 => 278618)
--- trunk/Source/WebCore/rendering/RenderThemeWin.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/rendering/RenderThemeWin.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -121,7 +121,7 @@
#if ENABLE(VIDEO)
String mediaControlsStyleSheet() override;
- Vector<String, 3> mediaControlsScripts() override;
+ Vector<String, 2> mediaControlsScripts() override;
#endif
IntSize meterSizeForBounds(const RenderMeter&, const IntRect&) const override;
Modified: trunk/Source/WebCore/testing/Internals.cpp (278617 => 278618)
--- trunk/Source/WebCore/testing/Internals.cpp 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/testing/Internals.cpp 2021-06-08 17:27:33 UTC (rev 278618)
@@ -4822,6 +4822,11 @@
mediaElement.setMediaControlsMaximumRightContainerButtonCountOverride(count);
}
+void Internals::setMediaControlsHidePlaybackRates(HTMLMediaElement& mediaElement, bool hidePlaybackRates)
+{
+ mediaElement.setMediaControlsHidePlaybackRates(hidePlaybackRates);
+}
+
#endif // ENABLE(VIDEO)
#if !PLATFORM(COCOA)
Modified: trunk/Source/WebCore/testing/Internals.h (278617 => 278618)
--- trunk/Source/WebCore/testing/Internals.h 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/testing/Internals.h 2021-06-08 17:27:33 UTC (rev 278618)
@@ -752,6 +752,7 @@
#if ENABLE(VIDEO)
String getCurrentMediaControlsStatusForElement(HTMLMediaElement&);
void setMediaControlsMaximumRightContainerButtonCountOverride(HTMLMediaElement&, size_t);
+ void setMediaControlsHidePlaybackRates(HTMLMediaElement&, bool);
#endif // ENABLE(VIDEO)
String userVisibleString(const DOMURL&);
Modified: trunk/Source/WebCore/testing/Internals.idl (278617 => 278618)
--- trunk/Source/WebCore/testing/Internals.idl 2021-06-08 17:09:41 UTC (rev 278617)
+++ trunk/Source/WebCore/testing/Internals.idl 2021-06-08 17:27:33 UTC (rev 278618)
@@ -785,6 +785,7 @@
[Conditional=VIDEO] DOMString getCurrentMediaControlsStatusForElement(HTMLMediaElement element);
[Conditional=VIDEO] undefined setMediaControlsMaximumRightContainerButtonCountOverride(HTMLMediaElement element, unsigned long count);
+ [Conditional=VIDEO] undefined setMediaControlsHidePlaybackRates(HTMLMediaElement element, boolean hidePlaybackRates);
DOMString userVisibleString(DOMURL url);