Index: ui/base/clipboard/clipboard_win.cc |
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc |
index a3f050e8de73c46657f8eff76d9a4ded9a17d1be..a34d0a871de7efdd92378b3a39387367bd4df685 100644 |
--- a/ui/base/clipboard/clipboard_win.cc |
+++ b/ui/base/clipboard/clipboard_win.cc |
@@ -24,6 +24,7 @@ |
#include "base/win/wrapped_window_proc.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "ui/base/clipboard/clipboard_util_win.h" |
+#include "ui/base/clipboard/custom_data_helper.h" |
#include "ui/gfx/canvas_skia.h" |
#include "ui/gfx/size.h" |
@@ -377,6 +378,19 @@ void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer, |
if (::IsClipboardFormatAvailable(CF_DIB)) |
types->push_back(UTF8ToUTF16(kMimeTypePNG)); |
*contains_filenames = false; |
+ |
+ // Acquire the clipboard. |
+ ScopedClipboard clipboard; |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
+ return; |
+ |
+ HANDLE hdata = ::GetClipboardData( |
+ ClipboardUtil::GetWebCustomDataFormat()->cfFormat); |
+ if (!hdata) |
+ return; |
+ |
+ ReadCustomDataTypes(::GlobalLock(hdata), ::GlobalSize(hdata), types); |
+ ::GlobalUnlock(data); |
} |
void Clipboard::ReadText(Clipboard::Buffer buffer, string16* result) const { |
@@ -547,8 +561,20 @@ SkBitmap Clipboard::ReadImage(Buffer buffer) const { |
void Clipboard::ReadCustomData(Buffer buffer, |
const string16& type, |
string16* result) const { |
- // TODO(dcheng): Implement this. |
- NOTIMPLEMENTED(); |
+ DCHECK_EQ(buffer, BUFFER_STANDARD); |
+ |
+ // Acquire the clipboard. |
+ ScopedClipboard clipboard; |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
+ return; |
+ |
+ HANDLE hdata = ::GetClipboardData( |
+ ClipboardUtil::GetWebCustomDataFormat()->cfFormat); |
+ if (!hdata) |
+ return; |
+ |
+ ReadCustomDataForType(::GlobalLock(hdata), ::GlobalSize(hdata), type, result); |
+ ::GlobalUnlock(data); |
} |
void Clipboard::ReadBookmark(string16* title, std::string* url) const { |
@@ -733,6 +759,12 @@ Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() { |
} |
// static |
+Clipboard::FormatType Clipboard::GetWebCustomDataFormatType() { |
+ return base::IntToString( |
+ ClipboardUtil::GetWebCustomDataFormat()->cfFormat); |
+} |
+ |
+// static |
void Clipboard::FreeData(unsigned int format, HANDLE data) { |
if (format == CF_BITMAP) |
::DeleteObject(static_cast<HBITMAP>(data)); |