blob: 05374608089782f085486fddab46f52c3f5e8ffa [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>
9
Henrique Ferreiro376c7652020-05-22 09:00:0410#include "base/component_export.h"
erikchend9b76f02016-04-01 21:48:5211#import "ui/base/clipboard/clipboard_util_mac.h"
[email protected]c99ac682014-06-16 20:40:5112#include "ui/base/dragdrop/os_exchange_data.h"
Alexander Dunaev04b784b2020-05-08 17:24:2913#include "ui/base/dragdrop/os_exchange_data_provider.h"
spqchancf5eeb52016-06-03 21:17:1914#include "ui/gfx/geometry/vector2d.h"
15#include "ui/gfx/image/image_skia.h"
[email protected]c99ac682014-06-16 20:40:5116
spqchancf5eeb52016-06-03 21:17:1917@class NSArray;
18@class NSData;
Avi Drissman4967af02019-02-20 03:00:2919@class NSDraggingItem;
[email protected]b11c08bee2014-07-10 07:55:1220@class NSPasteboard;
spqchancf5eeb52016-06-03 21:17:1921@class NSString;
[email protected]b11c08bee2014-07-10 07:55:1222
[email protected]c99ac682014-06-16 20:40:5123namespace ui {
24
Alexander Dunaev04b784b2020-05-08 17:24:2925// OSExchangeDataProvider implementation for Mac.
Henrique Ferreiro376c7652020-05-22 09:00:0426class COMPONENT_EXPORT(UI_BASE) OSExchangeDataProviderMac
27 : public OSExchangeDataProvider {
[email protected]c99ac682014-06-16 20:40:5128 public:
dcheng08038792014-10-21 10:53:2629 ~OSExchangeDataProviderMac() override;
[email protected]c99ac682014-06-16 20:40:5130
Avi Drissman4967af02019-02-20 03:00:2931 // 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 Dunaev04b784b2020-05-08 17:24:2939 // Overridden from OSExchangeDataProvider:
Daniel Cheng2cb89f92023-09-28 00:46:5440 void MarkRendererTaintedFromOrigin(const url::Origin& origin) override;
41 bool IsRendererTainted() const override;
Arthur Sonzogni3eb9fd512024-02-09 12:20:4342 std::optional<url::Origin> GetRendererTaintedOrigin() const override;
Yuheng Huangc98b9172022-01-20 18:12:4743 void MarkAsFromPrivileged() override;
44 bool IsFromPrivileged() const override;
Jan Wilken Dörrie52639572021-03-11 16:49:5445 void SetString(const std::u16string& data) override;
46 void SetURL(const GURL& url, const std::u16string& title) override;
dcheng08038792014-10-21 10:53:2647 void SetFilename(const base::FilePath& path) override;
48 void SetFilenames(const std::vector<FileInfo>& filenames) override;
Maksim Sisova33072d22019-01-24 15:44:2549 void SetPickledData(const ClipboardFormatType& format,
brettw05cfd8ddb2015-06-02 07:02:4750 const base::Pickle& data) override;
Avi Drissmana6045ee52024-03-12 20:11:5851 std::optional<std::u16string> GetString() const override;
52 std::optional<UrlInfo> GetURLAndTitle(
53 FilenameToURLPolicy policy) const override;
dcheng08038792014-10-21 10:53:2654 bool GetFilenames(std::vector<FileInfo>* filenames) const override;
Maksim Sisova33072d22019-01-24 15:44:2555 bool GetPickledData(const ClipboardFormatType& format,
brettw05cfd8ddb2015-06-02 07:02:4756 base::Pickle* data) const override;
dcheng08038792014-10-21 10:53:2657 bool HasString() const override;
Alexander Dunaev04b784b2020-05-08 17:24:2958 bool HasURL(FilenameToURLPolicy policy) const override;
dcheng08038792014-10-21 10:53:2659 bool HasFile() const override;
Maksim Sisova33072d22019-01-24 15:44:2560 bool HasCustomFormat(const ClipboardFormatType& format) const override;
Tetsui Ohkubo47dfd37642021-04-01 05:06:3961 void SetFileContents(const base::FilePath& filename,
62 const std::string& file_contents) override;
Avi Drissmanc44894232024-03-13 14:54:4563 std::optional<FileContentsInfo> GetFileContents() const override;
Tetsui Ohkubo47dfd37642021-04-01 05:06:3964 bool HasFileContents() const override;
spqchancf5eeb52016-06-03 21:17:1965 void SetDragImage(const gfx::ImageSkia& image,
66 const gfx::Vector2d& cursor_offset) override;
danakje100d0232017-04-19 17:26:4767 gfx::ImageSkia GetDragImage() const override;
68 gfx::Vector2d GetDragImageOffset() const override;
spqchancf5eeb52016-06-03 21:17:1969
Avi Drissmandd5801e2019-02-14 16:55:5070 // Gets the underlying pasteboard.
Avi Drissman4967af02019-02-20 03:00:2971 virtual NSPasteboard* GetPasteboard() const = 0;
Avi Drissmandd5801e2019-02-14 16:55:5072
Avi Drissman606376d2022-12-07 23:52:3973 // Returns NSDraggingItems for initiating a drag.
74 NSArray<NSDraggingItem*>* GetDraggingItems() const;
Leonard Grey35cbc4b82019-02-05 21:02:2375
spqchancf5eeb52016-06-03 21:17:1976 // Returns an array of pasteboard types that can be supported by
77 // OSExchangeData.
78 static NSArray* SupportedPasteboardTypes();
[email protected]c99ac682014-06-16 20:40:5179
Aya ElAttar2928283f2020-10-29 14:54:4780 void SetSource(std::unique_ptr<DataTransferEndpoint> data_source) override;
81 DataTransferEndpoint* GetSource() const override;
82
Avi Drissman4967af02019-02-20 03:00:2983 protected:
84 OSExchangeDataProviderMac();
85 OSExchangeDataProviderMac(const OSExchangeDataProviderMac&);
86 OSExchangeDataProviderMac& operator=(const OSExchangeDataProviderMac&);
Avi Drissmandd5801e2019-02-14 16:55:5087
Avi Drissman4967af02019-02-20 03:00:2988 private:
spqchancf5eeb52016-06-03 21:17:1989 // Drag image and offset data.
90 gfx::ImageSkia drag_image_;
91 gfx::Vector2d cursor_offset_;
[email protected]c99ac682014-06-16 20:40:5192};
93
94} // namespace ui
95
96#endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_