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

Side by Side Diff: ui/base/dragdrop/os_exchange_data_provider_mac.mm

Issue 542203004: MacViews: Get OSExchangeDataTest to pass (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes for dcheng Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | ui/base/dragdrop/os_exchange_data_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/dragdrop/os_exchange_data_provider_mac.h" 5 #include "ui/base/dragdrop/os_exchange_data_provider_mac.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/pickle.h" 10 #include "base/pickle.h"
11 #include "base/strings/sys_string_conversions.h" 11 #include "base/strings/sys_string_conversions.h"
12 #import "third_party/mozilla/NSPasteboard+Utils.h" 12 #import "third_party/mozilla/NSPasteboard+Utils.h"
13 #import "ui/base/dragdrop/cocoa_dnd_util.h"
14 #include "url/gurl.h" 13 #include "url/gurl.h"
15 14
16 namespace ui { 15 namespace ui {
17 16
18 OSExchangeDataProviderMac::OSExchangeDataProviderMac() 17 OSExchangeDataProviderMac::OSExchangeDataProviderMac()
19 : pasteboard_([[NSPasteboard pasteboardWithUniqueName] retain]) { 18 : pasteboard_([[NSPasteboard pasteboardWithUniqueName] retain]) {
20 } 19 }
21 20
22 OSExchangeDataProviderMac::OSExchangeDataProviderMac(NSPasteboard* pasteboard) 21 OSExchangeDataProviderMac::OSExchangeDataProviderMac(NSPasteboard* pasteboard)
23 : pasteboard_([pasteboard retain]) { 22 : pasteboard_([pasteboard retain]) {
(...skipping 14 matching lines...) Expand all
38 NOTIMPLEMENTED(); 37 NOTIMPLEMENTED();
39 return false; 38 return false;
40 } 39 }
41 40
42 void OSExchangeDataProviderMac::SetString(const base::string16& string) { 41 void OSExchangeDataProviderMac::SetString(const base::string16& string) {
43 [pasteboard_ writeObjects:@[ base::SysUTF16ToNSString(string) ]]; 42 [pasteboard_ writeObjects:@[ base::SysUTF16ToNSString(string) ]];
44 } 43 }
45 44
46 void OSExchangeDataProviderMac::SetURL(const GURL& url, 45 void OSExchangeDataProviderMac::SetURL(const GURL& url,
47 const base::string16& title) { 46 const base::string16& title) {
48 [pasteboard_ setDataForURL:base::SysUTF8ToNSString(url.spec()) 47 NSURL* ns_url = [NSURL URLWithString:base::SysUTF8ToNSString(url.spec())];
49 title:base::SysUTF16ToNSString(title)]; 48 [pasteboard_ writeObjects:@[ ns_url ]];
49
50 [pasteboard_ setString:base::SysUTF16ToNSString(title)
51 forType:kCorePasteboardFlavorType_urln];
50 } 52 }
51 53
52 void OSExchangeDataProviderMac::SetFilename(const base::FilePath& path) { 54 void OSExchangeDataProviderMac::SetFilename(const base::FilePath& path) {
53 NOTIMPLEMENTED(); 55 [pasteboard_ setPropertyList:@[ base::SysUTF8ToNSString(path.value()) ]
56 forType:NSFilenamesPboardType];
54 } 57 }
55 58
56 void OSExchangeDataProviderMac::SetFilenames( 59 void OSExchangeDataProviderMac::SetFilenames(
57 const std::vector<FileInfo>& filenames) { 60 const std::vector<FileInfo>& filenames) {
58 NOTIMPLEMENTED(); 61 NOTIMPLEMENTED();
59 } 62 }
60 63
61 void OSExchangeDataProviderMac::SetPickledData( 64 void OSExchangeDataProviderMac::SetPickledData(
62 const OSExchangeData::CustomFormat& format, 65 const OSExchangeData::CustomFormat& format,
63 const Pickle& data) { 66 const Pickle& data) {
64 NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()]; 67 NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()];
65 [pasteboard_ setData:ns_data forType:format.ToNSString()]; 68 [pasteboard_ setData:ns_data forType:format.ToNSString()];
66 } 69 }
67 70
68 bool OSExchangeDataProviderMac::GetString(base::string16* data) const { 71 bool OSExchangeDataProviderMac::GetString(base::string16* data) const {
69 DCHECK(data); 72 DCHECK(data);
70 NSArray* items = [pasteboard_ readObjectsForClasses:@[ [NSString class] ] 73 NSArray* items = [pasteboard_ readObjectsForClasses:@[ [NSString class] ]
71 options:@{ }]; 74 options:@{ }];
72 if ([items count] == 0) 75 if ([items count] == 0)
73 return false; 76 return false;
74 77
75 *data = base::SysNSStringToUTF16([items objectAtIndex:0]); 78 *data = base::SysNSStringToUTF16([items objectAtIndex:0]);
76 return true; 79 return true;
77 } 80 }
78 81
79 bool OSExchangeDataProviderMac::GetURLAndTitle( 82 bool OSExchangeDataProviderMac::GetURLAndTitle(
80 OSExchangeData::FilenameToURLPolicy policy, 83 OSExchangeData::FilenameToURLPolicy policy,
81 GURL* url, 84 GURL* url,
82 base::string16* title) const { 85 base::string16* title) const {
83 return PopulateURLAndTitleFromPasteboard( 86 NSArray* items = [pasteboard_ readObjectsForClasses:@[ [NSURL class] ]
84 url, title, pasteboard_, policy == OSExchangeData::CONVERT_FILENAMES); 87 options:@{ }];
88 if ([items count] == 0)
89 return false;
90
91 NSURL* ns_url = [items objectAtIndex:0];
92
93 if (policy == OSExchangeData::DO_NOT_CONVERT_FILENAMES) {
94 // If the URL matches the filename, assume that it came from SetFilename().
95 // Don't return it if we are not supposed to convert filename to URL.
96 NSArray* paths = [pasteboard_ propertyListForType:NSFilenamesPboardType];
97 if ([paths count] > 0 && [[paths objectAtIndex:0] isEqual:[ns_url path]])
dcheng 2014/09/15 21:38:47 Is there some guarantee that the URLs and filename
Andre 2014/09/16 18:00:08 Maybe not. Changed it to use containsObject.
98 return false;
99 }
100
101 if (url) {
102 *url = GURL([[ns_url absoluteString] UTF8String]);
103 }
104 if (title) {
105 *title = base::SysNSStringToUTF16(
106 [pasteboard_ stringForType:kCorePasteboardFlavorType_urln]);
107 }
108 return true;
85 } 109 }
86 110
87 bool OSExchangeDataProviderMac::GetFilename(base::FilePath* path) const { 111 bool OSExchangeDataProviderMac::GetFilename(base::FilePath* path) const {
88 NOTIMPLEMENTED(); 112 NSArray* paths = [pasteboard_ propertyListForType:NSFilenamesPboardType];
89 return false; 113 if ([paths count] == 0)
114 return false;
115
116 *path = base::FilePath([[paths objectAtIndex:0] UTF8String]);
117 return true;
90 } 118 }
91 119
92 bool OSExchangeDataProviderMac::GetFilenames( 120 bool OSExchangeDataProviderMac::GetFilenames(
93 std::vector<FileInfo>* filenames) const { 121 std::vector<FileInfo>* filenames) const {
94 NOTIMPLEMENTED(); 122 NOTIMPLEMENTED();
95 return false; 123 return false;
96 } 124 }
97 125
98 bool OSExchangeDataProviderMac::GetPickledData( 126 bool OSExchangeDataProviderMac::GetPickledData(
99 const OSExchangeData::CustomFormat& format, 127 const OSExchangeData::CustomFormat& format,
100 Pickle* data) const { 128 Pickle* data) const {
101 DCHECK(data); 129 DCHECK(data);
102 NSData* ns_data = [pasteboard_ dataForType:format.ToNSString()]; 130 NSData* ns_data = [pasteboard_ dataForType:format.ToNSString()];
103 if (!ns_data) 131 if (!ns_data)
104 return false; 132 return false;
105 133
106 *data = Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]); 134 *data = Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]);
107 return true; 135 return true;
108 } 136 }
109 137
110 bool OSExchangeDataProviderMac::HasString() const { 138 bool OSExchangeDataProviderMac::HasString() const {
111 NSArray* classes = @[ [NSString class] ]; 139 NSArray* classes = @[ [NSString class] ];
112 return [pasteboard_ canReadObjectForClasses:classes options:nil]; 140 return [pasteboard_ canReadObjectForClasses:classes options:nil];
113 } 141 }
114 142
115 bool OSExchangeDataProviderMac::HasURL( 143 bool OSExchangeDataProviderMac::HasURL(
116 OSExchangeData::FilenameToURLPolicy policy) const { 144 OSExchangeData::FilenameToURLPolicy policy) const {
117 GURL url; 145 return GetURLAndTitle(policy, NULL, NULL);
118 base::string16 title;
119 return GetURLAndTitle(policy, &url, &title);
120 } 146 }
121 147
122 bool OSExchangeDataProviderMac::HasFile() const { 148 bool OSExchangeDataProviderMac::HasFile() const {
123 NOTIMPLEMENTED(); 149 return [[pasteboard_ types] containsObject:NSFilenamesPboardType];
124 return false;
125 } 150 }
126 151
127 bool OSExchangeDataProviderMac::HasCustomFormat( 152 bool OSExchangeDataProviderMac::HasCustomFormat(
128 const OSExchangeData::CustomFormat& format) const { 153 const OSExchangeData::CustomFormat& format) const {
129 return [[pasteboard_ types] containsObject:format.ToNSString()]; 154 return [[pasteboard_ types] containsObject:format.ToNSString()];
130 } 155 }
131 156
132 /////////////////////////////////////////////////////////////////////////////// 157 ///////////////////////////////////////////////////////////////////////////////
133 // OSExchangeData, public: 158 // OSExchangeData, public:
134 159
135 // static 160 // static
136 OSExchangeData::Provider* OSExchangeData::CreateProvider() { 161 OSExchangeData::Provider* OSExchangeData::CreateProvider() {
137 return new OSExchangeDataProviderMac; 162 return new OSExchangeDataProviderMac;
138 } 163 }
139 164
140 } // namespace ui 165 } // namespace ui
OLDNEW
« no previous file with comments | « no previous file | ui/base/dragdrop/os_exchange_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698