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

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

Issue 1964283002: MacViews: Implemented Drag & Drop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Forgot to add the test Created 4 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 unified diff | Download patch
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/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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698