| Index: chrome/browser/views/tab_contents/tab_contents_drag_win.h
|
| ===================================================================
|
| --- chrome/browser/views/tab_contents/tab_contents_drag_win.h (revision 0)
|
| +++ chrome/browser/views/tab_contents/tab_contents_drag_win.h (revision 0)
|
| @@ -0,0 +1,93 @@
|
| +// Copyright (c) 2009 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_VIEWS_TAB_CONTENTS_TAB_CONTENTS_DRAG_WIN_H_
|
| +#define CHROME_BROWSER_VIEWS_TAB_CONTENTS_TAB_CONTENTS_DRAG_WIN_H_
|
| +
|
| +#include "app/os_exchange_data_provider_win.h"
|
| +#include "base/platform_thread.h"
|
| +#include "base/ref_counted.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebDragOperation.h"
|
| +
|
| +class DragDropThread;
|
| +class TabContentsViewWin;
|
| +class WebDragSource;
|
| +struct WebDropData;
|
| +
|
| +// Windows-specific drag-and-drop handling in TabContentsView.
|
| +// If we are dragging a virtual file out of the browser, we use a background
|
| +// thread to do the drag-and-drop because we do not want to run nested
|
| +// message loop in the UI thread. For all other cases, the drag-and-drop happens
|
| +// in the UI thread.
|
| +class TabContentsDragWin
|
| + : public DataObjectImpl::Observer,
|
| + public base::RefCountedThreadSafe<TabContentsDragWin> {
|
| + public:
|
| + explicit TabContentsDragWin(TabContentsViewWin* view);
|
| + virtual ~TabContentsDragWin();
|
| +
|
| + // Called on UI thread.
|
| + void StartDragging(const WebDropData& drop_data,
|
| + WebKit::WebDragOperationsMask ops);
|
| + void CancelDrag();
|
| +
|
| + // DataObjectImpl::Observer implementation.
|
| + // Called on drag-and-drop thread.
|
| + virtual void OnWaitForData();
|
| + virtual void OnDataObjectDisposed();
|
| +
|
| + private:
|
| + // Called on either UI thread or drag-and-drop thread.
|
| + void PrepareDragForDownload(const WebDropData& drop_data,
|
| + OSExchangeData* data,
|
| + const GURL& page_url,
|
| + const std::string& page_encoding);
|
| + void PrepareDragForFileContents(const WebDropData& drop_data,
|
| + OSExchangeData* data);
|
| + void PrepareDragForUrl(const WebDropData& drop_data, OSExchangeData* data);
|
| + void DoDragging(const WebDropData& drop_data,
|
| + WebKit::WebDragOperationsMask ops,
|
| + const GURL& page_url,
|
| + const std::string& page_encoding);
|
| +
|
| + // Called on drag-and-drop thread.
|
| + void StartBackgroundDragging(const WebDropData& drop_data,
|
| + WebKit::WebDragOperationsMask ops,
|
| + const GURL& page_url,
|
| + const std::string& page_encoding);
|
| + // Called on UI thread.
|
| + void EndDragging(bool restore_suspended_state);
|
| + void CloseThread();
|
| +
|
| + // For debug check only. Access only on drag-and-drop thread.
|
| +#ifndef NDEBUG
|
| + PlatformThreadId drag_drop_thread_id_;
|
| +#endif
|
| +
|
| + // All the member variables below are accessed on UI thread.
|
| +
|
| + // Keep track of the TabContentsViewWin it is associated with.
|
| + TabContentsViewWin* view_;
|
| +
|
| + // |drag_source_| is our callback interface passed to the system when we
|
| + // want to initiate a drag and drop operation. We use it to tell if a
|
| + // drag operation is happening.
|
| + scoped_refptr<WebDragSource> drag_source_;
|
| +
|
| + // The thread used by the drag-out download. This is because we want to avoid
|
| + // running nested message loop in main UI thread.
|
| + scoped_ptr<DragDropThread> drag_drop_thread_;
|
| +
|
| + // The flag to guard that EndDragging is not called twice.
|
| + bool drag_ended_;
|
| +
|
| + // Keep track of the old suspended state of the drop target.
|
| + bool old_drop_target_suspended_state_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TabContentsDragWin);
|
| +};
|
| +
|
| +
|
| +#endif // CHROME_BROWSER_VIEWS_TAB_CONTENTS_TAB_CONTENTS_DRAG_WIN_H_
|
|
|
| Property changes on: chrome\browser\views\tab_contents\tab_contents_drag_win.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|