Avi Drissman | 3e1a26c | 2022-09-15 20:26:03 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 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 Drissman | 4967af0 | 2019-02-20 03:00:29 | [diff] [blame] | 8 | #include <memory> |
| 9 | |
Henrique Ferreiro | 376c765 | 2020-05-22 09:00:04 | [diff] [blame] | 10 | #include "base/component_export.h" |
erikchen | d9b76f0 | 2016-04-01 21:48:52 | [diff] [blame] | 11 | #import "ui/base/clipboard/clipboard_util_mac.h" |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 12 | #include "ui/base/dragdrop/os_exchange_data.h" |
Alexander Dunaev | 04b784b | 2020-05-08 17:24:29 | [diff] [blame] | 13 | #include "ui/base/dragdrop/os_exchange_data_provider.h" |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 14 | #include "ui/gfx/geometry/vector2d.h" |
| 15 | #include "ui/gfx/image/image_skia.h" |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 16 | |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 17 | @class NSArray; |
| 18 | @class NSData; |
Avi Drissman | 4967af0 | 2019-02-20 03:00:29 | [diff] [blame] | 19 | @class NSDraggingItem; |
[email protected] | b11c08bee | 2014-07-10 07:55:12 | [diff] [blame] | 20 | @class NSPasteboard; |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 21 | @class NSString; |
[email protected] | b11c08bee | 2014-07-10 07:55:12 | [diff] [blame] | 22 | |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 23 | namespace ui { |
| 24 | |
Alexander Dunaev | 04b784b | 2020-05-08 17:24:29 | [diff] [blame] | 25 | // OSExchangeDataProvider implementation for Mac. |
Henrique Ferreiro | 376c765 | 2020-05-22 09:00:04 | [diff] [blame] | 26 | class COMPONENT_EXPORT(UI_BASE) OSExchangeDataProviderMac |
| 27 | : public OSExchangeDataProvider { |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 28 | public: |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 29 | ~OSExchangeDataProviderMac() override; |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 30 | |
Avi Drissman | 4967af0 | 2019-02-20 03:00:29 | [diff] [blame] | 31 | // Creates a stand-alone OSExchangeDataProviderMac. |
| 32 | static std::unique_ptr<OSExchangeDataProviderMac> CreateProvider(); |
| 33 | |
| 34 | // Creates an OSExchangeDataProviderMac object wrapping the given NSPasteboard |
| 35 | // object. |
| 36 | static std::unique_ptr<OSExchangeDataProviderMac> |
| 37 | CreateProviderWrappingPasteboard(NSPasteboard* pasteboard); |
| 38 | |
Alexander Dunaev | 04b784b | 2020-05-08 17:24:29 | [diff] [blame] | 39 | // Overridden from OSExchangeDataProvider: |
Daniel Cheng | 2cb89f9 | 2023-09-28 00:46:54 | [diff] [blame] | 40 | void MarkRendererTaintedFromOrigin(const url::Origin& origin) override; |
| 41 | bool IsRendererTainted() const override; |
Arthur Sonzogni | 3eb9fd51 | 2024-02-09 12:20:43 | [diff] [blame] | 42 | std::optional<url::Origin> GetRendererTaintedOrigin() const override; |
Yuheng Huang | c98b917 | 2022-01-20 18:12:47 | [diff] [blame] | 43 | void MarkAsFromPrivileged() override; |
| 44 | bool IsFromPrivileged() const override; |
Jan Wilken Dörrie | 5263957 | 2021-03-11 16:49:54 | [diff] [blame] | 45 | void SetString(const std::u16string& data) override; |
| 46 | void SetURL(const GURL& url, const std::u16string& title) override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 47 | void SetFilename(const base::FilePath& path) override; |
| 48 | void SetFilenames(const std::vector<FileInfo>& filenames) override; |
Maksim Sisov | a33072d2 | 2019-01-24 15:44:25 | [diff] [blame] | 49 | void SetPickledData(const ClipboardFormatType& format, |
brettw | 05cfd8ddb | 2015-06-02 07:02:47 | [diff] [blame] | 50 | const base::Pickle& data) override; |
Avi Drissman | a6045ee5 | 2024-03-12 20:11:58 | [diff] [blame] | 51 | std::optional<std::u16string> GetString() const override; |
| 52 | std::optional<UrlInfo> GetURLAndTitle( |
| 53 | FilenameToURLPolicy policy) const override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 54 | bool GetFilenames(std::vector<FileInfo>* filenames) const override; |
Maksim Sisov | a33072d2 | 2019-01-24 15:44:25 | [diff] [blame] | 55 | bool GetPickledData(const ClipboardFormatType& format, |
brettw | 05cfd8ddb | 2015-06-02 07:02:47 | [diff] [blame] | 56 | base::Pickle* data) const override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 57 | bool HasString() const override; |
Alexander Dunaev | 04b784b | 2020-05-08 17:24:29 | [diff] [blame] | 58 | bool HasURL(FilenameToURLPolicy policy) const override; |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 59 | bool HasFile() const override; |
Maksim Sisov | a33072d2 | 2019-01-24 15:44:25 | [diff] [blame] | 60 | bool HasCustomFormat(const ClipboardFormatType& format) const override; |
Tetsui Ohkubo | 47dfd3764 | 2021-04-01 05:06:39 | [diff] [blame] | 61 | void SetFileContents(const base::FilePath& filename, |
| 62 | const std::string& file_contents) override; |
Avi Drissman | c4489423 | 2024-03-13 14:54:45 | [diff] [blame^] | 63 | std::optional<FileContentsInfo> GetFileContents() const override; |
Tetsui Ohkubo | 47dfd3764 | 2021-04-01 05:06:39 | [diff] [blame] | 64 | bool HasFileContents() const override; |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 65 | void SetDragImage(const gfx::ImageSkia& image, |
| 66 | const gfx::Vector2d& cursor_offset) override; |
danakj | e100d023 | 2017-04-19 17:26:47 | [diff] [blame] | 67 | gfx::ImageSkia GetDragImage() const override; |
| 68 | gfx::Vector2d GetDragImageOffset() const override; |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 69 | |
Avi Drissman | dd5801e | 2019-02-14 16:55:50 | [diff] [blame] | 70 | // Gets the underlying pasteboard. |
Avi Drissman | 4967af0 | 2019-02-20 03:00:29 | [diff] [blame] | 71 | virtual NSPasteboard* GetPasteboard() const = 0; |
Avi Drissman | dd5801e | 2019-02-14 16:55:50 | [diff] [blame] | 72 | |
Avi Drissman | 606376d | 2022-12-07 23:52:39 | [diff] [blame] | 73 | // Returns NSDraggingItems for initiating a drag. |
| 74 | NSArray<NSDraggingItem*>* GetDraggingItems() const; |
Leonard Grey | 35cbc4b8 | 2019-02-05 21:02:23 | [diff] [blame] | 75 | |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 76 | // Returns an array of pasteboard types that can be supported by |
| 77 | // OSExchangeData. |
| 78 | static NSArray* SupportedPasteboardTypes(); |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 79 | |
Aya ElAttar | 2928283f | 2020-10-29 14:54:47 | [diff] [blame] | 80 | void SetSource(std::unique_ptr<DataTransferEndpoint> data_source) override; |
| 81 | DataTransferEndpoint* GetSource() const override; |
| 82 | |
Avi Drissman | 4967af0 | 2019-02-20 03:00:29 | [diff] [blame] | 83 | protected: |
| 84 | OSExchangeDataProviderMac(); |
| 85 | OSExchangeDataProviderMac(const OSExchangeDataProviderMac&); |
| 86 | OSExchangeDataProviderMac& operator=(const OSExchangeDataProviderMac&); |
Avi Drissman | dd5801e | 2019-02-14 16:55:50 | [diff] [blame] | 87 | |
Avi Drissman | 4967af0 | 2019-02-20 03:00:29 | [diff] [blame] | 88 | private: |
spqchan | cf5eeb5 | 2016-06-03 21:17:19 | [diff] [blame] | 89 | // Drag image and offset data. |
| 90 | gfx::ImageSkia drag_image_; |
| 91 | gfx::Vector2d cursor_offset_; |
[email protected] | c99ac68 | 2014-06-16 20:40:51 | [diff] [blame] | 92 | }; |
| 93 | |
| 94 | } // namespace ui |
| 95 | |
| 96 | #endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_ |