1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/webclipboard_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/pickle.h" 95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/common/clipboard_format.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/common/drop_data.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/renderer/clipboard_utils.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/drop_data_builder.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/scoped_clipboard_writer_glue.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebData.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebDragData.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebImage.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebSize.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURL.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebVector.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/custom_data_helper.h" 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebClipboard; 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebData; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragData; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebImage; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURL; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebVector; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebClipboardImpl::WebClipboardImpl(ClipboardClient* client) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : client_(client) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebClipboardImpl::~WebClipboardImpl() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint64 WebClipboardImpl::sequenceNumber(Buffer buffer) { 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type; 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!ConvertBufferType(buffer, &clipboard_type)) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return client_->GetSequenceNumber(clipboard_type); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebClipboardImpl::isFormatAvailable(Format format, Buffer buffer) { 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type = ui::CLIPBOARD_TYPE_COPY_PASTE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!ConvertBufferType(buffer, &clipboard_type)) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (format) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FormatPlainText: 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return client_->IsFormatAvailable(CLIPBOARD_FORMAT_PLAINTEXT, 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) clipboard_type); 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) case FormatHTML: 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return client_->IsFormatAvailable(CLIPBOARD_FORMAT_HTML, clipboard_type); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FormatSmartPaste: 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return client_->IsFormatAvailable(CLIPBOARD_FORMAT_SMART_PASTE, 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) clipboard_type); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FormatBookmark: 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return client_->IsFormatAvailable(CLIPBOARD_FORMAT_BOOKMARK, 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) clipboard_type); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebVector<WebString> WebClipboardImpl::readAvailableTypes( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Buffer buffer, bool* contains_filenames) { 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type; 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> types; 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (ConvertBufferType(buffer, &clipboard_type)) { 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) client_->ReadAvailableTypes(clipboard_type, &types, contains_filenames); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return types; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString WebClipboardImpl::readPlainText(Buffer buffer) { 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type; 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!ConvertBufferType(buffer, &clipboard_type)) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebString(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::string16 text; 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) client_->ReadText(clipboard_type, &text); 9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return text; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString WebClipboardImpl::readHTML(Buffer buffer, WebURL* source_url, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned* fragment_start, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned* fragment_end) { 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type; 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!ConvertBufferType(buffer, &clipboard_type)) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebString(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 html_stdstr; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gurl; 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) client_->ReadHTML(clipboard_type, &html_stdstr, &gurl, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<uint32*>(fragment_start), 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<uint32*>(fragment_end)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *source_url = gurl; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return html_stdstr; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebData WebClipboardImpl::readImage(Buffer buffer) { 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type; 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!ConvertBufferType(buffer, &clipboard_type)) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebData(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string png_data; 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) client_->ReadImage(clipboard_type, &png_data); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebData(png_data); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebString WebClipboardImpl::readCustomData(Buffer buffer, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& type) { 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType clipboard_type; 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!ConvertBufferType(buffer, &clipboard_type)) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return WebString(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 data; 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) client_->ReadCustomData(clipboard_type, type, &data); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void WebClipboardImpl::writePlainText(const WebString& plain_text) { 1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ScopedClipboardWriterGlue scw(client_); 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scw.WriteText(plain_text); 1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebClipboardImpl::writeHTML( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& html_text, const WebURL& source_url, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebString& plain_text, bool write_smart_paste) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedClipboardWriterGlue scw(client_); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scw.WriteHTML(html_text, source_url.spec()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scw.WriteText(plain_text); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (write_smart_paste) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scw.WriteWebSmartPaste(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebClipboardImpl::writeImage(const WebImage& image, 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const WebURL& url, 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const WebString& title) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedClipboardWriterGlue scw(client_); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!image.isNull()) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& bitmap = image.getSkBitmap(); 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // WriteBitmapFromPixels expects 32-bit data. 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK_EQ(bitmap.colorType(), kN32_SkColorType); 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkAutoLockPixels locked(bitmap); 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void *pixels = bitmap.getPixels(); 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(piman): this should not be NULL, but it is. crbug.com/369621 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!pixels) 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scw.WriteBitmapFromPixels(pixels, image.size()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url.isEmpty()) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scw.WriteBookmark(title, url.spec()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When writing the image, we also write the image markup so that pasting 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // into rich text editors, such as Gmail, reveals the image. We also don't 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // want to call writeText(), since some applications (WordPad) don't pick 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the image if there is also a text format on the clipboard. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We also don't want to write HTML on a Mac, since Mail.app prefers to use 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the image markup over attaching the actual image. See 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/33016 for details. 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scw.WriteHTML(base::UTF8ToUTF16(URLToImageMarkup(url, title)), 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebClipboardImpl::writeDataObject(const WebDragData& data) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedClipboardWriterGlue scw(client_); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const DropData& data_object = DropDataBuilder::Build(data); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dcheng): Properly support text/uri-list here. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!data_object.text.is_null()) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scw.WriteText(data_object.text.string()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!data_object.html.is_null()) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scw.WriteHTML(data_object.html.string(), std::string()); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If there is no custom data, avoid calling WritePickledData. This ensures 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that ScopedClipboardWriterGlue's dtor remains a no-op if the page didn't 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modify the DataTransfer object, which is important to avoid stomping on 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any clipboard contents written by extension functions such as 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // chrome.bookmarkManagerPrivate.copy. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!data_object.custom_data.empty()) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pickle pickle; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WriteCustomDataToPickle(data_object.custom_data, &pickle); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scw.WritePickledData(pickle, ui::Clipboard::GetWebCustomDataFormatType()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebClipboardImpl::ConvertBufferType(Buffer buffer, 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::ClipboardType* result) { 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *result = ui::CLIPBOARD_TYPE_COPY_PASTE; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (buffer) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case BufferStandard: 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case BufferSelection: 213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_X11) && !defined(OS_CHROMEOS) 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *result = ui::CLIPBOARD_TYPE_SELECTION; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#else 217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Chrome OS and non-X11 unix builds do not support 218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // the X selection clipboad. 219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // TODO: remove the need for this case, see http://crbug.com/361753 220a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return false; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 230