[webkit-changes] [WebKit/WebKit] 865af2: WebCore::MouseButton should be an enum class

Abrar Rahman Protyasha noreply at github.com
Sat Sep 16 07:00:03 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 865af240558dd997c13e159713ef3504d8f6e3c5
      https://github.com/WebKit/WebKit/commit/865af240558dd997c13e159713ef3504d8f6e3c5
  Author: Abrar Rahman Protyasha <a_protyasha at apple.com>
  Date:   2023-09-16 (Sat, 16 Sep 2023)

  Changed paths:
    M LayoutTests/fast/events/constructors/mouse-event-constructor.html
    M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
    M Source/WebCore/dom/DragEvent.cpp
    M Source/WebCore/dom/DragEvent.h
    M Source/WebCore/dom/Element.cpp
    M Source/WebCore/dom/MouseEvent.cpp
    M Source/WebCore/dom/MouseEvent.h
    M Source/WebCore/dom/MouseEvent.idl
    M Source/WebCore/dom/MouseEventInit.h
    M Source/WebCore/dom/Node.cpp
    M Source/WebCore/dom/PointerEvent.cpp
    M Source/WebCore/dom/PointerEvent.h
    M Source/WebCore/dom/SimulatedClick.cpp
    M Source/WebCore/dom/WheelEvent.cpp
    M Source/WebCore/dom/ios/MouseEventIOS.cpp
    M Source/WebCore/dom/ios/PointerEventIOS.cpp
    M Source/WebCore/html/HTMLAnchorElement.cpp
    M Source/WebCore/html/HTMLInputElement.cpp
    M Source/WebCore/html/HTMLSelectElement.cpp
    M Source/WebCore/html/RangeInputType.cpp
    M Source/WebCore/html/shadow/SliderThumbElement.cpp
    M Source/WebCore/html/shadow/SpinButtonElement.cpp
    M Source/WebCore/html/shadow/TextControlInnerElements.cpp
    M Source/WebCore/loader/NavigationAction.h
    M Source/WebCore/page/AutoscrollController.cpp
    M Source/WebCore/page/ContextMenuController.cpp
    M Source/WebCore/page/DebugPageOverlays.cpp
    M Source/WebCore/page/DragController.cpp
    M Source/WebCore/page/EventHandler.cpp
    M Source/WebCore/page/PointerCaptureController.cpp
    M Source/WebCore/page/PointerCaptureController.h
    M Source/WebCore/page/ResourceUsageOverlay.cpp
    M Source/WebCore/page/ios/EventHandlerIOS.mm
    M Source/WebCore/page/mac/ServicesOverlayController.mm
    M Source/WebCore/platform/PlatformMouseEvent.h
    M Source/WebCore/platform/ScrollbarTheme.cpp
    M Source/WebCore/platform/adwaita/ScrollbarThemeAdwaita.cpp
    M Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
    M Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm
    M Source/WebCore/platform/mac/PlatformEventFactoryMac.mm
    M Source/WebCore/platform/mac/ScrollbarThemeMac.mm
    M Source/WebCore/platform/win/PlatformMouseEventWin.cpp
    M Source/WebCore/rendering/RenderEmbeddedObject.cpp
    M Source/WebCore/rendering/RenderFrameSet.cpp
    M Source/WebKit/Shared/API/c/WKSharedAPICast.h
    M Source/WebKit/Shared/NavigationActionData.h
    M Source/WebKit/Shared/WebEvent.serialization.in
    M Source/WebKit/Shared/WebEventConversion.cpp
    M Source/WebKit/Shared/WebMouseEvent.cpp
    M Source/WebKit/Shared/WebMouseEvent.h
    M Source/WebKit/Shared/gtk/WebEventFactory.cpp
    M Source/WebKit/Shared/ios/WebIOSEventFactory.mm
    M Source/WebKit/Shared/libwpe/WebEventFactory.cpp
    M Source/WebKit/Shared/mac/WebEventFactory.mm
    M Source/WebKit/Shared/win/WebEventFactory.cpp
    M Source/WebKit/UIProcess/API/glib/WebKitPrivate.cpp
    M Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
    M Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/gtk/PointerLockManager.h
    M Source/WebKit/UIProcess/ios/WKMouseInteraction.mm
    M Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm
    M Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp
    M Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm
    M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp
    M Source/WebKit/WebProcess/WebPage/WebFrame.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
    M Source/WebKitLegacy/ios/WebView/WebPDFViewPlaceholder.mm
    M Source/WebKitLegacy/mac/DOM/DOMMouseEvent.mm
    M Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm
    M Source/WebKitLegacy/mac/WebView/WebFrame.mm
    M Source/WebKitLegacy/mac/WebView/WebPDFView.mm
    M Tools/TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm

  Log Message:
  -----------
  WebCore::MouseButton should be an enum class
https://bugs.webkit.org/show_bug.cgi?id=258909
rdar://111820855

Reviewed by Wenson Hsieh.

Converting `WebCore::MouseButton` to an enum class prevents us from
assigning seemingly magic numbers (-1/-2) to the `button` property of a
`MouseEvent`. In other words, it improves readability because we don't
have to go back and forth between the DOM API for the meaning of various
integral values.

This commit also changes our internal representation of the `button`
property from a `short` to an `int16_t`. This represents a
small conformance win since the latter  is better aligned with the Web
IDL standard's definition of the `short` type.

To address undefined behavior concerns, we declare all expected
`MouseButton` cases together and only pass around `MouseButton` values
throughout the engine. This means that as long as we're safely
converting to/from integral button values received over IDL, we should
be behaving correctly.

I've also taken the liberty to make the enumeration cases read less
redundantly: {LeftButton, RightButton, MiddleButton, NoButton} => {Left,
Right, Middle, None}.

* LayoutTests/fast/events/constructors/mouse-event-constructor.html:
* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::defaultEventHandler):
* Source/WebCore/dom/DragEvent.cpp:
(WebCore::DragEvent::create):
(WebCore::DragEvent::DragEvent):
* Source/WebCore/dom/DragEvent.h:
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::dispatchMouseForceWillBegin):
* Source/WebCore/dom/MouseEvent.cpp:
(WebCore::MouseEvent::create):
(WebCore::MouseEvent::MouseEvent):
(WebCore::MouseEvent::initMouseEvent):
(WebCore::MouseEvent::initMouseEventQuirk):
(WebCore::MouseEvent::canTriggerActivationBehavior):
(WebCore::MouseEvent::button const):
* Source/WebCore/dom/MouseEvent.h:
(WebCore::MouseEvent::buttonAsShort const):
(WebCore::MouseEvent::button const): Deleted.
* Source/WebCore/dom/MouseEvent.idl:
* Source/WebCore/dom/MouseEventInit.h:
* Source/WebCore/dom/Node.cpp:
(WebCore::Node::defaultEventHandler):
* Source/WebCore/dom/PointerEvent.cpp:
(WebCore::PointerEvent::create):
(WebCore::PointerEvent::PointerEvent):
* Source/WebCore/dom/PointerEvent.h:
* Source/WebCore/dom/SimulatedClick.cpp:
* Source/WebCore/dom/WheelEvent.cpp:
(WebCore::WheelEvent::WheelEvent):
(WebCore::WheelEvent::initWebKitWheelEvent):
* Source/WebCore/dom/ios/MouseEventIOS.cpp:
(WebCore::MouseEvent::create):
* Source/WebCore/dom/ios/PointerEventIOS.cpp:
(WebCore::buttonForType):
* Source/WebCore/html/HTMLAnchorElement.cpp:
(WebCore::HTMLAnchorElement::defaultEventHandler):
* Source/WebCore/html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::willDispatchEvent):
(WebCore::HTMLInputElement::defaultEventHandler):
* Source/WebCore/html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::menuListDefaultEventHandler):
(WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
* Source/WebCore/html/RangeInputType.cpp:
(WebCore::RangeInputType::handleMouseDownEvent):
* Source/WebCore/html/shadow/SliderThumbElement.cpp:
(WebCore::SliderThumbElement::defaultEventHandler):
* Source/WebCore/html/shadow/SpinButtonElement.cpp:
(WebCore::SpinButtonElement::defaultEventHandler):
* Source/WebCore/html/shadow/TextControlInnerElements.cpp:
(WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
(WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
* Source/WebCore/loader/NavigationAction.h:
* Source/WebCore/page/AutoscrollController.cpp:
(WebCore::AutoscrollController::handleMouseReleaseEvent):
* Source/WebCore/page/ContextMenuController.cpp:
(WebCore::ContextMenuController::showContextMenuAt):
* Source/WebCore/page/DebugPageOverlays.cpp:
(WebCore::InteractionRegionOverlay::mouseEvent):
* Source/WebCore/page/DragController.cpp:
(WebCore::createMouseEvent):
* Source/WebCore/page/EventHandler.cpp:
(WebCore::EventHandler::handleMousePressEventDoubleClick):
(WebCore::EventHandler::handleMousePressEventTripleClick):
(WebCore::EventHandler::handleMousePressEventSingleClick):
(WebCore::EventHandler::handleMouseDraggedEvent):
(WebCore::EventHandler::eventMayStartDrag const):
(WebCore::EventHandler::handleMouseReleaseEvent):
(WebCore::EventHandler::handleMouseDoubleClickEvent):
(WebCore::EventHandler::dispatchDragEvent):
(WebCore::EventHandler::sendContextMenuEventForKey):
(WebCore::EventHandler::fakeMouseMoveEventTimerFired):
(WebCore::EventHandler::handleDrag):
* Source/WebCore/page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::pointerEventForMouseEvent):
* Source/WebCore/page/PointerCaptureController.h:
* Source/WebCore/page/ResourceUsageOverlay.cpp:
(WebCore::ResourceUsageOverlay::mouseEvent):
* Source/WebCore/page/ios/EventHandlerIOS.mm:
(WebCore::EventHandler::tryToBeginDragAtPoint):
* Source/WebCore/page/mac/ServicesOverlayController.mm:
(WebCore::ServicesOverlayController::mouseEvent):
* Source/WebCore/platform/PlatformMouseEvent.h:
* Source/WebCore/platform/ScrollbarTheme.cpp:
(WebCore::ScrollbarTheme::handleMousePressEvent):
* Source/WebCore/platform/adwaita/ScrollbarThemeAdwaita.cpp:
(WebCore::ScrollbarThemeAdwaita::handleMousePressEvent):
* Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp:
(WebCore::ScrollbarThemeGtk::handleMousePressEvent):
* Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm:
(WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
* Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:
(WebCore::mouseButtonForEvent):
* Source/WebCore/platform/mac/ScrollbarThemeMac.mm:
(WebCore::shouldCenterOnThumb):
(WebCore::ScrollbarThemeMac::handleMousePressEvent):
* Source/WebCore/platform/win/PlatformMouseEventWin.cpp:
(WebCore::PlatformMouseEvent::PlatformMouseEvent):
* Source/WebCore/rendering/RenderEmbeddedObject.cpp:
(WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
* Source/WebCore/rendering/RenderFrameSet.cpp:
(WebCore::RenderFrameSet::userResize):
* Source/WebKit/Shared/API/c/WKSharedAPICast.h:
(WebKit::toAPI):
* Source/WebKit/Shared/NavigationActionData.h:
* Source/WebKit/Shared/WebEvent.serialization.in:
* Source/WebKit/Shared/WebEventConversion.cpp:
(WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
* Source/WebKit/Shared/WebMouseEvent.cpp:
(WebKit::mouseButton):
* Source/WebKit/Shared/WebMouseEvent.h:
(WebKit::WebMouseEvent::button const):
* Source/WebKit/Shared/gtk/WebEventFactory.cpp:
(WebKit::buttonForEvent):
(WebKit::WebEventFactory::createWebMouseEvent):
* Source/WebKit/Shared/ios/WebIOSEventFactory.mm:
(WebIOSEventFactory::createWebMouseEvent):
* Source/WebKit/Shared/libwpe/WebEventFactory.cpp:
(WebKit::WebEventFactory::createWebMouseEvent):
* Source/WebKit/Shared/mac/WebEventFactory.mm:
(WebKit::currentMouseButton):
(WebKit::mouseButtonForEvent):
(WebKit::WebEventFactory::toNSButtonNumber):
* Source/WebKit/Shared/win/WebEventFactory.cpp:
(WebKit::clickCount):
(WebKit::WebEventFactory::createWebMouseEvent):
* Source/WebKit/UIProcess/API/glib/WebKitPrivate.cpp:
(toWebKitMouseButton):
* Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:
(MotionEvent::MotionEvent):
(webkitWebViewBaseSynthesizeMouseEvent):
* Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm:
(WebKit::automationMouseButtonToPlatformMouseButton):
(WebKit::WebAutomationSession::platformSimulateMouseInteraction):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::handleMouseEvent):
(WebKit::WebPageProxy::processNextQueuedMouseEvent):
(WebKit::WebPageProxy::didReceiveEvent):
* Source/WebKit/UIProcess/gtk/PointerLockManager.h:
* Source/WebKit/UIProcess/ios/WKMouseInteraction.mm:
(-[WKMouseInteraction createMouseEventWithType:wasCancelled:]):
* Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
* Source/WebKit/WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
* Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp:
(webkit_dom_mouse_event_init_mouse_event):
(webkit_dom_mouse_event_get_button):
* Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:
(WebKit::getEventTypeFromWebEvent):
(WebKit::PDFPlugin::handleMouseEvent):
(WebKit::PDFPlugin::showContextMenuAtPoint):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::didSameDocumentNavigationForFrameViaJSHistoryAPI):
* Source/WebKit/WebProcess/WebPage/WebFrame.cpp:
(WebKit::isContextClick):
(WebKit::WebFrame::handleMouseEvent):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::navigateToPDFLinkWithSimulatedClick):
(WebKit::WebPage::contextMenuAtPointInWindow):
(WebKit::WebPage::mouseEvent):
(WebKit::WebPage::dragEnded):
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::dispatchSyntheticMouseMove):
(WebKit::WebPage::completeSyntheticClick):
(WebKit::WebPage::handleDoubleTapForDoubleClickAtPoint):
(WebKit::WebPage::requestAdditionalItemsForDragSession):
(WebKit::WebPage::inspectorNodeSearchMovedToPosition):
(WebKit::WebPage::dispatchSyntheticMouseEventsForSelectionGesture):
* Source/WebKitLegacy/ios/WebView/WebPDFViewPlaceholder.mm:
(-[WebPDFViewPlaceholder simulateClickOnLinkToURL:]):
* Source/WebKitLegacy/mac/DOM/DOMMouseEvent.mm:
(-[DOMMouseEvent button]):
* Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::actionDictionary const):
* Source/WebKitLegacy/mac/WebView/WebFrame.mm:
(-[WebFrame _dragSourceEndedAt:operation:]):
* Source/WebKitLegacy/mac/WebView/WebPDFView.mm:
(-[WebPDFView PDFViewWillClickOnLink:withURL:]):
* Tools/TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
(TestWebKitAPI::TEST):

Canonical link: https://commits.webkit.org/268053@main




More information about the webkit-changes mailing list