Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Unified Diff: app/os_exchange_data_provider_win.h

Issue 351029: Support dragging a virtual file out of the browser. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « app/os_exchange_data.cc ('k') | app/os_exchange_data_provider_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: app/os_exchange_data_provider_win.h
===================================================================
--- app/os_exchange_data_provider_win.h (revision 35459)
+++ app/os_exchange_data_provider_win.h (working copy)
@@ -6,16 +6,34 @@
#define APP_OS_EXCHANGE_DATA_PROVIDER_WIN_H_
#include <objidl.h>
+#include <shlobj.h>
#include <string>
#include "app/os_exchange_data.h"
#include "base/scoped_comptr_win.h"
-class DataObjectImpl : public IDataObject {
+class DataObjectImpl : public OSExchangeData::DownloadFileObserver,
+ public IDataObject,
+ public IAsyncOperation {
public:
+ class Observer {
+ public:
+ virtual void OnWaitForData() = 0;
+ virtual void OnDataObjectDisposed() = 0;
+ protected:
+ virtual ~Observer() { }
+ };
+
DataObjectImpl();
- ~DataObjectImpl();
+ // Accessors.
+ void set_observer(Observer* observer) { observer_ = observer; }
+
+ // DownloadFileObserver implementation:
+ virtual void OnDataReady(
+ int format,
+ const std::vector<OSExchangeData::DownloadFileInfo*>& downloads);
+
// IDataObject implementation:
HRESULT __stdcall GetData(FORMATETC* format_etc, STGMEDIUM* medium);
HRESULT __stdcall GetDataHere(FORMATETC* format_etc, STGMEDIUM* medium);
@@ -31,6 +49,14 @@
HRESULT __stdcall DUnadvise(DWORD connection);
HRESULT __stdcall EnumDAdvise(IEnumSTATDATA** enumerator);
+ // IAsyncOperation implementation:
+ HRESULT __stdcall EndOperation(
+ HRESULT result, IBindCtx* reserved, DWORD effects);
+ HRESULT __stdcall GetAsyncMode(BOOL* is_op_async);
+ HRESULT __stdcall InOperation(BOOL* in_async_op);
+ HRESULT __stdcall SetAsyncMode(BOOL do_op_async);
+ HRESULT __stdcall StartOperation(IBindCtx* reserved);
+
// IUnknown implementation:
HRESULT __stdcall QueryInterface(const IID& iid, void** object);
ULONG __stdcall AddRef();
@@ -41,22 +67,34 @@
friend class FormatEtcEnumerator;
friend class OSExchangeDataProviderWin;
+ virtual ~DataObjectImpl();
+
+ void StopDownloads();
+
// Our internal representation of stored data & type info.
struct StoredDataInfo {
FORMATETC format_etc;
STGMEDIUM* medium;
bool owns_medium;
+ bool in_delay_rendering;
+ std::vector<OSExchangeData::DownloadFileInfo*> downloads;
- StoredDataInfo(CLIPFORMAT cf, STGMEDIUM* a_medium) {
+ StoredDataInfo(CLIPFORMAT cf, STGMEDIUM* medium)
+ : medium(medium),
+ owns_medium(true),
+ in_delay_rendering(false) {
format_etc.cfFormat = cf;
format_etc.dwAspect = DVASPECT_CONTENT;
format_etc.lindex = -1;
format_etc.ptd = NULL;
- format_etc.tymed = a_medium->tymed;
+ format_etc.tymed = medium ? medium->tymed : TYMED_HGLOBAL;
+ }
- owns_medium = true;
-
- medium = a_medium;
+ StoredDataInfo(FORMATETC* format_etc, STGMEDIUM* medium)
+ : format_etc(*format_etc),
+ medium(medium),
+ owns_medium(true),
+ in_delay_rendering(false) {
}
~StoredDataInfo() {
@@ -64,6 +102,11 @@
ReleaseStgMedium(medium);
delete medium;
}
+ for (size_t i = 0; i < downloads.size(); ++i) {
+ if (downloads[i]->downloader)
+ downloads[i]->downloader->Stop();
+ }
+ downloads.clear();
}
};
@@ -72,7 +115,10 @@
ScopedComPtr<IDataObject> source_object_;
- LONG ref_count_;
+ bool is_aborting_;
+ bool in_async_mode_;
+ bool async_operation_started_;
+ Observer* observer_;
};
class OSExchangeDataProviderWin : public OSExchangeData::Provider {
@@ -84,7 +130,9 @@
// that url.
static bool GetPlainTextURL(IDataObject* source, GURL* url);
+ static DataObjectImpl* GetDataObjectImpl(const OSExchangeData& data);
static IDataObject* GetIDataObject(const OSExchangeData& data);
+ static IAsyncOperation* GetIAsyncOperation(const OSExchangeData& data);
explicit OSExchangeDataProviderWin(IDataObject* source);
OSExchangeDataProviderWin();
@@ -92,6 +140,7 @@
virtual ~OSExchangeDataProviderWin();
IDataObject* data_object() const { return data_.get(); }
+ IAsyncOperation* async_operation() const { return data_.get(); }
// OSExchangeData::Provider methods.
virtual void SetString(const std::wstring& data);
@@ -117,6 +166,8 @@
virtual bool HasFileContents() const;
virtual bool HasHtml() const;
virtual bool HasCustomFormat(OSExchangeData::CustomFormat format) const;
+ virtual void SetDownloadFileInfo(
+ OSExchangeData::DownloadFileInfo* download_info);
private:
scoped_refptr<DataObjectImpl> data_;
« no previous file with comments | « app/os_exchange_data.cc ('k') | app/os_exchange_data_provider_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698