summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-08 19:58:25 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-08 19:58:25 +0000
commita2c257166578102f6874dace42dcbbfdb1441231 (patch)
tree7abee6a1303a1d67929be32b28c5a36ea5be921a
parentb715cb38fd23cb3abb0b09df35cd0ac6076e7332 (diff)
downloadchromium_src-a2c257166578102f6874dace42dcbbfdb1441231.zip
chromium_src-a2c257166578102f6874dace42dcbbfdb1441231.tar.gz
chromium_src-a2c257166578102f6874dace42dcbbfdb1441231.tar.bz2
Only copy image data to the clipboard when users select
"Copy Image" from the context menu. BUG=1176 Review URL: http://codereview.chromium.org/13253 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6531 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--webkit/glue/chromium_bridge_impl.cc6
-rw-r--r--webkit/port/platform/chromium/PasteboardChromium.cpp23
2 files changed, 27 insertions, 2 deletions
diff --git a/webkit/glue/chromium_bridge_impl.cc b/webkit/glue/chromium_bridge_impl.cc
index 8ebba8d..d13d866 100644
--- a/webkit/glue/chromium_bridge_impl.cc
+++ b/webkit/glue/chromium_bridge_impl.cc
@@ -186,9 +186,13 @@ void ChromiumBridge::clipboardWriteImage(const NativeImageSkia* bitmap,
GURL gurl = webkit_glue::KURLToGURL(url);
scw.WriteBookmark(webkit_glue::StringToStdWString(title), gurl.spec());
+#if defined(OS_MACOSX) || defined(OS_LINUX)
+ // We intentionally don't write HTML or text to the clipboard on Windows
+ // because some apps prefer HTML or text to the image data but we want the
+ // image data to take priority.
scw.WriteHTML(UrlToImageMarkup(url, title), "");
-
scw.WriteText(ASCIIToWide(gurl.spec()));
+#endif
}
}
diff --git a/webkit/port/platform/chromium/PasteboardChromium.cpp b/webkit/port/platform/chromium/PasteboardChromium.cpp
index 01e8861..0ae7981b3 100644
--- a/webkit/port/platform/chromium/PasteboardChromium.cpp
+++ b/webkit/port/platform/chromium/PasteboardChromium.cpp
@@ -34,6 +34,7 @@
#include "Element.h"
#include "Frame.h"
#include "HitTestResult.h"
+#include "HTMLNames.h"
#include "Image.h"
#include "KURL.h"
#include "NativeImageSkia.h"
@@ -44,6 +45,11 @@
#include "TextEncoding.h"
#include "markup.h"
+#if ENABLE(SVG)
+#include "SVGNames.h"
+#include "XLinkNames.h"
+#endif
+
namespace WebCore {
Pasteboard* Pasteboard::generalPasteboard()
@@ -91,8 +97,23 @@ void Pasteboard::writeURL(const KURL& url, const String& titleStr, Frame* frame)
ChromiumBridge::clipboardWriteURL(url, title);
}
-void Pasteboard::writeImage(Node* node, const KURL& url, const String& title)
+void Pasteboard::writeImage(Node* node, const KURL& link_url, const String& title)
{
+ // If the image is wrapped in a link, |url| points to the target of the
+ // link. This isn't useful to us, so get the actual image URL.
+ AtomicString urlString;
+ if (node->hasTagName(HTMLNames::imgTag) || node->hasTagName(HTMLNames::inputTag))
+ urlString = static_cast<Element*>(node)->getAttribute(HTMLNames::srcAttr);
+#if ENABLE(SVG)
+ else if (node->hasTagName(SVGNames::imageTag))
+ urlString = static_cast<Element*>(node)->getAttribute(XLinkNames::hrefAttr);
+#endif
+ else if (node->hasTagName(HTMLNames::embedTag) || node->hasTagName(HTMLNames::objectTag)) {
+ Element* element = static_cast<Element*>(node);
+ urlString = element->getAttribute(element->imageSourceAttributeName());
+ }
+ KURL url = urlString.isEmpty() ? KURL() : node->document()->completeURL(parseURL(urlString));
+
ASSERT(node && node->renderer() && node->renderer()->isImage());
RenderImage* renderer = static_cast<RenderImage*>(node->renderer());
CachedImage* cachedImage = static_cast<CachedImage*>(renderer->cachedImage());