Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Unified Diff: third_party/WebKit/Source/core/page/DragController.cpp

Issue 1888773003: Merge DragClientImpl into core. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: missing file. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/page/DragController.cpp
diff --git a/third_party/WebKit/Source/core/page/DragController.cpp b/third_party/WebKit/Source/core/page/DragController.cpp
index 2c7442658bea9d4e72a5be13f2a452728b1b3f6b..dd065e88c8ac22a5070ef7c31fd46957148d70cf 100644
--- a/third_party/WebKit/Source/core/page/DragController.cpp
+++ b/third_party/WebKit/Source/core/page/DragController.cpp
@@ -55,27 +55,33 @@
#include "core/html/HTMLInputElement.h"
#include "core/html/HTMLPlugInElement.h"
#include "core/input/EventHandler.h"
+#include "core/layout/HitTestRequest.h"
+#include "core/layout/HitTestResult.h"
+#include "core/layout/LayoutImage.h"
#include "core/layout/LayoutTheme.h"
#include "core/layout/LayoutView.h"
#include "core/loader/FrameLoadRequest.h"
#include "core/loader/FrameLoader.h"
#include "core/page/ChromeClient.h"
-#include "core/page/DragClient.h"
#include "core/page/DragData.h"
#include "core/page/DragSession.h"
#include "core/page/DragState.h"
#include "core/page/Page.h"
-#include "core/layout/HitTestRequest.h"
-#include "core/layout/HitTestResult.h"
-#include "core/layout/LayoutImage.h"
#include "platform/DragImage.h"
#include "platform/geometry/IntRect.h"
+#include "platform/geometry/IntSize.h"
#include "platform/graphics/BitmapImage.h"
#include "platform/graphics/Image.h"
#include "platform/graphics/ImageOrientation.h"
#include "platform/network/ResourceRequest.h"
#include "platform/weborigin/SecurityOrigin.h"
+#include "public/platform/WebCommon.h"
+#include "public/platform/WebDragData.h"
+#include "public/platform/WebDragOperation.h"
+#include "public/platform/WebImage.h"
+#include "public/platform/WebPoint.h"
#include "public/platform/WebScreenInfo.h"
+#include "wtf/Assertions.h"
#include "wtf/CurrentTime.h"
#include "wtf/OwnPtr.h"
#include "wtf/PassOwnPtr.h"
@@ -124,9 +130,8 @@ static DataTransfer* createDraggingDataTransfer(DataTransferAccessPolicy policy,
return DataTransfer::create(DataTransfer::DragAndDrop, policy, dragData->platformData());
}
-DragController::DragController(Page* page, DragClient* client)
+DragController::DragController(Page* page)
: m_page(page)
- , m_client(client)
, m_documentUnderMouse(nullptr)
, m_dragInitiator(nullptr)
, m_fileInputElementUnderMouse(nullptr)
@@ -134,16 +139,15 @@ DragController::DragController(Page* page, DragClient* client)
, m_dragDestinationAction(DragDestinationActionNone)
, m_didInitiateDrag(false)
{
- ASSERT(m_client);
}
DragController::~DragController()
{
}
-DragController* DragController::create(Page* page, DragClient* client)
+DragController* DragController::create(Page* page)
{
- return new DragController(page, client);
+ return new DragController(page);
}
static DocumentFragment* documentFragmentFromDragData(DragData* dragData, LocalFrame* frame, Range* context, bool allowPlainText, bool& chosePlainText)
@@ -293,7 +297,10 @@ DragSession DragController::dragEnteredOrUpdated(DragData* dragData)
ASSERT(m_page->mainFrame());
mouseMovedIntoDocument(m_page->deprecatedLocalMainFrame()->documentAtPoint(dragData->clientPosition()));
- m_dragDestinationAction = m_client->actionMaskForDrag(dragData);
+ // TODO(esprehn): Replace acceptsLoadDrops with a Setting used in core.
+ m_dragDestinationAction = m_page->chromeClient().acceptsLoadDrops()
+ ? DragDestinationActionAny
+ : static_cast<DragDestinationAction>(DragDestinationActionDHTML | DragDestinationActionEdit);
if (m_dragDestinationAction == DragDestinationActionNone) {
cancelDrag(); // FIXME: Why not call mouseMovedIntoDocument(0)?
return DragSession();
@@ -933,6 +940,7 @@ bool DragController::startDrag(LocalFrame* src, const DragState& state, const Pl
return true;
}
+// TODO(esprehn): forLink is dead code, what was it for?
void DragController::doSystemDrag(DragImage* image, const IntPoint& dragLocation, const IntPoint& eventPos, DataTransfer* dataTransfer, LocalFrame* frame, bool forLink)
{
// TODO(dcheng): Drag and drop is not yet supported for OOPI.
@@ -940,17 +948,29 @@ void DragController::doSystemDrag(DragImage* image, const IntPoint& dragLocation
return;
m_didInitiateDrag = true;
m_dragInitiator = frame->document();
- // Protect this frame and view, as a load may occur mid drag and attempt to unload this frame
+
LocalFrame* mainFrame = m_page->deprecatedLocalMainFrame();
FrameView* mainFrameView = mainFrame->view();
+ IntPoint adjustedDragLocation = mainFrameView->rootFrameToContents(frame->view()->contentsToRootFrame(dragLocation));
+ IntPoint adjustedEventPos = mainFrameView->rootFrameToContents(frame->view()->contentsToRootFrame(eventPos));
+ WebDragData dragData = dataTransfer->dataObject()->toWebDragData();
+ WebDragOperationsMask dragOperationMask = static_cast<WebDragOperationsMask>(dataTransfer->sourceOperation());
+ IntSize offsetSize(adjustedEventPos - adjustedDragLocation);
+ WebPoint offsetPoint(offsetSize.width(), offsetSize.height());
+ WebImage dragImage;
+
+ if (image) {
+ float resolutionScale = image->resolutionScale();
+ float deviceScaleFactor = m_page->chromeClient().screenInfo().deviceScaleFactor;
+ if (deviceScaleFactor != resolutionScale) {
+ DCHECK_GT(resolutionScale, 0);
+ float scale = deviceScaleFactor / resolutionScale;
+ image->scale(scale, scale);
+ }
+ dragImage = image->bitmap();
+ }
- m_client->startDrag(image, mainFrameView->rootFrameToContents(frame->view()->contentsToRootFrame(dragLocation)),
- mainFrameView->rootFrameToContents(frame->view()->contentsToRootFrame(eventPos)), dataTransfer, frame, forLink);
- // DragClient::startDrag can cause our Page to dispear, deallocating |this|.
- if (!frame->page())
- return;
-
- cleanupAfterSystemDrag();
+ m_page->chromeClient().startDragging(frame, dragData, dragOperationMask, dragImage, offsetPoint);
}
DragOperation DragController::dragOperation(DragData* dragData)
@@ -974,10 +994,6 @@ bool DragController::isCopyKeyDown(DragData* dragData)
#endif
}
-void DragController::cleanupAfterSystemDrag()
-{
-}
-
DEFINE_TRACE(DragController)
{
visitor->trace(m_page);

Powered by Google App Engine
This is Rietveld 408576698