Commit 4400e53b authored by Darwin Huang's avatar Darwin Huang Committed by Commit Bot

Raw Clipboard: Remove no-op thread hop.

This thread hop isn't necessary, because raw data doesn't require
decoding.

Bug: 897289
Change-Id: Id3c75b2a0dcde2b6950d3a1a3085db6e73ffd273
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2406695Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Commit-Queue: Darwin Huang <huangdarwin@chromium.org>
Auto-Submit: Darwin Huang <huangdarwin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824218}
parent d4d7481a
......@@ -209,6 +209,7 @@ class ClipboardSvgWriter final : public ClipboardWriter {
promise_->CompleteWriteRepresentation();
}
};
// Writes a blob with arbitrary, unsanitized content to the System Clipboard.
class ClipboardRawDataWriter final : public ClipboardWriter {
public:
......@@ -223,25 +224,14 @@ class ClipboardRawDataWriter final : public ClipboardWriter {
DOMArrayBuffer* raw_data) override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
worker_pool::PostTask(
FROM_HERE,
CrossThreadBindOnce(&ClipboardRawDataWriter::DecodeOnBackgroundThread,
WrapCrossThreadPersistent(this), task_runner,
WrapCrossThreadPersistent(raw_data)));
// Raw Data is written directly, and doesn't require decoding.
Write(raw_data);
}
// Unfortunately, in order to use the same ClipboardWriter base,
// ClipboardRawDataWriter does need to have these extra 2 thread hops.
void DecodeOnBackgroundThread(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
DOMArrayBuffer* raw_data) override {
DCHECK(!IsMainThread());
PostCrossThreadTask(
*task_runner, FROM_HERE,
CrossThreadBindOnce(&ClipboardRawDataWriter::Write,
WrapCrossThreadPersistent(this),
WrapCrossThreadPersistent(raw_data)));
NOTREACHED() << "Raw Data doesn't require decoding.";
}
void Write(DOMArrayBuffer* raw_data) {
......
......@@ -58,6 +58,8 @@ class ClipboardWriter : public GarbageCollected<ClipboardWriter>,
ClipboardWriter(RawSystemClipboard* raw_system_clipboard,
ClipboardPromise* promise);
// Decodes and writes `raw_data`. Decoding is done off the main thread
// whenever possible, by calling DecodeOnBackgroundThread.
virtual void StartWrite(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
DOMArrayBuffer* raw_data) = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment