diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-08 19:58:25 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-08 19:58:25 +0000 |
commit | a2c257166578102f6874dace42dcbbfdb1441231 (patch) | |
tree | 7abee6a1303a1d67929be32b28c5a36ea5be921a | |
parent | b715cb38fd23cb3abb0b09df35cd0ac6076e7332 (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | webkit/port/platform/chromium/PasteboardChromium.cpp | 23 |
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()); |