Commit be0e5df4 authored by Aya ElAttar's avatar Aya ElAttar Committed by Commit Bot

Change Clipboard::Read*() refs to set dst

- Changed Web-originated clipboard access to set
the destination trying to access the clipboard
data if possible.
- Renamed EndpointType::kVm to kGuestOs

Bug: 1103614
Change-Id: I895ea000e985611896f842274ea6849a822753d8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2346288Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarMitsuru Oshima <oshima@chromium.org>
Commit-Queue: Aya Elsayed <ayaelattar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800516}
parent 2a5ddb51
...@@ -2627,7 +2627,7 @@ bool RenderViewContextMenu::IsPasteEnabled() const { ...@@ -2627,7 +2627,7 @@ bool RenderViewContextMenu::IsPasteEnabled() const {
std::vector<base::string16> types; std::vector<base::string16> types;
ui::Clipboard::GetForCurrentThread()->ReadAvailableTypes( ui::Clipboard::GetForCurrentThread()->ReadAvailableTypes(
ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr, &types); ui::ClipboardBuffer::kCopyPaste, CreateDataEndpoint().get(), &types);
return !types.empty(); return !types.empty();
} }
...@@ -2637,7 +2637,7 @@ bool RenderViewContextMenu::IsPasteAndMatchStyleEnabled() const { ...@@ -2637,7 +2637,7 @@ bool RenderViewContextMenu::IsPasteAndMatchStyleEnabled() const {
return ui::Clipboard::GetForCurrentThread()->IsFormatAvailable( return ui::Clipboard::GetForCurrentThread()->IsFormatAvailable(
ui::ClipboardFormatType::GetPlainTextType(), ui::ClipboardFormatType::GetPlainTextType(),
ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr); ui::ClipboardBuffer::kCopyPaste, CreateDataEndpoint().get());
} }
bool RenderViewContextMenu::IsPrintPreviewEnabled() const { bool RenderViewContextMenu::IsPrintPreviewEnabled() const {
...@@ -2684,7 +2684,7 @@ void RenderViewContextMenu::AppendQRCodeGeneratorItem(bool for_image, ...@@ -2684,7 +2684,7 @@ void RenderViewContextMenu::AppendQRCodeGeneratorItem(bool for_image,
} }
std::unique_ptr<ui::ClipboardDataEndpoint> std::unique_ptr<ui::ClipboardDataEndpoint>
RenderViewContextMenu::CreateDataEndpoint() { RenderViewContextMenu::CreateDataEndpoint() const {
RenderFrameHost* render_frame_host = GetRenderFrameHost(); RenderFrameHost* render_frame_host = GetRenderFrameHost();
if (render_frame_host) { if (render_frame_host) {
return std::make_unique<ui::ClipboardDataEndpoint>( return std::make_unique<ui::ClipboardDataEndpoint>(
......
...@@ -199,7 +199,7 @@ class RenderViewContextMenu : public RenderViewContextMenuBase { ...@@ -199,7 +199,7 @@ class RenderViewContextMenu : public RenderViewContextMenuBase {
void AppendSharedClipboardItem(); void AppendSharedClipboardItem();
void AppendQRCodeGeneratorItem(bool for_image, bool draw_icon); void AppendQRCodeGeneratorItem(bool for_image, bool draw_icon);
std::unique_ptr<ui::ClipboardDataEndpoint> CreateDataEndpoint(); std::unique_ptr<ui::ClipboardDataEndpoint> CreateDataEndpoint() const;
// Command enabled query functions. // Command enabled query functions.
bool IsReloadEnabled() const; bool IsReloadEnabled() const;
......
...@@ -49,9 +49,10 @@ mojom::ClipRepresentationPtr CreateHTML(const ui::Clipboard* clipboard) { ...@@ -49,9 +49,10 @@ mojom::ClipRepresentationPtr CreateHTML(const ui::Clipboard* clipboard) {
// Unused. URL is sent from CreatePlainText() by reading it from the Bookmark. // Unused. URL is sent from CreatePlainText() by reading it from the Bookmark.
std::string url; std::string url;
uint32_t fragment_start, fragment_end; uint32_t fragment_start, fragment_end;
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
clipboard->ReadHTML(ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr, clipboard->ReadHTML(ui::ClipboardBuffer::kCopyPaste, &data_dst, &markup16,
&markup16, &url, &fragment_start, &fragment_end); &url, &fragment_start, &fragment_end);
std::string text(base::UTF16ToUTF8( std::string text(base::UTF16ToUTF8(
markup16.substr(fragment_start, fragment_end - fragment_start))); markup16.substr(fragment_start, fragment_end - fragment_start)));
...@@ -70,13 +71,13 @@ mojom::ClipRepresentationPtr CreatePlainText(const ui::Clipboard* clipboard) { ...@@ -70,13 +71,13 @@ mojom::ClipRepresentationPtr CreatePlainText(const ui::Clipboard* clipboard) {
base::string16 title; base::string16 title;
std::string text; std::string text;
std::string mime_type(ui::kMimeTypeText); std::string mime_type(ui::kMimeTypeText);
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
// Both Bookmark and AsciiText are represented by text/plain. If both are // Both Bookmark and AsciiText are represented by text/plain. If both are
// present, only use Bookmark. // present, only use Bookmark.
clipboard->ReadBookmark(/* data_dst = */ nullptr, &title, &text); clipboard->ReadBookmark(&data_dst, &title, &text);
if (text.size() == 0) if (text.size() == 0)
clipboard->ReadAsciiText(ui::ClipboardBuffer::kCopyPaste, clipboard->ReadAsciiText(ui::ClipboardBuffer::kCopyPaste, &data_dst, &text);
/* data_dst = */ nullptr, &text);
return mojom::ClipRepresentation::New(mime_type, return mojom::ClipRepresentation::New(mime_type,
mojom::ClipValue::NewText(text)); mojom::ClipValue::NewText(text));
...@@ -86,8 +87,9 @@ mojom::ClipDataPtr GetClipData(const ui::Clipboard* clipboard) { ...@@ -86,8 +87,9 @@ mojom::ClipDataPtr GetClipData(const ui::Clipboard* clipboard) {
DCHECK(clipboard); DCHECK(clipboard);
std::vector<base::string16> mime_types; std::vector<base::string16> mime_types;
clipboard->ReadAvailableTypes(ui::ClipboardBuffer::kCopyPaste, const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
/* data_dst = */ nullptr, &mime_types); clipboard->ReadAvailableTypes(ui::ClipboardBuffer::kCopyPaste, &data_dst,
&mime_types);
mojom::ClipDataPtr clip_data(mojom::ClipData::New()); mojom::ClipDataPtr clip_data(mojom::ClipData::New());
...@@ -176,7 +178,7 @@ void ArcClipboardBridge::SetClipContent(mojom::ClipDataPtr clip_data) { ...@@ -176,7 +178,7 @@ void ArcClipboardBridge::SetClipContent(mojom::ClipDataPtr clip_data) {
base::AutoReset<bool> auto_reset(&event_originated_at_instance_, true); base::AutoReset<bool> auto_reset(&event_originated_at_instance_, true);
ui::ScopedClipboardWriter writer( ui::ScopedClipboardWriter writer(
ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kCopyPaste,
std::make_unique<ui::ClipboardDataEndpoint>(ui::EndpointType::kVm)); std::make_unique<ui::ClipboardDataEndpoint>(ui::EndpointType::kGuestOs));
for (const auto& repr : clip_data->representations) { for (const auto& repr : clip_data->representations) {
const std::string& mime_type(repr->mime_type); const std::string& mime_type(repr->mime_type);
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "components/exo/data_offer.h" #include "components/exo/data_offer.h"
#include <memory>
#include "base/bind.h" #include "base/bind.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/i18n/icu_string_conversions.h" #include "base/i18n/icu_string_conversions.h"
...@@ -24,6 +26,7 @@ ...@@ -24,6 +26,7 @@
#include "ui/base/clipboard/clipboard.h" #include "ui/base/clipboard/clipboard.h"
#include "ui/base/clipboard/clipboard_buffer.h" #include "ui/base/clipboard/clipboard_buffer.h"
#include "ui/base/clipboard/clipboard_constants.h" #include "ui/base/clipboard/clipboard_constants.h"
#include "ui/base/clipboard/clipboard_data_endpoint.h"
#include "ui/base/dragdrop/file_info/file_info.h" #include "ui/base/dragdrop/file_info/file_info.h"
#include "ui/base/dragdrop/os_exchange_data.h" #include "ui/base/dragdrop/os_exchange_data.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -120,8 +123,9 @@ scoped_refptr<base::RefCountedString> EncodeAsRefCountedString( ...@@ -120,8 +123,9 @@ scoped_refptr<base::RefCountedString> EncodeAsRefCountedString(
void ReadTextFromClipboard(const std::string& charset, base::ScopedFD fd) { void ReadTextFromClipboard(const std::string& charset, base::ScopedFD fd) {
base::string16 text; base::string16 text;
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
ui::Clipboard::GetForCurrentThread()->ReadText( ui::Clipboard::GetForCurrentThread()->ReadText(
ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr, &text); ui::ClipboardBuffer::kCopyPaste, &data_dst, &text);
WriteFileDescriptor(std::move(fd), EncodeAsRefCountedString(text, charset)); WriteFileDescriptor(std::move(fd), EncodeAsRefCountedString(text, charset));
} }
...@@ -129,17 +133,17 @@ void ReadHTMLFromClipboard(const std::string& charset, base::ScopedFD fd) { ...@@ -129,17 +133,17 @@ void ReadHTMLFromClipboard(const std::string& charset, base::ScopedFD fd) {
base::string16 text; base::string16 text;
std::string url; std::string url;
uint32_t start, end; uint32_t start, end;
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
ui::Clipboard::GetForCurrentThread()->ReadHTML( ui::Clipboard::GetForCurrentThread()->ReadHTML(
ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr, &text, &url, ui::ClipboardBuffer::kCopyPaste, &data_dst, &text, &url, &start, &end);
&start, &end);
WriteFileDescriptor(std::move(fd), EncodeAsRefCountedString(text, charset)); WriteFileDescriptor(std::move(fd), EncodeAsRefCountedString(text, charset));
} }
void ReadRTFFromClipboard(base::ScopedFD fd) { void ReadRTFFromClipboard(base::ScopedFD fd) {
std::string text; std::string text;
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
ui::Clipboard::GetForCurrentThread()->ReadRTF(ui::ClipboardBuffer::kCopyPaste, ui::Clipboard::GetForCurrentThread()->ReadRTF(ui::ClipboardBuffer::kCopyPaste,
/* data_dst = */ nullptr, &data_dst, &text);
&text);
WriteFileDescriptor(std::move(fd), base::RefCountedString::TakeString(&text)); WriteFileDescriptor(std::move(fd), base::RefCountedString::TakeString(&text));
} }
...@@ -164,9 +168,9 @@ void OnReceivePNGFromClipboard(base::ScopedFD fd, const SkBitmap& sk_bitmap) { ...@@ -164,9 +168,9 @@ void OnReceivePNGFromClipboard(base::ScopedFD fd, const SkBitmap& sk_bitmap) {
} }
void ReadPNGFromClipboard(base::ScopedFD fd) { void ReadPNGFromClipboard(base::ScopedFD fd) {
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
ui::Clipboard::GetForCurrentThread()->ReadImage( ui::Clipboard::GetForCurrentThread()->ReadImage(
ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kCopyPaste, &data_dst,
/* data_dst = */ nullptr,
base::BindOnce(&OnReceivePNGFromClipboard, std::move(fd))); base::BindOnce(&OnReceivePNGFromClipboard, std::move(fd)));
} }
...@@ -314,9 +318,9 @@ void DataOffer::SetDropData(FileHelper* file_helper, ...@@ -314,9 +318,9 @@ void DataOffer::SetDropData(FileHelper* file_helper,
void DataOffer::SetClipboardData(FileHelper* file_helper, void DataOffer::SetClipboardData(FileHelper* file_helper,
const ui::Clipboard& data) { const ui::Clipboard& data) {
DCHECK_EQ(0u, data_.size()); DCHECK_EQ(0u, data_.size());
const ui::ClipboardDataEndpoint data_dst(ui::EndpointType::kGuestOs);
if (data.IsFormatAvailable(ui::ClipboardFormatType::GetPlainTextType(), if (data.IsFormatAvailable(ui::ClipboardFormatType::GetPlainTextType(),
ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kCopyPaste, &data_dst)) {
/* data_dst = */ nullptr)) {
auto utf8_callback = auto utf8_callback =
base::BindRepeating(&ReadTextFromClipboard, std::string(kUTF8)); base::BindRepeating(&ReadTextFromClipboard, std::string(kUTF8));
delegate_->OnOffer(std::string(ui::kMimeTypeTextUtf8)); delegate_->OnOffer(std::string(ui::kMimeTypeTextUtf8));
...@@ -330,8 +334,7 @@ void DataOffer::SetClipboardData(FileHelper* file_helper, ...@@ -330,8 +334,7 @@ void DataOffer::SetClipboardData(FileHelper* file_helper,
base::BindRepeating(&ReadTextFromClipboard, std::string(kUTF16))); base::BindRepeating(&ReadTextFromClipboard, std::string(kUTF16)));
} }
if (data.IsFormatAvailable(ui::ClipboardFormatType::GetHtmlType(), if (data.IsFormatAvailable(ui::ClipboardFormatType::GetHtmlType(),
ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kCopyPaste, &data_dst)) {
/* data_dst = */ nullptr)) {
delegate_->OnOffer(std::string(kTextHtmlMimeTypeUtf8)); delegate_->OnOffer(std::string(kTextHtmlMimeTypeUtf8));
data_callbacks_.emplace( data_callbacks_.emplace(
std::string(kTextHtmlMimeTypeUtf8), std::string(kTextHtmlMimeTypeUtf8),
...@@ -342,15 +345,13 @@ void DataOffer::SetClipboardData(FileHelper* file_helper, ...@@ -342,15 +345,13 @@ void DataOffer::SetClipboardData(FileHelper* file_helper,
base::BindRepeating(&ReadHTMLFromClipboard, std::string(kUTF16))); base::BindRepeating(&ReadHTMLFromClipboard, std::string(kUTF16)));
} }
if (data.IsFormatAvailable(ui::ClipboardFormatType::GetRtfType(), if (data.IsFormatAvailable(ui::ClipboardFormatType::GetRtfType(),
ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kCopyPaste, &data_dst)) {
/* data_dst = */ nullptr)) {
delegate_->OnOffer(std::string(kTextRtfMimeType)); delegate_->OnOffer(std::string(kTextRtfMimeType));
data_callbacks_.emplace(std::string(kTextRtfMimeType), data_callbacks_.emplace(std::string(kTextRtfMimeType),
base::BindRepeating(&ReadRTFFromClipboard)); base::BindRepeating(&ReadRTFFromClipboard));
} }
if (data.IsFormatAvailable(ui::ClipboardFormatType::GetBitmapType(), if (data.IsFormatAvailable(ui::ClipboardFormatType::GetBitmapType(),
ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kCopyPaste, &data_dst)) {
/* data_dst = */ nullptr)) {
delegate_->OnOffer(std::string(kImagePngMimeType)); delegate_->OnOffer(std::string(kImagePngMimeType));
data_callbacks_.emplace(std::string(kImagePngMimeType), data_callbacks_.emplace(std::string(kImagePngMimeType),
base::BindRepeating(&ReadPNGFromClipboard)); base::BindRepeating(&ReadPNGFromClipboard));
......
...@@ -138,7 +138,7 @@ class Seat::RefCountedScopedClipboardWriter ...@@ -138,7 +138,7 @@ class Seat::RefCountedScopedClipboardWriter
explicit RefCountedScopedClipboardWriter() explicit RefCountedScopedClipboardWriter()
: ScopedClipboardWriter(ui::ClipboardBuffer::kCopyPaste, : ScopedClipboardWriter(ui::ClipboardBuffer::kCopyPaste,
std::make_unique<ui::ClipboardDataEndpoint>( std::make_unique<ui::ClipboardDataEndpoint>(
ui::EndpointType::kVm)) {} ui::EndpointType::kGuestOs)) {}
private: private:
friend class base::RefCounted<RefCountedScopedClipboardWriter>; friend class base::RefCounted<RefCountedScopedClipboardWriter>;
......
...@@ -428,7 +428,7 @@ void RenderViewContextMenuBase::MenuClosed(ui::SimpleMenuModel* source) { ...@@ -428,7 +428,7 @@ void RenderViewContextMenuBase::MenuClosed(ui::SimpleMenuModel* source) {
} }
} }
RenderFrameHost* RenderViewContextMenuBase::GetRenderFrameHost() { RenderFrameHost* RenderViewContextMenuBase::GetRenderFrameHost() const {
return RenderFrameHost::FromID(render_process_id_, render_frame_id_); return RenderFrameHost::FromID(render_process_id_, render_frame_id_);
} }
......
...@@ -163,7 +163,7 @@ class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate, ...@@ -163,7 +163,7 @@ class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate,
virtual void AppendPlatformEditableItems() {} virtual void AppendPlatformEditableItems() {}
// May return nullptr if the frame was deleted while the menu was open. // May return nullptr if the frame was deleted while the menu was open.
content::RenderFrameHost* GetRenderFrameHost(); content::RenderFrameHost* GetRenderFrameHost() const;
bool IsCustomItemChecked(int id) const; bool IsCustomItemChecked(int id) const;
bool IsCustomItemEnabled(int id) const; bool IsCustomItemEnabled(int id) const;
......
...@@ -132,7 +132,7 @@ void ClipboardHostImpl::ReadAvailableTypes( ...@@ -132,7 +132,7 @@ void ClipboardHostImpl::ReadAvailableTypes(
ui::ClipboardBuffer clipboard_buffer, ui::ClipboardBuffer clipboard_buffer,
ReadAvailableTypesCallback callback) { ReadAvailableTypesCallback callback) {
std::vector<base::string16> types; std::vector<base::string16> types;
clipboard_->ReadAvailableTypes(clipboard_buffer, /* data_dst = */ nullptr, clipboard_->ReadAvailableTypes(clipboard_buffer, CreateDataEndpoint().get(),
&types); &types);
std::move(callback).Run(types); std::move(callback).Run(types);
} }
...@@ -141,32 +141,33 @@ void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format, ...@@ -141,32 +141,33 @@ void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format,
ui::ClipboardBuffer clipboard_buffer, ui::ClipboardBuffer clipboard_buffer,
IsFormatAvailableCallback callback) { IsFormatAvailableCallback callback) {
bool result = false; bool result = false;
auto data_endpoint = CreateDataEndpoint();
switch (format) { switch (format) {
case blink::mojom::ClipboardFormat::kPlaintext: case blink::mojom::ClipboardFormat::kPlaintext:
result = clipboard_->IsFormatAvailable( result = clipboard_->IsFormatAvailable(
ui::ClipboardFormatType::GetPlainTextType(), clipboard_buffer, ui::ClipboardFormatType::GetPlainTextType(), clipboard_buffer,
/* data_dst = */ nullptr); data_endpoint.get());
#if defined(OS_WIN) #if defined(OS_WIN)
result |= clipboard_->IsFormatAvailable( result |= clipboard_->IsFormatAvailable(
ui::ClipboardFormatType::GetPlainTextAType(), clipboard_buffer, ui::ClipboardFormatType::GetPlainTextAType(), clipboard_buffer,
/* data_dst = */ nullptr); data_endpoint.get());
#endif #endif
break; break;
case blink::mojom::ClipboardFormat::kHtml: case blink::mojom::ClipboardFormat::kHtml:
result = clipboard_->IsFormatAvailable( result =
ui::ClipboardFormatType::GetHtmlType(), clipboard_buffer, clipboard_->IsFormatAvailable(ui::ClipboardFormatType::GetHtmlType(),
/* data_dst = */ nullptr); clipboard_buffer, data_endpoint.get());
break; break;
case blink::mojom::ClipboardFormat::kSmartPaste: case blink::mojom::ClipboardFormat::kSmartPaste:
result = clipboard_->IsFormatAvailable( result = clipboard_->IsFormatAvailable(
ui::ClipboardFormatType::GetWebKitSmartPasteType(), clipboard_buffer, ui::ClipboardFormatType::GetWebKitSmartPasteType(), clipboard_buffer,
/* data_dst = */ nullptr); data_endpoint.get());
break; break;
case blink::mojom::ClipboardFormat::kBookmark: case blink::mojom::ClipboardFormat::kBookmark:
#if defined(OS_WIN) || defined(OS_MAC) #if defined(OS_WIN) || defined(OS_MAC)
result = clipboard_->IsFormatAvailable( result =
ui::ClipboardFormatType::GetUrlType(), clipboard_buffer, clipboard_->IsFormatAvailable(ui::ClipboardFormatType::GetUrlType(),
/* data_dst = */ nullptr); clipboard_buffer, data_endpoint.get());
#else #else
result = false; result = false;
#endif #endif
...@@ -178,18 +179,17 @@ void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format, ...@@ -178,18 +179,17 @@ void ClipboardHostImpl::IsFormatAvailable(blink::mojom::ClipboardFormat format,
void ClipboardHostImpl::ReadText(ui::ClipboardBuffer clipboard_buffer, void ClipboardHostImpl::ReadText(ui::ClipboardBuffer clipboard_buffer,
ReadTextCallback callback) { ReadTextCallback callback) {
base::string16 result; base::string16 result;
auto data_dst = CreateDataEndpoint();
if (clipboard_->IsFormatAvailable(ui::ClipboardFormatType::GetPlainTextType(), if (clipboard_->IsFormatAvailable(ui::ClipboardFormatType::GetPlainTextType(),
clipboard_buffer, clipboard_buffer, data_dst.get())) {
/* data_dst = */ nullptr)) { clipboard_->ReadText(clipboard_buffer, data_dst.get(), &result);
clipboard_->ReadText(clipboard_buffer, /* data_dst = */ nullptr, &result);
} else { } else {
#if defined(OS_WIN) #if defined(OS_WIN)
if (clipboard_->IsFormatAvailable( if (clipboard_->IsFormatAvailable(
ui::ClipboardFormatType::GetPlainTextAType(), clipboard_buffer, ui::ClipboardFormatType::GetPlainTextAType(), clipboard_buffer,
/* data_dst = */ nullptr)) { data_dst.get())) {
std::string ascii; std::string ascii;
clipboard_->ReadAsciiText(clipboard_buffer, clipboard_->ReadAsciiText(clipboard_buffer, data_dst.get(), &ascii);
/* data_dst = */ nullptr, &ascii);
result = base::ASCIIToUTF16(ascii); result = base::ASCIIToUTF16(ascii);
} }
#endif #endif
...@@ -215,8 +215,9 @@ void ClipboardHostImpl::ReadHtml(ui::ClipboardBuffer clipboard_buffer, ...@@ -215,8 +215,9 @@ void ClipboardHostImpl::ReadHtml(ui::ClipboardBuffer clipboard_buffer,
std::string src_url_str; std::string src_url_str;
uint32_t fragment_start = 0; uint32_t fragment_start = 0;
uint32_t fragment_end = 0; uint32_t fragment_end = 0;
clipboard_->ReadHTML(clipboard_buffer, /* data_dst = */ nullptr, &markup, auto data_dst = CreateDataEndpoint();
&src_url_str, &fragment_start, &fragment_end); clipboard_->ReadHTML(clipboard_buffer, data_dst.get(), &markup, &src_url_str,
&fragment_start, &fragment_end);
std::string data = base::UTF16ToUTF8(markup); std::string data = base::UTF16ToUTF8(markup);
PerformPasteIfAllowed( PerformPasteIfAllowed(
...@@ -238,7 +239,8 @@ void ClipboardHostImpl::ReadHtml(ui::ClipboardBuffer clipboard_buffer, ...@@ -238,7 +239,8 @@ void ClipboardHostImpl::ReadHtml(ui::ClipboardBuffer clipboard_buffer,
void ClipboardHostImpl::ReadRtf(ui::ClipboardBuffer clipboard_buffer, void ClipboardHostImpl::ReadRtf(ui::ClipboardBuffer clipboard_buffer,
ReadRtfCallback callback) { ReadRtfCallback callback) {
std::string result; std::string result;
clipboard_->ReadRTF(clipboard_buffer, /* data_dst = */ nullptr, &result); auto data_dst = CreateDataEndpoint();
clipboard_->ReadRTF(clipboard_buffer, data_dst.get(), &result);
std::string data = result; std::string data = result;
PerformPasteIfAllowed(clipboard_->GetSequenceNumber(clipboard_buffer), PerformPasteIfAllowed(clipboard_->GetSequenceNumber(clipboard_buffer),
...@@ -255,8 +257,8 @@ void ClipboardHostImpl::ReadRtf(ui::ClipboardBuffer clipboard_buffer, ...@@ -255,8 +257,8 @@ void ClipboardHostImpl::ReadRtf(ui::ClipboardBuffer clipboard_buffer,
void ClipboardHostImpl::ReadImage(ui::ClipboardBuffer clipboard_buffer, void ClipboardHostImpl::ReadImage(ui::ClipboardBuffer clipboard_buffer,
ReadImageCallback callback) { ReadImageCallback callback) {
clipboard_->ReadImage(clipboard_buffer, auto data_dst = CreateDataEndpoint();
/* data_dst = */ nullptr, clipboard_->ReadImage(clipboard_buffer, data_dst.get(),
base::BindOnce(&ClipboardHostImpl::OnReadImage, base::BindOnce(&ClipboardHostImpl::OnReadImage,
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
clipboard_buffer, std::move(callback))); clipboard_buffer, std::move(callback)));
...@@ -285,8 +287,8 @@ void ClipboardHostImpl::ReadCustomData(ui::ClipboardBuffer clipboard_buffer, ...@@ -285,8 +287,8 @@ void ClipboardHostImpl::ReadCustomData(ui::ClipboardBuffer clipboard_buffer,
const base::string16& type, const base::string16& type,
ReadCustomDataCallback callback) { ReadCustomDataCallback callback) {
base::string16 result; base::string16 result;
clipboard_->ReadCustomData(clipboard_buffer, type, /* data_dst = */ nullptr, auto data_dst = CreateDataEndpoint();
&result); clipboard_->ReadCustomData(clipboard_buffer, type, data_dst.get(), &result);
std::string data = base::UTF16ToUTF8(result); std::string data = base::UTF16ToUTF8(result);
PerformPasteIfAllowed( PerformPasteIfAllowed(
...@@ -333,15 +335,8 @@ void ClipboardHostImpl::WriteImage(const SkBitmap& bitmap) { ...@@ -333,15 +335,8 @@ void ClipboardHostImpl::WriteImage(const SkBitmap& bitmap) {
} }
void ClipboardHostImpl::CommitWrite() { void ClipboardHostImpl::CommitWrite() {
std::unique_ptr<ui::ClipboardDataEndpoint> data_src;
RenderFrameHostImpl* render_frame_host =
RenderFrameHostImpl::FromID(render_frame_pid_, render_frame_routing_id_);
if (render_frame_host) {
data_src = std::make_unique<ui::ClipboardDataEndpoint>(
render_frame_host->GetLastCommittedURL());
}
clipboard_writer_ = std::make_unique<ui::ScopedClipboardWriter>( clipboard_writer_ = std::make_unique<ui::ScopedClipboardWriter>(
ui::ClipboardBuffer::kCopyPaste, std::move(data_src)); ui::ClipboardBuffer::kCopyPaste, CreateDataEndpoint());
} }
void ClipboardHostImpl::PerformPasteIfAllowed( void ClipboardHostImpl::PerformPasteIfAllowed(
...@@ -398,4 +393,14 @@ void ClipboardHostImpl::CleanupObsoleteRequests() { ...@@ -398,4 +393,14 @@ void ClipboardHostImpl::CleanupObsoleteRequests() {
} }
} }
std::unique_ptr<ui::ClipboardDataEndpoint>
ClipboardHostImpl::CreateDataEndpoint() {
RenderFrameHostImpl* render_frame_host =
RenderFrameHostImpl::FromID(render_frame_pid_, render_frame_routing_id_);
if (render_frame_host) {
return std::make_unique<ui::ClipboardDataEndpoint>(
render_frame_host->GetLastCommittedURL());
}
return nullptr;
}
} // namespace content } // namespace content
...@@ -175,6 +175,8 @@ class CONTENT_EXPORT ClipboardHostImpl : public blink::mojom::ClipboardHost { ...@@ -175,6 +175,8 @@ class CONTENT_EXPORT ClipboardHostImpl : public blink::mojom::ClipboardHost {
ReadImageCallback callback, ReadImageCallback callback,
const SkBitmap& bitmap); const SkBitmap& bitmap);
std::unique_ptr<ui::ClipboardDataEndpoint> CreateDataEndpoint();
mojo::Receiver<blink::mojom::ClipboardHost> receiver_; mojo::Receiver<blink::mojom::ClipboardHost> receiver_;
ui::Clipboard* const clipboard_; // Not owned ui::Clipboard* const clipboard_; // Not owned
int render_frame_routing_id_; int render_frame_routing_id_;
......
...@@ -108,7 +108,8 @@ void RawClipboardHostImpl::ReadAvailableFormatNames( ...@@ -108,7 +108,8 @@ void RawClipboardHostImpl::ReadAvailableFormatNames(
return; return;
std::vector<base::string16> raw_types = std::vector<base::string16> raw_types =
clipboard_->ReadAvailablePlatformSpecificFormatNames( clipboard_->ReadAvailablePlatformSpecificFormatNames(
ui::ClipboardBuffer::kCopyPaste, /* data_dst = */ nullptr); ui::ClipboardBuffer::kCopyPaste,
CreateDataEndpoint(render_frame_host_).get());
std::move(callback).Run(raw_types); std::move(callback).Run(raw_types);
} }
...@@ -124,7 +125,7 @@ void RawClipboardHostImpl::Read(const base::string16& format, ...@@ -124,7 +125,7 @@ void RawClipboardHostImpl::Read(const base::string16& format,
std::string result; std::string result;
clipboard_->ReadData( clipboard_->ReadData(
ui::ClipboardFormatType::GetType(base::UTF16ToUTF8(format)), ui::ClipboardFormatType::GetType(base::UTF16ToUTF8(format)),
/* data_dst = */ nullptr, &result); CreateDataEndpoint(render_frame_host_).get(), &result);
base::span<const uint8_t> span( base::span<const uint8_t> span(
reinterpret_cast<const uint8_t*>(result.data()), result.size()); reinterpret_cast<const uint8_t*>(result.data()), result.size());
mojo_base::BigBuffer buffer = mojo_base::BigBuffer(span); mojo_base::BigBuffer buffer = mojo_base::BigBuffer(span);
......
...@@ -15,9 +15,11 @@ namespace ui { ...@@ -15,9 +15,11 @@ namespace ui {
// destination trying to read the clipboard data. // destination trying to read the clipboard data.
// Whenever a new format is supported, a new enum should be added. // Whenever a new format is supported, a new enum should be added.
enum class EndpointType { enum class EndpointType {
kUrl = 0, // Website URL e.g. www.example.com #if defined(OS_CHROMEOS) || (OS_LINUX) || (OS_FUCHSIA)
kVm = 1, // Virtual machine: ARC++, PluginVM, Crostini. kGuestOs = 0, // Guest OS: ARC++, PluginVM, Crostini.
kMaxValue = kVm #endif
kUrl = 1, // Website URL e.g. www.example.com
kMaxValue = kUrl
}; };
// ClipboardDataEndpoint can represent: // ClipboardDataEndpoint can represent:
......
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