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

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

Issue 8801038: Make Clipboard::FormatType an opaque handle type. (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
« no previous file with comments | « ui/base/clipboard/clipboard_unittest.cc ('k') | ui/base/clipboard/scoped_clipboard_writer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/clipboard/clipboard_win.cc
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc
index 776ff4d2540de6a38764410073ccd527928c20aa..79a0faab026e64937747502614f4d9c0b422f513 100644
--- a/ui/base/clipboard/clipboard_win.cc
+++ b/ui/base/clipboard/clipboard_win.cc
@@ -10,13 +10,14 @@
#include <shlobj.h>
#include <shellapi.h>
+#include "base/basictypes.h"
#include "base/file_path.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/shared_memory.h"
#include "base/stl_util.h"
-#include "base/string_util.h"
#include "base/string_number_conversions.h"
+#include "base/string_util.h"
#include "base/utf_offset_string_conversions.h"
#include "base/utf_string_conversions.h"
#include "base/win/scoped_gdi_object.h"
@@ -159,6 +160,30 @@ void MakeBitmapOpaque(const SkBitmap& bitmap) {
} // namespace
+Clipboard::FormatType::FormatType() {
+}
+
+Clipboard::FormatType::FormatType(UINT native_format) : data_(native_format) {
+}
+
+Clipboard::FormatType::~FormatType() {
+}
+
+std::string Clipboard::FormatType::Serialize() const {
+ return base::IntToString(data_);
+}
+
+// static
+Clipboard::FormatType Clipboard::FormatType::Deserialize(
+ const std::string& serialization) {
+ int clipboard_format = -1;
+ if (!base::StringToInt(serialization, &clipboard_format)) {
+ NOTREACHED();
+ return FormatType();
+ }
+ return FormatType(clipboard_format);
+}
+
Clipboard::Clipboard() : create_window_(false) {
if (MessageLoop::current()->type() == MessageLoop::TYPE_UI) {
// Make a dummy HWND to be the clipboard's owner.
@@ -314,12 +339,9 @@ void Clipboard::WriteBitmapFromHandle(HBITMAP source_hbitmap,
WriteToClipboard(CF_BITMAP, hbitmap);
}
-void Clipboard::WriteData(const char* format_name, size_t format_len,
- const char* data_data, size_t data_len) {
- std::string format(format_name, format_len);
- CLIPFORMAT clip_format =
- ::RegisterClipboardFormat(ASCIIToWide(format).c_str());
-
+void Clipboard::WriteData(const FormatType& format,
+ const char* data_data,
+ size_t data_len) {
HGLOBAL hdata = ::GlobalAlloc(GMEM_MOVEABLE, data_len);
if (!hdata)
return;
@@ -327,7 +349,7 @@ void Clipboard::WriteData(const char* format_name, size_t format_len,
char* data = static_cast<char*>(::GlobalLock(hdata));
memcpy(data, data_data, data_len);
::GlobalUnlock(data);
- WriteToClipboard(clip_format, hdata);
+ WriteToClipboard(format.ToUINT(), hdata);
}
void Clipboard::WriteToClipboard(unsigned int format, HANDLE handle) {
@@ -346,18 +368,7 @@ uint64 Clipboard::GetSequenceNumber(Buffer buffer) {
bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format,
Clipboard::Buffer buffer) const {
DCHECK_EQ(buffer, BUFFER_STANDARD);
- int f;
- if (!base::StringToInt(format, &f))
- return false;
- return ::IsClipboardFormatAvailable(f) != FALSE;
-}
-
-bool Clipboard::IsFormatAvailableByString(
- const std::string& ascii_format, Clipboard::Buffer buffer) const {
- DCHECK_EQ(buffer, BUFFER_STANDARD);
- std::wstring wide_format = ASCIIToWide(ascii_format);
- CLIPFORMAT format = ::RegisterClipboardFormat(wide_format.c_str());
- return ::IsClipboardFormatAvailable(format) != FALSE;
+ return ::IsClipboardFormatAvailable(format.ToUINT()) != FALSE;
}
void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer,
@@ -646,20 +657,17 @@ void Clipboard::ReadFiles(std::vector<FilePath>* files) const {
}
}
-void Clipboard::ReadData(const std::string& format, std::string* result) const {
+void Clipboard::ReadData(const FormatType& format, std::string* result) const {
if (!result) {
NOTREACHED();
return;
}
- CLIPFORMAT clip_format =
- ::RegisterClipboardFormat(ASCIIToWide(format).c_str());
-
ScopedClipboard clipboard;
if (!clipboard.Acquire(GetClipboardWindow()))
return;
- HANDLE data = ::GetClipboardData(clip_format);
+ HANDLE data = ::GetClipboardData(format.ToUINT());
if (!data)
return;
@@ -686,86 +694,145 @@ void Clipboard::ParseBookmarkClipboardFormat(const string16& bookmark,
}
// static
-Clipboard::FormatType Clipboard::GetUrlFormatType() {
- return base::IntToString(ClipboardUtil::GetUrlFormat()->cfFormat);
+Clipboard::FormatType Clipboard::GetFormatType(
+ const std::string& format_string) {
+ return FormatType(
+ ::RegisterClipboardFormat(ASCIIToWide(format_string).c_str()));
+}
+
+// static
+// TODO(dcheng): Just substitue the appropriate constants here.
+const Clipboard::FormatType& Clipboard::GetUrlFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetUrlFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetUrlWFormatType() {
- return base::IntToString(ClipboardUtil::GetUrlWFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetUrlWFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetUrlWFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetMozUrlFormatType() {
- return base::IntToString(ClipboardUtil::GetMozUrlFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetMozUrlFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetMozUrlFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetPlainTextFormatType() {
- return base::IntToString(ClipboardUtil::GetPlainTextFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetPlainTextFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetPlainTextFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetPlainTextWFormatType() {
- return base::IntToString(ClipboardUtil::GetPlainTextWFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetPlainTextWFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetPlainTextWFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetFilenameFormatType() {
- return base::IntToString(ClipboardUtil::GetFilenameFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetFilenameFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetFilenameFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetFilenameWFormatType() {
- return base::IntToString(ClipboardUtil::GetFilenameWFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetFilenameWFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetFilenameWFormat()->cfFormat));
+ return type;
}
// MS HTML Format
// static
-Clipboard::FormatType Clipboard::GetHtmlFormatType() {
- return base::IntToString(ClipboardUtil::GetHtmlFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetHtmlFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetHtmlFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetBitmapFormatType() {
- return base::IntToString(CF_BITMAP);
+const Clipboard::FormatType& Clipboard::GetBitmapFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (CF_BITMAP));
+ return type;
}
// Firefox text/html
// static
-Clipboard::FormatType Clipboard::GetTextHtmlFormatType() {
- return base::IntToString(ClipboardUtil::GetTextHtmlFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetTextHtmlFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetTextHtmlFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetCFHDropFormatType() {
- return base::IntToString(ClipboardUtil::GetCFHDropFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetCFHDropFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetCFHDropFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetFileDescriptorFormatType() {
- return base::IntToString(ClipboardUtil::GetFileDescriptorFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetFileDescriptorFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetFileDescriptorFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetFileContentFormatZeroType() {
- return base::IntToString(ClipboardUtil::GetFileContentFormatZero()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetFileContentFormatZeroType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetFileContentFormatZero()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() {
- return base::IntToString(
- ClipboardUtil::GetWebKitSmartPasteFormat()->cfFormat);
+const Clipboard::FormatType& Clipboard::GetWebKitSmartPasteFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetWebKitSmartPasteFormat()->cfFormat));
+ return type;
}
// static
-Clipboard::FormatType Clipboard::GetWebCustomDataFormatType() {
- // TODO(dcheng): Clean up the duplicated constant.
- // Clipboard::WritePickledData() takes a FormatType, but all the callers
- // assume that it's a raw string. As a result, we return the format name here
- // rather than returning a string-ified version of the registered clipboard
- // format ID.
- return "Chromium Web Custom MIME Data Format";
+const Clipboard::FormatType& Clipboard::GetWebCustomDataFormatType() {
+ CR_DEFINE_STATIC_LOCAL(
+ FormatType,
+ type,
+ (ClipboardUtil::GetWebCustomDataFormat()->cfFormat));
+ return type;
}
// static
« no previous file with comments | « ui/base/clipboard/clipboard_unittest.cc ('k') | ui/base/clipboard/scoped_clipboard_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698