OLD | NEW |
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 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #import "third_party/mozilla/NSPasteboard+Utils.h" | 13 #import "third_party/mozilla/NSPasteboard+Utils.h" |
14 #import "ui/base/clipboard/clipboard_util_mac.h" | 14 #import "ui/base/clipboard/clipboard_util_mac.h" |
| 15 #import "ui/base/dragdrop/cocoa_dnd_util.h" |
15 #include "url/gurl.h" | 16 #include "url/gurl.h" |
16 | 17 |
17 namespace ui { | 18 namespace ui { |
18 | 19 |
19 OSExchangeDataProviderMac::OSExchangeDataProviderMac() | 20 OSExchangeDataProviderMac::OSExchangeDataProviderMac() |
20 : pasteboard_(new ui::UniquePasteboard) {} | 21 : pasteboard_(new ui::UniquePasteboard) {} |
21 | 22 |
22 OSExchangeDataProviderMac::OSExchangeDataProviderMac( | 23 OSExchangeDataProviderMac::OSExchangeDataProviderMac( |
23 scoped_refptr<ui::UniquePasteboard> pb) | 24 scoped_refptr<ui::UniquePasteboard> pb) |
24 : pasteboard_(pb) {} | 25 : pasteboard_(pb) {} |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 NOTIMPLEMENTED(); | 63 NOTIMPLEMENTED(); |
63 } | 64 } |
64 | 65 |
65 void OSExchangeDataProviderMac::SetPickledData( | 66 void OSExchangeDataProviderMac::SetPickledData( |
66 const Clipboard::FormatType& format, | 67 const Clipboard::FormatType& format, |
67 const base::Pickle& data) { | 68 const base::Pickle& data) { |
68 NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()]; | 69 NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()]; |
69 [pasteboard_->get() setData:ns_data forType:format.ToNSString()]; | 70 [pasteboard_->get() setData:ns_data forType:format.ToNSString()]; |
70 } | 71 } |
71 | 72 |
| 73 void OSExchangeDataProviderMac::SetDragImage(const gfx::ImageSkia& image) { |
| 74 drag_image_ = image; |
| 75 } |
| 76 |
| 77 void OSExchangeDataProviderMac::SetNativeEvent(const base::NativeEvent& event) { |
| 78 event_ = event; |
| 79 } |
| 80 |
72 bool OSExchangeDataProviderMac::GetString(base::string16* data) const { | 81 bool OSExchangeDataProviderMac::GetString(base::string16* data) const { |
73 DCHECK(data); | 82 DCHECK(data); |
74 NSString* item = [pasteboard_->get() stringForType:NSPasteboardTypeString]; | 83 NSString* item = [pasteboard_->get() stringForType:NSPasteboardTypeString]; |
75 if (item) { | 84 if (item) { |
76 *data = base::SysNSStringToUTF16(item); | 85 *data = base::SysNSStringToUTF16(item); |
77 return true; | 86 return true; |
78 } | 87 } |
79 | |
80 // There was no NSString, check for an NSURL. | 88 // There was no NSString, check for an NSURL. |
81 GURL url; | 89 GURL url; |
82 base::string16 title; | 90 base::string16 title; |
83 bool result = | 91 bool result = |
84 GetURLAndTitle(OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title); | 92 GetURLAndTitle(OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title); |
85 if (result) | 93 if (result) |
86 *data = base::UTF8ToUTF16(url.spec()); | 94 *data = base::UTF8ToUTF16(url.spec()); |
87 | 95 |
88 return result; | 96 return result; |
89 } | 97 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 DCHECK(data); | 149 DCHECK(data); |
142 NSData* ns_data = [pasteboard_->get() dataForType:format.ToNSString()]; | 150 NSData* ns_data = [pasteboard_->get() dataForType:format.ToNSString()]; |
143 if (!ns_data) | 151 if (!ns_data) |
144 return false; | 152 return false; |
145 | 153 |
146 *data = | 154 *data = |
147 base::Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]); | 155 base::Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]); |
148 return true; | 156 return true; |
149 } | 157 } |
150 | 158 |
| 159 const gfx::ImageSkia& OSExchangeDataProviderMac::GetDragImage() const { |
| 160 return drag_image_; |
| 161 } |
| 162 |
| 163 const base::NativeEvent& OSExchangeDataProviderMac::GetNativeEvent() const { |
| 164 return event_; |
| 165 } |
| 166 |
| 167 NSData* OSExchangeDataProviderMac::GetNSDataForType(NSString* type) const { |
| 168 return [pasteboard_->get() dataForType:type]; |
| 169 } |
| 170 |
151 bool OSExchangeDataProviderMac::HasString() const { | 171 bool OSExchangeDataProviderMac::HasString() const { |
152 base::string16 string; | 172 base::string16 string; |
153 return GetString(&string); | 173 return GetString(&string); |
154 } | 174 } |
155 | 175 |
156 bool OSExchangeDataProviderMac::HasURL( | 176 bool OSExchangeDataProviderMac::HasURL( |
157 OSExchangeData::FilenameToURLPolicy policy) const { | 177 OSExchangeData::FilenameToURLPolicy policy) const { |
158 GURL url; | 178 GURL url; |
159 base::string16 title; | 179 base::string16 title; |
160 return GetURLAndTitle(policy, &url, &title); | 180 return GetURLAndTitle(policy, &url, &title); |
161 } | 181 } |
162 | 182 |
163 bool OSExchangeDataProviderMac::HasFile() const { | 183 bool OSExchangeDataProviderMac::HasFile() const { |
164 return [[pasteboard_->get() types] containsObject:NSFilenamesPboardType]; | 184 return [[pasteboard_->get() types] containsObject:NSFilenamesPboardType]; |
165 } | 185 } |
166 | 186 |
167 bool OSExchangeDataProviderMac::HasCustomFormat( | 187 bool OSExchangeDataProviderMac::HasCustomFormat( |
168 const Clipboard::FormatType& format) const { | 188 const Clipboard::FormatType& format) const { |
169 return [[pasteboard_->get() types] containsObject:format.ToNSString()]; | 189 return [[pasteboard_->get() types] containsObject:format.ToNSString()]; |
170 } | 190 } |
171 | 191 |
| 192 NSArray* OSExchangeDataProviderMac::GetPasteboardTypes() const { |
| 193 return [pasteboard_->get() types]; |
| 194 } |
| 195 |
| 196 OSExchangeData::Provider* |
| 197 OSExchangeDataProviderMac::CreateProviderFromPasteboard( |
| 198 NSPasteboard* pasteboard) { |
| 199 OSExchangeDataProviderMac* provider = new OSExchangeDataProviderMac(); |
| 200 |
| 201 for (NSPasteboardItem* item in [pasteboard pasteboardItems]) { |
| 202 ClipboardUtil::AddDataToPasteboard(provider->pasteboard_->get(), item); |
| 203 } |
| 204 |
| 205 return provider; |
| 206 } |
| 207 |
| 208 NSArray* OSExchangeDataProviderMac::SupportedPasteboardTypes() { |
| 209 return @[ |
| 210 ui::ClipboardUtil::UTIForWebURLsAndTitles(), NSURLPboardType, |
| 211 NSPasteboardTypeString, NSFilenamesPboardType |
| 212 ]; |
| 213 } |
| 214 |
172 /////////////////////////////////////////////////////////////////////////////// | 215 /////////////////////////////////////////////////////////////////////////////// |
173 // OSExchangeData, public: | 216 // OSExchangeData, public: |
174 | 217 |
175 // static | 218 // static |
176 OSExchangeData::Provider* OSExchangeData::CreateProvider() { | 219 OSExchangeData::Provider* OSExchangeData::CreateProvider() { |
177 return new OSExchangeDataProviderMac; | 220 return new OSExchangeDataProviderMac; |
178 } | 221 } |
179 | 222 |
180 } // namespace ui | 223 } // namespace ui |
OLD | NEW |