haikuwebkit/Source/WebCore/Modules/modern-media-controls/images
Devin Rousso b2f1871547 [macOS] change for the language/subtitle tracks button to use an `NSMenu` instead of web content
https://bugs.webkit.org/show_bug.cgi?id=223239
<rdar://problem/75462340>

Reviewed by Eric Carlson.

Source/WebCore:

Tests: media/modern-media-controls/tracks-support/auto-text-track.html
       media/modern-media-controls/tracks-support/captions-offset-with-controls-bar.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/no-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

* Modules/mediacontrols/MediaControlsHost.h:
* Modules/mediacontrols/MediaControlsHost.cpp:
(WebCore::MediaControlsContextMenuProvider::create): Added.
(WebCore::MediaControlsContextMenuProvider::MediaControlsContextMenuProvider): Added.
(WebCore::MediaControlsContextMenuProvider::~MediaControlsContextMenuProvider): Added.
(WebCore::MediaControlsContextMenuProvider::populateContextMenu): Added.
(WebCore::MediaControlsContextMenuProvider::contextMenuItemSelected): Added.
(WebCore::MediaControlsContextMenuProvider::contextMenuCleared): Added.
(WebCore::MediaControlsContextMenuProvider::contextMenuContextType): Added.
(WebCore::MediaControlsContextMenuEventListener::create): Added.
(WebCore::MediaControlsContextMenuEventListener::operator== const): Added.
(WebCore::MediaControlsContextMenuEventListener::handleEvent): Added.
(WebCore::MediaControlsContextMenuEventListener::MediaControlsContextMenuEventListener): Added.
(WebCore::MediaControlsHost::showMediaControlsContextMenu):
Create platform-agnostic helper functions and types for creating submenus and menu items so
that this logic added for iOS can also be used for macOS.

* page/ContextMenuContext.h:
(WebCore::ContextMenuContext::type const): Added.
* page/ContextMenuContext.cpp:
(WebCore::ContextMenuContext::ContextMenuContext):
Move `WebKit::ContextMenuContextData::Type` to `WebCore::ContextmenuContext::Type` so that
it can be used in WebCore as well.

* page/ContextMenuProvider.h:
(WebCore::ContextMenuProvider::contextMenuContextType): Added.
* page/ContextMenuController.h:
* page/ContextMenuController.cpp:
(WebCore::ContextMenuController::handleContextMenuEvent):
(WebCore::ContextMenuController::showContextMenu):
(WebCore::ContextMenuController::maybeCreateContextMenu):
Allow the `ContextMenuProvider` to further customize the `ContextMenu` that's created, such
as allowing the hit test to include UA shadow roots and controlling "Inspect Element".

* platform/ContextMenuItem.h:
* platform/ContextMenuItem.cpp:
(WebCore::ContextMenuItem::ContextMenuItem):
(WebCore::ContextMenuItem::setIndentationLevel): Added.
(WebCore::ContextMenuItem::indentationLevel const): Added.
Provide a way to eventually set the `-[NSMenuItem setIndentationLevel:]`.

* Modules/modern-media-controls/controls/tracks-panel.js: Removed.
* Modules/modern-media-controls/controls/tracks-panel.css: Removed.
* Modules/modern-media-controls/controls/background-click-delegate-notifier.js:
(BackgroundClickDelegateNotifier.prototype.handleEvent):
* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
(.media-controls.mac.fullscreen):
* Modules/modern-media-controls/controls/media-controls.js:
(MediaControls.prototype.showTracksPanel): Deleted.
(MediaControls.prototype.hideTracksPanel): Deleted.
* Modules/modern-media-controls/controls/media-controls.css:
(.media-controls.shows-tracks-panel > .controls-bar > *, .media-controls.shows-tracks-panel > button): Deleted.
* Modules/modern-media-controls/media/tracks-support.js:
(TracksSupport.prototype.buttonWasPressed):
(TracksSupport.prototype.syncControl):
(TracksSupport.prototype._sortedTrackList):
(TracksSupport): Deleted.
(TracksSupport.prototype.tracksPanelNumberOfSections): Deleted.
(TracksSupport.prototype.tracksPanelTitleForSection): Deleted.
(TracksSupport.prototype.tracksPanelNumberOfTracksInSection): Deleted.
(TracksSupport.prototype.tracksPanelTitleForTrackInSection): Deleted.
(TracksSupport.prototype.tracksPanelIsTrackInSectionSelected): Deleted.
(TracksSupport.prototype.tracksPanelSelectionDidChange): Deleted.
* Modules/modern-media-controls/js-files:
Remove everything related to `TracksPanel` now that macOS also uses a contextmenu.

* Modules/modern-media-controls/controls/inline-media-controls.js:
(InlineMediaControls.prototype.layout):
(InlineMediaControls.prototype._rightContainerButtons):
(InlineMediaControls.prototype._droppableButtons):
* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
(MacOSFullscreenMediaControls):
The `OverflowButton` should be the last right container button to be dropped.

* Modules/modern-media-controls/media/media-controller.js:
(MediaController.prototype.showMediaControlsContextMenu):
Provide a way for callers to provide additional options.

* page/MediaControlsContextMenuItem.h:
(WebCore::MediaControlsContextMenuItem::encode const):
(WebCore::MediaControlsContextMenuItem::decode):
Drive-by: Rename `isChecked` to `checked` to match `ContextMenuItem`.

* Modules/modern-media-controls/controls/tracks-button.js:
(TracksButton.prototype.get contextMenuOptions):
Drive-by: Rename object keys for clarity.

* page/ChromeClient.h:
Be more explicit with compiler flags.

* rendering/RenderThemeMac.mm:
(WebCore::RenderThemeMac::mediaControlsScript):

* Modules/modern-media-controls/images/macOS/Overflow.svg:
Rework this "..." icon to be ">>" to match similar icons elsewhere on macOS.

* WebCore.xcodeproj/project.pbxproj:

Source/WebKit:

* Shared/ContextMenuContextData.h:
* Shared/ContextMenuContextData.cpp:
(WebKit::ContextMenuContextData::ContextMenuContextData):
Move `WebKit::ContextMenuContextData::Type` to `WebCore::ContextmenuContext::Type` so that
it can be used in WebCore as well.

* Shared/WebContextMenuItemData.h:
* Shared/WebContextMenuItemData.cpp:
(WebKit::WebContextMenuItemData::WebContextMenuItemData):
(WebKit::WebContextMenuItemData::core const):
(WebKit::WebContextMenuItemData::encode const):
(WebKit::WebContextMenuItemData::decode):
(WebKit::WebContextMenuItemData::indentationLevel const): Added.
Provide a way to eventually set the `-[NSMenuItem setIndentationLevel:]`.

* UIProcess/WebContextMenuProxy.h:
* UIProcess/mac/WebContextMenuProxyMac.h:
* UIProcess/mac/WebContextMenuProxyMac.mm:
(-[WKMenuDelegate initWithMenuProxy:]): Added.
(-[WKMenuDelegate menuWillOpen:]): Added.
(-[WKMenuDelegate menuDidClose:]): Added.
(WebKit::WebContextMenuProxyMac::getContextMenuItem):
(WebKit::WebContextMenuProxyMac::useContextMenuItems):
(WebKit::WebContextMenuProxyMac::platformMenu const): Added.
(WebKit::contentsOfContextMenuItem): Added.
(WebKit::WebContextMenuProxyMac::platformData const): Added.
Add support for `-[NSMenuItem setIndentationLevel:]`.

* UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
* UIProcess/API/Cocoa/WKWebViewTesting.mm:
(-[WKWebView _contentsOfUserInterfaceItem:]):
(-[WKWebView _didShowContextMenu]): Added.
(-[WKWebView _didDismissContextMenu]): Added.
* UIProcess/API/ios/WKWebViewPrivateForTestingIOS.h:
* UIProcess/API/ios/WKWebViewTestingIOS.mm:
(-[WKWebView _didShowContextMenu]): Deleted.
(-[WKWebView _didDismissContextMenu]): Deleted.
Move these methods so they can be used on macOS too.

* UIProcess/PageClient.h:
(WebKit::PageClient::didShowContextMenu): Added.
(WebKit::PageClient::didDismissContextMenu): Added.
* UIProcess/mac/PageClientImplMac.h:
* UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::didShowContextMenu): Added.
(WebKit::PageClientImpl::didDismissContextMenu): Added.
Add support for `didShowContextMenu`/`didDismissContextMenu` for tests.

* UIProcess/API/mac/WKWebViewTestingMac.mm:
(-[WKWebView _activeMenu]):
* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::contentsOfUserInterfaceItem): Added.
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::platformActiveContextMenu const): Added.
Add support for `contentsOfUserInterfaceItem` for tests.

* UIProcess/WebPageProxy.messages.in:
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.cpp:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
* UIProcess/ios/WKActionSheetAssistant.h:
* UIProcess/ios/WKActionSheetAssistant.mm:
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WKContentViewInteraction.mm:
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.cpp:
Be more explicit with compiler flags.

Source/WTF:

* wtf/PlatformEnableCocoa.h:
Turn on `ENABLE_MEDIA_CONTROLS_CONTEXT_MENUS` for macOS.

Tools:

* WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
* WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
(-[TestRunnerWKWebView _didShowContextMenu]):
(-[TestRunnerWKWebView _didDismissContextMenu]):
(-[TestRunnerWKWebView resetInteractionCallbacks]):
* WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
* WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
(WTR::UIScriptControllerCocoa::setDidShowContextMenuCallback): Added.
(WTR::UIScriptControllerCocoa::setDidDismissContextMenuCallback): Added.
(WTR::UIScriptControllerCocoa::isShowingContextMenu const): Added.
* WebKitTestRunner/ios/UIScriptControllerIOS.h:
* WebKitTestRunner/ios/UIScriptControllerIOS.mm:
(WTR::UIScriptControllerIOS::setDidShowContextMenuCallback): Deleted.
(WTR::UIScriptControllerIOS::setDidDismissContextMenuCallback): Deleted.
(WTR::UIScriptControllerIOS::isShowingContextMenu const): Deleted.
Move these methods so they can be used on macOS too.

LayoutTests:

* media/modern-media-controls/tracks-support/auto-text-track.html: Added.
* media/modern-media-controls/tracks-support/auto-text-track-expected.txt: Added.
* media/modern-media-controls/tracks-support/click-track-in-contextmenu.html: Added.
* media/modern-media-controls/tracks-support/click-track-in-contextmenu-expected.txt: Added.
* media/modern-media-controls/tracks-support/hidden-tracks.html: Added.
* media/modern-media-controls/tracks-support/hidden-tracks-expected.txt: Added.
* media/modern-media-controls/tracks-support/off-text-track.html: Added.
* media/modern-media-controls/tracks-support/off-text-track-expected.txt: Added.
* media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button.html: Added.
* media/modern-media-controls/tracks-support/show-contextmenu-then-double-click-on-tracks-button-expected.txt: Added.
* media/modern-media-controls/tracks-support/text-track-selected-via-media-api.html: Added.
* media/modern-media-controls/tracks-support/text-track-selected-via-media-api-expected.txt: Added.
* media/modern-media-controls/tracks-support/ios/tracks-support-auto-text-track.html: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-auto-text-track-expected.txt: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-click-track-in-contextmenu.html: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-click-track-in-contextmenu-expected.txt: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-hidden-tracks.html: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-hidden-tracks-expected.txt: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-off-text-track.html: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-off-text-track-expected.txt: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-show-contextmenu-then-double-click-on-tracks-button.html: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-show-contextmenu-then-double-click-on-tracks-button-expected.txt: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-text-track-selected-via-media-api.html: Removed.
* media/modern-media-controls/tracks-support/ios/tracks-support-text-track-selected-via-media-api-expected.txt: Removed.
Move the iOS tracks support tests out of an iOS folder since macOS now also uses a contextmenu.

* media/modern-media-controls/resources/media-controls-loader.js:
* media/modern-media-controls/resources/media-controls-utils.js:
(showTracksPanel): Deleted.
* media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback.html: Removed.
* media/modern-media-controls/media-controller/media-controller-click-on-video-background-to-dismiss-tracks-panel-should-not-toggle-playback-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-controls-bar-remains-visible-after-clicking-over-it.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-controls-bar-remains-visible-after-clicking-over-it-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-hide.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-hide-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-hide-click-outside.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-hide-click-outside-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-hide-esc-key.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-hide-esc-key-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-population.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-population-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-position-and-size.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-position-and-size-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-prevent-default-on-keydown.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-prevent-default-on-keydown-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-right-x.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-right-x-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-select-track-with-keyboard.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-select-track-with-keyboard-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-select-track-with-mouse.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-select-track-with-mouse-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-up-click-outside-media-does-not-dimiss-media-controls-when-media-is-paused.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-up-click-outside-media-does-not-dimiss-media-controls-when-media-is-paused-expected.txt: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-up-click-over-media-does-not-dimiss-media-controls-when-media-is-playing.html: Removed.
* media/modern-media-controls/tracks-panel/tracks-panel-up-click-over-media-does-not-dimiss-media-controls-when-media-is-playing-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-auto-text-track.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-auto-text-track-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-click-track-in-panel.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-click-track-in-panel-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-hidden-tracks.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-hidden-tracks-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-off-text-track.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-off-text-track-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-and-populate-panel.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-and-populate-panel-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-panel-after-dragging-controls.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-panel-after-dragging-controls-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-panel-fullscreen.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-panel-fullscreen-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-panel-then-double-click-on-tracks-button.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-show-panel-then-double-click-on-tracks-button-expected.txt: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-text-track-selected-via-media-api.html: Removed.
* media/modern-media-controls/tracks-support/mac/tracks-support-text-track-selected-via-media-api-expected.txt: Removed.
Remove everything related to `TracksPanel` now that macOS also uses a contextmenu.

* media/modern-media-controls/tracks-support/captions-offset-with-controls-bar.html: Renamed from LayoutTests/media/modern-media-controls/tracks-support/tracks-support-captions-offset-with-controls-bar.html.
* media/modern-media-controls/tracks-support/captions-offset-with-controls-bar-expected.txt: Renamed from LayoutTests/media/modern-media-controls/tracks-support/tracks-support-captions-offset-with-controls-bar-expected.txt.
* media/modern-media-controls/tracks-support/no-tracks.html: Renamed from LayoutTests/media/modern-media-controls/tracks-support/tracks-support-no-tracks.html.
* media/modern-media-controls/tracks-support/no-tracks-expected.txt: Renamed from LayoutTests/media/modern-media-controls/tracks-support/tracks-support-no-tracks-expected.txt.
Renamed these tests to remove the redundant "tracks-support".

* media/modern-media-controls/tracks-support/tracks-support-audio-tracks.html: Removed.
* media/modern-media-controls/tracks-support/tracks-support-audio-tracks-expected.txt: Removed.
* media/modern-media-controls/tracks-support/tracks-support-text-tracks.html: Removed.
* media/modern-media-controls/tracks-support/tracks-support-text-tracks-expected.txt: Removed.
These tests are covered by the other added/renamed tests above.

* 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-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:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-placard.html:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-volume-slider-visibility.html:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-dropping-controls-expected.txt:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-shows-start-button.html:
Update existing tests to accomodate the `OverflowButton`.

* resources/ui-helper.js:
(window.UIHelper.chooseMenuAction): Added.
(window.UIHelper.async chooseMenuAction): Deleted.
Use `UIScriptController.prototype.chooseMenuAction` instead of a combination of
`UIScriptController.prototype.rectForMenuAction` and `UIScriptController.prototype.activateAt`
since `UIScriptController::chooseMenuAction` basically does that anyways.

* TestExpectations:
* platform/ios/TestExpectations:
* platform/mac/TestExpectations:
* platform/mac-wk2/TestExpectations:


Canonical link: https://commits.webkit.org/235372@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274521 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-16 21:57:18 +00:00
..
iOS [iOS] update media controls to use new SF Symbols 2021-02-17 21:39:51 +00:00
macOS [macOS] change for the language/subtitle tracks button to use an `NSMenu` instead of web content 2021-03-16 21:57:18 +00:00
watchOS [macCatalyst] media controls should have macOS styling and behavior 2021-03-11 21:36:51 +00:00