diff options
Diffstat (limited to 'chrome/browser/tab_contents/web_drop_target.h')
-rw-r--r-- | chrome/browser/tab_contents/web_drop_target.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/chrome/browser/tab_contents/web_drop_target.h b/chrome/browser/tab_contents/web_drop_target.h new file mode 100644 index 0000000..28f4073 --- /dev/null +++ b/chrome/browser/tab_contents/web_drop_target.h @@ -0,0 +1,74 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_WEB_DROP_TARGET_H__ +#define CHROME_BROWSER_WEB_DROP_TARGET_H__ + +#include "base/base_drop_target.h" +#include "base/scoped_ptr.h" + +class InterstitialDropTarget; +class RenderViewHost; +class WebContents; + +/////////////////////////////////////////////////////////////////////////////// +// +// WebDropTarget +// +// A helper object that provides drop capabilities to a WebContents. The +// DropTarget handles drags that enter the region of the WebContents by +// passing on the events to the renderer. +// +class WebDropTarget : public BaseDropTarget { + public: + // Create a new WebDropTarget associating it with the given HWND and + // WebContents. + WebDropTarget(HWND source_hwnd, WebContents* contents); + virtual ~WebDropTarget(); + + void set_is_drop_target(bool is_drop_target) { + is_drop_target_ = is_drop_target; + } + + protected: + virtual DWORD OnDragEnter(IDataObject* data_object, + DWORD key_state, + POINT cursor_position, + DWORD effect); + + virtual DWORD OnDragOver(IDataObject* data_object, + DWORD key_state, + POINT cursor_position, + DWORD effect); + + virtual void OnDragLeave(IDataObject* data_object); + + virtual DWORD OnDrop(IDataObject* data_object, + DWORD key_state, + POINT cursor_position, + DWORD effect); + + private: + // Our associated WebContents. + WebContents* web_contents_; + + // We keep track of the render view host we're dragging over. If it changes + // during a drag, we need to re-send the DragEnter message. WARNING: + // this pointer should never be dereferenced. We only use it for comparing + // pointers. + RenderViewHost* current_rvh_; + + // Used to determine what cursor we should display when dragging over web + // content area. This can be updated async during a drag operation. + bool is_drop_target_; + + // A special drop target handler for when we try to d&d while an interstitial + // page is showing. + scoped_ptr<InterstitialDropTarget> interstitial_drop_target_; + + DISALLOW_EVIL_CONSTRUCTORS(WebDropTarget); +}; + +#endif // #ifndef CHROME_BROWSER_WEB_DROP_TARGET_H__ + |