b2f1871547
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 |
||
---|---|---|
.. | ||
iOS | ||
macOS | ||
watchOS |