summaryrefslogtreecommitdiffstats
path: root/ui/base
diff options
context:
space:
mode:
authordcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-05 20:57:22 +0000
committerdcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-05 20:57:22 +0000
commit8f2fa3282fa65db14ed33ed711d0304cef954a29 (patch)
treee195549774a91ca42ad900eef057b0ba91f99e9a /ui/base
parentdffc619bbe6af10fb1d8b212db62653e7d75fd78 (diff)
downloadchromium_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.cc2
-rw-r--r--ui/base/clipboard/clipboard.h5
-rw-r--r--ui/base/clipboard/clipboard_aurax11.cc2
-rw-r--r--ui/base/clipboard/clipboard_gtk.cc2
-rw-r--r--ui/base/clipboard/clipboard_mac.mm31
-rw-r--r--ui/base/clipboard/clipboard_unittest.cc7
-rw-r--r--ui/base/clipboard/clipboard_win.cc2
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;