blob: af5bba82a51e2e3046de0cfae77f8e3fe0df6049 [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;
42 absl::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;
Jan Wilken Dörrie52639572021-03-11 16:49:5451 bool GetString(std::u16string* data) const override;
Alexander Dunaev04b784b2020-05-08 17:24:2952 bool GetURLAndTitle(FilenameToURLPolicy policy,
dcheng08038792014-10-21 10:53:2653 GURL* url,
Jan Wilken Dörrie52639572021-03-11 16:49:5454 std::u16string* title) const override;
dcheng08038792014-10-21 10:53:2655 bool GetFilenames(std::vector<FileInfo>* filenames) const override;
Maksim Sisova33072d22019-01-24 15:44:2556 bool GetPickledData(const ClipboardFormatType& format,
brettw05cfd8ddb2015-06-02 07:02:4757 base::Pickle* data) const override;
dcheng08038792014-10-21 10:53:2658 bool HasString() const override;
Alexander Dunaev04b784b2020-05-08 17:24:2959 bool HasURL(FilenameToURLPolicy policy) const override;
dcheng08038792014-10-21 10:53:2660 bool HasFile() const override;
Maksim Sisova33072d22019-01-24 15:44:2561 bool HasCustomFormat(const ClipboardFormatType& format) const override;
Tetsui Ohkubo47dfd37642021-04-01 05:06:3962 void SetFileContents(const base::FilePath& filename,
63 const std::string& file_contents) override;
64 bool GetFileContents(base::FilePath* filename,
65 std::string* file_contents) const override;
66 bool HasFileContents() const override;
spqchancf5eeb52016-06-03 21:17:1967 void SetDragImage(const gfx::ImageSkia& image,
68 const gfx::Vector2d& cursor_offset) override;
danakje100d0232017-04-19 17:26:4769 gfx::ImageSkia GetDragImage() const override;
70 gfx::Vector2d GetDragImageOffset() const override;
spqchancf5eeb52016-06-03 21:17:1971
Avi Drissmandd5801e2019-02-14 16:55:5072 // Gets the underlying pasteboard.
Avi Drissman4967af02019-02-20 03:00:2973 virtual NSPasteboard* GetPasteboard() const = 0;
Avi Drissmandd5801e2019-02-14 16:55:5074
Avi Drissman606376d2022-12-07 23:52:3975 // Returns NSDraggingItems for initiating a drag.
76 NSArray<NSDraggingItem*>* GetDraggingItems() const;
Leonard Grey35cbc4b82019-02-05 21:02:2377
spqchancf5eeb52016-06-03 21:17:1978 // Returns an array of pasteboard types that can be supported by
79 // OSExchangeData.
80 static NSArray* SupportedPasteboardTypes();
[email protected]c99ac682014-06-16 20:40:5181
Aya ElAttar2928283f2020-10-29 14:54:4782 void SetSource(std::unique_ptr<DataTransferEndpoint> data_source) override;
83 DataTransferEndpoint* GetSource() const override;
84
Avi Drissman4967af02019-02-20 03:00:2985 protected:
86 OSExchangeDataProviderMac();
87 OSExchangeDataProviderMac(const OSExchangeDataProviderMac&);
88 OSExchangeDataProviderMac& operator=(const OSExchangeDataProviderMac&);
Avi Drissmandd5801e2019-02-14 16:55:5089
Avi Drissman4967af02019-02-20 03:00:2990 private:
spqchancf5eeb52016-06-03 21:17:1991 // Drag image and offset data.
92 gfx::ImageSkia drag_image_;
93 gfx::Vector2d cursor_offset_;
[email protected]c99ac682014-06-16 20:40:5194};
95
96} // namespace ui
97
98#endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_PROVIDER_MAC_H_