diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h b/chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h index 475e182b4cc..45eb4bd91c0 100644 --- a/chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h +++ b/chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h @@ -6,14 +6,18 @@ #define THIRD_PARTY_BLINK_RENDERER_MODULES_CLIPBOARD_CLIPBOARD_WRITER_H_ #include "base/sequence_checker.h" +#include "third_party/blink/renderer/core/clipboard/raw_system_clipboard.h" #include "third_party/blink/renderer/core/fileapi/blob.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" +#include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/skia/include/core/SkImage.h" namespace blink { class ClipboardPromise; class FileReaderLoader; +class SystemClipboard; +class RawSystemClipboard; // Interface for writing async-clipboard-compatible types as a Blob to the // System Clipboard, asynchronously. @@ -23,10 +27,16 @@ class FileReaderLoader; // (2) Decoding the blob's contents to avoid RCE in native applications that may // take advantage of vulnerabilities in their decoders. // (3) Writing the blob's decoded contents to the system clipboard. -class ClipboardWriter : public FileReaderLoaderClient { +class ClipboardWriter : public GarbageCollected<ClipboardWriter>, + public FileReaderLoaderClient { public: - static std::unique_ptr<ClipboardWriter> Create(const String& mime_type, - ClipboardPromise* promise); + static ClipboardWriter* Create(SystemClipboard* system_clipboard, + const String& mime_type, + ClipboardPromise* promise); + static ClipboardWriter* Create(RawSystemClipboard* raw_system_clipboard, + const String& mime_type, + ClipboardPromise* promise); + ~ClipboardWriter() override; static bool IsValidType(const String& type); @@ -38,24 +48,38 @@ class ClipboardWriter : public FileReaderLoaderClient { void DidFinishLoading() override; void DidFail(FileErrorCode) override; + void Trace(Visitor*); + protected: - explicit ClipboardWriter(ClipboardPromise* promise); + ClipboardWriter(SystemClipboard* system_clipboard, ClipboardPromise* promise); + ClipboardWriter(RawSystemClipboard* raw_system_clipboard, + ClipboardPromise* promise); virtual void DecodeOnBackgroundThread( scoped_refptr<base::SingleThreadTaskRunner> task_runner, DOMArrayBuffer* raw_data) = 0; // This ClipboardPromise owns this. - Persistent<ClipboardPromise> promise_; + Member<ClipboardPromise> promise_; // Ensure that System Clipboard operations occur on the main thread. SEQUENCE_CHECKER(sequence_checker_); + SystemClipboard* system_clipboard() { return system_clipboard_; } + RawSystemClipboard* raw_system_clipboard() { return raw_system_clipboard_; } + private: + ClipboardWriter(SystemClipboard* system_clipboard, + RawSystemClipboard* raw_system_clipboard, + ClipboardPromise* promise); // TaskRunner for interacting with the system clipboard. const scoped_refptr<base::SingleThreadTaskRunner> clipboard_task_runner_; // TaskRunner for reading files. const scoped_refptr<base::SingleThreadTaskRunner> file_reading_task_runner_; // This FileReaderLoader will load the Blob. std::unique_ptr<FileReaderLoader> file_reader_; + // Access to the global sanitized system clipboard. + Member<SystemClipboard> system_clipboard_; + // Access to the global unsanitized system clipboard. + Member<RawSystemClipboard> raw_system_clipboard_; }; } // namespace blink |