| 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..5be2c7994894db9f8d33df4df0781fdede8dd5b6 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 firstObject]));
|
| + *title = base::SysNSStringToUTF16([titleArray firstObject]);
|
| + 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(
|
|
|