| 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);
|
|
|