summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/clipboard/clipboard_writer.h
diff options
context:
space:
mode:
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.h34
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