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