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

Unified Diff: ui/base/clipboard/clipboard_win.cc

Issue 8802004: Enable custom MIME types in web copy/paste. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years 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
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));

Powered by Google App Engine
This is Rietveld 408576698