Commit 8b9210ee authored by Satoshi Niwa's avatar Satoshi Niwa Committed by Commit Bot

Update mojo API version of GetClipContent in clipboard.mojom

Client (ClipboardInstance) of this version can handle a ClipData larger than 800K.

Android-side CL : ag/3763924
Doc : go/arc-image-cp

Bug: b:74877813
Test: cheets_ClipboardTest
Change-Id: I74dbd9e2e39cf5051b6f68cadef14ec5d769e897
Reviewed-on: https://chromium-review.googlesource.com/974669Reviewed-by: default avatarMattias Nissler <mnissler@chromium.org>
Reviewed-by: default avatarYusuke Sato <yusukes@chromium.org>
Commit-Queue: Satoshi Niwa <niwa@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546754}
parent a0632f58
......@@ -84,6 +84,31 @@ mojom::ClipRepresentationPtr CreatePlainText(const ui::Clipboard* clipboard) {
mojom::ClipValue::NewText(text));
}
mojom::ClipDataPtr GetClipData(const ui::Clipboard* clipboard) {
DCHECK(clipboard);
std::vector<base::string16> mime_types;
bool contains_files;
clipboard->ReadAvailableTypes(ui::CLIPBOARD_TYPE_COPY_PASTE, &mime_types,
&contains_files);
mojom::ClipDataPtr clip_data(mojom::ClipData::New());
// Populate ClipData with ClipRepresentation objects.
for (const auto& mime_type16 : mime_types) {
const std::string mime_type(base::UTF16ToUTF8(mime_type16));
if (mime_type == ui::Clipboard::kMimeTypeHTML) {
clip_data->representations.push_back(CreateHTML(clipboard));
} else if (mime_type == ui::Clipboard::kMimeTypeText) {
clip_data->representations.push_back(CreatePlainText(clipboard));
} else {
// TODO(ricardoq): Add other supported mime_types here.
DLOG(WARNING) << "Unsupported mime type: " << mime_type;
}
}
return clip_data;
}
void ProcessHTML(const mojom::ClipRepresentation* repr,
ui::ScopedClipboardWriter* writer) {
DCHECK(repr);
......@@ -205,35 +230,24 @@ void ArcClipboardBridge::GetClipContent(GetClipContentCallback callback) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
std::vector<base::string16> mime_types;
bool contains_files;
clipboard->ReadAvailableTypes(ui::CLIPBOARD_TYPE_COPY_PASTE, &mime_types,
&contains_files);
mojom::ClipDataPtr clip_data = GetClipData(clipboard);
std::move(callback).Run(std::move(clip_data));
}
mojom::ClipDataPtr clip_data(mojom::ClipData::New());
void ArcClipboardBridge::GetClipContentDeprecated(
GetClipContentCallback callback) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
// Populate ClipData with ClipRepresentation objects.
for (const auto& mime_type16 : mime_types) {
const std::string mime_type(base::UTF16ToUTF8(mime_type16));
if (mime_type == ui::Clipboard::kMimeTypeHTML) {
clip_data->representations.push_back(CreateHTML(clipboard));
} else if (mime_type == ui::Clipboard::kMimeTypeText) {
clip_data->representations.push_back(CreatePlainText(clipboard));
} else {
// TODO(ricardoq): Add other supported mime_types here.
DLOG(WARNING) << "Unsupported mime type: " << mime_type;
}
}
ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
mojom::ClipDataPtr clip_data = GetClipData(clipboard);
// Old version of ClipboardInstance can't handle a ClipData larger than 800K.
if (!DoesClipFitIntoInstance(clip_data)) {
clip_data->representations.clear();
clip_data->representations.push_back(mojom::ClipRepresentation::New(
kMimeTypeTextError,
mojom::ClipValue::NewText(kErrorSizeTooBigForBinder)));
}
// Invoke the |callback|, even if |clip_data| is empty, since Instance is
// waiting for a response.
std::move(callback).Run(std::move(clip_data));
}
......
......@@ -40,6 +40,7 @@ class ArcClipboardBridge : public KeyedService,
// mojom::ClipboardHost overrides.
void SetClipContent(mojom::ClipDataPtr clip_data) override;
void GetClipContent(GetClipContentCallback callback) override;
void GetClipContentDeprecated(GetClipContentCallback callback) override;
private:
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Next MinVersion: 3
// Next MinVersion: 4
module arc.mojom;
......@@ -36,17 +36,21 @@ struct ClipData {
array<ClipRepresentation> representations@0;
};
// Next method ID: 4
// Deprecated method IDs: 0, 1
// Next method ID: 5
// Deprecated method IDs: 0, 1, 3
interface ClipboardHost {
// Tells the host to update its clipboard content, usually when the user
// initiates a 'copy' action.
[MinVersion=1] SetClipContent@2(ClipData data);
// DEPRECATED: Please use GetClipContent@4 instead. Clean up after Aug 1 2018.
// This version of ClipboardInstance can't handle a ClipData larger than 800K.
[MinVersion=1] GetClipContentDeprecated@3() => (ClipData data);
// Tells the host to return its clipboard content, usually when the user
// initiates a 'paste' action or when the instance needs to re-sync its
// clipboard content with the host.
[MinVersion=1] GetClipContent@3() => (ClipData data);
[MinVersion=3] GetClipContent@4() => (ClipData data);
};
// Next method ID: 4
......
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