diff options
author | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-05 20:57:22 +0000 |
---|---|---|
committer | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-05 20:57:22 +0000 |
commit | 8f2fa3282fa65db14ed33ed711d0304cef954a29 (patch) | |
tree | e195549774a91ca42ad900eef057b0ba91f99e9a /ui/base | |
parent | dffc619bbe6af10fb1d8b212db62653e7d75fd78 (diff) | |
download | chromium_src-8f2fa3282fa65db14ed33ed711d0304cef954a29.zip chromium_src-8f2fa3282fa65db14ed33ed711d0304cef954a29.tar.gz chromium_src-8f2fa3282fa65db14ed33ed711d0304cef954a29.tar.bz2 |
Implement Clipboard::ReadData and Clipboard::WriteData for Mac.
BUG=31037
TEST=ui_unittests --gtest_filter=ClipboardTest.*
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=112986
Review URL: http://codereview.chromium.org/8803006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113018 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base')
-rw-r--r-- | ui/base/clipboard/clipboard.cc | 2 | ||||
-rw-r--r-- | ui/base/clipboard/clipboard.h | 5 | ||||
-rw-r--r-- | ui/base/clipboard/clipboard_aurax11.cc | 2 | ||||
-rw-r--r-- | ui/base/clipboard/clipboard_gtk.cc | 2 | ||||
-rw-r--r-- | ui/base/clipboard/clipboard_mac.mm | 31 | ||||
-rw-r--r-- | ui/base/clipboard/clipboard_unittest.cc | 7 | ||||
-rw-r--r-- | ui/base/clipboard/clipboard_win.cc | 2 |
7 files changed, 35 insertions, 16 deletions
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc index c8389da..b98f373 100644 --- a/ui/base/clipboard/clipboard.cc +++ b/ui/base/clipboard/clipboard.cc @@ -141,12 +141,10 @@ void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) { break; } -#if !defined(OS_MACOSX) case CBF_DATA: WriteData(&(params[0].front()), params[0].size(), &(params[1].front()), params[1].size()); break; -#endif // !defined(OS_MACOSX) default: NOTREACHED(); diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h index a3e9181..9ae7687 100644 --- a/ui/base/clipboard/clipboard.h +++ b/ui/base/clipboard/clipboard.h @@ -172,7 +172,7 @@ class UI_EXPORT Clipboard { // as a byte vector. // TODO(dcheng): Due to platform limitations on Windows, we should make sure // format is never controlled by the user. - void ReadData(const std::string& format, std::string* result); + void ReadData(const std::string& format, std::string* result) const; // Get format Identifiers for various types. static FormatType GetUrlFormatType(); @@ -225,12 +225,9 @@ class UI_EXPORT Clipboard { void WriteBitmap(const char* pixel_data, const char* size_data); -#if !defined(OS_MACOSX) // |format_name| is an ASCII string and should be NULL-terminated. - // TODO(estade): port to mac. void WriteData(const char* format_name, size_t format_len, const char* data_data, size_t data_len); -#endif #if defined(OS_WIN) void WriteBitmapFromHandle(HBITMAP source_hbitmap, const gfx::Size& size); diff --git a/ui/base/clipboard/clipboard_aurax11.cc b/ui/base/clipboard/clipboard_aurax11.cc index c6fa094..a6c2c57 100644 --- a/ui/base/clipboard/clipboard_aurax11.cc +++ b/ui/base/clipboard/clipboard_aurax11.cc @@ -260,7 +260,7 @@ void Clipboard::ReadFiles(std::vector<FilePath>* files) const { NOTIMPLEMENTED(); } -void Clipboard::ReadData(const std::string& format, std::string* result) { +void Clipboard::ReadData(const std::string& format, std::string* result) const { result->clear(); ClipboardData* data = GetClipboardData(); if (data->custom_data_format() == format) diff --git a/ui/base/clipboard/clipboard_gtk.cc b/ui/base/clipboard/clipboard_gtk.cc index 83f232c..cb61441 100644 --- a/ui/base/clipboard/clipboard_gtk.cc +++ b/ui/base/clipboard/clipboard_gtk.cc @@ -500,7 +500,7 @@ void Clipboard::ReadBookmark(string16* title, std::string* url) const { NOTIMPLEMENTED(); } -void Clipboard::ReadData(const std::string& format, std::string* result) { +void Clipboard::ReadData(const std::string& format, std::string* result) const { GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard_, StringToGdkAtom(format)); if (!data) diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm index ebeb907..ba9c74a 100644 --- a/ui/base/clipboard/clipboard_mac.mm +++ b/ui/base/clipboard/clipboard_mac.mm @@ -153,6 +153,17 @@ void Clipboard::WriteBitmap(const char* pixel_data, const char* size_data) { } } +void Clipboard::WriteData(const char* format_name, size_t format_len, + const char* data_data, size_t data_len) { + NSPasteboard* pb = GetPasteboard(); + NSString* format = [[NSString alloc] initWithBytes:format_name + length:format_len + encoding:NSUTF8StringEncoding]; + [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; + [pb setData:[NSData dataWithBytes:data_data length:data_len] + forType:format]; +} + // Write an extra flavor that signifies WebKit was the last to modify the // pasteboard. This flavor has no data. void Clipboard::WriteWebSmartPaste() { @@ -170,7 +181,7 @@ uint64 Clipboard::GetSequenceNumber(Buffer buffer) { } bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, - Clipboard::Buffer buffer) const { + Buffer buffer) const { DCHECK_EQ(buffer, BUFFER_STANDARD); NSString* format_ns = base::SysUTF8ToNSString(format); @@ -186,6 +197,17 @@ bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, return [types containsObject:format_ns]; } +bool Clipboard::IsFormatAvailableByString(const std::string& format, + Buffer buffer) const { + DCHECK_EQ(buffer, BUFFER_STANDARD); + NSString* format_ns = base::SysUTF8ToNSString(format); + + NSPasteboard* pb = GetPasteboard(); + NSArray* types = [pb types]; + + return [types containsObject:format_ns]; +} + void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer, std::vector<string16>* types, bool* contains_filenames) const { @@ -342,6 +364,13 @@ void Clipboard::ReadFiles(std::vector<FilePath>* files) const { } } +void Clipboard::ReadData(const std::string& format, std::string* result) const { + NSPasteboard* pb = GetPasteboard(); + NSData* data = [pb dataForType:base::SysUTF8ToNSString(format)]; + if ([data length]) + result->assign(static_cast<const char*>([data bytes]), [data length]); +} + // static Clipboard::FormatType Clipboard::GetUrlFormatType() { return base::SysNSStringToUTF8(NSURLPboardType); diff --git a/ui/base/clipboard/clipboard_unittest.cc b/ui/base/clipboard/clipboard_unittest.cc index 34483e8..ecf63f9 100644 --- a/ui/base/clipboard/clipboard_unittest.cc +++ b/ui/base/clipboard/clipboard_unittest.cc @@ -8,6 +8,7 @@ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" +#include "base/pickle.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" @@ -22,10 +23,6 @@ #include "ui/base/clipboard/clipboard_util_win.h" #endif -#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX)) -#include "base/pickle.h" -#endif - namespace ui { #if defined(OS_WIN) @@ -380,7 +377,6 @@ TEST_F(ClipboardTest, MultipleBitmapReadWriteTest) { } #endif -#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX)) TEST_F(ClipboardTest, DataTest) { Clipboard clipboard; const char* kFormat = "chromium/x-test-format"; @@ -460,7 +456,6 @@ TEST_F(ClipboardTest, MultipleDataTest) { ASSERT_TRUE(read_pickle1.ReadString(&iter1, &unpickled_string1)); EXPECT_EQ(payload1, unpickled_string1); } -#endif #if defined(OS_WIN) // Windows only tests. TEST_F(ClipboardTest, HyperlinkTest) { diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc index a3f050e..3cb38cc 100644 --- a/ui/base/clipboard/clipboard_win.cc +++ b/ui/base/clipboard/clipboard_win.cc @@ -620,7 +620,7 @@ void Clipboard::ReadFiles(std::vector<FilePath>* files) const { } } -void Clipboard::ReadData(const std::string& format, std::string* result) { +void Clipboard::ReadData(const std::string& format, std::string* result) const { if (!result) { NOTREACHED(); return; |