blob: b4f3db1972bb6bc9fd301d4cb956c2e01dfa3020 [file] [log] [blame]
Avi Drissman3e1a26c2022-09-15 20:26:031// Copyright 2014 The Chromium Authors
[email protected]c99ac682014-06-16 20:40:512// 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 Drissman4967af02019-02-20 03:00:298#include <memory>
Peter Kastingd6c295472025-02-12 18:56:379#include <string_view>
Avi Drissman4967af02019-02-20 03:00:2910
Henrique Ferreiro376c7652020-05-22 09:00:0411#include "base/component_export.h"
erikchend9b76f02016-04-01 21:48:5212#import "ui/base/clipboard/clipboard_util_mac.h"
[email protected]c99ac682014-06-16 20:40:5113#include "ui/base/dragdrop/os_exchange_data.h"
Alexander Dunaev04b784b2020-05-08 17:24:2914#include "ui/base/dragdrop/os_exchange_data_provider.h"
spqchancf5eeb52016-06-03 21:17:1915#include "ui/gfx/geometry/vector2d.h"
16#include "ui/gfx/image/image_skia.h"
[email protected]c99ac682014-06-16 20:40:5117
spqchancf5eeb52016-06-03 21:17:1918@class NSArray;
19@class NSData;
Avi Drissman4967af02019-02-20 03:00:2920@class NSDraggingItem;
[email protected]b11c08bee2014-07-10 07:55:1221@class NSPasteboard;
spqchancf5eeb52016-06-03 21:17:1922@class NSString;
[email protected]b11c08bee2014-07-10 07:55:1223
[email protected]c99ac682014-06-16 20:40:5124namespace ui {
25
Alexander Dunaev04b784b2020-05-08 17:24:2926// OSExchangeDataProvider implementation for Mac.
Henrique Ferreiro376c7652020-05-22 09:00:0427class COMPONENT_EXPORT(UI_BASE) OSExchangeDataProviderMac
28 : public OSExchangeDataProvider {
[email protected]c99ac682014-06-16 20:40:5129 public:
dcheng08038792014-10-21 10:53:2630 ~OSExchangeDataProviderMac() override;
[email protected]c99ac682014-06-16 20:40:5131
Avi Drissman4967af02019-02-20 03:00:2932 // 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 Dunaev04b784b2020-05-08 17:24:2940 // Overridden from OSExchangeDataProvider:
Daniel Cheng2cb89f92023-09-28 00:46:5441 void MarkRendererTaintedFromOrigin(const url::Origin& origin) override;
42 bool IsRendererTainted() const override;
Arthur Sonzogni3eb9fd512024-02-09 12:20:4343 std::optional<url::Origin> GetRendererTaintedOrigin() const override;
Yuheng Huangc98b9172022-01-20 18:12:4744 void MarkAsFromPrivileged() override;
45 bool IsFromPrivileged() const override;
Peter Kastingd6c295472025-02-12 18:56:3746 void SetString(std::u16string_view data) override;
47 void SetURL(const GURL& url, std::u16string_view title) override;
dcheng08038792014-10-21 10:53:2648 void SetFilename(const base::FilePath& path) override;
49 void SetFilenames(const std::vector<FileInfo>& filenames) override;
Maksim Sisova33072d22019-01-24 15:44:2550 void SetPickledData(const ClipboardFormatType& format,
brettw05cfd8ddb2015-06-02 07:02:4751 const base::Pickle& data) override;
Avi Drissmana6045ee52024-03-12 20:11:5852 std::optional<std::u16string> GetString() const override;
53 std::optional<UrlInfo> GetURLAndTitle(
54 FilenameToURLPolicy policy) const override;
Avi Drissmanb29aa6d2024-03-13 23:43:0355 std::optional<std::vector<GURL>> GetURLs(
56 FilenameToURLPolicy policy) const override;
Avi Drissman06014f7e2024-03-14 18:42:5257 std::optional<std::vector<FileInfo>> GetFilenames() const override;
Avi Drissmand73f543f2024-03-19 22:49:4258 std::optional<base::Pickle> GetPickledData(
59 const ClipboardFormatType& format) const override;
dcheng08038792014-10-21 10:53:2660 bool HasString() const override;
Alexander Dunaev04b784b2020-05-08 17:24:2961 bool HasURL(FilenameToURLPolicy policy) const override;
dcheng08038792014-10-21 10:53:2662 bool HasFile() const override;
Maksim Sisova33072d22019-01-24 15:44:2563 bool HasCustomFormat(const ClipboardFormatType& format) const override;
Tetsui Ohkubo47dfd37642021-04-01 05:06:3964 void SetFileContents(const base::FilePath& filename,
65 const std::string& file_contents) override;
Avi Drissmanc44894232024-03-13 14:54:4566 std::optional<FileContentsInfo> GetFileContents() const override;
Tetsui Ohkubo47dfd37642021-04-01 05:06:3967 bool HasFileContents() const override;
spqchancf5eeb52016-06-03 21:17:1968 void SetDragImage(const gfx::ImageSkia& image,
69 const gfx::Vector2d& cursor_offset) override;
danakje100d0232017-04-19 17:26:4770 gfx::ImageSkia GetDragImage() const override;
71 gfx::Vector2d GetDragImageOffset() const override;
spqchancf5eeb52016-06-03 21:17:1972
Avi Drissmandd5801e2019-02-14 16:55:5073 // Gets the underlying pasteboard.
Avi Drissman4967af02019-02-20 03:00:2974 virtual NSPasteboard* GetPasteboard() const = 0;
Avi Drissmandd5801e2019-02-14 16:55:5075
Avi Drissman606376d2022-12-07 23:52:3976 // Returns NSDraggingItems for initiating a drag.
77 NSArray<NSDraggingItem*>* GetDraggingItems() const;
Leonard Grey35cbc4b82019-02-05 21:02:2378
spqchancf5eeb52016-06-03 21:17:1979 // Returns an array of pasteboard types that can be supported by
80 // OSExchangeData.
81 static NSArray* SupportedPasteboardTypes();
[email protected]c99ac682014-06-16 20:40:5182
Aya ElAttar2928283f2020-10-29 14:54:4783 void SetSource(std::unique_ptr<DataTransferEndpoint> data_source) override;
84 DataTransferEndpoint* GetSource() const override;
85
Avi Drissman4967af02019-02-20 03:00:2986 protected:
87 OSExchangeDataProviderMac();
88 OSExchangeDataProviderMac(const OSExchangeDataProviderMac&);
89 OSExchangeDataProviderMac& operator=(const OSExchangeDataProviderMac&);
Avi Drissmandd5801e2019-02-14 16:55:5090
Avi Drissman4967af02019-02-20 03:00:2991 private:
spqchancf5eeb52016-06-03 21:17:1992 // Drag image and offset data.
93 gfx::ImageSkia drag_image_;
94 gfx::Vector2d cursor_offset_;
[email protected]c99ac682014-06-16 20:40:5195};
96
97} // namespace ui
98
99#endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_