Chromium Code Reviews| Index: ui/base/dragdrop/os_exchange_data_provider_mac.mm |
| diff --git a/ui/base/dragdrop/os_exchange_data_provider_mac.mm b/ui/base/dragdrop/os_exchange_data_provider_mac.mm |
| index 030d0d084121808976d4e6ff1ec56bc82c9fd16e..dc907a9c4e087e37a09d359e666ee16558922d93 100644 |
| --- a/ui/base/dragdrop/os_exchange_data_provider_mac.mm |
| +++ b/ui/base/dragdrop/os_exchange_data_provider_mac.mm |
| @@ -40,16 +40,16 @@ bool OSExchangeDataProviderMac::DidOriginateFromRenderer() const { |
| } |
| void OSExchangeDataProviderMac::SetString(const base::string16& string) { |
| - [pasteboard_->get() writeObjects:@[ base::SysUTF16ToNSString(string) ]]; |
| + [pasteboard_->get() setString:base::SysUTF16ToNSString(string) |
| + forType:NSPasteboardTypeString]; |
| } |
| void OSExchangeDataProviderMac::SetURL(const GURL& url, |
| const base::string16& title) { |
| - NSURL* ns_url = [NSURL URLWithString:base::SysUTF8ToNSString(url.spec())]; |
| - [pasteboard_->get() writeObjects:@[ ns_url ]]; |
| - |
| - [pasteboard_->get() setString:base::SysUTF16ToNSString(title) |
| - forType:kCorePasteboardFlavorType_urln]; |
| + base::scoped_nsobject<NSPasteboardItem> item = |
| + ClipboardUtil::PasteboardItemFromUrl(base::SysUTF8ToNSString(url.spec()), |
| + base::SysUTF16ToNSString(title)); |
| + ui::ClipboardUtil::AddDataToPasteboard(pasteboard_->get(), item); |
| } |
| void OSExchangeDataProviderMac::SetFilename(const base::FilePath& path) { |
| @@ -71,23 +71,21 @@ void OSExchangeDataProviderMac::SetPickledData( |
| bool OSExchangeDataProviderMac::GetString(base::string16* data) const { |
| DCHECK(data); |
| - NSArray* items = |
| - [pasteboard_->get() readObjectsForClasses:@[ [NSString class] ] |
| - options:@{}]; |
| + NSString* item = [pasteboard_->get() stringForType:NSPasteboardTypeString]; |
| + if (item) { |
| + *data = base::SysNSStringToUTF16(item); |
| + return true; |
| + } |
| // There was no NSString, check for an NSURL. |
| - if ([items count] == 0) { |
| - GURL url; |
| - base::string16 title; |
| - bool result = |
| - GetURLAndTitle(OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title); |
| - if (result) |
| - *data = base::UTF8ToUTF16(url.spec()); |
| - return result; |
| - } |
| + GURL url; |
| + base::string16 title; |
| + bool result = |
| + GetURLAndTitle(OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title); |
| + if (result) |
| + *data = base::UTF8ToUTF16(url.spec()); |
| - *data = base::SysNSStringToUTF16([items objectAtIndex:0]); |
| - return true; |
| + return result; |
| } |
| bool OSExchangeDataProviderMac::GetURLAndTitle( |
| @@ -96,29 +94,29 @@ bool OSExchangeDataProviderMac::GetURLAndTitle( |
| base::string16* title) const { |
| DCHECK(url); |
| DCHECK(title); |
| - NSArray* items = |
| - [pasteboard_->get() readObjectsForClasses:@[ [NSURL class] ] options:@{}]; |
| - if ([items count] == 0) |
| - return false; |
| - NSURL* ns_url = [items objectAtIndex:0]; |
| - |
| - if (policy == OSExchangeData::DO_NOT_CONVERT_FILENAMES) { |
| - // If the URL matches a filename, assume that it came from SetFilename(). |
| - // Don't return it if we are not supposed to convert filename to URL. |
| - NSArray* paths = |
| - [pasteboard_->get() propertyListForType:NSFilenamesPboardType]; |
| - NSString* url_path = [[ns_url path] stringByStandardizingPath]; |
| - for (NSString* path in paths) { |
| - if ([[path stringByStandardizingPath] isEqualToString:url_path]) |
| - return false; |
| - } |
| + NSArray* urlArray = nil; |
| + NSArray* titleArray = nil; |
| + if (ClipboardUtil::URLsAndTitlesFromPasteboard(pasteboard_->get(), &urlArray, |
| + &titleArray)) { |
| + *url = GURL(base::SysNSStringToUTF8([urlArray objectAtIndex:0])); |
| + *title = base::SysNSStringToUTF16([titleArray objectAtIndex:0]); |
|
Avi (use Gerrit)
2016/05/05 18:21:46
Does -firstObject work yet in the SDK that we use?
|
| + return true; |
| } |
| - *url = GURL([[ns_url absoluteString] UTF8String]); |
| - *title = base::SysNSStringToUTF16( |
| - [pasteboard_->get() stringForType:kCorePasteboardFlavorType_urln]); |
| - return true; |
| + // If there are no URLS, try to convert a filename to a URL if the policy |
| + // allows it. The title remains blank. |
| + base::FilePath path; |
| + if (policy != OSExchangeData::DO_NOT_CONVERT_FILENAMES && |
| + GetFilename(&path)) { |
| + NSURL* fileUrl = |
| + [NSURL fileURLWithPath:base::SysUTF8ToNSString(path.value())]; |
| + *url = |
| + GURL([[fileUrl absoluteString] stringByStandardizingPath].UTF8String); |
| + return true; |
| + } |
| + |
| + return false; |
| } |
| bool OSExchangeDataProviderMac::GetFilename(base::FilePath* path) const { |
| @@ -151,8 +149,8 @@ bool OSExchangeDataProviderMac::GetPickledData( |
| } |
| bool OSExchangeDataProviderMac::HasString() const { |
| - NSArray* classes = @[ [NSString class] ]; |
| - return [pasteboard_->get() canReadObjectForClasses:classes options:nil]; |
| + base::string16 string; |
| + return GetString(&string); |
| } |
| bool OSExchangeDataProviderMac::HasURL( |