summaryrefslogtreecommitdiffstats
path: root/webkit/glue/chromium_bridge_impl.cc
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-11 22:25:59 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-11 22:25:59 +0000
commit3ccbdb9370f53c006b8d677ff90776df94da79a1 (patch)
treeabac7727f520cf165fcc3bef57390c66005ad83e /webkit/glue/chromium_bridge_impl.cc
parent80b54ab8f2ba05912a28acaa311336a3728619f1 (diff)
downloadchromium_src-3ccbdb9370f53c006b8d677ff90776df94da79a1.zip
chromium_src-3ccbdb9370f53c006b8d677ff90776df94da79a1.tar.gz
chromium_src-3ccbdb9370f53c006b8d677ff90776df94da79a1.tar.bz2
* Remove windows-ism from pasteboard code and move to using
ChromiumBridge for clipboard methods. Also did some cleanup of lingering webkit_glue code in ClipboardChromium. Review URL: http://codereview.chromium.org/10285 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5213 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/chromium_bridge_impl.cc')
-rw-r--r--webkit/glue/chromium_bridge_impl.cc143
1 files changed, 136 insertions, 7 deletions
diff --git a/webkit/glue/chromium_bridge_impl.cc b/webkit/glue/chromium_bridge_impl.cc
index 0289f81..32f38a2 100644
--- a/webkit/glue/chromium_bridge_impl.cc
+++ b/webkit/glue/chromium_bridge_impl.cc
@@ -5,46 +5,175 @@
#include "config.h"
#include "ChromiumBridge.h"
+#include "ClipboardUtilitiesChromium.h"
#include "Cursor.h"
#include "Frame.h"
#include "FrameView.h"
#include "HostWindow.h"
+#include "KURL.h"
+#include "NativeImageSkia.h"
#include "Page.h"
+#include "PasteboardPrivate.h"
+#include "PlatformString.h"
#include "PlatformWidget.h"
#include "ScrollView.h"
#include "Widget.h"
#undef LOG
+#include "base/clipboard.h"
+#include "base/string_util.h"
#include "webkit/glue/chrome_client_impl.h"
#include "webkit/glue/glue_util.h"
+#include "webkit/glue/scoped_clipboard_writer_glue.h"
#include "webkit/glue/webcursor.h"
#include "webkit/glue/webkit_glue.h"
#include "webkit/glue/webview_impl.h"
#include "webkit/glue/webview_delegate.h"
-namespace WebCore {
+namespace {
-static PlatformWidget ToPlatform(Widget* widget) {
+PlatformWidget ToPlatform(WebCore::Widget* widget) {
return widget ? widget->root()->hostWindow()->platformWindow() : 0;
}
-static ChromeClientImpl* ToChromeClient(Widget* widget) {
- FrameView* view;
+ChromeClientImpl* ToChromeClient(WebCore::Widget* widget) {
+ WebCore::FrameView* view;
if (widget->isFrameView()) {
- view = static_cast<FrameView*>(widget);
+ view = static_cast<WebCore::FrameView*>(widget);
} else if (widget->parent() && widget->parent()->isFrameView()) {
- view = static_cast<FrameView*>(widget->parent());
+ view = static_cast<WebCore::FrameView*>(widget->parent());
} else {
return NULL;
}
- Page* page = view->frame() ? view->frame()->page() : NULL;
+ WebCore::Page* page = view->frame() ? view->frame()->page() : NULL;
if (!page)
return NULL;
return static_cast<ChromeClientImpl*>(page->chrome()->client());
}
+std::wstring UrlToImageMarkup(const WebCore::KURL& url,
+ const WebCore::String& alt_str) {
+ std::wstring markup(L"<img src=\"");
+ markup.append(webkit_glue::StringToStdWString(url.string()));
+ markup.append(L"\"");
+ if (!alt_str.isEmpty()) {
+ markup.append(L" alt=\"");
+ std::wstring alt_stdstr = webkit_glue::StringToStdWString(alt_str);
+ ReplaceSubstringsAfterOffset(&alt_stdstr, 0, L"\"", L"&quot;");
+ markup.append(alt_stdstr);
+ markup.append(L"\"");
+ }
+ markup.append(L"/>");
+ return markup;
+}
+
+} // namespace
+
+namespace WebCore {
+
+bool ChromiumBridge::clipboardIsFormatAvailable(
+ PasteboardPrivate::ClipboardFormat format) {
+ switch (format) {
+ case PasteboardPrivate::HTMLFormat:
+ return webkit_glue::ClipboardIsFormatAvailable(
+ ::Clipboard::GetHtmlFormatType());
+
+ case PasteboardPrivate::BookmarkFormat:
+#if defined(OS_WIN) || defined(OS_MACOSX)
+ return webkit_glue::ClipboardIsFormatAvailable(
+ ::Clipboard::GetUrlWFormatType());
+#endif
+
+#if defined(OS_WIN)
+ // TODO(tc): This should work for linux/mac too.
+ case PasteboardPrivate::WebSmartPasteFormat:
+ return webkit_glue::ClipboardIsFormatAvailable(
+ ::Clipboard::GetWebKitSmartPasteFormatType());
+#endif
+
+ default:
+ NOTREACHED();
+ return false;
+ }
+}
+
+String ChromiumBridge::clipboardReadPlainText() {
+ if (webkit_glue::ClipboardIsFormatAvailable(
+ ::Clipboard::GetPlainTextWFormatType())) {
+ std::wstring text;
+ webkit_glue::ClipboardReadText(&text);
+ if (!text.empty())
+ return webkit_glue::StdWStringToString(text);
+ }
+
+ if (webkit_glue::ClipboardIsFormatAvailable(
+ ::Clipboard::GetPlainTextFormatType())) {
+ std::string text;
+ webkit_glue::ClipboardReadAsciiText(&text);
+ if (!text.empty())
+ return webkit_glue::StdStringToString(text);
+ }
+
+ return String();
+}
+
+void ChromiumBridge::clipboardReadHTML(String* html, KURL* url) {
+ std::wstring html_stdstr;
+ GURL gurl;
+ webkit_glue::ClipboardReadHTML(&html_stdstr, &gurl);
+ *html = webkit_glue::StdWStringToString(html_stdstr);
+ *url = webkit_glue::GURLToKURL(gurl);
+}
+
+void ChromiumBridge::clipboardWriteSelection(const String& html,
+ const KURL& url,
+ const String& plain_text,
+ bool can_smart_copy_or_delete) {
+ ScopedClipboardWriterGlue scw(webkit_glue::ClipboardGetClipboard());
+ scw.WriteHTML(webkit_glue::StringToStdWString(html),
+ webkit_glue::CStringToStdString(url.utf8String()));
+ scw.WriteText(webkit_glue::StringToStdWString(plain_text));
+
+#if defined(OS_WIN)
+ if (can_smart_copy_or_delete)
+ scw.WriteWebSmartPaste();
+#endif
+}
+
+void ChromiumBridge::clipboardWriteURL(const KURL& url, const String& title) {
+ ScopedClipboardWriterGlue scw(webkit_glue::ClipboardGetClipboard());
+
+ GURL gurl = webkit_glue::KURLToGURL(url);
+ scw.WriteBookmark(webkit_glue::StringToStdWString(title), gurl.spec());
+
+ std::wstring link(webkit_glue::StringToStdWString(urlToMarkup(url, title)));
+ scw.WriteHTML(link, "");
+
+ scw.WriteText(ASCIIToWide(gurl.spec()));
+}
+
+void ChromiumBridge::clipboardWriteImage(const NativeImageSkia* bitmap,
+ const KURL& url, const String& title) {
+ ScopedClipboardWriterGlue scw(webkit_glue::ClipboardGetClipboard());
+
+#if defined(OS_WIN)
+ if (bitmap)
+ scw.WriteBitmap(*bitmap);
+#endif
+ if (!url.isEmpty()) {
+ GURL gurl = webkit_glue::KURLToGURL(url);
+ scw.WriteBookmark(webkit_glue::StringToStdWString(title), gurl.spec());
+
+ scw.WriteHTML(UrlToImageMarkup(url, title), "");
+
+ scw.WriteText(ASCIIToWide(gurl.spec()));
+ }
+}
+
+//
+
// Cookies --------------------------------------------------------------------
void ChromiumBridge::setCookies(