1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #import <Cocoa/Cocoa.h> 6 7 #include "base/memory/scoped_ptr.h" 8 #include "base/strings/string16.h" 9 #include "content/common/content_export.h" 10 #include "content/public/common/drop_data.h" 11 12 namespace content { 13 class RenderViewHost; 14 class WebContentsImpl; 15 class WebDragDestDelegate; 16 } 17 18 // A typedef for a RenderViewHost used for comparison purposes only. 19 typedef content::RenderViewHost* RenderViewHostIdentifier; 20 21 // A class that handles tracking and event processing for a drag and drop 22 // over the content area. Assumes something else initiates the drag, this is 23 // only for processing during a drag. 24 CONTENT_EXPORT 25 @interface WebDragDest : NSObject { 26 @private 27 // Our associated WebContentsImpl. Weak reference. 28 content::WebContentsImpl* webContents_; 29 30 // Delegate; weak. 31 content::WebDragDestDelegate* delegate_; 32 33 // Updated asynchronously during a drag to tell us whether or not we should 34 // allow the drop. 35 NSDragOperation currentOperation_; 36 37 // Keep track of the render view host we're dragging over. If it changes 38 // during a drag, we need to re-send the DragEnter message. 39 RenderViewHostIdentifier currentRVH_; 40 41 // The data for the current drag, or NULL if none is in progress. 42 scoped_ptr<content::DropData> dropData_; 43 44 // True if the drag has been canceled. 45 bool canceled_; 46 } 47 48 // |contents| is the WebContentsImpl representing this tab, used to communicate 49 // drag&drop messages to WebCore and handle navigation on a successful drop 50 // (if necessary). 51 - (id)initWithWebContentsImpl:(content::WebContentsImpl*)contents; 52 53 - (content::DropData*)currentDropData; 54 55 - (void)setDragDelegate:(content::WebDragDestDelegate*)delegate; 56 57 // Sets the current operation negotiated by the source and destination, 58 // which determines whether or not we should allow the drop. Takes effect the 59 // next time |-draggingUpdated:| is called. 60 - (void)setCurrentOperation:(NSDragOperation)operation; 61 62 // Messages to send during the tracking of a drag, ususally upon receiving 63 // calls from the view system. Communicates the drag messages to WebCore. 64 - (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info 65 view:(NSView*)view; 66 - (void)draggingExited:(id<NSDraggingInfo>)info; 67 - (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)info 68 view:(NSView*)view; 69 - (BOOL)performDragOperation:(id<NSDraggingInfo>)info 70 view:(NSView*)view; 71 72 @end 73 74 // Public use only for unit tests. 75 @interface WebDragDest(Testing) 76 // Given |data|, which should not be nil, fill it in using the contents of the 77 // given pasteboard. 78 - (void)populateDropData:(content::DropData*)data 79 fromPasteboard:(NSPasteboard*)pboard; 80 // Given a point in window coordinates and a view in that window, return a 81 // flipped point in the coordinate system of |view|. 82 - (NSPoint)flipWindowPointToView:(const NSPoint&)windowPoint 83 view:(NSView*)view; 84 // Given a point in window coordinates and a view in that window, return a 85 // flipped point in screen coordinates. 86 - (NSPoint)flipWindowPointToScreen:(const NSPoint&)windowPoint 87 view:(NSView*)view; 88 @end 89