Title: [262395] trunk/Source
Revision
262395
Author
ddkil...@apple.com
Date
2020-06-01 15:04:42 -0700 (Mon, 01 Jun 2020)

Log Message

Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
<https://webkit.org/b/212507>

Reviewed by Darin Adler.

Source/WebCore:

* page/DragActions.h:
(WebCore::anyDragDestinationAction): Add.
(WebCore::DragDestinationActionAny): Delete.
- Rename DragDestinationActionAny() to
  anyDragDestinationAction() to match WebKit style.
* platform/DragData.h:
- Update to use anyDragDestinationAction().

Source/WebKit:

* Shared/API/Cocoa/_WKDragActionsInternal.h: Add.
(WebKit::coreDragDestinationActionMask):
- Add conversion function to avoid casting.
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::draggingEntered):
(WebKit::WebViewImpl::draggingUpdated):
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView dragDataForDropSession:dragDestinationAction:]):
- Make use of coreDragDestinationActionMask() conversion
  function.
- Extract `dragOperationMask` varible for future updates.
* WebKit.xcodeproj/project.pbxproj:
- Add _WKDragActionsInternal.h to project.

Source/WebKitLegacy/mac:

* WebCoreSupport/WebDragClient.mm:
(kit):
- Add conversion function to avoid casting.
(WebDragClient::willPerformDragDestinationAction):
- Make use of kit() conversion function.
* WebView/WebView.mm:
(coreDragDestinationActionMask):
- Add conversion function to avoid casting.
(-[WebView dragDataForSession:client:global:operation:]):
(-[WebView actionMaskForDraggingInfo:]):
- Make use of coreDragDestinationActionMask() conversion
  function.

Source/WebKitLegacy/win:

* WebCoreSupport/WebDragClient.cpp:
(kit):
- Add conversion function to avoid casting.
(WebDragClient::willPerformDragDestinationAction):
- Make use of kit() conversion function.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (262394 => 262395)


--- trunk/Source/WebCore/ChangeLog	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebCore/ChangeLog	2020-06-01 22:04:42 UTC (rev 262395)
@@ -1,3 +1,18 @@
+2020-06-01  David Kilzer  <ddkil...@apple.com>
+
+        Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
+        <https://webkit.org/b/212507>
+
+        Reviewed by Darin Adler.
+
+        * page/DragActions.h:
+        (WebCore::anyDragDestinationAction): Add.
+        (WebCore::DragDestinationActionAny): Delete.
+        - Rename DragDestinationActionAny() to
+          anyDragDestinationAction() to match WebKit style.
+        * platform/DragData.h:
+        - Update to use anyDragDestinationAction().
+
 2020-06-01  Simon Fraser  <simon.fra...@apple.com>
 
         Add ENABLE(TOUCH_ACTION_REGIONS) to wrap code that's only relevant for platforms that consult touch-action for event handling

Modified: trunk/Source/WebCore/page/DragActions.h (262394 => 262395)


--- trunk/Source/WebCore/page/DragActions.h	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebCore/page/DragActions.h	2020-06-01 22:04:42 UTC (rev 262395)
@@ -32,7 +32,7 @@
 
 namespace WebCore {
 
-// WebCore::DragDestinationAction must be kept in sync with WebDragDestinationAction and WKDragDestinationAction.
+// See WebDragDestinationAction and WKDragDestinationAction.
 enum class DragDestinationAction : uint8_t {
     DHTML = 1,
     Edit  = 2,
@@ -39,7 +39,7 @@
     Load  = 4
 };
 
-inline constexpr OptionSet<DragDestinationAction> DragDestinationActionAny()
+constexpr OptionSet<DragDestinationAction> anyDragDestinationAction()
 {
     return OptionSet<DragDestinationAction> { DragDestinationAction::DHTML, DragDestinationAction::Edit, DragDestinationAction::Load };
 }

Modified: trunk/Source/WebCore/platform/DragData.h (262394 => 262395)


--- trunk/Source/WebCore/platform/DragData.h	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebCore/platform/DragData.h	2020-06-01 22:04:42 UTC (rev 262395)
@@ -75,8 +75,8 @@
     enum class DraggingPurpose { ForEditing, ForFileUpload, ForColorControl };
 
     // clientPosition is taken to be the position of the drag event within the target window, with (0,0) at the top left
-    WEBCORE_EXPORT DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> actionMask = DragDestinationActionAny());
-    WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> actionMask = DragDestinationActionAny());
+    WEBCORE_EXPORT DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> = anyDragDestinationAction());
+    WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> = anyDragDestinationAction());
     // This constructor should used only by WebKit2 IPC because DragData
     // is initialized by the decoder and not in the constructor.
     DragData() = default;

Modified: trunk/Source/WebKit/ChangeLog (262394 => 262395)


--- trunk/Source/WebKit/ChangeLog	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKit/ChangeLog	2020-06-01 22:04:42 UTC (rev 262395)
@@ -1,3 +1,24 @@
+2020-06-01  David Kilzer  <ddkil...@apple.com>
+
+        Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
+        <https://webkit.org/b/212507>
+
+        Reviewed by Darin Adler.
+
+        * Shared/API/Cocoa/_WKDragActionsInternal.h: Add.
+        (WebKit::coreDragDestinationActionMask):
+        - Add conversion function to avoid casting.
+        * UIProcess/Cocoa/WebViewImpl.mm:
+        (WebKit::WebViewImpl::draggingEntered):
+        (WebKit::WebViewImpl::draggingUpdated):
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView dragDataForDropSession:dragDestinationAction:]):
+        - Make use of coreDragDestinationActionMask() conversion
+          function.
+        - Extract `dragOperationMask` varible for future updates.
+        * WebKit.xcodeproj/project.pbxproj:
+        - Add _WKDragActionsInternal.h to project.
+
 2020-06-01  Alex Christensen  <achristen...@webkit.org>
 
         Fix Glib build after r262391

Added: trunk/Source/WebKit/Shared/API/Cocoa/_WKDragActionsInternal.h (0 => 262395)


--- trunk/Source/WebKit/Shared/API/Cocoa/_WKDragActionsInternal.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/API/Cocoa/_WKDragActionsInternal.h	2020-06-01 22:04:42 UTC (rev 262395)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <WebCore/DragActions.h>
+#import <WebKit/WKDragDestinationAction.h>
+
+namespace WebKit {
+
+inline OptionSet<WebCore::DragDestinationAction> coreDragDestinationActionMask(WKDragDestinationAction action)
+{
+    OptionSet<WebCore::DragDestinationAction> result;
+    if (action & WKDragDestinationActionDHTML)
+        result.add(WebCore::DragDestinationAction::DHTML);
+    if (action & WKDragDestinationActionEdit)
+        result.add(WebCore::DragDestinationAction::Edit);
+    if (action & WKDragDestinationActionLoad)
+        result.add(WebCore::DragDestinationAction::Load);
+    return result;
+}
+
+} // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (262394 => 262395)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2020-06-01 22:04:42 UTC (rev 262395)
@@ -76,6 +76,7 @@
 #import "WebPageProxy.h"
 #import "WebProcessPool.h"
 #import "WebProcessProxy.h"
+#import "_WKDragActionsInternal.h"
 #import "_WKRemoteObjectRegistryInternal.h"
 #import "_WKThumbnailViewInternal.h"
 #import <Carbon/Carbon.h>
@@ -3945,8 +3946,9 @@
 {
     WebCore::IntPoint client([m_view convertPoint:draggingInfo.draggingLocation fromView:nil]);
     WebCore::IntPoint global(WebCore::globalPoint(draggingInfo.draggingLocation, [m_view window]));
-    auto dragDestinationActionMask = OptionSet<WebCore::DragDestinationAction>::fromRaw([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);
-    WebCore::DragData dragData(draggingInfo, client, global, static_cast<WebCore::DragOperation>(draggingInfo.draggingSourceOperationMask), applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);
+    auto dragDestinationActionMask = coreDragDestinationActionMask([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);
+    auto dragOperationMask = static_cast<WebCore::DragOperation>(draggingInfo.draggingSourceOperationMask);
+    WebCore::DragData dragData(draggingInfo, client, global, dragOperationMask, applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);
 
     m_page->resetCurrentDragInformation();
     m_page->dragEntered(dragData, draggingInfo.draggingPasteboard.name);
@@ -3958,8 +3960,9 @@
 {
     WebCore::IntPoint client([m_view convertPoint:draggingInfo.draggingLocation fromView:nil]);
     WebCore::IntPoint global(WebCore::globalPoint(draggingInfo.draggingLocation, [m_view window]));
-    auto dragDestinationActionMask = OptionSet<WebCore::DragDestinationAction>::fromRaw([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);
-    WebCore::DragData dragData(draggingInfo, client, global, static_cast<WebCore::DragOperation>(draggingInfo.draggingSourceOperationMask), applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);
+    auto dragDestinationActionMask = coreDragDestinationActionMask([m_view _web_dragDestinationActionForDraggingInfo:draggingInfo]);
+    auto dragOperationMask = static_cast<WebCore::DragOperation>(draggingInfo.draggingSourceOperationMask);
+    WebCore::DragData dragData(draggingInfo, client, global, dragOperationMask, applicationFlagsForDrag(m_view.getAutoreleased(), draggingInfo), dragDestinationActionMask);
     m_page->dragUpdated(dragData, draggingInfo.draggingPasteboard.name);
 
     NSInteger numberOfValidItemsForDrop = m_page->currentDragNumberOfFilesToBeAccepted();

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (262394 => 262395)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2020-06-01 22:04:42 UTC (rev 262395)
@@ -86,6 +86,7 @@
 #import "WebPageProxyMessages.h"
 #import "WebProcessProxy.h"
 #import "_WKActivatedElementInfoInternal.h"
+#import "_WKDragActionsInternal.h"
 #import "_WKElementAction.h"
 #import "_WKElementActionInternal.h"
 #import "_WKFocusedElementInfo.h"
@@ -7320,8 +7321,7 @@
     [self computeClientAndGlobalPointsForDropSession:session outClientPoint:&client outGlobalPoint:&global];
 
     WebCore::DragOperation dragOperationMask = static_cast<WebCore::DragOperation>(session.allowsMoveOperation ? WebCore::DragOperationEvery : (WebCore::DragOperationEvery & ~WebCore::DragOperationMove));
-    auto dragDestinationActionMask = OptionSet<WebCore::DragDestinationAction>::fromRaw(dragDestinationAction);
-    return { session, WebCore::roundedIntPoint(client), WebCore::roundedIntPoint(global), dragOperationMask, WebCore::DragApplicationNone, dragDestinationActionMask };
+    return { session, WebCore::roundedIntPoint(client), WebCore::roundedIntPoint(global), dragOperationMask, WebCore::DragApplicationNone, WebKit::coreDragDestinationActionMask(dragDestinationAction) };
 }
 
 - (void)cleanUpDragSourceSessionState

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (262394 => 262395)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-06-01 22:04:42 UTC (rev 262395)
@@ -937,6 +937,7 @@
 		4482734724528F6000A95493 /* CocoaImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 4482734624528F6000A95493 /* CocoaImage.h */; };
 		449D90DA21FDC30B00F677C0 /* LocalAuthenticationSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 449D90D821FD63FE00F677C0 /* LocalAuthenticationSoftLink.mm */; };
 		44E936FD2447C2D8009FA3E3 /* LegacyCustomProtocolID.h in Headers */ = {isa = PBXBuildFile; fileRef = 44E936FC2447C256009FA3E3 /* LegacyCustomProtocolID.h */; };
+		44EC3EA9247F5C090059489C /* _WKDragActionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 44EC3EA8247F5C080059489C /* _WKDragActionsInternal.h */; };
 		460F488F1F996F7100CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */; };
 		460F48901F996F7100CF4B87 /* WebSWContextManagerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */; };
 		461CCCA5231485A700B659B9 /* UIRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */; };
@@ -3536,6 +3537,7 @@
 		449D90D821FD63FE00F677C0 /* LocalAuthenticationSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalAuthenticationSoftLink.mm; sourceTree = "<group>"; };
 		44A481C621F2D27B00F2F919 /* ClientCertificateAuthenticationXPCConstants.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClientCertificateAuthenticationXPCConstants.cpp; sourceTree = "<group>"; };
 		44E936FC2447C256009FA3E3 /* LegacyCustomProtocolID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacyCustomProtocolID.h; sourceTree = "<group>"; };
+		44EC3EA8247F5C080059489C /* _WKDragActionsInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKDragActionsInternal.h; sourceTree = "<group>"; };
 		4603011A234BE31D009C8217 /* WebBackForwardCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebBackForwardCache.cpp; sourceTree = "<group>"; };
 		4603011B234BE31E009C8217 /* WebBackForwardCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardCache.h; sourceTree = "<group>"; };
 		460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSWContextManagerConnectionMessageReceiver.cpp; path = DerivedSources/WebKit2/WebSWContextManagerConnectionMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -7511,6 +7513,7 @@
 		37DFA6FE1810BB2D001F4A9F /* Cocoa */ = {
 			isa = PBXGroup;
 			children = (
+				44EC3EA8247F5C080059489C /* _WKDragActionsInternal.h */,
 				373D122118A473010066D9CC /* _WKFrameHandle.h */,
 				373D122018A473010066D9CC /* _WKFrameHandle.mm */,
 				373D122618A473F60066D9CC /* _WKFrameHandleInternal.h */,
@@ -10527,6 +10530,7 @@
 				A1A4FE5A18DCE9FA00B5EA8A /* _WKDownload.h in Headers */,
 				A1A4FE6118DD54A400B5EA8A /* _WKDownloadDelegate.h in Headers */,
 				A1A4FE5C18DCE9FA00B5EA8A /* _WKDownloadInternal.h in Headers */,
+				44EC3EA9247F5C090059489C /* _WKDragActionsInternal.h in Headers */,
 				379A873A18BBFE0F00588AF2 /* _WKElementAction.h in Headers */,
 				379A873C18BBFF0700588AF2 /* _WKElementActionInternal.h in Headers */,
 				1AD01BC91905D37E00C9C45F /* _WKErrorRecoveryAttempting.h in Headers */,

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (262394 => 262395)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2020-06-01 22:04:42 UTC (rev 262395)
@@ -1,3 +1,23 @@
+2020-06-01  David Kilzer  <ddkil...@apple.com>
+
+        Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
+        <https://webkit.org/b/212507>
+
+        Reviewed by Darin Adler.
+
+        * WebCoreSupport/WebDragClient.mm:
+        (kit):
+        - Add conversion function to avoid casting.
+        (WebDragClient::willPerformDragDestinationAction):
+        - Make use of kit() conversion function.
+        * WebView/WebView.mm:
+        (coreDragDestinationActionMask):
+        - Add conversion function to avoid casting.
+        (-[WebView dragDataForSession:client:global:operation:]):
+        (-[WebView actionMaskForDraggingInfo:]):
+        - Make use of coreDragDestinationActionMask() conversion
+          function.
+
 2020-06-01  Sam Weinig  <wei...@apple.com>
 
         Extended Color: Replace Color constructors taking numeric values with type specific factory functions

Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebDragClient.mm (262394 => 262395)


--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebDragClient.mm	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebDragClient.mm	2020-06-01 22:04:42 UTC (rev 262395)
@@ -68,6 +68,20 @@
 
 #if PLATFORM(MAC)
 
+static WebDragDestinationAction kit(WebCore::DragDestinationAction action)
+{
+    switch (action) {
+    case WebCore::DragDestinationAction::DHTML:
+        return WebDragDestinationActionDHTML;
+    case WebCore::DragDestinationAction::Edit:
+        return WebDragDestinationActionEdit;
+    case WebCore::DragDestinationAction::Load:
+        return WebDragDestinationActionLoad;
+    }
+    ASSERT_NOT_REACHED();
+    return WebDragDestinationActionNone;
+}
+
 bool WebDragClient::useLegacyDragClient()
 {
     return false;
@@ -86,7 +100,7 @@
 
 void WebDragClient::willPerformDragDestinationAction(WebCore::DragDestinationAction action, const WebCore::DragData& dragData)
 {
-    [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragDestinationAction:static_cast<WebDragDestinationAction>(action) forDraggingInfo:dragData.platformData()];
+    [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragDestinationAction:kit(action) forDraggingInfo:dragData.platformData()];
 }
 
 

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebView.mm (262394 => 262395)


--- trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2020-06-01 22:04:42 UTC (rev 262395)
@@ -112,7 +112,6 @@
 #import "WebStorageNamespaceProvider.h"
 #import "WebTextCompletionController.h"
 #import "WebTextIterator.h"
-#import "WebUIDelegate.h"
 #import "WebUIDelegatePrivate.h"
 #import "WebValidationMessageClient.h"
 #import "WebViewGroup.h"
@@ -578,6 +577,20 @@
 #endif
 @end
 
+#if ENABLE(DRAG_SUPPORT)
+static OptionSet<WebCore::DragDestinationAction> coreDragDestinationActionMask(WebDragDestinationAction actionMask)
+{
+    OptionSet<WebCore::DragDestinationAction> result;
+    if (actionMask & WebDragDestinationActionDHTML)
+        result.add(WebCore::DragDestinationAction::DHTML);
+    if (actionMask & WebDragDestinationActionEdit)
+        result.add(WebCore::DragDestinationAction::Edit);
+    if (actionMask & WebDragDestinationActionLoad)
+        result.add(WebCore::DragDestinationAction::Load);
+    return result;
+}
+#endif // ENABLE(DRAG_SUPPORT)
+
 WebCore::FindOptions coreOptions(WebFindOptions options)
 {
     WebCore::FindOptions findOptions;
@@ -1911,8 +1924,8 @@
 - (WebCore::DragData)dragDataForSession:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation
 {
     auto dragOperationMask = static_cast<WebCore::DragOperation>(operation);
-    auto dragDestinationMask = OptionSet<WebCore::DragDestinationAction>::fromRaw([self dragDestinationActionMaskForSession:session]);
-    return { session, WebCore::roundedIntPoint(clientPosition), WebCore::roundedIntPoint(globalPosition), dragOperationMask, WebCore::DragApplicationNone, dragDestinationMask };
+    auto dragDestinationActionMask = coreDragDestinationActionMask([self dragDestinationActionMaskForSession:session]);
+    return { session, WebCore::roundedIntPoint(clientPosition), WebCore::roundedIntPoint(globalPosition), dragOperationMask, WebCore::DragApplicationNone, dragDestinationActionMask };
 }
 
 - (uint64_t)_enteredDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation
@@ -1928,6 +1941,7 @@
     auto dragData = [self dragDataForSession:session client:clientPosition global:globalPosition operation:operation];
     return _private->page->dragController().dragUpdated(dragData);
 }
+
 - (void)_exitedDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation
 {
     WebThreadLock();
@@ -1934,6 +1948,7 @@
     auto dragData = [self dragDataForSession:session client:clientPosition global:globalPosition operation:operation];
     _private->page->dragController().dragExited(dragData);
 }
+
 - (void)_performDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation
 {
     [self _tryToPerformDataInteraction:session client:clientPosition global:globalPosition operation:operation];
@@ -6725,7 +6740,7 @@
 
 - (OptionSet<WebCore::DragDestinationAction>)actionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo
 {
-    return OptionSet<WebCore::DragDestinationAction>::fromRaw([[self _UIDelegateForwarder] webView:self dragDestinationActionMaskForDraggingInfo:draggingInfo]);
+    return coreDragDestinationActionMask([[self _UIDelegateForwarder] webView:self dragDestinationActionMaskForDraggingInfo:draggingInfo]);
 }
 
 - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)draggingInfo

Modified: trunk/Source/WebKitLegacy/win/ChangeLog (262394 => 262395)


--- trunk/Source/WebKitLegacy/win/ChangeLog	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKitLegacy/win/ChangeLog	2020-06-01 22:04:42 UTC (rev 262395)
@@ -1,3 +1,16 @@
+2020-06-01  David Kilzer  <ddkil...@apple.com>
+
+        Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
+        <https://webkit.org/b/212507>
+
+        Reviewed by Darin Adler.
+
+        * WebCoreSupport/WebDragClient.cpp:
+        (kit):
+        - Add conversion function to avoid casting.
+        (WebDragClient::willPerformDragDestinationAction):
+        - Make use of kit() conversion function.
+
 2020-06-01  Sam Weinig  <wei...@apple.com>
 
         Extended Color: Replace Color constructors taking numeric values with type specific factory functions

Modified: trunk/Source/WebKitLegacy/win/WebCoreSupport/WebDragClient.cpp (262394 => 262395)


--- trunk/Source/WebKitLegacy/win/WebCoreSupport/WebDragClient.cpp	2020-06-01 21:25:45 UTC (rev 262394)
+++ trunk/Source/WebKitLegacy/win/WebCoreSupport/WebDragClient.cpp	2020-06-01 22:04:42 UTC (rev 262395)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2007-2020 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -60,6 +60,20 @@
     return result;
 }
 
+static WebDragDestinationAction kit(DragDestinationAction action)
+{
+    switch (action) {
+    case DragDestinationAction::DHTML:
+        return WebDragDestinationActionDHTML;
+    case DragDestinationAction::Edit:
+        return WebDragDestinationActionEdit;
+    case DragDestinationAction::Load:
+        return WebDragDestinationActionLoad;
+    }
+    ASSERT_NOT_REACHED();
+    return WebDragDestinationActionNone;
+}
+
 WebDragClient::WebDragClient(WebView* webView)
     : m_webView(webView) 
 {
@@ -72,7 +86,7 @@
     //so we just call the delegate, and don't worry about whether it's implemented
     COMPtr<IWebUIDelegate> delegateRef = 0;
     if (SUCCEEDED(m_webView->uiDelegate(&delegateRef)))
-        delegateRef->willPerformDragDestinationAction(m_webView, (WebDragDestinationAction)action, dragData.platformData());
+        delegateRef->willPerformDragDestinationAction(m_webView, kit(action), dragData.platformData());
 }
 
 DragSourceAction WebDragClient::dragSourceActionMaskForPoint(const IntPoint& windowPoint)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to