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

Unified Diff: ui/base/dragdrop/os_exchange_data_provider_mac.mm

Issue 368973003: MacViews: Partially implement OSExchangeDataProviderMac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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/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 e8e60c3942cffd1546e946adb97e493d73a49765..8afb9c07fcb03a0c02271589dd5532531f047045 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_mac.mm
+++ b/ui/base/dragdrop/os_exchange_data_provider_mac.mm
@@ -4,19 +4,30 @@
#include "ui/base/dragdrop/os_exchange_data_provider_mac.h"
+#import <Cocoa/Cocoa.h>
+
#include "base/logging.h"
+#include "base/pickle.h"
+#include "base/strings/sys_string_conversions.h"
+#import "third_party/mozilla/NSPasteboard+Utils.h"
+#import "ui/base/dragdrop/cocoa_dnd_util.h"
+#include "url/gurl.h"
namespace ui {
-OSExchangeDataProviderMac::OSExchangeDataProviderMac() {
+OSExchangeDataProviderMac::OSExchangeDataProviderMac()
+ : pasteboard_([[NSPasteboard pasteboardWithUniqueName] retain]) {
+}
+
+OSExchangeDataProviderMac::OSExchangeDataProviderMac(NSPasteboard* pasteboard)
+ : pasteboard_([pasteboard retain]) {
}
OSExchangeDataProviderMac::~OSExchangeDataProviderMac() {
}
OSExchangeData::Provider* OSExchangeDataProviderMac::Clone() const {
- NOTIMPLEMENTED();
- return new OSExchangeDataProviderMac();
+ return new OSExchangeDataProviderMac(pasteboard_);
}
void OSExchangeDataProviderMac::MarkOriginatedFromRenderer() {
@@ -29,12 +40,13 @@ bool OSExchangeDataProviderMac::DidOriginateFromRenderer() const {
}
void OSExchangeDataProviderMac::SetString(const base::string16& string) {
- NOTIMPLEMENTED();
+ [pasteboard_ writeObjects:@[ base::SysUTF16ToNSString(string) ]];
}
void OSExchangeDataProviderMac::SetURL(const GURL& url,
const base::string16& title) {
- NOTIMPLEMENTED();
+ [pasteboard_ setDataForURL:base::SysUTF8ToNSString(url.spec())
+ title:base::SysUTF16ToNSString(title)];
}
void OSExchangeDataProviderMac::SetFilename(const base::FilePath& path) {
@@ -49,20 +61,27 @@ void OSExchangeDataProviderMac::SetFilenames(
void OSExchangeDataProviderMac::SetPickledData(
const OSExchangeData::CustomFormat& format,
const Pickle& data) {
- NOTIMPLEMENTED();
+ NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()];
+ [pasteboard_ setData:ns_data forType:format.ToNSString()];
}
bool OSExchangeDataProviderMac::GetString(base::string16* data) const {
- NOTIMPLEMENTED();
- return false;
+ DCHECK(data);
+ NSArray* items = [pasteboard_ readObjectsForClasses:@[ [NSString class] ]
+ options:nil];
tapted 2014/07/03 07:01:50 should options be @[ ]? -- i.e. an empty array ra
Andre 2014/07/07 18:29:05 Done. Passing nil as options is pretty common in C
+ if (!items || [items count] < 1)
tapted 2014/07/03 07:01:50 optional nit: I'd probably go with `if ([items cou
Andre 2014/07/07 18:29:05 Done.
+ return false;
+
+ *data = base::SysNSStringToUTF16([items lastObject]);
dcheng 2014/07/03 05:44:16 Why lastObject?
Andre 2014/07/07 18:29:05 items is a 1 element array at this point, so lastO
dcheng 2014/07/07 18:42:18 I guess as a reader, I would usually expect to see
Andre 2014/07/07 20:10:51 I agree, however firstObject is a relatively late
dcheng 2014/07/09 00:26:35 I have a very very slight preference for objectAtI
Andre 2014/07/10 03:54:28 Done.
+ return true;
}
tapted 2014/07/03 07:01:50 clipboard_util_win.cc seems to fallback to URL as
Andre 2014/07/07 18:29:05 I'm not sure, OSExchangeDataProviderAura does not
tapted 2014/07/07 23:39:13 sg
bool OSExchangeDataProviderMac::GetURLAndTitle(
OSExchangeData::FilenameToURLPolicy policy,
GURL* url,
base::string16* title) const {
- NOTIMPLEMENTED();
- return false;
+ return PopulateURLAndTitleFromPasteboard(
+ url, title, pasteboard_, policy == OSExchangeData::CONVERT_FILENAMES);
}
bool OSExchangeDataProviderMac::GetFilename(base::FilePath* path) const {
@@ -79,19 +98,19 @@ bool OSExchangeDataProviderMac::GetFilenames(
bool OSExchangeDataProviderMac::GetPickledData(
const OSExchangeData::CustomFormat& format,
Pickle* data) const {
- NOTIMPLEMENTED();
- return false;
+ NSData* ns_data = [pasteboard_ dataForType:format.ToNSString()];
tapted 2014/07/03 07:01:50 dataForType can return nil in some cases (e.g. tim
Andre 2014/07/07 18:29:05 Done.
+ *data = Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]);
+ return true;
}
bool OSExchangeDataProviderMac::HasString() const {
- NOTIMPLEMENTED();
- return false;
+ NSArray* classes = @[ [NSString class] ];
+ return [pasteboard_ canReadObjectForClasses:classes options:nil];
}
bool OSExchangeDataProviderMac::HasURL(
OSExchangeData::FilenameToURLPolicy policy) const {
- NOTIMPLEMENTED();
- return false;
+ return [pasteboard_ containsURLData];
dcheng 2014/07/03 05:44:16 As currently written, won't there be situations wh
Andre 2014/07/07 18:29:05 Possibly, are you referring to the CONVERT_FILENAM
dcheng 2014/07/07 18:42:18 Yes. The simplest solution is to forward the argum
Andre 2014/07/07 20:10:51 Done.
}
bool OSExchangeDataProviderMac::HasFile() const {
@@ -101,8 +120,7 @@ bool OSExchangeDataProviderMac::HasFile() const {
bool OSExchangeDataProviderMac::HasCustomFormat(
const OSExchangeData::CustomFormat& format) const {
- NOTIMPLEMENTED();
- return false;
+ return [[pasteboard_ types] containsObject:format.ToNSString()];
}
///////////////////////////////////////////////////////////////////////////////

Powered by Google App Engine
This is Rietveld 408576698