| 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..88a9ff17802ba36264fc6a8a0f4027ae3400d1c7 100644
|
| --- a/ui/base/clipboard/clipboard_mac.mm
|
| +++ b/ui/base/clipboard/clipboard_mac.mm
|
| @@ -50,6 +50,7 @@ NSPasteboard* GetPasteboard() {
|
|
|
| } // namespace
|
|
|
| +// Clipboard::FormatType implementation.
|
| Clipboard::FormatType::FormatType() : data_(nil) {
|
| }
|
|
|
| @@ -88,109 +89,89 @@ Clipboard::FormatType Clipboard::FormatType::Deserialize(
|
| return FormatType(base::SysUTF8ToNSString(serialization));
|
| }
|
|
|
| -Clipboard::Clipboard() {
|
| - DCHECK(CalledOnValidThread());
|
| +// Various predefined FormatTypes.
|
| +// 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()];
|
| +// Clipboard implementation.
|
| +Clipboard::Clipboard() {
|
| + DCHECK(CalledOnValidThread());
|
| }
|
|
|
| -// 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];
|
| +Clipboard::~Clipboard() {
|
| + DCHECK(CalledOnValidThread());
|
| }
|
|
|
| uint64 Clipboard::GetSequenceNumber(ClipboardType type) {
|
| @@ -366,79 +347,101 @@ 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 Clipboard::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 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::GetPlainTextWFormatType() {
|
| - return GetPlainTextFormatType();
|
| -}
|
| +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::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 Clipboard::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 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::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 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::GetWebCustomDataFormatType() {
|
| - CR_DEFINE_STATIC_LOCAL(FormatType, type, (kWebCustomDataPboardType));
|
| - 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
|
| -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 Clipboard::WriteWebSmartPaste() {
|
| + NSPasteboard* pb = GetPasteboard();
|
| + NSString* format = GetWebKitSmartPasteFormatType().ToNSString();
|
| + [pb addTypes:[NSArray arrayWithObject:format] owner:nil];
|
| + [pb setData:nil forType:format];
|
| }
|
|
|
| } // namespace ui
|
|
|