[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 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 |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_ |
| 6 | #define UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_ |
| 7 | |
avi | 20f6a6d53 | 2015-12-23 08:05:24 | [diff] [blame] | 8 | #include "base/macros.h" |
erikchen | d9b76f0 | 2016-04-01 21:48:52 | [diff] [blame] | 9 | #include "base/memory/ref_counted.h" |
| 10 | #import "ui/base/clipboard/clipboard_util_mac.h" |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 11 | #include "ui/base/dragdrop/os_exchange_data.h" |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 12 | #include "ui/gfx/geometry/vector2d.h" |
| 13 | #include "ui/gfx/image/image_skia.h" |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 14 | |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 15 | @class NSArray; |
| 16 | @class NSData; |
[email protected] | b11c08bee | 2014-07-10 07:55:12 | [diff] [blame] | 17 | @class NSPasteboard; |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 18 | @class NSString; |
[email protected] | b11c08bee | 2014-07-10 07:55:12 | [diff] [blame] | 19 | |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 20 | namespace ui { |
erikchen | d9b76f0 | 2016-04-01 21:48:52 | [diff] [blame] | 21 | class UniquePasteboard; |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 22 | |
| 23 | // OSExchangeData::Provider implementation for Mac. |
| 24 | class UI_BASE_EXPORT OSExchangeDataProviderMac |
| 25 | : public OSExchangeData::Provider { |
| 26 | public: |
| 27 | OSExchangeDataProviderMac(); |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 28 | ~OSExchangeDataProviderMac() override; |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 29 | |
| 30 | // Overridden from OSExchangeData::Provider: |
erg | 5d324214 | 2016-07-26 19:31:06 | [diff] [blame] | 31 | std::unique_ptr<Provider> Clone() const override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 32 | void MarkOriginatedFromRenderer() override; |
| 33 | bool DidOriginateFromRenderer() const override; |
| 34 | void SetString(const base::string16& data) override; |
| 35 | void SetURL(const GURL& url, const base::string16& title) override; |
| 36 | void SetFilename(const base::FilePath& path) override; |
| 37 | void SetFilenames(const std::vector<FileInfo>& filenames) override; |
Maksim Sisov | a33072d2 | 2019-01-24 15:44:25 | [diff] [blame^] | 38 | void SetPickledData(const ClipboardFormatType& format, |
brettw | 05cfd8ddb | 2015-06-02 07:02:47 | [diff] [blame] | 39 | const base::Pickle& data) override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 40 | bool GetString(base::string16* data) const override; |
| 41 | bool GetURLAndTitle(OSExchangeData::FilenameToURLPolicy policy, |
| 42 | GURL* url, |
| 43 | base::string16* title) const override; |
| 44 | bool GetFilename(base::FilePath* path) const override; |
| 45 | bool GetFilenames(std::vector<FileInfo>* filenames) const override; |
Maksim Sisov | a33072d2 | 2019-01-24 15:44:25 | [diff] [blame^] | 46 | bool GetPickledData(const ClipboardFormatType& format, |
brettw | 05cfd8ddb | 2015-06-02 07:02:47 | [diff] [blame] | 47 | base::Pickle* data) const override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 48 | bool HasString() const override; |
| 49 | bool HasURL(OSExchangeData::FilenameToURLPolicy policy) const override; |
| 50 | bool HasFile() const override; |
Maksim Sisov | a33072d2 | 2019-01-24 15:44:25 | [diff] [blame^] | 51 | bool HasCustomFormat(const ClipboardFormatType& format) const override; |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 52 | void SetDragImage(const gfx::ImageSkia& image, |
| 53 | const gfx::Vector2d& cursor_offset) override; |
danakj | e100d023 | 2017-04-19 17:26:47 | [diff] [blame] | 54 | gfx::ImageSkia GetDragImage() const override; |
| 55 | gfx::Vector2d GetDragImageOffset() const override; |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 56 | |
| 57 | // Returns the data for the specified type in the pasteboard. |
| 58 | NSData* GetNSDataForType(NSString* type) const; |
| 59 | |
Avi Drissman | 34fe6eb | 2018-10-04 20:48:14 | [diff] [blame] | 60 | // Gets the underlying pasteboard. |
| 61 | NSPasteboard* GetPasteboard() const; |
| 62 | |
jongkwon.lee | 67304cb | 2017-09-13 07:45:11 | [diff] [blame] | 63 | // Returns the union of SupportedPasteboardTypes() and the types in the |
| 64 | // current pasteboard. |
| 65 | NSArray* GetAvailableTypes() const; |
| 66 | |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 67 | // Creates an OSExchangeData object from the given NSPasteboard object. |
| 68 | static std::unique_ptr<OSExchangeData> CreateDataFromPasteboard( |
| 69 | NSPasteboard* pasteboard); |
| 70 | |
| 71 | // Returns an array of pasteboard types that can be supported by |
| 72 | // OSExchangeData. |
| 73 | static NSArray* SupportedPasteboardTypes(); |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 74 | |
| 75 | private: |
erikchen | d9b76f0 | 2016-04-01 21:48:52 | [diff] [blame] | 76 | explicit OSExchangeDataProviderMac(scoped_refptr<ui::UniquePasteboard>); |
| 77 | scoped_refptr<ui::UniquePasteboard> pasteboard_; |
[email protected] | b11c08bee | 2014-07-10 07:55:12 | [diff] [blame] | 78 | |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 79 | // Drag image and offset data. |
| 80 | gfx::ImageSkia drag_image_; |
| 81 | gfx::Vector2d cursor_offset_; |
| 82 | |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 83 | DISALLOW_COPY_AND_ASSIGN(OSExchangeDataProviderMac); |
| 84 | }; |
| 85 | |
| 86 | } // namespace ui |
| 87 | |
| 88 | #endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_ |