1// Copyright (c) 2009 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/string16.h" 8 9class GURL; 10class RenderViewHost; 11class TabContents; 12struct WebDropData; 13 14// A typedef for a RenderViewHost used for comparison purposes only. 15typedef RenderViewHost* RenderViewHostIdentifier; 16 17// A class that handles tracking and event processing for a drag and drop 18// over the content area. Assumes something else initiates the drag, this is 19// only for processing during a drag. 20 21@interface WebDropTarget : NSObject { 22 @private 23 // Our associated TabContents. Weak reference. 24 TabContents* tabContents_; 25 26 // Updated asynchronously during a drag to tell us whether or not we should 27 // allow the drop. 28 NSDragOperation current_operation_; 29 30 // Keep track of the render view host we're dragging over. If it changes 31 // during a drag, we need to re-send the DragEnter message. 32 RenderViewHostIdentifier currentRVH_; 33} 34 35// |contents| is the TabContents representing this tab, used to communicate 36// drag&drop messages to WebCore and handle navigation on a successful drop 37// (if necessary). 38- (id)initWithTabContents:(TabContents*)contents; 39 40// Sets the current operation negotiated by the source and destination, 41// which determines whether or not we should allow the drop. Takes effect the 42// next time |-draggingUpdated:| is called. 43- (void)setCurrentOperation: (NSDragOperation)operation; 44 45// Messages to send during the tracking of a drag, ususally upon receiving 46// calls from the view system. Communicates the drag messages to WebCore. 47- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info 48 view:(NSView*)view; 49- (void)draggingExited:(id<NSDraggingInfo>)info; 50- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)info 51 view:(NSView*)view; 52- (BOOL)performDragOperation:(id<NSDraggingInfo>)info 53 view:(NSView*)view; 54 55@end 56 57// Public use only for unit tests. 58@interface WebDropTarget(Testing) 59// Populate the |url| and |title| with URL data in |pboard|. There may be more 60// than one, but we only handle dropping the first. |url| must not be |NULL|; 61// |title| is an optional parameter. Returns |YES| if URL data was obtained from 62// the pasteboard, |NO| otherwise. If |convertFilenames| is |YES|, the function 63// will also attempt to convert filenames in |pboard| to file URLs. 64- (BOOL)populateURL:(GURL*)url 65 andTitle:(string16*)title 66 fromPasteboard:(NSPasteboard*)pboard 67 convertingFilenames:(BOOL)convertFilenames; 68// Given |data|, which should not be nil, fill it in using the contents of the 69// given pasteboard. 70- (void)populateWebDropData:(WebDropData*)data 71 fromPasteboard:(NSPasteboard*)pboard; 72// Given a point in window coordinates and a view in that window, return a 73// flipped point in the coordinate system of |view|. 74- (NSPoint)flipWindowPointToView:(const NSPoint&)windowPoint 75 view:(NSView*)view; 76// Given a point in window coordinates and a view in that window, return a 77// flipped point in screen coordinates. 78- (NSPoint)flipWindowPointToScreen:(const NSPoint&)windowPoint 79 view:(NSView*)view; 80@end 81