Title: [208904] trunk/Source
Revision
208904
Author
[email protected]
Date
2016-11-18 15:35:28 -0800 (Fri, 18 Nov 2016)

Log Message

Refactor drag and drop for WebKit2 to encode DragData message exchange.
https://bugs.webkit.org/show_bug.cgi?id=164945

Reviewed by Tim Horton.

Source/WebCore:

No new tests. No change in functionality.

* loader/EmptyClients.h:
* page/DragClient.h:
* page/DragController.cpp:
(WebCore::createMouseEvent):
(WebCore::documentFragmentFromDragData):
(WebCore::DragController::dragIsMove):
(WebCore::DragController::dragEntered):
(WebCore::DragController::dragExited):
(WebCore::DragController::dragUpdated):
(WebCore::DragController::performDragOperation):
(WebCore::DragController::dragEnteredOrUpdated):
(WebCore::DragController::tryDocumentDrag):
(WebCore::DragController::operationForLoad):
(WebCore::DragController::dispatchTextInputEventFor):
(WebCore::DragController::concludeEditDrag):
(WebCore::DragController::canProcessDrag):
(WebCore::DragController::tryDHTMLDrag):
* page/DragController.h:
* page/efl/DragControllerEfl.cpp:
(WebCore::DragController::isCopyKeyDown):
(WebCore::DragController::dragOperation):
* page/gtk/DragControllerGtk.cpp:
(WebCore::DragController::isCopyKeyDown):
(WebCore::DragController::dragOperation):
* page/mac/DragControllerMac.mm:
(WebCore::DragController::isCopyKeyDown):
(WebCore::DragController::dragOperation):
* page/win/DragControllerWin.cpp:
(WebCore::DragController::dragOperation):
(WebCore::DragController::isCopyKeyDown):
* platform/DragData.h:
(WebCore::DragData::DragData):

Source/WebKit/mac:

* WebCoreSupport/WebDragClient.h:
* WebCoreSupport/WebDragClient.mm:
(WebDragClient::actionMaskForDrag):
(WebDragClient::willPerformDragDestinationAction):

Source/WebKit2:

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<DragData>::encode):
(IPC::ArgumentCoder<DragData>::decode):
* Shared/WebCoreArgumentCoders.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::performDragControllerAction):
* WebProcess/WebCoreSupport/WebDragClient.cpp:
(WebKit::WebDragClient::willPerformDragDestinationAction):
(WebKit::WebDragClient::actionMaskForDrag):
* WebProcess/WebCoreSupport/WebDragClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::performDragControllerAction):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (208903 => 208904)


--- trunk/Source/WebCore/ChangeLog	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/ChangeLog	2016-11-18 23:35:28 UTC (rev 208904)
@@ -1,3 +1,45 @@
+2016-11-18  Enrica Casucci  <[email protected]>
+
+        Refactor drag and drop for WebKit2 to encode DragData message exchange.
+        https://bugs.webkit.org/show_bug.cgi?id=164945
+
+        Reviewed by Tim Horton.
+
+        No new tests. No change in functionality.
+
+        * loader/EmptyClients.h:
+        * page/DragClient.h:
+        * page/DragController.cpp:
+        (WebCore::createMouseEvent):
+        (WebCore::documentFragmentFromDragData):
+        (WebCore::DragController::dragIsMove):
+        (WebCore::DragController::dragEntered):
+        (WebCore::DragController::dragExited):
+        (WebCore::DragController::dragUpdated):
+        (WebCore::DragController::performDragOperation):
+        (WebCore::DragController::dragEnteredOrUpdated):
+        (WebCore::DragController::tryDocumentDrag):
+        (WebCore::DragController::operationForLoad):
+        (WebCore::DragController::dispatchTextInputEventFor):
+        (WebCore::DragController::concludeEditDrag):
+        (WebCore::DragController::canProcessDrag):
+        (WebCore::DragController::tryDHTMLDrag):
+        * page/DragController.h:
+        * page/efl/DragControllerEfl.cpp:
+        (WebCore::DragController::isCopyKeyDown):
+        (WebCore::DragController::dragOperation):
+        * page/gtk/DragControllerGtk.cpp:
+        (WebCore::DragController::isCopyKeyDown):
+        (WebCore::DragController::dragOperation):
+        * page/mac/DragControllerMac.mm:
+        (WebCore::DragController::isCopyKeyDown):
+        (WebCore::DragController::dragOperation):
+        * page/win/DragControllerWin.cpp:
+        (WebCore::DragController::dragOperation):
+        (WebCore::DragController::isCopyKeyDown):
+        * platform/DragData.h:
+        (WebCore::DragData::DragData):
+
 2016-11-18  Jeremy Jones  <[email protected]>
 
         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.

Modified: trunk/Source/WebCore/loader/EmptyClients.h (208903 => 208904)


--- trunk/Source/WebCore/loader/EmptyClients.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/loader/EmptyClients.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -589,9 +589,9 @@
 public:
     EmptyDragClient() { }
     virtual ~EmptyDragClient() {}
-    void willPerformDragDestinationAction(DragDestinationAction, DragData&) override { }
+    void willPerformDragDestinationAction(DragDestinationAction, const DragData&) override { }
     void willPerformDragSourceAction(DragSourceAction, const IntPoint&, DataTransfer&) override { }
-    DragDestinationAction actionMaskForDrag(DragData&) override { return DragDestinationActionNone; }
+    DragDestinationAction actionMaskForDrag(const DragData&) override { return DragDestinationActionNone; }
     DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) override { return DragSourceActionNone; }
     void startDrag(DragImageRef, const IntPoint&, const IntPoint&, DataTransfer&, Frame&, bool) override { }
     void dragControllerDestroyed() override { }

Modified: trunk/Source/WebCore/page/DragClient.h (208903 => 208904)


--- trunk/Source/WebCore/page/DragClient.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/DragClient.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -41,9 +41,9 @@
 public:
     virtual void dragControllerDestroyed() = 0;
 
-    virtual void willPerformDragDestinationAction(DragDestinationAction, DragData&) = 0;
+    virtual void willPerformDragDestinationAction(DragDestinationAction, const DragData&) = 0;
     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, DataTransfer&) = 0;
-    virtual DragDestinationAction actionMaskForDrag(DragData&) = 0;
+    virtual DragDestinationAction actionMaskForDrag(const DragData&) = 0;
     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint& rootViewPoint) = 0;
     
     virtual void startDrag(DragImageRef, const IntPoint& dragImageOrigin, const IntPoint& eventPos, DataTransfer&, Frame&, bool linkDrag = false) = 0;

Modified: trunk/Source/WebCore/page/DragController.cpp (208903 => 208904)


--- trunk/Source/WebCore/page/DragController.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/DragController.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -94,7 +94,7 @@
 
 #if ENABLE(DRAG_SUPPORT)
     
-static PlatformMouseEvent createMouseEvent(DragData& dragData)
+static PlatformMouseEvent createMouseEvent(const DragData& dragData)
 {
     bool shiftKey = false;
     bool ctrlKey = false;
@@ -125,7 +125,7 @@
     m_client.dragControllerDestroyed();
 }
 
-static RefPtr<DocumentFragment> documentFragmentFromDragData(DragData& dragData, Frame& frame, Range& context, bool allowPlainText, bool& chosePlainText)
+static RefPtr<DocumentFragment> documentFragmentFromDragData(const DragData& dragData, Frame& frame, Range& context, bool allowPlainText, bool& chosePlainText)
 {
     chosePlainText = false;
 
@@ -162,7 +162,7 @@
     return nullptr;
 }
 
-bool DragController::dragIsMove(FrameSelection& selection, DragData& dragData)
+bool DragController::dragIsMove(FrameSelection& selection, const DragData& dragData)
 {
     const VisibleSelection& visibleSelection = selection.selection();
     return m_documentUnderMouse == m_dragInitiator && visibleSelection.isContentEditable() && visibleSelection.isRange() && !isCopyKeyDown(dragData);
@@ -182,12 +182,12 @@
     m_client.dragEnded();
 }
 
-DragOperation DragController::dragEntered(DragData& dragData)
+DragOperation DragController::dragEntered(const DragData& dragData)
 {
     return dragEnteredOrUpdated(dragData);
 }
 
-void DragController::dragExited(DragData& dragData)
+void DragController::dragExited(const DragData& dragData)
 {
     if (RefPtr<FrameView> v = m_page.mainFrame().view()) {
 #if ENABLE(DASHBOARD_SUPPORT)
@@ -207,12 +207,12 @@
     m_fileInputElementUnderMouse = nullptr;
 }
 
-DragOperation DragController::dragUpdated(DragData& dragData)
+DragOperation DragController::dragUpdated(const DragData& dragData)
 {
     return dragEnteredOrUpdated(dragData);
 }
 
-bool DragController::performDragOperation(DragData& dragData)
+bool DragController::performDragOperation(const DragData& dragData)
 {
     m_documentUnderMouse = m_page.mainFrame().documentAtPoint(dragData.clientPosition());
 
@@ -264,7 +264,7 @@
     m_documentUnderMouse = newDocument;
 }
 
-DragOperation DragController::dragEnteredOrUpdated(DragData& dragData)
+DragOperation DragController::dragEnteredOrUpdated(const DragData& dragData)
 {
     mouseMovedIntoDocument(m_page.mainFrame().documentAtPoint(dragData.clientPosition()));
 
@@ -316,7 +316,7 @@
     return downcast<Element>(node);
 }
 
-bool DragController::tryDocumentDrag(DragData& dragData, DragDestinationAction actionMask, DragOperation& dragOperation)
+bool DragController::tryDocumentDrag(const DragData& dragData, DragDestinationAction actionMask, DragOperation& dragOperation)
 {
     if (!m_documentUnderMouse)
         return false;
@@ -411,7 +411,7 @@
     return m_dragSourceAction;
 }
 
-DragOperation DragController::operationForLoad(DragData& dragData)
+DragOperation DragController::operationForLoad(const DragData& dragData)
 {
     Document* document = m_page.mainFrame().documentAtPoint(dragData.clientPosition());
 
@@ -442,7 +442,7 @@
     return !frame->selection().isNone() && frame->selection().selection().isContentEditable();
 }
 
-bool DragController::dispatchTextInputEventFor(Frame* innerFrame, DragData& dragData)
+bool DragController::dispatchTextInputEventFor(Frame* innerFrame, const DragData& dragData)
 {
     ASSERT(m_page.dragCaretController().hasCaret());
     String text = m_page.dragCaretController().isContentRichlyEditable() ? emptyString() : dragData.asPlainText();
@@ -450,7 +450,7 @@
     return target->dispatchEvent(TextEvent::createForDrop(innerFrame->document()->domWindow(), text));
 }
 
-bool DragController::concludeEditDrag(DragData& dragData)
+bool DragController::concludeEditDrag(const DragData& dragData)
 {
     RefPtr<HTMLInputElement> fileInput = m_fileInputElementUnderMouse;
     if (m_fileInputElementUnderMouse) {
@@ -554,7 +554,7 @@
     return true;
 }
 
-bool DragController::canProcessDrag(DragData& dragData)
+bool DragController::canProcessDrag(const DragData& dragData)
 {
     if (!dragData.containsCompatibleContent())
         return false;
@@ -603,7 +603,7 @@
     return DragOperationGeneric;
 }
 
-bool DragController::tryDHTMLDrag(DragData& dragData, DragOperation& operation)
+bool DragController::tryDHTMLDrag(const DragData& dragData, DragOperation& operation)
 {
     ASSERT(m_documentUnderMouse);
     Ref<MainFrame> mainFrame(m_page.mainFrame());

Modified: trunk/Source/WebCore/page/DragController.h (208903 => 208904)


--- trunk/Source/WebCore/page/DragController.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/DragController.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -56,10 +56,10 @@
 
         DragClient& client() const { return m_client; }
 
-        WEBCORE_EXPORT DragOperation dragEntered(DragData&);
-        WEBCORE_EXPORT void dragExited(DragData&);
-        WEBCORE_EXPORT DragOperation dragUpdated(DragData&);
-        WEBCORE_EXPORT bool performDragOperation(DragData&);
+        WEBCORE_EXPORT DragOperation dragEntered(const DragData&);
+        WEBCORE_EXPORT void dragExited(const DragData&);
+        WEBCORE_EXPORT DragOperation dragUpdated(const DragData&);
+        WEBCORE_EXPORT bool performDragOperation(const DragData&);
 
         bool mouseIsOverFileInput() const { return m_fileInputElementUnderMouse; }
         unsigned numberOfItemsToBeAccepted() const { return m_numberOfItemsToBeAccepted; }
@@ -96,17 +96,17 @@
         static const float DragImageAlpha;
 
     private:
-        bool dispatchTextInputEventFor(Frame*, DragData&);
-        bool canProcessDrag(DragData&);
-        bool concludeEditDrag(DragData&);
-        DragOperation dragEnteredOrUpdated(DragData&);
-        DragOperation operationForLoad(DragData&);
-        bool tryDocumentDrag(DragData&, DragDestinationAction, DragOperation&);
-        bool tryDHTMLDrag(DragData&, DragOperation&);
-        DragOperation dragOperation(DragData&);
+        bool dispatchTextInputEventFor(Frame*, const DragData&);
+        bool canProcessDrag(const DragData&);
+        bool concludeEditDrag(const DragData&);
+        DragOperation dragEnteredOrUpdated(const DragData&);
+        DragOperation operationForLoad(const DragData&);
+        bool tryDocumentDrag(const DragData&, DragDestinationAction, DragOperation&);
+        bool tryDHTMLDrag(const DragData&, DragOperation&);
+        DragOperation dragOperation(const DragData&);
         void clearDragCaret();
-        bool dragIsMove(FrameSelection&, DragData&);
-        bool isCopyKeyDown(DragData&);
+        bool dragIsMove(FrameSelection&, const DragData&);
+        bool isCopyKeyDown(const DragData&);
 
         void mouseMovedIntoDocument(Document*);
 

Modified: trunk/Source/WebCore/page/efl/DragControllerEfl.cpp (208903 => 208904)


--- trunk/Source/WebCore/page/efl/DragControllerEfl.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/efl/DragControllerEfl.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -45,12 +45,12 @@
 
 const float DragController::DragImageAlpha = 0.75f;
 
-bool DragController::isCopyKeyDown(DragData&)
+bool DragController::isCopyKeyDown(const DragData&)
 {
     return false;
 }
 
-DragOperation DragController::dragOperation(DragData& dragData)
+DragOperation DragController::dragOperation(const DragData& dragData)
 {
     if (dragData.containsURL())
         return DragOperationCopy;

Modified: trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp (208903 => 208904)


--- trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/gtk/DragControllerGtk.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -46,12 +46,12 @@
 
 const float DragController::DragImageAlpha = 0.75f;
 
-bool DragController::isCopyKeyDown(DragData&)
+bool DragController::isCopyKeyDown(const DragData&)
 {
     return false;
 }
 
-DragOperation DragController::dragOperation(DragData& dragData)
+DragOperation DragController::dragOperation(const DragData& dragData)
 {
     // FIXME: This logic is incomplete
     if (dragData.containsURL())

Modified: trunk/Source/WebCore/page/mac/DragControllerMac.mm (208903 => 208904)


--- trunk/Source/WebCore/page/mac/DragControllerMac.mm	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/mac/DragControllerMac.mm	2016-11-18 23:35:28 UTC (rev 208904)
@@ -54,12 +54,12 @@
 
 const float DragController::DragImageAlpha = 0.75f;
 
-bool DragController::isCopyKeyDown(DragData& dragData)
+bool DragController::isCopyKeyDown(const DragData& dragData)
 {
     return dragData.flags() & DragApplicationIsCopyKeyDown;
 }
     
-DragOperation DragController::dragOperation(DragData& dragData)
+DragOperation DragController::dragOperation(const DragData& dragData)
 {
     if ((dragData.flags() & DragApplicationIsModal) || !dragData.containsURL())
         return DragOperationNone;

Modified: trunk/Source/WebCore/page/win/DragControllerWin.cpp (208903 => 208904)


--- trunk/Source/WebCore/page/win/DragControllerWin.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/page/win/DragControllerWin.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -43,7 +43,7 @@
 
 const float DragController::DragImageAlpha = 0.75f;
 
-DragOperation DragController::dragOperation(DragData& dragData)
+DragOperation DragController::dragOperation(const DragData& dragData)
 {
     //FIXME: to match the macos behaviour we should return DragOperationNone
     //if we are a modal window, we are the drag source, or the window is an attached sheet
@@ -52,7 +52,7 @@
     return dragData.containsURL() && !m_didInitiateDrag ? DragOperationCopy : DragOperationNone;
 }
 
-bool DragController::isCopyKeyDown(DragData&)
+bool DragController::isCopyKeyDown(const DragData&)
 {
     return ::GetAsyncKeyState(VK_CONTROL);
 }

Modified: trunk/Source/WebCore/platform/DragData.h (208903 => 208904)


--- trunk/Source/WebCore/platform/DragData.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebCore/platform/DragData.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -80,6 +80,9 @@
     // 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);
     WEBCORE_EXPORT DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone);
+    // This constructor should used only by WebKit2 IPC because DragData
+    // is initialized by the decoder and not in the constructor.
+    DragData() { }
 #if PLATFORM(WIN)
     WEBCORE_EXPORT DragData(const DragDataMap&, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation sourceOperationMask, DragApplicationFlags = DragApplicationNone);
     const DragDataMap& dragDataMap();
@@ -107,9 +110,6 @@
 #endif
 
 #if PLATFORM(GTK)
-    // This constructor should used only by WebKit2 IPC because DragData
-    // is initialized by the decoder and not in the constructor.
-    DragData() { }
 
     DragData& operator =(const DragData& data)
     {

Modified: trunk/Source/WebKit/mac/ChangeLog (208903 => 208904)


--- trunk/Source/WebKit/mac/ChangeLog	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit/mac/ChangeLog	2016-11-18 23:35:28 UTC (rev 208904)
@@ -1,3 +1,15 @@
+2016-11-18  Enrica Casucci  <[email protected]>
+
+        Refactor drag and drop for WebKit2 to encode DragData message exchange.
+        https://bugs.webkit.org/show_bug.cgi?id=164945
+
+        Reviewed by Tim Horton.
+
+        * WebCoreSupport/WebDragClient.h:
+        * WebCoreSupport/WebDragClient.mm:
+        (WebDragClient::actionMaskForDrag):
+        (WebDragClient::willPerformDragDestinationAction):
+
 2016-11-18  Jeremy Jones  <[email protected]>
 
         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebDragClient.h (208903 => 208904)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebDragClient.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebDragClient.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -32,9 +32,9 @@
 class WebDragClient : public WebCore::DragClient {
 public:
     WebDragClient(WebView*);
-    void willPerformDragDestinationAction(WebCore::DragDestinationAction, WebCore::DragData&) override;
+    void willPerformDragDestinationAction(WebCore::DragDestinationAction, const WebCore::DragData&) override;
     void willPerformDragSourceAction(WebCore::DragSourceAction, const WebCore::IntPoint&, WebCore::DataTransfer&) override;
-    WebCore::DragDestinationAction actionMaskForDrag(WebCore::DragData&) override;
+    WebCore::DragDestinationAction actionMaskForDrag(const WebCore::DragData&) override;
     void dragControllerDestroyed() override;
     WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint& windowPoint) override;
     void startDrag(WebCore::DragImageRef, const WebCore::IntPoint& dragPos, const WebCore::IntPoint& eventPos, WebCore::DataTransfer&, WebCore::Frame&, bool linkDrag) override;

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm (208903 => 208904)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebDragClient.mm	2016-11-18 23:35:28 UTC (rev 208904)
@@ -66,12 +66,12 @@
     return (WebHTMLView*)[[kit(&frame->page()->mainFrame()) frameView] documentView];
 }
 
-WebCore::DragDestinationAction WebDragClient::actionMaskForDrag(WebCore::DragData& dragData)
+WebCore::DragDestinationAction WebDragClient::actionMaskForDrag(const WebCore::DragData& dragData)
 {
     return (WebCore::DragDestinationAction)[[m_webView _UIDelegateForwarder] webView:m_webView dragDestinationActionMaskForDraggingInfo:dragData.platformData()];
 }
 
-void WebDragClient::willPerformDragDestinationAction(WebCore::DragDestinationAction action, WebCore::DragData& dragData)
+void WebDragClient::willPerformDragDestinationAction(WebCore::DragDestinationAction action, const WebCore::DragData& dragData)
 {
     [[m_webView _UIDelegateForwarder] webView:m_webView willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:dragData.platformData()];
 }

Modified: trunk/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp (208903 => 208904)


--- trunk/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit/win/WebCoreSupport/WebDragClient.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -64,7 +64,7 @@
     ASSERT(webView);
 }
 
-DragDestinationAction WebDragClient::actionMaskForDrag(DragData& dragData)
+DragDestinationAction WebDragClient::actionMaskForDrag(const DragData& dragData)
 {
     COMPtr<IWebUIDelegate> delegateRef = 0;
     //Default behaviour (eg. no delegate, or callback not implemented) is to allow
@@ -76,7 +76,7 @@
     return (DragDestinationAction)mask;
 }
 
-void WebDragClient::willPerformDragDestinationAction(DragDestinationAction action, DragData& dragData)
+void WebDragClient::willPerformDragDestinationAction(DragDestinationAction action, const DragData& dragData)
 {
     //Default delegate for willPerformDragDestinationAction has no side effects
     //so we just call the delegate, and don't worry about whether it's implemented

Modified: trunk/Source/WebKit/win/WebCoreSupport/WebDragClient.h (208903 => 208904)


--- trunk/Source/WebKit/win/WebCoreSupport/WebDragClient.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit/win/WebCoreSupport/WebDragClient.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -35,9 +35,9 @@
     WebDragClient(WebView*);
     virtual void dragControllerDestroyed();
 
-    virtual WebCore::DragDestinationAction actionMaskForDrag(WebCore::DragData&);
+    virtual WebCore::DragDestinationAction actionMaskForDrag(const WebCore::DragData&);
     virtual WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint&);
-    virtual void willPerformDragDestinationAction(WebCore::DragDestinationAction, WebCore::DragData&);
+    virtual void willPerformDragDestinationAction(WebCore::DragDestinationAction, const WebCore::DragData&);
     virtual void willPerformDragSourceAction(WebCore::DragSourceAction, const WebCore::IntPoint&, WebCore::DataTransfer&);
     virtual void startDrag(WebCore::DragImageRef, const WebCore::IntPoint&, const WebCore::IntPoint&, WebCore::DataTransfer&, WebCore::Frame&, bool);
 

Modified: trunk/Source/WebKit2/ChangeLog (208903 => 208904)


--- trunk/Source/WebKit2/ChangeLog	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/ChangeLog	2016-11-18 23:35:28 UTC (rev 208904)
@@ -1,3 +1,25 @@
+2016-11-18  Enrica Casucci  <[email protected]>
+
+        Refactor drag and drop for WebKit2 to encode DragData message exchange.
+        https://bugs.webkit.org/show_bug.cgi?id=164945
+
+        Reviewed by Tim Horton.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<DragData>::encode):
+        (IPC::ArgumentCoder<DragData>::decode):
+        * Shared/WebCoreArgumentCoders.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::performDragControllerAction):
+        * WebProcess/WebCoreSupport/WebDragClient.cpp:
+        (WebKit::WebDragClient::willPerformDragDestinationAction):
+        (WebKit::WebDragClient::actionMaskForDrag):
+        * WebProcess/WebCoreSupport/WebDragClient.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::performDragControllerAction):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2016-11-18  Jeremy Jones  <[email protected]>
 
         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp (208903 => 208904)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -37,6 +37,7 @@
 #include <WebCore/DatabaseDetails.h>
 #include <WebCore/DictationAlternative.h>
 #include <WebCore/DictionaryPopupInfo.h>
+#include <WebCore/DragData.h>
 #include <WebCore/Editor.h>
 #include <WebCore/EventTrackingRegions.h>
 #include <WebCore/FileChooser.h>
@@ -1183,7 +1184,48 @@
     return true;
 }
 
+#if ENABLE(DRAG_SUPPORT)
+void ArgumentCoder<DragData>::encode(Encoder& encoder, const DragData& dragData)
+{
+    encoder << dragData.clientPosition();
+    encoder << dragData.globalPosition();
+    encoder.encodeEnum(dragData.draggingSourceOperationMask());
+    encoder.encodeEnum(dragData.flags());
+#if PLATFORM(MAC)
+    encoder << dragData.pasteboardName();
+#endif
+}
 
+bool ArgumentCoder<DragData>::decode(Decoder& decoder, DragData& dragData)
+{
+    IntPoint clientPosition;
+    if (!decoder.decode(clientPosition))
+        return false;
+
+    IntPoint globalPosition;
+    if (!decoder.decode(globalPosition))
+        return false;
+
+    DragOperation draggingSourceOperationMask;
+    if (!decoder.decodeEnum(draggingSourceOperationMask))
+        return false;
+
+    DragApplicationFlags applicationFlags;
+    if (!decoder.decodeEnum(applicationFlags))
+        return false;
+
+    String pasteboardName;
+#if PLATFORM(MAC)
+    if (!decoder.decode(pasteboardName))
+        return false;
+#endif
+
+    dragData = DragData(pasteboardName, clientPosition, globalPosition, draggingSourceOperationMask, applicationFlags);
+
+    return true;
+}
+#endif
+
 void ArgumentCoder<CompositionUnderline>::encode(Encoder& encoder, const CompositionUnderline& underline)
 {
     encoder << underline.startOffset;

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h (208903 => 208904)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -41,6 +41,7 @@
 class CubicBezierTimingFunction;
 class Cursor;
 class DatabaseDetails;
+class DragData;
 class FilterOperation;
 class FilterOperations;
 class FloatPoint;
@@ -326,6 +327,13 @@
     static bool decode(Decoder&, WebCore::Color&);
 };
 
+#if ENABLE(DRAG_SUPPORT)
+template<> struct ArgumentCoder<WebCore::DragData> {
+    static void encode(Encoder&, const WebCore::DragData&);
+    static bool decode(Decoder&, WebCore::DragData&);
+};
+#endif
+
 #if PLATFORM(COCOA)
 template<> struct ArgumentCoder<WebCore::MachSendRight> {
     static void encode(Encoder&, const WebCore::MachSendRight&);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (208903 => 208904)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -1809,7 +1809,7 @@
     WebSelectionData selection(*dragData.platformData());
     m_process->send(Messages::WebPage::PerformDragControllerAction(action, dragData.clientPosition(), dragData.globalPosition(), dragData.draggingSourceOperationMask(), selection, dragData.flags()), m_pageID);
 #else
-    m_process->send(Messages::WebPage::PerformDragControllerAction(action, dragData.clientPosition(), dragData.globalPosition(), dragData.draggingSourceOperationMask(), dragStorageName, dragData.flags(), sandboxExtensionHandle, sandboxExtensionsForUpload), m_pageID);
+    m_process->send(Messages::WebPage::PerformDragControllerAction(action, dragData, sandboxExtensionHandle, sandboxExtensionsForUpload), m_pageID);
 #endif
 }
 

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp (208903 => 208904)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -34,7 +34,7 @@
 
 namespace WebKit {
 
-void WebDragClient::willPerformDragDestinationAction(DragDestinationAction action, DragData&)
+void WebDragClient::willPerformDragDestinationAction(DragDestinationAction action, const DragData&)
 {
     if (action == DragDestinationActionLoad)
         m_page->willPerformLoadDragDestinationAction();
@@ -46,7 +46,7 @@
 {
 }
 
-DragDestinationAction WebDragClient::actionMaskForDrag(DragData&)
+DragDestinationAction WebDragClient::actionMaskForDrag(const DragData&)
 {
     return DragDestinationActionAny;
 }

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h (208903 => 208904)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -42,9 +42,9 @@
     }
 
 private:
-    void willPerformDragDestinationAction(WebCore::DragDestinationAction, WebCore::DragData&) override;
+    void willPerformDragDestinationAction(WebCore::DragDestinationAction, const WebCore::DragData&) override;
     void willPerformDragSourceAction(WebCore::DragSourceAction, const WebCore::IntPoint&, WebCore::DataTransfer&) override;
-    WebCore::DragDestinationAction actionMaskForDrag(WebCore::DragData&) override;
+    WebCore::DragDestinationAction actionMaskForDrag(const WebCore::DragData&) override;
     WebCore::DragSourceAction dragSourceActionMaskForPoint(const WebCore::IntPoint& windowPoint) override;
 
     void startDrag(WebCore::DragImageRef, const WebCore::IntPoint& dragImageOrigin, const WebCore::IntPoint& eventPos, WebCore::DataTransfer&, WebCore::Frame&, bool linkDrag = false) override;

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (208903 => 208904)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2016-11-18 23:35:28 UTC (rev 208904)
@@ -3449,7 +3449,7 @@
     }
 }
 #else
-void WebPage::performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const String& dragStorageName, uint32_t flags, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsHandleArray)
+void WebPage::performDragControllerAction(uint64_t action, const WebCore::DragData& dragData, const SandboxExtension::Handle& sandboxExtensionHandle, const SandboxExtension::HandleArray& sandboxExtensionsHandleArray)
 {
     if (!m_page) {
         send(Messages::WebPageProxy::DidPerformDragControllerAction(DragOperationNone, false, 0));
@@ -3456,7 +3456,6 @@
         return;
     }
 
-    DragData dragData(dragStorageName, clientPosition, globalPosition, static_cast<DragOperation>(draggingSourceOperationMask), static_cast<DragApplicationFlags>(flags));
     switch (action) {
     case DragControllerActionEntered: {
         DragOperation resolvedDragOperation = m_page->dragController().dragEntered(dragData);

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (208903 => 208904)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2016-11-18 23:35:28 UTC (rev 208904)
@@ -734,7 +734,7 @@
 #if PLATFORM(GTK)
     void performDragControllerAction(uint64_t action, const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, uint64_t draggingSourceOperationMask, WebSelectionData&&, uint32_t flags);
 #else
-    void performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WTF::String& dragStorageName, uint32_t flags, const SandboxExtension::Handle&, const SandboxExtension::HandleArray&);
+    void performDragControllerAction(uint64_t action, const WebCore::DragData&, const SandboxExtension::Handle&, const SandboxExtension::HandleArray&);
 #endif
     void dragEnded(WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t operation);
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (208903 => 208904)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2016-11-18 23:33:05 UTC (rev 208903)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2016-11-18 23:35:28 UTC (rev 208904)
@@ -238,7 +238,7 @@
     PerformDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, struct WebKit::WebSelectionData selection, uint32_t flags)
 #endif
 #if !PLATFORM(GTK) && ENABLE(DRAG_SUPPORT)
-    PerformDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, String dragStorageName, uint32_t flags, WebKit::SandboxExtension::Handle sandboxExtensionHandle, WebKit::SandboxExtension::HandleArray sandboxExtensionsForUpload)
+    PerformDragControllerAction(uint64_t action, WebCore::DragData dragData, WebKit::SandboxExtension::Handle sandboxExtensionHandle, WebKit::SandboxExtension::HandleArray sandboxExtensionsForUpload)
 #endif
 #if ENABLE(DRAG_SUPPORT)
     DidStartDrag()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to