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

Unified Diff: ui/base/clipboard/clipboard_mac.mm

Issue 658963003: Change Clipboard to use virtual methods for testing purposes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: One more typo... Created 6 years, 2 months 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_mac.mm
diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm
index 0b6d3a709ae9776da0580c5b9dccd2ce53e4fd32..82440b503610a23f3a8d8607ee157883484e71a1 100644
--- a/ui/base/clipboard/clipboard_mac.mm
+++ b/ui/base/clipboard/clipboard_mac.mm
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ui/base/clipboard/clipboard.h"
+#include "ui/base/clipboard/clipboard_mac.h"
#import <Cocoa/Cocoa.h>
@@ -50,6 +50,7 @@ NSPasteboard* GetPasteboard() {
} // namespace
+// Clipboard::FormatType implementation.
Clipboard::FormatType::FormatType() : data_(nil) {
}
@@ -88,112 +89,97 @@ Clipboard::FormatType Clipboard::FormatType::Deserialize(
return FormatType(base::SysUTF8ToNSString(serialization));
}
-Clipboard::Clipboard() {
- DCHECK(CalledOnValidThread());
+// Miscellaneous Clipboard definitions.
+// static
+Clipboard::FormatType Clipboard::GetFormatType(
+ const std::string& format_string) {
+ return FormatType::Deserialize(format_string);
}
-Clipboard::~Clipboard() {
- DCHECK(CalledOnValidThread());
+// static
+const Clipboard::FormatType& Clipboard::GetUrlFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSURLPboardType));
+ return type;
}
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects) {
- DCHECK(CalledOnValidThread());
- DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
+// static
+const Clipboard::FormatType& Clipboard::GetUrlWFormatType() {
+ return GetUrlFormatType();
+}
- NSPasteboard* pb = GetPasteboard();
- [pb declareTypes:[NSArray array] owner:nil];
+// static
+const Clipboard::FormatType& Clipboard::GetPlainTextFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSStringPboardType));
+ return type;
+}
- for (ObjectMap::const_iterator iter = objects.begin();
- iter != objects.end(); ++iter) {
- DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
- }
+// static
+const Clipboard::FormatType& Clipboard::GetPlainTextWFormatType() {
+ return GetPlainTextFormatType();
}
-void Clipboard::WriteText(const char* text_data, size_t text_len) {
- std::string text_str(text_data, text_len);
- NSString *text = base::SysUTF8ToNSString(text_str);
- NSPasteboard* pb = GetPasteboard();
- [pb addTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
- [pb setString:text forType:NSStringPboardType];
+// static
+const Clipboard::FormatType& Clipboard::GetFilenameFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSFilenamesPboardType));
+ return type;
}
-void Clipboard::WriteHTML(const char* markup_data,
- size_t markup_len,
- const char* url_data,
- size_t url_len) {
- // We need to mark it as utf-8. (see crbug.com/11957)
- std::string html_fragment_str("<meta charset='utf-8'>");
- html_fragment_str.append(markup_data, markup_len);
- NSString *html_fragment = base::SysUTF8ToNSString(html_fragment_str);
+// static
+const Clipboard::FormatType& Clipboard::GetFilenameWFormatType() {
+ return GetFilenameFormatType();
+}
- // TODO(avi): url_data?
- NSPasteboard* pb = GetPasteboard();
- [pb addTypes:[NSArray arrayWithObject:NSHTMLPboardType] owner:nil];
- [pb setString:html_fragment forType:NSHTMLPboardType];
+// static
+const Clipboard::FormatType& Clipboard::GetHtmlFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSHTMLPboardType));
+ return type;
}
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len) {
- WriteData(GetRtfFormatType(), rtf_data, data_len);
+// static
+const Clipboard::FormatType& Clipboard::GetRtfFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSRTFPboardType));
+ return type;
}
-void Clipboard::WriteBookmark(const char* title_data,
- size_t title_len,
- const char* url_data,
- size_t url_len) {
- std::string title_str(title_data, title_len);
- NSString *title = base::SysUTF8ToNSString(title_str);
- std::string url_str(url_data, url_len);
- NSString *url = base::SysUTF8ToNSString(url_str);
+// static
+const Clipboard::FormatType& Clipboard::GetBitmapFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSTIFFPboardType));
+ return type;
+}
- // TODO(playmobil): In the Windows version of this function, an HTML
- // representation of the bookmark is also added to the clipboard, to support
- // drag and drop of web shortcuts. I don't think we need to do this on the
- // Mac, but we should double check later on.
- NSURL* nsurl = [NSURL URLWithString:url];
+// static
+const Clipboard::FormatType& Clipboard::GetWebKitSmartPasteFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kWebSmartPastePboardType));
+ return type;
+}
- NSPasteboard* pb = GetPasteboard();
- // passing UTIs into the pasteboard methods is valid >= 10.5
- [pb addTypes:[NSArray arrayWithObjects:NSURLPboardType,
- kUTTypeURLName,
- nil]
- owner:nil];
- [nsurl writeToPasteboard:pb];
- [pb setString:title forType:kUTTypeURLName];
+// static
+const Clipboard::FormatType& Clipboard::GetWebCustomDataFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kWebCustomDataPboardType));
+ return type;
}
-void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
- NSImage* image = gfx::SkBitmapToNSImageWithColorSpace(
- bitmap, base::mac::GetSystemColorSpace());
- // An API to ask the NSImage to write itself to the clipboard comes in 10.6 :(
- // For now, spit out the image as a TIFF.
- NSPasteboard* pb = GetPasteboard();
- [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil];
- NSData *tiff_data = [image TIFFRepresentation];
- LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard";
- if (tiff_data) {
- [pb setData:tiff_data forType:NSTIFFPboardType];
- }
+// static
+const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() {
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kPepperCustomDataPboardType));
+ return type;
}
-void Clipboard::WriteData(const FormatType& format,
- const char* data_data,
- size_t data_len) {
- NSPasteboard* pb = GetPasteboard();
- [pb addTypes:[NSArray arrayWithObject:format.ToNSString()] owner:nil];
- [pb setData:[NSData dataWithBytes:data_data length:data_len]
- forType:format.ToNSString()];
+// static
+Clipboard* Clipboard::Create() {
+ return new ClipboardMac;
}
-// Write an extra flavor that signifies WebKit was the last to modify the
-// pasteboard. This flavor has no data.
-void Clipboard::WriteWebSmartPaste() {
- NSPasteboard* pb = GetPasteboard();
- NSString* format = GetWebKitSmartPasteFormatType().ToNSString();
- [pb addTypes:[NSArray arrayWithObject:format] owner:nil];
- [pb setData:nil forType:format];
+// ClipboardMac implementation.
+ClipboardMac::ClipboardMac() {
+ DCHECK(CalledOnValidThread());
}
-uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
+ClipboardMac::~ClipboardMac() {
+ DCHECK(CalledOnValidThread());
+}
+
+uint64 ClipboardMac::GetSequenceNumber(ClipboardType type) {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
@@ -201,8 +187,8 @@ uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
return [pb changeCount];
}
-bool Clipboard::IsFormatAvailable(const FormatType& format,
- ClipboardType type) const {
+bool ClipboardMac::IsFormatAvailable(const FormatType& format,
+ ClipboardType type) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
@@ -218,7 +204,7 @@ bool Clipboard::IsFormatAvailable(const FormatType& format,
return [types containsObject:format.ToNSString()];
}
-void Clipboard::Clear(ClipboardType type) {
+void ClipboardMac::Clear(ClipboardType type) {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
@@ -226,9 +212,9 @@ void Clipboard::Clear(ClipboardType type) {
[pb declareTypes:[NSArray array] owner:nil];
}
-void Clipboard::ReadAvailableTypes(ClipboardType type,
- std::vector<base::string16>* types,
- bool* contains_filenames) const {
+void ClipboardMac::ReadAvailableTypes(ClipboardType type,
+ std::vector<base::string16>* types,
+ bool* contains_filenames) const {
DCHECK(CalledOnValidThread());
types->clear();
if (IsFormatAvailable(Clipboard::GetPlainTextFormatType(), type))
@@ -249,7 +235,7 @@ void Clipboard::ReadAvailableTypes(ClipboardType type,
}
}
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
+void ClipboardMac::ReadText(ClipboardType type, base::string16* result) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
NSPasteboard* pb = GetPasteboard();
@@ -258,7 +244,8 @@ void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
*result = base::SysNSStringToUTF16(contents);
}
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
+void ClipboardMac::ReadAsciiText(ClipboardType type,
+ std::string* result) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
NSPasteboard* pb = GetPasteboard();
@@ -270,11 +257,11 @@ void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const {
result->assign([contents UTF8String]);
}
-void Clipboard::ReadHTML(ClipboardType type,
- base::string16* markup,
- std::string* src_url,
- uint32* fragment_start,
- uint32* fragment_end) const {
+void ClipboardMac::ReadHTML(ClipboardType type,
+ base::string16* markup,
+ std::string* src_url,
+ uint32* fragment_start,
+ uint32* fragment_end) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
@@ -301,14 +288,14 @@ void Clipboard::ReadHTML(ClipboardType type,
*fragment_end = static_cast<uint32>(markup->length());
}
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const {
+void ClipboardMac::ReadRTF(ClipboardType type, std::string* result) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
return ReadData(GetRtfFormatType(), result);
}
-SkBitmap Clipboard::ReadImage(ClipboardType type) const {
+SkBitmap ClipboardMac::ReadImage(ClipboardType type) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
@@ -326,9 +313,9 @@ SkBitmap Clipboard::ReadImage(ClipboardType type) const {
return bitmap;
}
-void Clipboard::ReadCustomData(ClipboardType clipboard_type,
- const base::string16& type,
- base::string16* result) const {
+void ClipboardMac::ReadCustomData(ClipboardType clipboard_type,
+ const base::string16& type,
+ base::string16* result) const {
DCHECK(CalledOnValidThread());
DCHECK_EQ(clipboard_type, CLIPBOARD_TYPE_COPY_PASTE);
@@ -340,7 +327,7 @@ void Clipboard::ReadCustomData(ClipboardType clipboard_type,
}
}
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
+void ClipboardMac::ReadBookmark(base::string16* title, std::string* url) const {
DCHECK(CalledOnValidThread());
NSPasteboard* pb = GetPasteboard();
@@ -358,7 +345,8 @@ void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
}
}
-void Clipboard::ReadData(const FormatType& format, std::string* result) const {
+void ClipboardMac::ReadData(const FormatType& format,
+ std::string* result) const {
DCHECK(CalledOnValidThread());
NSPasteboard* pb = GetPasteboard();
NSData* data = [pb dataForType:format.ToNSString()];
@@ -366,79 +354,99 @@ void Clipboard::ReadData(const FormatType& format, std::string* result) const {
result->assign(static_cast<const char*>([data bytes]), [data length]);
}
-// static
-Clipboard::FormatType Clipboard::GetFormatType(
- const std::string& format_string) {
- return FormatType::Deserialize(format_string);
-}
+void ClipboardMac::WriteObjects(ClipboardType type, const ObjectMap& objects) {
+ DCHECK(CalledOnValidThread());
+ DCHECK_EQ(type, CLIPBOARD_TYPE_COPY_PASTE);
-// static
-const Clipboard::FormatType& Clipboard::GetUrlFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSURLPboardType));
- return type;
-}
+ NSPasteboard* pb = GetPasteboard();
+ [pb declareTypes:[NSArray array] owner:nil];
-// static
-const Clipboard::FormatType& Clipboard::GetUrlWFormatType() {
- return GetUrlFormatType();
+ for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end();
+ ++iter) {
+ DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
+ }
}
-// static
-const Clipboard::FormatType& Clipboard::GetPlainTextFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSStringPboardType));
- return type;
+void ClipboardMac::WriteText(const char* text_data, size_t text_len) {
+ std::string text_str(text_data, text_len);
+ NSString* text = base::SysUTF8ToNSString(text_str);
+ NSPasteboard* pb = GetPasteboard();
+ [pb addTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
+ [pb setString:text forType:NSStringPboardType];
}
-// static
-const Clipboard::FormatType& Clipboard::GetPlainTextWFormatType() {
- return GetPlainTextFormatType();
-}
+void ClipboardMac::WriteHTML(const char* markup_data,
+ size_t markup_len,
+ const char* url_data,
+ size_t url_len) {
+ // We need to mark it as utf-8. (see crbug.com/11957)
+ std::string html_fragment_str("<meta charset='utf-8'>");
+ html_fragment_str.append(markup_data, markup_len);
+ NSString* html_fragment = base::SysUTF8ToNSString(html_fragment_str);
-// static
-const Clipboard::FormatType& Clipboard::GetFilenameFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSFilenamesPboardType));
- return type;
+ // TODO(avi): url_data?
+ NSPasteboard* pb = GetPasteboard();
+ [pb addTypes:[NSArray arrayWithObject:NSHTMLPboardType] owner:nil];
+ [pb setString:html_fragment forType:NSHTMLPboardType];
}
-// static
-const Clipboard::FormatType& Clipboard::GetFilenameWFormatType() {
- return GetFilenameFormatType();
+void ClipboardMac::WriteRTF(const char* rtf_data, size_t data_len) {
+ WriteData(GetRtfFormatType(), rtf_data, data_len);
}
-// static
-const Clipboard::FormatType& Clipboard::GetHtmlFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSHTMLPboardType));
- return type;
-}
+void ClipboardMac::WriteBookmark(const char* title_data,
+ size_t title_len,
+ const char* url_data,
+ size_t url_len) {
+ std::string title_str(title_data, title_len);
+ NSString* title = base::SysUTF8ToNSString(title_str);
+ std::string url_str(url_data, url_len);
+ NSString* url = base::SysUTF8ToNSString(url_str);
-// static
-const Clipboard::FormatType& Clipboard::GetRtfFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSRTFPboardType));
- return type;
-}
+ // TODO(playmobil): In the Windows version of this function, an HTML
+ // representation of the bookmark is also added to the clipboard, to support
+ // drag and drop of web shortcuts. I don't think we need to do this on the
+ // Mac, but we should double check later on.
+ NSURL* nsurl = [NSURL URLWithString:url];
-// static
-const Clipboard::FormatType& Clipboard::GetBitmapFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (NSTIFFPboardType));
- return type;
+ NSPasteboard* pb = GetPasteboard();
+ // passing UTIs into the pasteboard methods is valid >= 10.5
+ [pb addTypes:[NSArray arrayWithObjects:NSURLPboardType, kUTTypeURLName, nil]
+ owner:nil];
+ [nsurl writeToPasteboard:pb];
+ [pb setString:title forType:kUTTypeURLName];
}
-// static
-const Clipboard::FormatType& Clipboard::GetWebKitSmartPasteFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kWebSmartPastePboardType));
- return type;
+void ClipboardMac::WriteBitmap(const SkBitmap& bitmap) {
+ NSImage* image = gfx::SkBitmapToNSImageWithColorSpace(
+ bitmap, base::mac::GetSystemColorSpace());
+ // An API to ask the NSImage to write itself to the clipboard comes in 10.6 :(
+ // For now, spit out the image as a TIFF.
+ NSPasteboard* pb = GetPasteboard();
+ [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil];
+ NSData* tiff_data = [image TIFFRepresentation];
+ LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard";
+ if (tiff_data) {
+ [pb setData:tiff_data forType:NSTIFFPboardType];
+ }
}
-// static
-const Clipboard::FormatType& Clipboard::GetWebCustomDataFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kWebCustomDataPboardType));
- return type;
+void ClipboardMac::WriteData(const FormatType& format,
+ const char* data_data,
+ size_t data_len) {
+ NSPasteboard* pb = GetPasteboard();
+ [pb addTypes:[NSArray arrayWithObject:format.ToNSString()] owner:nil];
+ [pb setData:[NSData dataWithBytes:data_data length:data_len]
+ forType:format.ToNSString()];
}
-// static
-const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() {
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kPepperCustomDataPboardType));
- return type;
+// Write an extra flavor that signifies WebKit was the last to modify the
+// pasteboard. This flavor has no data.
+void ClipboardMac::WriteWebSmartPaste() {
+ NSPasteboard* pb = GetPasteboard();
+ NSString* format = GetWebKitSmartPasteFormatType().ToNSString();
+ [pb addTypes:[NSArray arrayWithObject:format] owner:nil];
+ [pb setData:nil forType:format];
}
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698