Commit edf12cc9 authored by Stuart Langley's avatar Stuart Langley Committed by Commit Bot

Use typemap to convert blink::mojom::ClipboardBuffer to ui::ClipboardType.

We removed this typemap when moving the mojom into WebKit, now we add it
back to do the marshaling between ClipboardBuffer and ClipboardType on
the browser side.

As we don't intend at this time to send messages of this type in the
opposite direction we only implement the FromMojom method in
clipboard_struct_traits.

Bug: 775830
Change-Id: Ib3dacbcc5b3c029167e902afbf7c8c5c809f1ee9
Reviewed-on: https://chromium-review.googlesource.com/823542Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#524593}
parent 9bdd9d9f
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "content/browser/renderer_host/clipboard_host_impl.h" #include "content/browser/renderer_host/clipboard_host_impl.h"
#include <limits>
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
...@@ -68,20 +69,16 @@ ClipboardHostImpl::~ClipboardHostImpl() { ...@@ -68,20 +69,16 @@ ClipboardHostImpl::~ClipboardHostImpl() {
clipboard_writer_->Reset(); clipboard_writer_->Reset();
} }
void ClipboardHostImpl::GetSequenceNumber(blink::mojom::ClipboardBuffer buffer, void ClipboardHostImpl::GetSequenceNumber(ui::ClipboardType clipboard_type,
GetSequenceNumberCallback callback) { GetSequenceNumberCallback callback) {
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
std::move(callback).Run(clipboard_->GetSequenceNumber(clipboard_type)); std::move(callback).Run(clipboard_->GetSequenceNumber(clipboard_type));
} }
void ClipboardHostImpl::ReadAvailableTypes( void ClipboardHostImpl::ReadAvailableTypes(
blink::mojom::ClipboardBuffer buffer, ui::ClipboardType clipboard_type,
ReadAvailableTypesCallback callback) { ReadAvailableTypesCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
std::vector<base::string16> types; std::vector<base::string16> types;
bool contains_filenames; bool contains_filenames;
clipboard_->ReadAvailableTypes(clipboard_type, &types, &contains_filenames); clipboard_->ReadAvailableTypes(clipboard_type, &types, &contains_filenames);
...@@ -89,11 +86,9 @@ void ClipboardHostImpl::ReadAvailableTypes( ...@@ -89,11 +86,9 @@ void ClipboardHostImpl::ReadAvailableTypes(
} }
void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format, void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format,
blink::mojom::ClipboardBuffer buffer, ui::ClipboardType clipboard_type,
IsFormatAvailableCallback callback) { IsFormatAvailableCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
bool result = false; bool result = false;
switch (format) { switch (format) {
case blink::mojom::ClipboardFormat::kPlaintext: case blink::mojom::ClipboardFormat::kPlaintext:
...@@ -122,11 +117,9 @@ void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format, ...@@ -122,11 +117,9 @@ void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format,
std::move(callback).Run(result); std::move(callback).Run(result);
} }
void ClipboardHostImpl::ReadText(blink::mojom::ClipboardBuffer buffer, void ClipboardHostImpl::ReadText(ui::ClipboardType clipboard_type,
ReadTextCallback callback) { ReadTextCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
base::string16 result; base::string16 result;
if (clipboard_->IsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(), if (clipboard_->IsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(),
...@@ -141,11 +134,9 @@ void ClipboardHostImpl::ReadText(blink::mojom::ClipboardBuffer buffer, ...@@ -141,11 +134,9 @@ void ClipboardHostImpl::ReadText(blink::mojom::ClipboardBuffer buffer,
std::move(callback).Run(result); std::move(callback).Run(result);
} }
void ClipboardHostImpl::ReadHtml(blink::mojom::ClipboardBuffer buffer, void ClipboardHostImpl::ReadHtml(ui::ClipboardType clipboard_type,
ReadHtmlCallback callback) { ReadHtmlCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
base::string16 markup; base::string16 markup;
std::string src_url_str; std::string src_url_str;
...@@ -157,22 +148,18 @@ void ClipboardHostImpl::ReadHtml(blink::mojom::ClipboardBuffer buffer, ...@@ -157,22 +148,18 @@ void ClipboardHostImpl::ReadHtml(blink::mojom::ClipboardBuffer buffer,
fragment_end); fragment_end);
} }
void ClipboardHostImpl::ReadRtf(blink::mojom::ClipboardBuffer buffer, void ClipboardHostImpl::ReadRtf(ui::ClipboardType clipboard_type,
ReadRtfCallback callback) { ReadRtfCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
std::string result; std::string result;
clipboard_->ReadRTF(clipboard_type, &result); clipboard_->ReadRTF(clipboard_type, &result);
std::move(callback).Run(result); std::move(callback).Run(result);
} }
void ClipboardHostImpl::ReadImage(blink::mojom::ClipboardBuffer buffer, void ClipboardHostImpl::ReadImage(ui::ClipboardType clipboard_type,
ReadImageCallback callback) { ReadImageCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
SkBitmap bitmap = clipboard_->ReadImage(clipboard_type); SkBitmap bitmap = clipboard_->ReadImage(clipboard_type);
...@@ -233,39 +220,36 @@ void ClipboardHostImpl::OnReadAndEncodeImageFinished( ...@@ -233,39 +220,36 @@ void ClipboardHostImpl::OnReadAndEncodeImageFinished(
std::move(callback).Run(std::string(), std::string(), -1); std::move(callback).Run(std::string(), std::string(), -1);
} }
void ClipboardHostImpl::ReadCustomData(blink::mojom::ClipboardBuffer buffer, void ClipboardHostImpl::ReadCustomData(ui::ClipboardType clipboard_type,
const base::string16& type, const base::string16& type,
ReadCustomDataCallback callback) { ReadCustomDataCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
ui::ClipboardType clipboard_type;
ConvertBufferType(buffer, &clipboard_type);
base::string16 result; base::string16 result;
clipboard_->ReadCustomData(clipboard_type, type, &result); clipboard_->ReadCustomData(clipboard_type, type, &result);
std::move(callback).Run(result); std::move(callback).Run(result);
} }
void ClipboardHostImpl::WriteText(blink::mojom::ClipboardBuffer, void ClipboardHostImpl::WriteText(ui::ClipboardType,
const base::string16& text) { const base::string16& text) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
clipboard_writer_->WriteText(text); clipboard_writer_->WriteText(text);
} }
void ClipboardHostImpl::WriteHtml(blink::mojom::ClipboardBuffer, void ClipboardHostImpl::WriteHtml(ui::ClipboardType,
const base::string16& markup, const base::string16& markup,
const GURL& url) { const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
clipboard_writer_->WriteHTML(markup, url.spec()); clipboard_writer_->WriteHTML(markup, url.spec());
} }
void ClipboardHostImpl::WriteSmartPasteMarker( void ClipboardHostImpl::WriteSmartPasteMarker(ui::ClipboardType) {
blink::mojom::ClipboardBuffer buffer) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
clipboard_writer_->WriteWebSmartPaste(); clipboard_writer_->WriteWebSmartPaste();
} }
void ClipboardHostImpl::WriteCustomData( void ClipboardHostImpl::WriteCustomData(
blink::mojom::ClipboardBuffer, ui::ClipboardType,
const std::unordered_map<base::string16, base::string16>& data) { const std::unordered_map<base::string16, base::string16>& data) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
base::Pickle pickle; base::Pickle pickle;
...@@ -274,7 +258,7 @@ void ClipboardHostImpl::WriteCustomData( ...@@ -274,7 +258,7 @@ void ClipboardHostImpl::WriteCustomData(
pickle, ui::Clipboard::GetWebCustomDataFormatType()); pickle, ui::Clipboard::GetWebCustomDataFormatType());
} }
void ClipboardHostImpl::WriteBookmark(blink::mojom::ClipboardBuffer, void ClipboardHostImpl::WriteBookmark(ui::ClipboardType,
const std::string& url, const std::string& url,
const base::string16& title) { const base::string16& title) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
...@@ -282,7 +266,7 @@ void ClipboardHostImpl::WriteBookmark(blink::mojom::ClipboardBuffer, ...@@ -282,7 +266,7 @@ void ClipboardHostImpl::WriteBookmark(blink::mojom::ClipboardBuffer,
} }
void ClipboardHostImpl::WriteImage( void ClipboardHostImpl::WriteImage(
blink::mojom::ClipboardBuffer, ui::ClipboardType,
const gfx::Size& size, const gfx::Size& size,
mojo::ScopedSharedBufferHandle shared_buffer_handle) { mojo::ScopedSharedBufferHandle shared_buffer_handle) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
...@@ -310,7 +294,7 @@ void ClipboardHostImpl::WriteImage( ...@@ -310,7 +294,7 @@ void ClipboardHostImpl::WriteImage(
clipboard_writer_->WriteImage(bitmap); clipboard_writer_->WriteImage(bitmap);
} }
void ClipboardHostImpl::CommitWrite(blink::mojom::ClipboardBuffer) { void ClipboardHostImpl::CommitWrite(ui::ClipboardType) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
clipboard_writer_.reset( clipboard_writer_.reset(
new ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE)); new ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE));
...@@ -322,22 +306,4 @@ void ClipboardHostImpl::WriteStringToFindPboard(const base::string16& text) { ...@@ -322,22 +306,4 @@ void ClipboardHostImpl::WriteStringToFindPboard(const base::string16& text) {
} }
#endif #endif
void ClipboardHostImpl::ConvertBufferType(blink::mojom::ClipboardBuffer buffer,
ui::ClipboardType* result) {
*result = ui::CLIPBOARD_TYPE_COPY_PASTE;
switch (buffer) {
case blink::mojom::ClipboardBuffer::kStandard:
break;
case blink::mojom::ClipboardBuffer::kSelection:
#if defined(USE_X11)
*result = ui::CLIPBOARD_TYPE_SELECTION;
break;
#else
// Chrome OS and non-X11 unix builds do not support
// the X selection clipboad.
// TODO: remove the need for this case, see http://crbug.com/361753
mojo::ReportBadMessage("Cannot use kSelection on non X11 platforms.");
#endif
}
}
} // namespace content } // namespace content
...@@ -56,44 +56,42 @@ class CONTENT_EXPORT ClipboardHostImpl : public blink::mojom::ClipboardHost { ...@@ -56,44 +56,42 @@ class CONTENT_EXPORT ClipboardHostImpl : public blink::mojom::ClipboardHost {
ReadImageCallback callback); ReadImageCallback callback);
// content::mojom::ClipboardHost // content::mojom::ClipboardHost
void GetSequenceNumber(blink::mojom::ClipboardBuffer buffer, void GetSequenceNumber(ui::ClipboardType clipboard_type,
GetSequenceNumberCallback callback) override; GetSequenceNumberCallback callback) override;
void IsFormatAvailable(blink::mojom::ClipboardFormat format, void IsFormatAvailable(blink::mojom::ClipboardFormat format,
blink::mojom::ClipboardBuffer buffer, ui::ClipboardType clipboard_type,
IsFormatAvailableCallback callback) override; IsFormatAvailableCallback callback) override;
void ReadAvailableTypes(blink::mojom::ClipboardBuffer buffer, void ReadAvailableTypes(ui::ClipboardType clipboard_type,
ReadAvailableTypesCallback callback) override; ReadAvailableTypesCallback callback) override;
void ReadText(blink::mojom::ClipboardBuffer buffer, void ReadText(ui::ClipboardType clipboard_type,
ReadTextCallback callback) override; ReadTextCallback callback) override;
void ReadHtml(blink::mojom::ClipboardBuffer buffer, void ReadHtml(ui::ClipboardType clipboard_type,
ReadHtmlCallback callback) override; ReadHtmlCallback callback) override;
void ReadRtf(blink::mojom::ClipboardBuffer buffer, void ReadRtf(ui::ClipboardType clipboard_type,
ReadRtfCallback callback) override; ReadRtfCallback callback) override;
void ReadImage(blink::mojom::ClipboardBuffer buffer, void ReadImage(ui::ClipboardType clipboard_type,
ReadImageCallback callback) override; ReadImageCallback callback) override;
void ReadCustomData(blink::mojom::ClipboardBuffer buffer, void ReadCustomData(ui::ClipboardType clipboard_type,
const base::string16& type, const base::string16& type,
ReadCustomDataCallback callback) override; ReadCustomDataCallback callback) override;
void WriteText(blink::mojom::ClipboardBuffer buffer, void WriteText(ui::ClipboardType clipboard_type,
const base::string16& text) override; const base::string16& text) override;
void WriteHtml(blink::mojom::ClipboardBuffer buffer, void WriteHtml(ui::ClipboardType clipboard_type,
const base::string16& markup, const base::string16& markup,
const GURL& url) override; const GURL& url) override;
void WriteSmartPasteMarker(blink::mojom::ClipboardBuffer buffer) override; void WriteSmartPasteMarker(ui::ClipboardType clipboard_type) override;
void WriteCustomData( void WriteCustomData(
blink::mojom::ClipboardBuffer buffer, ui::ClipboardType clipboard_type,
const std::unordered_map<base::string16, base::string16>& data) override; const std::unordered_map<base::string16, base::string16>& data) override;
void WriteBookmark(blink::mojom::ClipboardBuffer buffer, void WriteBookmark(ui::ClipboardType clipboard_type,
const std::string& url, const std::string& url,
const base::string16& title) override; const base::string16& title) override;
void WriteImage(blink::mojom::ClipboardBuffer buffer, void WriteImage(ui::ClipboardType clipboard_type,
const gfx::Size& size_in_pixels, const gfx::Size& size_in_pixels,
mojo::ScopedSharedBufferHandle shared_buffer_handle) override; mojo::ScopedSharedBufferHandle shared_buffer_handle) override;
void CommitWrite(blink::mojom::ClipboardBuffer buffer) override; void CommitWrite(ui::ClipboardType clipboard_type) override;
void WriteStringToFindPboard(const base::string16& text) override; void WriteStringToFindPboard(const base::string16& text) override;
void ConvertBufferType(blink::mojom::ClipboardBuffer, ui::ClipboardType*);
ui::Clipboard* clipboard_; // Not owned ui::Clipboard* clipboard_; // Not owned
scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
std::unique_ptr<ui::ScopedClipboardWriter> clipboard_writer_; std::unique_ptr<ui::ScopedClipboardWriter> clipboard_writer_;
......
...@@ -35,12 +35,12 @@ class ClipboardHostImplTest : public ::testing::Test { ...@@ -35,12 +35,12 @@ class ClipboardHostImplTest : public ::testing::Test {
mojo::ScopedSharedBufferHandle shared_memory, mojo::ScopedSharedBufferHandle shared_memory,
size_t shared_memory_size) { size_t shared_memory_size) {
host_->WriteImage( host_->WriteImage(
blink::mojom::ClipboardBuffer::kStandard, size, ui::CLIPBOARD_TYPE_COPY_PASTE, size,
shared_memory->Clone(mojo::SharedBufferHandle::AccessMode::READ_ONLY)); shared_memory->Clone(mojo::SharedBufferHandle::AccessMode::READ_ONLY));
} }
void CallCommitWrite() { void CallCommitWrite() {
host_->CommitWrite(blink::mojom::ClipboardBuffer::kStandard); host_->CommitWrite(ui::CLIPBOARD_TYPE_COPY_PASTE);
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
} }
......
include_rules = [ include_rules = [
"+mojo/public/cpp/bindings", "+mojo/public/cpp/bindings",
"+third_party/WebKit/common/clipboard/clipboard.mojom-shared.h"
] ]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
mojom = "//third_party/WebKit/common/clipboard/clipboard.mojom"
public_headers = [ "//ui/base/clipboard/clipboard_types.h" ]
traits_headers = [ "//ui/base/mojo/clipboard_struct_traits.h" ]
deps = [
"//ui/base",
]
type_mappings = [ "blink.mojom.ClipboardBuffer=ui::ClipboardType" ]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_BASE_MOJO_CLIPBOARD_STRUCT_TRAITS_H_
#define UI_BASE_MOJO_CLIPBOARD_STRUCT_TRAITS_H_
#include "third_party/WebKit/common/clipboard/clipboard.mojom-shared.h"
#include "ui/base/clipboard/clipboard_types.h"
namespace mojo {
template <>
struct EnumTraits<blink::mojom::ClipboardBuffer, ui::ClipboardType> {
static blink::mojom::ClipboardBuffer ToMojom(ui::ClipboardType) {
// We never intend on converting from ui::Clipboardtype to
// blink::mojom::ClipboardBuffer.
NOTREACHED();
return blink::mojom::ClipboardBuffer::kStandard;
}
static bool FromMojom(blink::mojom::ClipboardBuffer clipboard_type,
ui::ClipboardType* out) {
switch (clipboard_type) {
case blink::mojom::ClipboardBuffer::kStandard:
*out = ui::CLIPBOARD_TYPE_COPY_PASTE;
return true;
case blink::mojom::ClipboardBuffer::kSelection:
#if defined(USE_X11)
*out = ui::CLIPBOARD_TYPE_SELECTION;
return true;
#else
return false;
#endif
}
return false;
}
};
} // namespace mojo
#endif // UI_BASE_MOJO_CLIPBOARD_STRUCT_TRAITS_H_
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
# found in the LICENSE file. # found in the LICENSE file.
typemaps = [ typemaps = [
"//ui/base/mojo/clipboard.typemap",
"//ui/base/mojo/ui_base_types.typemap", "//ui/base/mojo/ui_base_types.typemap",
"//ui/base/mojo/window_open_disposition.typemap", "//ui/base/mojo/window_open_disposition.typemap",
] ]
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