| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/base/clipboard/clipboard.h" | 5 #include "ui/base/clipboard/clipboard.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 // For now, spit out the image as a TIFF. | 146 // For now, spit out the image as a TIFF. |
| 147 NSPasteboard* pb = GetPasteboard(); | 147 NSPasteboard* pb = GetPasteboard(); |
| 148 [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil]; | 148 [pb addTypes:[NSArray arrayWithObject:NSTIFFPboardType] owner:nil]; |
| 149 NSData *tiff_data = [image TIFFRepresentation]; | 149 NSData *tiff_data = [image TIFFRepresentation]; |
| 150 LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard"; | 150 LOG_IF(ERROR, tiff_data == NULL) << "Failed to allocate image for clipboard"; |
| 151 if (tiff_data) { | 151 if (tiff_data) { |
| 152 [pb setData:tiff_data forType:NSTIFFPboardType]; | 152 [pb setData:tiff_data forType:NSTIFFPboardType]; |
| 153 } | 153 } |
| 154 } | 154 } |
| 155 | 155 |
| 156 void Clipboard::WriteData(const char* format_name, size_t format_len, | |
| 157 const char* data_data, size_t data_len) { | |
| 158 NSPasteboard* pb = GetPasteboard(); | |
| 159 NSString* format = [NSString stringWithUTF8String:format_name]; | |
| 160 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; | |
| 161 [pb setData:[NSData dataWithBytes:data_data length:data_len] | |
| 162 forType:format]; | |
| 163 } | |
| 164 | |
| 165 // Write an extra flavor that signifies WebKit was the last to modify the | 156 // Write an extra flavor that signifies WebKit was the last to modify the |
| 166 // pasteboard. This flavor has no data. | 157 // pasteboard. This flavor has no data. |
| 167 void Clipboard::WriteWebSmartPaste() { | 158 void Clipboard::WriteWebSmartPaste() { |
| 168 NSPasteboard* pb = GetPasteboard(); | 159 NSPasteboard* pb = GetPasteboard(); |
| 169 NSString* format = base::SysUTF8ToNSString(GetWebKitSmartPasteFormatType()); | 160 NSString* format = base::SysUTF8ToNSString(GetWebKitSmartPasteFormatType()); |
| 170 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; | 161 [pb addTypes:[NSArray arrayWithObject:format] owner:nil]; |
| 171 [pb setData:nil forType:format]; | 162 [pb setData:nil forType:format]; |
| 172 } | 163 } |
| 173 | 164 |
| 174 uint64 Clipboard::GetSequenceNumber(Buffer buffer) { | 165 uint64 Clipboard::GetSequenceNumber(Buffer buffer) { |
| 175 DCHECK_EQ(buffer, BUFFER_STANDARD); | 166 DCHECK_EQ(buffer, BUFFER_STANDARD); |
| 176 | 167 |
| 177 NSPasteboard* pb = GetPasteboard(); | 168 NSPasteboard* pb = GetPasteboard(); |
| 178 return [pb changeCount]; | 169 return [pb changeCount]; |
| 179 } | 170 } |
| 180 | 171 |
| 181 bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, | 172 bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, |
| 182 Buffer buffer) const { | 173 Clipboard::Buffer buffer) const { |
| 183 DCHECK_EQ(buffer, BUFFER_STANDARD); | 174 DCHECK_EQ(buffer, BUFFER_STANDARD); |
| 184 NSString* format_ns = base::SysUTF8ToNSString(format); | 175 NSString* format_ns = base::SysUTF8ToNSString(format); |
| 185 | 176 |
| 186 NSPasteboard* pb = GetPasteboard(); | 177 NSPasteboard* pb = GetPasteboard(); |
| 187 NSArray* types = [pb types]; | 178 NSArray* types = [pb types]; |
| 188 | 179 |
| 189 // Safari only places RTF on the pasteboard, never HTML. We can convert RTF | 180 // Safari only places RTF on the pasteboard, never HTML. We can convert RTF |
| 190 // to HTML, so the presence of either indicates success when looking for HTML. | 181 // to HTML, so the presence of either indicates success when looking for HTML. |
| 191 if ([format_ns isEqualToString:NSHTMLPboardType]) { | 182 if ([format_ns isEqualToString:NSHTMLPboardType]) { |
| 192 return [types containsObject:NSHTMLPboardType] || | 183 return [types containsObject:NSHTMLPboardType] || |
| 193 [types containsObject:NSRTFPboardType]; | 184 [types containsObject:NSRTFPboardType]; |
| 194 } | 185 } |
| 195 return [types containsObject:format_ns]; | 186 return [types containsObject:format_ns]; |
| 196 } | 187 } |
| 197 | 188 |
| 198 bool Clipboard::IsFormatAvailableByString(const std::string& format, | |
| 199 Buffer buffer) const { | |
| 200 DCHECK_EQ(buffer, BUFFER_STANDARD); | |
| 201 NSString* format_ns = base::SysUTF8ToNSString(format); | |
| 202 | |
| 203 NSPasteboard* pb = GetPasteboard(); | |
| 204 NSArray* types = [pb types]; | |
| 205 | |
| 206 return [types containsObject:format_ns]; | |
| 207 } | |
| 208 | |
| 209 void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer, | 189 void Clipboard::ReadAvailableTypes(Clipboard::Buffer buffer, |
| 210 std::vector<string16>* types, | 190 std::vector<string16>* types, |
| 211 bool* contains_filenames) const { | 191 bool* contains_filenames) const { |
| 212 if (!types || !contains_filenames) { | 192 if (!types || !contains_filenames) { |
| 213 NOTREACHED(); | 193 NOTREACHED(); |
| 214 return; | 194 return; |
| 215 } | 195 } |
| 216 | 196 |
| 217 types->clear(); | 197 types->clear(); |
| 218 if (IsFormatAvailable(Clipboard::GetPlainTextFormatType(), buffer)) | 198 if (IsFormatAvailable(Clipboard::GetPlainTextFormatType(), buffer)) |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 | 335 |
| 356 NSPasteboard* pb = GetPasteboard(); | 336 NSPasteboard* pb = GetPasteboard(); |
| 357 NSArray* fileList = [pb propertyListForType:NSFilenamesPboardType]; | 337 NSArray* fileList = [pb propertyListForType:NSFilenamesPboardType]; |
| 358 | 338 |
| 359 for (unsigned int i = 0; i < [fileList count]; ++i) { | 339 for (unsigned int i = 0; i < [fileList count]; ++i) { |
| 360 std::string file = [[fileList objectAtIndex:i] UTF8String]; | 340 std::string file = [[fileList objectAtIndex:i] UTF8String]; |
| 361 files->push_back(FilePath(file)); | 341 files->push_back(FilePath(file)); |
| 362 } | 342 } |
| 363 } | 343 } |
| 364 | 344 |
| 365 void Clipboard::ReadData(const std::string& format, std::string* result) const { | |
| 366 NSPasteboard* pb = GetPasteboard(); | |
| 367 NSData* data = [pb dataForType:base::SysUTF8ToNSString(format)]; | |
| 368 if ([data length]) | |
| 369 result->assign(reinterpret_cast<const char*>([data bytes]), [data length]); | |
| 370 } | |
| 371 | |
| 372 // static | 345 // static |
| 373 Clipboard::FormatType Clipboard::GetUrlFormatType() { | 346 Clipboard::FormatType Clipboard::GetUrlFormatType() { |
| 374 return base::SysNSStringToUTF8(NSURLPboardType); | 347 return base::SysNSStringToUTF8(NSURLPboardType); |
| 375 } | 348 } |
| 376 | 349 |
| 377 // static | 350 // static |
| 378 Clipboard::FormatType Clipboard::GetUrlWFormatType() { | 351 Clipboard::FormatType Clipboard::GetUrlWFormatType() { |
| 379 return base::SysNSStringToUTF8(NSURLPboardType); | 352 return base::SysNSStringToUTF8(NSURLPboardType); |
| 380 } | 353 } |
| 381 | 354 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 408 Clipboard::FormatType Clipboard::GetBitmapFormatType() { | 381 Clipboard::FormatType Clipboard::GetBitmapFormatType() { |
| 409 return base::SysNSStringToUTF8(NSTIFFPboardType); | 382 return base::SysNSStringToUTF8(NSTIFFPboardType); |
| 410 } | 383 } |
| 411 | 384 |
| 412 // static | 385 // static |
| 413 Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() { | 386 Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() { |
| 414 return base::SysNSStringToUTF8(kWebSmartPastePboardType); | 387 return base::SysNSStringToUTF8(kWebSmartPastePboardType); |
| 415 } | 388 } |
| 416 | 389 |
| 417 } // namespace ui | 390 } // namespace ui |
| OLD | NEW |