Title: [265480] trunk
Revision
265480
Author
[email protected]
Date
2020-08-10 17:26:07 -0700 (Mon, 10 Aug 2020)

Log Message

AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
https://bugs.webkit.org/show_bug.cgi?id=215341
<rdar://problem/59344091>

Reviewed by Alex Christensen.

Source/WebCore:

Consistently use OptionSet<DragApplicationFlags> instead of DragApplicationFlags.

* page/gtk/DragControllerGtk.cpp:
(WebCore::DragController::isCopyKeyDown):
* page/mac/DragControllerMac.mm:
(WebCore::DragController::isCopyKeyDown):
(WebCore::DragController::dragOperation):
* platform/DragData.cpp:
(WebCore::DragData::DragData):
* platform/DragData.h:
(WebCore::DragData::flags const):
* platform/cocoa/DragDataCocoa.mm:
(WebCore::DragData::DragData):
* platform/win/DragDataWin.cpp:
(WebCore::DragData::DragData):

Source/WebKit:

DragApplicationFlags is an enum containing flags. It was being sent over IPC as a DragApplicationFlags
instead of an OptionSet<DragApplicationFlags>, and thus would fail enum value validation when decoding
when more than one flag is set.

* Scripts/webkit/messages.py:
* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<DragData>::decode):
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::applicationFlagsForDrag):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::performDragControllerAction):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Tools:

Add API test coverage.

* TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
(overrideCurrentEvent):
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (265479 => 265480)


--- trunk/Source/WebCore/ChangeLog	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/ChangeLog	2020-08-11 00:26:07 UTC (rev 265480)
@@ -1,3 +1,27 @@
+2020-08-10  Chris Dumez  <[email protected]>
+
+        AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
+        https://bugs.webkit.org/show_bug.cgi?id=215341
+        <rdar://problem/59344091>
+
+        Reviewed by Alex Christensen.
+
+        Consistently use OptionSet<DragApplicationFlags> instead of DragApplicationFlags.
+
+        * page/gtk/DragControllerGtk.cpp:
+        (WebCore::DragController::isCopyKeyDown):
+        * page/mac/DragControllerMac.mm:
+        (WebCore::DragController::isCopyKeyDown):
+        (WebCore::DragController::dragOperation):
+        * platform/DragData.cpp:
+        (WebCore::DragData::DragData):
+        * platform/DragData.h:
+        (WebCore::DragData::flags const):
+        * platform/cocoa/DragDataCocoa.mm:
+        (WebCore::DragData::DragData):
+        * platform/win/DragDataWin.cpp:
+        (WebCore::DragData::DragData):
+
 2020-08-10  Peng Liu  <[email protected]>
 
         MobileSafari crashes at WebCore: -[WebAVPlayerController seekToTime:toleranceBefore:toleranceAfter:]

Modified: trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp (265479 => 265480)


--- trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp	2020-08-11 00:26:07 UTC (rev 265480)
@@ -47,7 +47,7 @@
 
 bool DragController::isCopyKeyDown(const DragData& dragData)
 {
-    return dragData.flags() & DragApplicationIsCopyKeyDown;
+    return dragData.flags().contains(DragApplicationIsCopyKeyDown);
 }
 
 Optional<DragOperation> DragController::dragOperation(const DragData& dragData)

Modified: trunk/Source/WebCore/page/mac/DragControllerMac.mm (265479 => 265480)


--- trunk/Source/WebCore/page/mac/DragControllerMac.mm	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/page/mac/DragControllerMac.mm	2020-08-11 00:26:07 UTC (rev 265480)
@@ -61,12 +61,12 @@
 
 bool DragController::isCopyKeyDown(const DragData& dragData)
 {
-    return dragData.flags() & DragApplicationIsCopyKeyDown;
+    return dragData.flags().contains(DragApplicationIsCopyKeyDown);
 }
     
 Optional<DragOperation> DragController::dragOperation(const DragData& dragData)
 {
-    if (dragData.flags() & DragApplicationIsModal)
+    if (dragData.flags().contains(DragApplicationIsModal))
         return WTF::nullopt;
 
     bool mayContainURL;
@@ -78,7 +78,7 @@
     if (!mayContainURL && !dragData.containsPromise())
         return WTF::nullopt;
 
-    if (!m_documentUnderMouse || (!(dragData.flags() & (DragApplicationHasAttachedSheet | DragApplicationIsSource))))
+    if (!m_documentUnderMouse || (!(dragData.flags().containsAll({ DragApplicationHasAttachedSheet, DragApplicationIsSource }))))
         return DragOperation::Copy;
 
     return WTF::nullopt;

Modified: trunk/Source/WebCore/platform/DragData.cpp (265479 => 265480)


--- trunk/Source/WebCore/platform/DragData.cpp	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/DragData.cpp	2020-08-11 00:26:07 UTC (rev 265480)
@@ -32,7 +32,7 @@
 namespace WebCore {
 
 #if !PLATFORM(COCOA)
-DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
     : m_clientPosition(clientPosition)
     , m_globalPosition(globalPosition)
     , m_platformDragData(data)
@@ -42,7 +42,7 @@
 {  
 }
 
-DragData::DragData(const String&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(const String&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
     : m_clientPosition(clientPosition)
     , m_globalPosition(globalPosition)
     , m_platformDragData(0)

Modified: trunk/Source/WebCore/platform/DragData.h (265479 => 265480)


--- trunk/Source/WebCore/platform/DragData.h	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/DragData.h	2020-08-11 00:26:07 UTC (rev 265480)
@@ -58,8 +58,7 @@
 
 namespace WebCore {
 
-enum DragApplicationFlags {
-    DragApplicationNone = 0,
+enum DragApplicationFlags : uint8_t {
     DragApplicationIsModal = 1,
     DragApplicationIsSource = 2,
     DragApplicationHasAttachedSheet = 4,
@@ -76,13 +75,13 @@
     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, OptionSet<DragOperation>, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> = anyDragDestinationAction());
-    WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, DragApplicationFlags = DragApplicationNone, OptionSet<DragDestinationAction> = anyDragDestinationAction());
+    WEBCORE_EXPORT DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, OptionSet<DragApplicationFlags> = { }, OptionSet<DragDestinationAction> = anyDragDestinationAction());
+    WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation>, OptionSet<DragApplicationFlags> = { }, 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;
 #if PLATFORM(WIN)
-    WEBCORE_EXPORT DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags = DragApplicationNone);
+    WEBCORE_EXPORT DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> = { });
     const DragDataMap& dragDataMap();
     void getDragFileDescriptorData(int& size, String& pathname);
     void getDragFileContentData(int size, void* dataBlob);
@@ -89,7 +88,7 @@
 #endif
     const IntPoint& clientPosition() const { return m_clientPosition; }
     const IntPoint& globalPosition() const { return m_globalPosition; }
-    DragApplicationFlags flags() const { return m_applicationFlags; }
+    OptionSet<DragApplicationFlags> flags() const { return m_applicationFlags; }
     DragDataRef platformData() const { return m_platformDragData; }
     OptionSet<DragOperation> draggingSourceOperationMask() const { return m_draggingSourceOperationMask; }
     bool containsURL(FilenameConversionPolicy = ConvertFilenames) const;
@@ -131,7 +130,7 @@
     IntPoint m_globalPosition;
     DragDataRef m_platformDragData;
     OptionSet<DragOperation> m_draggingSourceOperationMask;
-    DragApplicationFlags m_applicationFlags;
+    OptionSet<DragApplicationFlags> m_applicationFlags;
     Vector<String> m_fileNames;
     OptionSet<DragDestinationAction> m_dragDestinationActionMask;
 #if PLATFORM(COCOA)
@@ -149,7 +148,6 @@
 template<> struct EnumTraits<WebCore::DragApplicationFlags> {
     using values = EnumValues<
         WebCore::DragApplicationFlags,
-        WebCore::DragApplicationFlags::DragApplicationNone,
         WebCore::DragApplicationFlags::DragApplicationIsModal,
         WebCore::DragApplicationFlags::DragApplicationIsSource,
         WebCore::DragApplicationFlags::DragApplicationHasAttachedSheet,

Modified: trunk/Source/WebCore/platform/cocoa/DragDataCocoa.mm (265479 => 265480)


--- trunk/Source/WebCore/platform/cocoa/DragDataCocoa.mm	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/cocoa/DragDataCocoa.mm	2020-08-11 00:26:07 UTC (rev 265480)
@@ -116,7 +116,7 @@
 #endif
 }
 
-DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
     : m_clientPosition(clientPosition)
     , m_globalPosition(globalPosition)
     , m_platformDragData(data)
@@ -131,7 +131,7 @@
 {
 }
 
-DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags, OptionSet<DragDestinationAction> destinationActionMask)
+DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags, OptionSet<DragDestinationAction> destinationActionMask)
     : m_clientPosition(clientPosition)
     , m_globalPosition(globalPosition)
     , m_platformDragData(0)

Modified: trunk/Source/WebCore/platform/win/DragDataWin.cpp (265479 => 265480)


--- trunk/Source/WebCore/platform/win/DragDataWin.cpp	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebCore/platform/win/DragDataWin.cpp	2020-08-11 00:26:07 UTC (rev 265480)
@@ -41,7 +41,7 @@
 namespace WebCore {
 
 DragData::DragData(const DragDataMap& data, const IntPoint& clientPosition, const IntPoint& globalPosition,
-    OptionSet<DragOperation> sourceOperationMask, DragApplicationFlags flags)
+    OptionSet<DragOperation> sourceOperationMask, OptionSet<DragApplicationFlags> flags)
     : m_clientPosition(clientPosition)
     , m_globalPosition(globalPosition)
     , m_platformDragData(0)

Modified: trunk/Source/WebKit/ChangeLog (265479 => 265480)


--- trunk/Source/WebKit/ChangeLog	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/ChangeLog	2020-08-11 00:26:07 UTC (rev 265480)
@@ -1,3 +1,25 @@
+2020-08-10  Chris Dumez  <[email protected]>
+
+        AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
+        https://bugs.webkit.org/show_bug.cgi?id=215341
+        <rdar://problem/59344091>
+
+        Reviewed by Alex Christensen.
+
+        DragApplicationFlags is an enum containing flags. It was being sent over IPC as a DragApplicationFlags
+        instead of an OptionSet<DragApplicationFlags>, and thus would fail enum value validation when decoding
+        when more than one flag is set.
+
+        * Scripts/webkit/messages.py:
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<DragData>::decode):
+        * UIProcess/Cocoa/WebViewImpl.mm:
+        (WebKit::applicationFlagsForDrag):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::performDragControllerAction):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2020-08-10  David Kilzer  <[email protected]>
 
         Use RefPtr for WebKit::WebOpenPanelResultListenerProxy

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (265479 => 265480)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2020-08-11 00:26:07 UTC (rev 265480)
@@ -207,6 +207,7 @@
         'String',
         'WebCore::ColorSpace',
         'WebCore::DictationContext',
+        'WebCore::DragApplicationFlags',
         'WebCore::DocumentIdentifier',
         'WebCore::DocumentOrWorkerIdentifier',
         'WebCore::FetchIdentifier',
@@ -591,6 +592,7 @@
         'WebCore::DOMPasteAccessResponse': ['<WebCore/DOMPasteAccess.h>'],
         'WebCore::DocumentOrWorkerIdentifier': ['<WebCore/ServiceWorkerTypes.h>'],
         'WebKit::DocumentEditingContextRequest': ['"DocumentEditingContext.h"'],
+        'WebCore::DragApplicationFlags': ['<WebCore/DragData.h>'],
         'WebCore::DragHandlingMethod': ['<WebCore/DragActions.h>'],
         'WebCore::DragOperation': ['<WebCore/DragActions.h>'],
         'WebCore::DragSourceAction': ['<WebCore/DragActions.h>'],

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp (265479 => 265480)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2020-08-11 00:26:07 UTC (rev 265480)
@@ -1554,7 +1554,7 @@
     if (!decoder.decode(draggingSourceOperationMask))
         return false;
 
-    DragApplicationFlags applicationFlags;
+    OptionSet<DragApplicationFlags> applicationFlags;
     if (!decoder.decode(applicationFlags))
         return false;
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (265479 => 265480)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2020-08-11 00:26:07 UTC (rev 265480)
@@ -3929,19 +3929,19 @@
     m_page->dragEnded(WebCore::IntPoint(windowMouseLoc), WebCore::IntPoint(WebCore::globalPoint(windowMouseLoc, [m_view window])), coreDragOperationMask(dragOperationMask));
 }
 
-static WebCore::DragApplicationFlags applicationFlagsForDrag(NSView *view, id <NSDraggingInfo> draggingInfo)
+static OptionSet<WebCore::DragApplicationFlags> applicationFlagsForDrag(NSView *view, id <NSDraggingInfo> draggingInfo)
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer));
-    uint32_t flags = 0;
+    OptionSet<WebCore::DragApplicationFlags> flags;
     if ([NSApp modalWindow])
-        flags = WebCore::DragApplicationIsModal;
+        flags.add(WebCore::DragApplicationIsModal);
     if (view.window.attachedSheet)
-        flags |= WebCore::DragApplicationHasAttachedSheet;
+        flags.add(WebCore::DragApplicationHasAttachedSheet);
     if (draggingInfo.draggingSource == view)
-        flags |= WebCore::DragApplicationIsSource;
+        flags.add(WebCore::DragApplicationIsSource);
     if ([NSApp currentEvent].modifierFlags & NSEventModifierFlagOption)
-        flags |= WebCore::DragApplicationIsCopyKeyDown;
-    return static_cast<WebCore::DragApplicationFlags>(flags);
+        flags.add(WebCore::DragApplicationIsCopyKeyDown);
+    return flags;
 
 }
 

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (265479 => 265480)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2020-08-11 00:26:07 UTC (rev 265480)
@@ -7465,7 +7465,7 @@
     auto dragOperationMask = WebCore::anyDragOperation();
     if (!session.allowsMoveOperation)
         dragOperationMask.remove(WebCore::DragOperation::Move);
-    return { session, WebCore::roundedIntPoint(client), WebCore::roundedIntPoint(global), dragOperationMask, WebCore::DragApplicationNone, WebKit::coreDragDestinationActionMask(dragDestinationAction) };
+    return { session, WebCore::roundedIntPoint(client), WebCore::roundedIntPoint(global), dragOperationMask, { }, WebKit::coreDragDestinationActionMask(dragDestinationAction) };
 }
 
 - (void)cleanUpDragSourceSessionState

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (265479 => 265480)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-08-11 00:26:07 UTC (rev 265480)
@@ -3981,7 +3981,7 @@
 #if ENABLE(DRAG_SUPPORT)
 
 #if PLATFORM(GTK)
-void WebPage::performDragControllerAction(DragControllerAction action, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> draggingSourceOperationMask, SelectionData&& selectionData, uint32_t flags)
+void WebPage::performDragControllerAction(DragControllerAction action, const IntPoint& clientPosition, const IntPoint& globalPosition, OptionSet<DragOperation> draggingSourceOperationMask, SelectionData&& selectionData, OptionSet<DragApplicationFlags> flags)
 {
     if (!m_page) {
         send(Messages::WebPageProxy::DidPerformDragControllerAction(WTF::nullopt, DragHandlingMethod::None, false, 0, { }, { }));
@@ -3988,7 +3988,7 @@
         return;
     }
 
-    DragData dragData(&selectionData, clientPosition, globalPosition, draggingSourceOperationMask, static_cast<DragApplicationFlags>(flags));
+    DragData dragData(&selectionData, clientPosition, globalPosition, draggingSourceOperationMask, flags);
     switch (action) {
     case DragControllerAction::Entered: {
         auto resolvedDragOperation = m_page->dragController().dragEntered(dragData);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (265479 => 265480)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-08-11 00:26:07 UTC (rev 265480)
@@ -193,6 +193,7 @@
 class TextCheckingRequest;
 class VisiblePosition;
 
+enum DragApplicationFlags : uint8_t;
 enum SyntheticClickType : int8_t;
 enum class DOMPasteAccessResponse : uint8_t;
 enum class DragHandlingMethod : uint8_t;
@@ -900,7 +901,7 @@
     void restoreSelectionInFocusedEditableElement();
 
 #if ENABLE(DRAG_SUPPORT) && PLATFORM(GTK)
-    void performDragControllerAction(DragControllerAction, const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData&&, uint32_t flags);
+    void performDragControllerAction(DragControllerAction, const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData&&, OptionSet<WebCore::DragApplicationFlags>);
 #endif
 
 #if ENABLE(DRAG_SUPPORT) && !PLATFORM(GTK)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (265479 => 265480)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-08-11 00:26:07 UTC (rev 265480)
@@ -309,7 +309,7 @@
 
     # Drag and drop.
 #if PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
-    PerformDragControllerAction(enum:uint8_t WebKit::DragControllerAction action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData selection, uint32_t flags)
+    PerformDragControllerAction(enum:uint8_t WebKit::DragControllerAction action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, OptionSet<WebCore::DragOperation> draggingSourceOperationMask, WebCore::SelectionData selection, OptionSet<WebCore::DragApplicationFlags> flags)
 #endif
 #if !PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
     PerformDragControllerAction(enum:uint8_t WebKit::DragControllerAction action, WebCore::DragData dragData, WebKit::SandboxExtension::Handle sandboxExtensionHandle, WebKit::SandboxExtension::HandleArray sandboxExtensionsForUpload)

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebView.mm (265479 => 265480)


--- trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2020-08-11 00:26:07 UTC (rev 265480)
@@ -2068,7 +2068,7 @@
 {
     auto dragOperationMask = coreDragOperationMask(operation);
     auto dragDestinationActionMask = coreDragDestinationActionMask([self dragDestinationActionMaskForSession:session]);
-    return { session, WebCore::roundedIntPoint(clientPosition), WebCore::roundedIntPoint(globalPosition), dragOperationMask, WebCore::DragApplicationNone, dragDestinationActionMask };
+    return { session, WebCore::roundedIntPoint(clientPosition), WebCore::roundedIntPoint(globalPosition), dragOperationMask, { }, dragDestinationActionMask };
 }
 
 - (uint64_t)_enteredDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation

Modified: trunk/Tools/ChangeLog (265479 => 265480)


--- trunk/Tools/ChangeLog	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Tools/ChangeLog	2020-08-11 00:26:07 UTC (rev 265480)
@@ -1,3 +1,17 @@
+2020-08-10  Chris Dumez  <[email protected]>
+
+        AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
+        https://bugs.webkit.org/show_bug.cgi?id=215341
+        <rdar://problem/59344091>
+
+        Reviewed by Alex Christensen.
+
+        Add API test coverage.
+
+        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
+        (overrideCurrentEvent):
+        (TEST):
+
 2020-08-10  Simon Fraser  <[email protected]>
 
         Add Sam Sneddon to contributors.json

Modified: trunk/Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm (265479 => 265480)


--- trunk/Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm	2020-08-11 00:25:43 UTC (rev 265479)
+++ trunk/Tools/TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm	2020-08-11 00:26:07 UTC (rev 265480)
@@ -26,8 +26,10 @@
 #import "config.h"
 
 #import "DragAndDropSimulator.h"
+#import "InstanceMethodSwizzler.h"
 #import "PlatformUtilities.h"
 #import <WebKit/WKPreferencesPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
 
 #if ENABLE(DRAG_SUPPORT) && PLATFORM(MAC)
 
@@ -136,6 +138,35 @@
     EXPECT_EQ(1, [webView stringByEvaluatingJavaScript:@"filecount.textContent"].integerValue);
 }
 
+static NSEvent *overrideCurrentEvent()
+{
+    return [NSEvent mouseEventWithType:NSEventTypeLeftMouseDragged
+        location:NSMakePoint(0, 200)
+        modifierFlags:NSEventModifierFlagOption
+        timestamp:[NSDate timeIntervalSinceReferenceDate]
+        windowNumber:0
+        context:nil
+        eventNumber:1
+        clickCount:1
+        pressure:1];
+}
+
+TEST(DragAndDropTests, DragImageWithOptionKeyDown)
+{
+    InstanceMethodSwizzler swizzler([NSApp class], @selector(currentEvent), reinterpret_cast<IMP>(overrideCurrentEvent));
+
+    auto simulator = adoptNS([[DragAndDropSimulator alloc] initWithWebViewFrame:NSMakeRect(0, 0, 400, 400)]);
+    TestWKWebView *webView = [simulator webView];
+
+    [webView synchronouslyLoadTestPageNamed:@"image-and-contenteditable"];
+
+    auto pid = [webView _webProcessIdentifier];
+    [simulator runFrom:NSMakePoint(100, 100) to:NSMakePoint(100, 300)];
+
+    EXPECT_EQ(pid, [webView _webProcessIdentifier]);
+}
+
+
 TEST(DragAndDropTests, ProvideImageDataForMultiplePasteboards)
 {
     auto simulator = adoptNS([[DragAndDropSimulator alloc] initWithWebViewFrame:NSMakeRect(0, 0, 400, 400)]);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to