Index: webkit/glue/webclipboard_impl.cc |
=================================================================== |
--- webkit/glue/webclipboard_impl.cc (revision 207553) |
+++ webkit/glue/webclipboard_impl.cc (working copy) |
@@ -1,278 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#include "webkit/glue/webclipboard_impl.h" |
- |
-#include "base/logging.h" |
-#include "base/pickle.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "googleurl/src/gurl.h" |
-#include "net/base/escape.h" |
-#include "third_party/WebKit/public/platform/WebData.h" |
-#include "third_party/WebKit/public/platform/WebDragData.h" |
-#include "third_party/WebKit/public/platform/WebImage.h" |
-#include "third_party/WebKit/public/platform/WebSize.h" |
-#include "third_party/WebKit/public/platform/WebString.h" |
-#include "third_party/WebKit/public/platform/WebURL.h" |
-#include "third_party/WebKit/public/platform/WebVector.h" |
-#include "third_party/skia/include/core/SkBitmap.h" |
-#include "ui/base/clipboard/clipboard.h" |
-#include "ui/base/clipboard/custom_data_helper.h" |
-#include "webkit/common/webdropdata.h" |
-#include "webkit/glue/scoped_clipboard_writer_glue.h" |
-#include "webkit/glue/webkit_glue.h" |
- |
-using WebKit::WebClipboard; |
-using WebKit::WebData; |
-using WebKit::WebDragData; |
-using WebKit::WebImage; |
-using WebKit::WebString; |
-using WebKit::WebURL; |
-using WebKit::WebVector; |
- |
-namespace webkit_glue { |
- |
-// Static |
-std::string WebClipboardImpl::URLToMarkup(const WebURL& url, |
- const WebString& title) { |
- std::string markup("<a href=\""); |
- markup.append(url.spec()); |
- markup.append("\">"); |
- // TODO(darin): HTML escape this |
- markup.append(net::EscapeForHTML(UTF16ToUTF8(title))); |
- markup.append("</a>"); |
- return markup; |
-} |
- |
-// Static |
-std::string WebClipboardImpl::URLToImageMarkup(const WebURL& url, |
- const WebString& title) { |
- std::string markup("<img src=\""); |
- markup.append(url.spec()); |
- markup.append("\""); |
- if (!title.isEmpty()) { |
- markup.append(" alt=\""); |
- markup.append(net::EscapeForHTML(UTF16ToUTF8(title))); |
- markup.append("\""); |
- } |
- markup.append("/>"); |
- return markup; |
-} |
- |
-WebClipboardImpl::WebClipboardImpl(ClipboardClient* client) |
- : client_(client) { |
-} |
- |
-WebClipboardImpl::~WebClipboardImpl() { |
-} |
- |
-uint64 WebClipboardImpl::getSequenceNumber() { |
- return sequenceNumber(BufferStandard); |
-} |
- |
-uint64 WebClipboardImpl::sequenceNumber(Buffer buffer) { |
- ui::Clipboard::Buffer buffer_type; |
- if (!ConvertBufferType(buffer, &buffer_type)) |
- return 0; |
- |
- return client_->GetSequenceNumber(buffer_type); |
-} |
- |
-bool WebClipboardImpl::isFormatAvailable(Format format, Buffer buffer) { |
- ui::Clipboard::Buffer buffer_type = ui::Clipboard::BUFFER_STANDARD; |
- |
- if (!ConvertBufferType(buffer, &buffer_type)) |
- return false; |
- |
- switch (format) { |
- case FormatPlainText: |
- return client_->IsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), |
- buffer_type) || |
- client_->IsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(), |
- buffer_type); |
- case FormatHTML: |
- return client_->IsFormatAvailable(ui::Clipboard::GetHtmlFormatType(), |
- buffer_type); |
- case FormatSmartPaste: |
- return client_->IsFormatAvailable( |
- ui::Clipboard::GetWebKitSmartPasteFormatType(), buffer_type); |
- case FormatBookmark: |
-#if defined(OS_WIN) || defined(OS_MACOSX) |
- return client_->IsFormatAvailable(ui::Clipboard::GetUrlWFormatType(), |
- buffer_type); |
-#endif |
- default: |
- NOTREACHED(); |
- } |
- |
- return false; |
-} |
- |
-WebVector<WebString> WebClipboardImpl::readAvailableTypes( |
- Buffer buffer, bool* contains_filenames) { |
- ui::Clipboard::Buffer buffer_type; |
- std::vector<base::string16> types; |
- if (ConvertBufferType(buffer, &buffer_type)) { |
- client_->ReadAvailableTypes(buffer_type, &types, contains_filenames); |
- } |
- return types; |
-} |
- |
-WebString WebClipboardImpl::readPlainText(Buffer buffer) { |
- ui::Clipboard::Buffer buffer_type; |
- if (!ConvertBufferType(buffer, &buffer_type)) |
- return WebString(); |
- |
- if (client_->IsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(), |
- buffer_type)) { |
- base::string16 text; |
- client_->ReadText(buffer_type, &text); |
- if (!text.empty()) |
- return text; |
- } |
- |
- if (client_->IsFormatAvailable(ui::Clipboard::GetPlainTextFormatType(), |
- buffer_type)) { |
- std::string text; |
- client_->ReadAsciiText(buffer_type, &text); |
- if (!text.empty()) |
- return ASCIIToUTF16(text); |
- } |
- |
- return WebString(); |
-} |
- |
-WebString WebClipboardImpl::readHTML(Buffer buffer, WebURL* source_url, |
- unsigned* fragment_start, |
- unsigned* fragment_end) { |
- ui::Clipboard::Buffer buffer_type; |
- if (!ConvertBufferType(buffer, &buffer_type)) |
- return WebString(); |
- |
- base::string16 html_stdstr; |
- GURL gurl; |
- client_->ReadHTML(buffer_type, &html_stdstr, &gurl, |
- static_cast<uint32*>(fragment_start), |
- static_cast<uint32*>(fragment_end)); |
- *source_url = gurl; |
- return html_stdstr; |
-} |
- |
-WebData WebClipboardImpl::readImage(Buffer buffer) { |
- ui::Clipboard::Buffer buffer_type; |
- if (!ConvertBufferType(buffer, &buffer_type)) |
- return WebData(); |
- |
- std::string png_data; |
- client_->ReadImage(buffer_type, &png_data); |
- return WebData(png_data); |
-} |
- |
-WebString WebClipboardImpl::readCustomData(Buffer buffer, |
- const WebString& type) { |
- ui::Clipboard::Buffer buffer_type; |
- if (!ConvertBufferType(buffer, &buffer_type)) |
- return WebString(); |
- |
- base::string16 data; |
- client_->ReadCustomData(buffer_type, type, &data); |
- return data; |
-} |
- |
-void WebClipboardImpl::writeHTML( |
- const WebString& html_text, const WebURL& source_url, |
- const WebString& plain_text, bool write_smart_paste) { |
- ScopedClipboardWriterGlue scw(client_); |
- scw.WriteHTML(html_text, source_url.spec()); |
- scw.WriteText(plain_text); |
- |
- if (write_smart_paste) |
- scw.WriteWebSmartPaste(); |
-} |
- |
-void WebClipboardImpl::writePlainText(const WebString& plain_text) { |
- ScopedClipboardWriterGlue scw(client_); |
- scw.WriteText(plain_text); |
-} |
- |
-void WebClipboardImpl::writeURL(const WebURL& url, const WebString& title) { |
- ScopedClipboardWriterGlue scw(client_); |
- |
- scw.WriteBookmark(title, url.spec()); |
- scw.WriteHTML(UTF8ToUTF16(URLToMarkup(url, title)), std::string()); |
- scw.WriteText(UTF8ToUTF16(std::string(url.spec()))); |
-} |
- |
-void WebClipboardImpl::writeImage( |
- const WebImage& image, const WebURL& url, const WebString& title) { |
- ScopedClipboardWriterGlue scw(client_); |
- |
- if (!image.isNull()) { |
- const SkBitmap& bitmap = image.getSkBitmap(); |
- SkAutoLockPixels locked(bitmap); |
- scw.WriteBitmapFromPixels(bitmap.getPixels(), image.size()); |
- } |
- |
- if (!url.isEmpty()) { |
- scw.WriteBookmark(title, url.spec()); |
-#if !defined(OS_MACOSX) |
- // When writing the image, we also write the image markup so that pasting |
- // into rich text editors, such as Gmail, reveals the image. We also don't |
- // want to call writeText(), since some applications (WordPad) don't pick |
- // the image if there is also a text format on the clipboard. |
- // We also don't want to write HTML on a Mac, since Mail.app prefers to use |
- // the image markup over attaching the actual image. See |
- // http://crbug.com/33016 for details. |
- scw.WriteHTML(UTF8ToUTF16(URLToImageMarkup(url, title)), std::string()); |
-#endif |
- } |
-} |
- |
-void WebClipboardImpl::writeDataObject(const WebDragData& data) { |
- ScopedClipboardWriterGlue scw(client_); |
- |
- WebDropData data_object(data); |
- // TODO(dcheng): Properly support text/uri-list here. |
- if (!data_object.text.is_null()) |
- scw.WriteText(data_object.text.string()); |
- if (!data_object.html.is_null()) |
- scw.WriteHTML(data_object.html.string(), std::string()); |
- // If there is no custom data, avoid calling WritePickledData. This ensures |
- // that ScopedClipboardWriterGlue's dtor remains a no-op if the page didn't |
- // modify the DataTransfer object, which is important to avoid stomping on |
- // any clipboard contents written by extension functions such as |
- // chrome.bookmarkManagerPrivate.copy. |
- if (!data_object.custom_data.empty()) { |
- Pickle pickle; |
- ui::WriteCustomDataToPickle(data_object.custom_data, &pickle); |
- scw.WritePickledData(pickle, ui::Clipboard::GetWebCustomDataFormatType()); |
- } |
-} |
- |
-bool WebClipboardImpl::ConvertBufferType(Buffer buffer, |
- ui::Clipboard::Buffer* result) { |
- switch (buffer) { |
- case BufferStandard: |
- *result = ui::Clipboard::BUFFER_STANDARD; |
- break; |
- case BufferSelection: |
-#if defined(USE_X11) |
-#if defined(OS_CHROMEOS) |
- // Chrome OS only supports the standard clipboard, |
- // but not the X selection clipboad. |
- return false; |
-#else |
- *result = ui::Clipboard::BUFFER_SELECTION; |
- break; |
-#endif |
-#endif |
- default: |
- NOTREACHED(); |
- return false; |
- } |
- return true; |
-} |
- |
-} // namespace webkit_glue |