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