Diff
Modified: trunk/LayoutTests/ChangeLog (92768 => 92769)
--- trunk/LayoutTests/ChangeLog 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/LayoutTests/ChangeLog 2011-08-10 15:27:17 UTC (rev 92769)
@@ -1,3 +1,20 @@
+2011-08-10 Benjamin Poulain <[email protected]>
+
+ Unify the way we generate HTML for an image in the Clipboard
+ https://bugs.webkit.org/show_bug.cgi?id=58043
+
+ Reviewed by Ryosuke Niwa.
+
+ Add 3 tests for dragging an image-like element to an editable area.
+
+ * editing/pasteboard/drag-and-drop-image-contenteditable-expected.txt: Added.
+ * editing/pasteboard/drag-and-drop-image-contenteditable.html: Added.
+ * editing/pasteboard/drag-and-drop-inputimage-contenteditable-expected.txt: Added.
+ * editing/pasteboard/drag-and-drop-inputimage-contenteditable.html: Added.
+ * editing/pasteboard/drag-and-drop-objectimage-contenteditable-expected.txt: Added.
+ * editing/pasteboard/drag-and-drop-objectimage-contenteditable.html: Added.
+ * platform/qt/Skipped: Qt does not have support for testing drag and drop.
+
2011-08-10 Pavel Feldman <[email protected]>
Web Inspector: auto-completion for string literals doesn't work
Added: trunk/LayoutTests/editing/pasteboard/drag-and-drop-image-contenteditable-expected.txt (0 => 92769)
--- trunk/LayoutTests/editing/pasteboard/drag-and-drop-image-contenteditable-expected.txt (rev 0)
+++ trunk/LayoutTests/editing/pasteboard/drag-and-drop-image-contenteditable-expected.txt 2011-08-10 15:27:17 UTC (rev 92769)
@@ -0,0 +1,17 @@
+This test verify dragging an image in the page keeps its attributes. To test manually, drag the image and drop it in the rect with a blue border.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+
+PASS target.getElementsByTagName("img").length is 1
+PASS target.getElementsByTagName("img")[0].attributes.length is 5
+PASS target.getElementsByTagName("img")[0].id is "source"
+PASS target.getElementsByTagName("img")[0].alt is "alt-text"
+PASS target.getElementsByTagName("img")[0].attributes["itemprop"].value is "somedata"
+PASS target.getElementsByTagName("img")[0].attributes["arbitrary"].value is "green"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/editing/pasteboard/drag-and-drop-image-contenteditable.html (0 => 92769)
--- trunk/LayoutTests/editing/pasteboard/drag-and-drop-image-contenteditable.html (rev 0)
+++ trunk/LayoutTests/editing/pasteboard/drag-and-drop-image-contenteditable.html 2011-08-10 15:27:17 UTC (rev 92769)
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<style>
+#target {
+ height: 200px;
+ width: 220px;
+ border: 5px solid blue;
+}
+</style>
+</head>
+<body _onload_="runTest()">
+<p id="description"></p>
+<div contenteditable=true id="target"></div>
+<div><img id="source" src="" alt="alt-text" itemprop="somedata" arbitrary="green"></div>
+<div id="console"></div>
+
+<script>
+description('This test verify dragging an image in the page keeps its attributes. To test manually, drag the image and drop it in the rect with a blue border.');
+var jsTestIsAsync = true;
+var target = document.getElementById('target');
+
+function contentInserted() {
+ shouldBe('target.getElementsByTagName("img").length', '1');
+ shouldBe('target.getElementsByTagName("img")[0].attributes.length', '5');
+ shouldBeEqualToString('target.getElementsByTagName("img")[0].id', 'source');
+ shouldBeEqualToString('target.getElementsByTagName("img")[0].alt', 'alt-text');
+ shouldBeEqualToString('target.getElementsByTagName("img")[0].attributes["itemprop"].value', 'somedata');
+ shouldBeEqualToString('target.getElementsByTagName("img")[0].attributes["arbitrary"].value', 'green');
+
+ successfullyParsed = true;
+ finishJSTest();
+}
+
+function runTest() {
+ target.addEventListener('DOMNodeInserted', contentInserted, false);
+ if (!window.layoutTestController)
+ return;
+
+ layoutTestController.waitUntilDone();
+
+ e = document.getElementById("source");
+ x = e.offsetLeft + e.offsetWidth / 2;
+ y = e.offsetTop + e.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseDown();
+ eventSender.leapForward(100);
+ e = document.getElementById("target");
+ x = e.offsetLeft + e.offsetWidth / 2;
+ y = e.offsetTop + e.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseUp();
+}
+</script>
+<script src=""
+</body>
+</html>
Added: trunk/LayoutTests/editing/pasteboard/drag-and-drop-inputimage-contenteditable-expected.txt (0 => 92769)
--- trunk/LayoutTests/editing/pasteboard/drag-and-drop-inputimage-contenteditable-expected.txt (rev 0)
+++ trunk/LayoutTests/editing/pasteboard/drag-and-drop-inputimage-contenteditable-expected.txt 2011-08-10 15:27:17 UTC (rev 92769)
@@ -0,0 +1,18 @@
+This test verify dragging an image in the page keeps its attributes. To test manually, drag the image and drop it in the rect with a blue border.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+
+PASS target.getElementsByTagName("input").length is 1
+PASS target.getElementsByTagName("input")[0].attributes.length is 6
+PASS target.getElementsByTagName("input")[0].id is "source"
+PASS target.getElementsByTagName("input")[0].type is "image"
+PASS target.getElementsByTagName("input")[0].draggable is true
+PASS target.getElementsByTagName("input")[0].attributes["itemprop"].value is "somedata"
+PASS target.getElementsByTagName("input")[0].attributes["arbitrary"].value is "green"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/editing/pasteboard/drag-and-drop-inputimage-contenteditable.html (0 => 92769)
--- trunk/LayoutTests/editing/pasteboard/drag-and-drop-inputimage-contenteditable.html (rev 0)
+++ trunk/LayoutTests/editing/pasteboard/drag-and-drop-inputimage-contenteditable.html 2011-08-10 15:27:17 UTC (rev 92769)
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<style>
+#target {
+ height: 200px;
+ width: 220px;
+ border: 5px solid blue;
+}
+</style>
+</head>
+<body _onload_="runTest()">
+<p id="description"></p>
+<div contenteditable=true id="target"></div>
+<div><input type="image" id="source" src="" itemprop="somedata" arbitrary="green" draggable=true></div>
+<div id="console"></div>
+
+<script>
+description('This test verify dragging an image in the page keeps its attributes. To test manually, drag the image and drop it in the rect with a blue border.');
+var jsTestIsAsync = true;
+var target = document.getElementById('target');
+
+function contentInserted() {
+ shouldBe('target.getElementsByTagName("input").length', '1');
+ shouldBe('target.getElementsByTagName("input")[0].attributes.length', '6');
+ shouldBeEqualToString('target.getElementsByTagName("input")[0].id', 'source');
+ shouldBeEqualToString('target.getElementsByTagName("input")[0].type', 'image');
+ shouldBeTrue('target.getElementsByTagName("input")[0].draggable');
+ shouldBeEqualToString('target.getElementsByTagName("input")[0].attributes["itemprop"].value', 'somedata');
+ shouldBeEqualToString('target.getElementsByTagName("input")[0].attributes["arbitrary"].value', 'green');
+
+ successfullyParsed = true;
+ finishJSTest();
+}
+
+function runTest() {
+ target.addEventListener('DOMNodeInserted', contentInserted, false);
+ if (!window.layoutTestController)
+ return;
+
+ layoutTestController.waitUntilDone();
+
+ e = document.getElementById("source");
+ x = e.offsetLeft + e.offsetWidth / 2;
+ y = e.offsetTop + e.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseDown();
+ eventSender.leapForward(100);
+ e = document.getElementById("target");
+ x = e.offsetLeft + e.offsetWidth / 2;
+ y = e.offsetTop + e.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseUp();
+}
+</script>
+<script src=""
+</body>
+</html>
Added: trunk/LayoutTests/editing/pasteboard/drag-and-drop-objectimage-contenteditable-expected.txt (0 => 92769)
--- trunk/LayoutTests/editing/pasteboard/drag-and-drop-objectimage-contenteditable-expected.txt (rev 0)
+++ trunk/LayoutTests/editing/pasteboard/drag-and-drop-objectimage-contenteditable-expected.txt 2011-08-10 15:27:17 UTC (rev 92769)
@@ -0,0 +1,18 @@
+This test verify dragging an image in the page keeps its attributes. To test manually, drag the image and drop it in the rect with a blue border.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+
+PASS target.getElementsByTagName("object").length is 1
+PASS target.getElementsByTagName("object")[0].attributes.length is 6
+PASS target.getElementsByTagName("object")[0].id is "source"
+PASS target.getElementsByTagName("object")[0].type is "image/png"
+PASS target.getElementsByTagName("object")[0].draggable is true
+PASS target.getElementsByTagName("object")[0].attributes["itemprop"].value is "somedata"
+PASS target.getElementsByTagName("object")[0].attributes["arbitrary"].value is "green"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/editing/pasteboard/drag-and-drop-objectimage-contenteditable.html (0 => 92769)
--- trunk/LayoutTests/editing/pasteboard/drag-and-drop-objectimage-contenteditable.html (rev 0)
+++ trunk/LayoutTests/editing/pasteboard/drag-and-drop-objectimage-contenteditable.html 2011-08-10 15:27:17 UTC (rev 92769)
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<style>
+#target {
+ height: 200px;
+ width: 220px;
+ border: 5px solid blue;
+}
+</style>
+</head>
+<body _onload_="runTest()">
+<p id="description"></p>
+<div contenteditable=true id="target"></div>
+<div><object id="source" data="" type="image/png" itemprop="somedata" arbitrary="green" draggable=true></object></div>
+<div id="console"></div>
+
+<script>
+description('This test verify dragging an image in the page keeps its attributes. To test manually, drag the image and drop it in the rect with a blue border.');
+var jsTestIsAsync = true;
+var target = document.getElementById('target');
+
+function contentInserted() {
+ shouldBe('target.getElementsByTagName("object").length', '1');
+ shouldBe('target.getElementsByTagName("object")[0].attributes.length', '6');
+ shouldBeEqualToString('target.getElementsByTagName("object")[0].id', 'source');
+ shouldBeEqualToString('target.getElementsByTagName("object")[0].type', 'image/png');
+ shouldBeTrue('target.getElementsByTagName("object")[0].draggable');
+ shouldBeEqualToString('target.getElementsByTagName("object")[0].attributes["itemprop"].value', 'somedata');
+ shouldBeEqualToString('target.getElementsByTagName("object")[0].attributes["arbitrary"].value', 'green');
+
+ successfullyParsed = true;
+ finishJSTest();
+}
+
+function runTest() {
+ target.addEventListener('DOMNodeInserted', contentInserted, false);
+ if (!window.layoutTestController)
+ return;
+
+ layoutTestController.waitUntilDone();
+
+ e = document.getElementById("source");
+ x = e.offsetLeft + e.offsetWidth / 2;
+ y = e.offsetTop + e.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseDown();
+ eventSender.leapForward(100);
+ e = document.getElementById("target");
+ x = e.offsetLeft + e.offsetWidth / 2;
+ y = e.offsetTop + e.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(x, y);
+ eventSender.mouseUp();
+}
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/platform/qt/Skipped (92768 => 92769)
--- trunk/LayoutTests/platform/qt/Skipped 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/LayoutTests/platform/qt/Skipped 2011-08-10 15:27:17 UTC (rev 92769)
@@ -255,6 +255,9 @@
editing/pasteboard/get-data-text-plain-drop.html
editing/pasteboard/drop-text-events.html
editing/pasteboard/drop-text-events-sideeffect.html
+editing/pasteboard/drag-and-drop-image-contenteditable.html
+editing/pasteboard/drag-and-drop-inputimage-contenteditable.html
+editing/pasteboard/drag-and-drop-objectimage-contenteditable.html
# data-transfer-items is not a default build option
# See bug https://bugs.webkit.org/show_bug.cgi?id=60068
Modified: trunk/Source/WebCore/ChangeLog (92768 => 92769)
--- trunk/Source/WebCore/ChangeLog 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/ChangeLog 2011-08-10 15:27:17 UTC (rev 92769)
@@ -1,3 +1,58 @@
+2011-08-10 Benjamin Poulain <[email protected]>
+
+ Unify the way we generate HTML for an image in the Clipboard
+ https://bugs.webkit.org/show_bug.cgi?id=58043
+
+ Reviewed by Ryosuke Niwa.
+
+ Unify the way we generate the markup when dragging and image.
+
+ Previously, the code was using the special function imageToMarkup() that was
+ spread from the Chromium port.
+ That function ignores some edge cases so this patch replace it by the
+ more generic MarkupAccumulator (which is also used by the other pasteboard
+ actions).
+
+ The MarkupAccumulator was modified because following r61178, the local filepath
+ are treated differently (the enum was changed to make this behavior
+ explicit).
+
+ Tests: fast/drag-and-drop/drag-and-drop-image-contenteditable.html
+ fast/drag-and-drop/drag-and-drop-inputimage-contenteditable.html
+ fast/drag-and-drop/drag-and-drop-objectimage-contenteditable.html
+
+ * editing/MarkupAccumulator.cpp:
+ (WebCore::MarkupAccumulator::MarkupAccumulator):
+ (WebCore::MarkupAccumulator::resolveURLIfNeeded):
+ (WebCore::MarkupAccumulator::appendAttribute):
+ * editing/MarkupAccumulator.h:
+ * editing/markup.cpp:
+ * editing/markup.h:
+ * page/PageSerializer.cpp:
+ (WebCore::SerializerMarkupAccumulator::SerializerMarkupAccumulator):
+ * platform/chromium/ClipboardChromium.cpp:
+ (WebCore::ClipboardChromium::declareAndWriteDragImage):
+ (WebCore::ClipboardChromium::writeRange):
+ * platform/chromium/PasteboardChromium.cpp:
+ (WebCore::Pasteboard::writeSelection):
+ * platform/gtk/ClipboardGtk.cpp:
+ (WebCore::ClipboardGtk::declareAndWriteDragImage):
+ (WebCore::ClipboardGtk::writeRange):
+ * platform/gtk/DataObjectGtk.cpp:
+ (WebCore::DataObjectGtk::markup):
+ * platform/gtk/PasteboardGtk.cpp:
+ (WebCore::Pasteboard::writeSelection):
+ (WebCore::Pasteboard::writeImage):
+ * platform/haiku/PasteboardHaiku.cpp:
+ (WebCore::Pasteboard::writeSelection):
+ * platform/qt/ClipboardQt.cpp:
+ (WebCore::ClipboardQt::declareAndWriteDragImage):
+ (WebCore::ClipboardQt::writeRange):
+ * platform/qt/PasteboardQt.cpp:
+ (WebCore::Pasteboard::writeSelection):
+ * platform/win/ClipboardWin.cpp:
+ (WebCore::ClipboardWin::declareAndWriteDragImage):
+
2011-08-10 Pavel Feldman <[email protected]>
Web Inspector: auto-completion for string literals doesn't work
Modified: trunk/Source/WebCore/editing/MarkupAccumulator.cpp (92768 => 92769)
--- trunk/Source/WebCore/editing/MarkupAccumulator.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/editing/MarkupAccumulator.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -73,10 +73,10 @@
out.append(content + positionAfterLastEntity, length - positionAfterLastEntity);
}
-MarkupAccumulator::MarkupAccumulator(Vector<Node*>* nodes, EAbsoluteURLs shouldResolveURLs, const Range* range)
+MarkupAccumulator::MarkupAccumulator(Vector<Node*>* nodes, EAbsoluteURLs resolveUrlsMethod, const Range* range)
: m_nodes(nodes)
, m_range(range)
- , m_shouldResolveURLs(shouldResolveURLs)
+ , m_resolveURLsMethod(resolveUrlsMethod)
{
}
@@ -114,6 +114,23 @@
appendEndTag(node);
}
+String MarkupAccumulator::resolveURLIfNeeded(const Element* element, const String& urlString) const
+{
+ switch (m_resolveURLsMethod) {
+ case ResolveAllURLs:
+ return element->document()->completeURL(urlString).string();
+
+ case ResolveNonLocalURLs:
+ if (!element->document()->url().isLocalFile())
+ return element->document()->completeURL(urlString).string();
+ break;
+
+ case DoNotResolveURLs:
+ break;
+ }
+ return urlString;
+}
+
void MarkupAccumulator::appendString(const String& string)
{
m_succeedingMarkup.append(string);
@@ -371,14 +388,9 @@
out.append('=');
- if (element->isURLAttribute(const_cast<Attribute*>(&attribute))) {
- // We don't want to complete file:/// URLs because it may contain sensitive information
- // about the user's system.
- if (shouldResolveURLs() && !element->document()->url().isLocalFile())
- appendQuotedURLAttributeValue(out, element->document()->completeURL(attribute.value()).string());
- else
- appendQuotedURLAttributeValue(out, attribute.value());
- } else {
+ if (element->isURLAttribute(const_cast<Attribute*>(&attribute)))
+ appendQuotedURLAttributeValue(out, resolveURLIfNeeded(element, attribute.value()));
+ else {
out.append('\"');
appendAttributeValue(out, attribute.value(), documentIsHTML);
out.append('\"');
Modified: trunk/Source/WebCore/editing/MarkupAccumulator.h (92768 => 92769)
--- trunk/Source/WebCore/editing/MarkupAccumulator.h 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/editing/MarkupAccumulator.h 2011-08-10 15:27:17 UTC (rev 92769)
@@ -66,7 +66,7 @@
// FIXME: Noncopyable?
class MarkupAccumulator {
public:
- MarkupAccumulator(Vector<Node*>* nodes, EAbsoluteURLs shouldResolveURLs, const Range* range = 0);
+ MarkupAccumulator(Vector<Node*>*, EAbsoluteURLs resolveUrlsMethod, const Range* = 0);
virtual ~MarkupAccumulator();
String serializeNodes(Node* node, Node* nodeToSkip, EChildrenOnly childrenOnly);
@@ -100,16 +100,15 @@
bool elementCannotHaveEndTag(const Node* node);
void appendEndMarkup(Vector<UChar>& result, const Node*);
- bool shouldResolveURLs() { return m_shouldResolveURLs == AbsoluteURLs; }
-
Vector<Node*>* const m_nodes;
const Range* const m_range;
private:
+ String resolveURLIfNeeded(const Element*, const String& urlString) const;
void serializeNodesWithNamespaces(Node*, Node* nodeToSkip, EChildrenOnly, const Namespaces*);
Vector<String> m_succeedingMarkup;
- const bool m_shouldResolveURLs;
+ const EAbsoluteURLs m_resolveURLsMethod;
};
// FIXME: This method should be integrated with MarkupAccumulator.
Modified: trunk/Source/WebCore/editing/markup.cpp (92768 => 92769)
--- trunk/Source/WebCore/editing/markup.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/editing/markup.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -854,28 +854,4 @@
return String::adopt(markup);
}
-String imageToMarkup(const KURL& url, Element* element)
-{
- Vector<UChar> markup;
- append(markup, "<img src=""
- append(markup, url.string());
- append(markup, "\"");
-
- NamedNodeMap* attrs = element->attributes();
- unsigned length = attrs->length();
- for (unsigned i = 0; i < length; ++i) {
- Attribute* attr = attrs->attributeItem(i);
- if (attr->localName() == "src")
- continue;
- append(markup, " ");
- append(markup, attr->localName());
- append(markup, "=\"");
- appendCharactersReplacingEntities(markup, attr->value().characters(), attr->value().length(), EntityMaskInAttributeValue);
- append(markup, "\"");
- }
-
- append(markup, "/>");
- return String::adopt(markup);
}
-
-}
Modified: trunk/Source/WebCore/editing/markup.h (92768 => 92769)
--- trunk/Source/WebCore/editing/markup.h 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/editing/markup.h 2011-08-10 15:27:17 UTC (rev 92769)
@@ -41,7 +41,7 @@
class Range;
enum EChildrenOnly { IncludeNode, ChildrenOnly };
- enum EAbsoluteURLs { DoNotResolveURLs, AbsoluteURLs };
+ enum EAbsoluteURLs { DoNotResolveURLs, ResolveAllURLs, ResolveNonLocalURLs };
PassRefPtr<DocumentFragment> createFragmentFromText(Range* context, const String& text);
PassRefPtr<DocumentFragment> createFragmentFromMarkup(Document*, const String& markup, const String& baseURL, FragmentScriptingPermission = FragmentScriptingAllowed);
@@ -57,7 +57,6 @@
String createFullMarkup(const Range*);
String urlToMarkup(const KURL&, const String& title);
- String imageToMarkup(const KURL&, Element*);
}
#endif // markup_h
Modified: trunk/Source/WebCore/page/PageSerializer.cpp (92768 => 92769)
--- trunk/Source/WebCore/page/PageSerializer.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/page/PageSerializer.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -106,8 +106,9 @@
Document* m_document;
};
+// FIXME: should that really use ResolveNonLocalURLs?
SerializerMarkupAccumulator::SerializerMarkupAccumulator(PageSerializer* serializer, Document* document, Vector<Node*>* nodes)
- : MarkupAccumulator(nodes, AbsoluteURLs)
+ : MarkupAccumulator(nodes, ResolveNonLocalURLs)
, m_serializer(serializer)
, m_document(document)
{
Modified: trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -265,16 +265,8 @@
// Write the bytes in the image to the file format.
writeImageToDataObject(m_dataObject.get(), element, url);
- AtomicString imageURL = element->getAttribute(srcAttr);
- if (imageURL.isEmpty())
- return;
-
- KURL fullURL = frame->document()->completeURL(stripLeadingAndTrailingHTMLSpaces(imageURL));
- if (fullURL.isEmpty())
- return;
-
// Put img tag on the clipboard referencing the image
- m_dataObject->setData(mimeTypeTextHTML, imageToMarkup(fullURL, element));
+ m_dataObject->setData(mimeTypeTextHTML, createMarkup(element, IncludeNode, 0, ResolveAllURLs));
}
void ClipboardChromium::writeURL(const KURL& url, const String& title, Frame*)
@@ -299,7 +291,7 @@
if (!m_dataObject)
return;
- m_dataObject->setData(mimeTypeTextHTML, createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs));
+ m_dataObject->setData(mimeTypeTextHTML, createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs));
m_dataObject->setHtmlBaseUrl(frame->document()->url());
String str = frame->editor()->selectedText();
Modified: trunk/Source/WebCore/platform/chromium/PasteboardChromium.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/chromium/PasteboardChromium.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/chromium/PasteboardChromium.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -82,7 +82,7 @@
void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
{
- String html = createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs);
+ String html = createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs);
ExceptionCode ec = 0;
KURL url = ""
String plainText = frame->editor()->selectedText();
Modified: trunk/Source/WebCore/platform/gtk/ClipboardGtk.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/gtk/ClipboardGtk.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/gtk/ClipboardGtk.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -283,7 +283,7 @@
void ClipboardGtk::declareAndWriteDragImage(Element* element, const KURL& url, const String& label, Frame* frame)
{
m_dataObject->setURL(url, label);
- m_dataObject->setMarkup(createMarkup(element, IncludeNode, 0, AbsoluteURLs));
+ m_dataObject->setMarkup(createMarkup(element, IncludeNode, 0, ResolveAllURLs));
CachedImage* image = getCachedImage(element);
if (!image || !image->isLoaded())
@@ -308,7 +308,7 @@
ASSERT(range);
m_dataObject->setText(frame->editor()->selectedText());
- m_dataObject->setMarkup(createMarkup(range, 0, AnnotateForInterchange, false, AbsoluteURLs));
+ m_dataObject->setMarkup(createMarkup(range, 0, AnnotateForInterchange, false, ResolveNonLocalURLs));
if (m_clipboard)
PasteboardHelper::defaultPasteboardHelper()->writeClipboardContents(m_clipboard);
Modified: trunk/Source/WebCore/platform/gtk/DataObjectGtk.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/gtk/DataObjectGtk.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/gtk/DataObjectGtk.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -42,7 +42,7 @@
String DataObjectGtk::markup()
{
if (m_range)
- return createMarkup(m_range.get(), 0, AnnotateForInterchange, false, AbsoluteURLs);
+ return createMarkup(m_range.get(), 0, AnnotateForInterchange, false, ResolveNonLocalURLs);
return m_markup;
}
Modified: trunk/Source/WebCore/platform/gtk/PasteboardGtk.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/gtk/PasteboardGtk.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/gtk/PasteboardGtk.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -60,7 +60,7 @@
GtkClipboard* clipboard = helper->getClipboard(frame);
DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard);
dataObject->setText(frame->editor()->selectedText());
- dataObject->setMarkup(createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs));
+ dataObject->setMarkup(createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs));
helper->writeClipboardContents(clipboard, canSmartCopyOrDelete ? PasteboardHelper::IncludeSmartPaste : PasteboardHelper::DoNotIncludeSmartPaste);
}
@@ -122,11 +122,7 @@
if (!url.isEmpty()) {
dataObject->setURL(url, title);
- // This image may be an SVG, embed, or object tag, so do not write the image
- // tag markup in those cases. Eventually we may want to support passing markup
- // for these tag types.
- if (node->hasTagName(HTMLNames::imgTag))
- dataObject->setMarkup(imageToMarkup(url, static_cast<Element*>(node)));
+ dataObject->setMarkup(createMarkup(static_cast<Element*>(node), IncludeNode, 0, ResolveAllURLs));
}
GRefPtr<GdkPixbuf> pixbuf = adoptGRef(image->getGdkPixbuf());
Modified: trunk/Source/WebCore/platform/haiku/PasteboardHaiku.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/haiku/PasteboardHaiku.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/haiku/PasteboardHaiku.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -102,7 +102,7 @@
data->AddData("text/plain", B_MIME_TYPE, string.String(), string.Length());
- BString markupString(createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs));
+ BString markupString(createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs));
data->AddData("text/html", B_MIME_TYPE, markupString.String(), markupString.Length());
be_clipboard->Commit();
Modified: trunk/Source/WebCore/platform/qt/ClipboardQt.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/qt/ClipboardQt.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/qt/ClipboardQt.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -288,20 +288,12 @@
if (pixmap)
m_writableData->setImageData(*pixmap);
- AtomicString imageURL = element->getAttribute(HTMLNames::srcAttr);
- if (imageURL.isEmpty())
- return;
-
- KURL fullURL = frame->document()->completeURL(stripLeadingAndTrailingHTMLSpaces(imageURL));
- if (fullURL.isEmpty())
- return;
-
QList<QUrl> urls;
urls.append(url);
m_writableData->setText(title);
m_writableData->setUrls(urls);
- m_writableData->setHtml(imageToMarkup(fullURL, element));
+ m_writableData->setHtml(createMarkup(element, IncludeNode, 0, ResolveAllURLs));
#ifndef QT_NO_CLIPBOARD
if (isForCopyAndPaste())
QApplication::clipboard()->setMimeData(m_writableData);
@@ -334,7 +326,7 @@
QString text = frame->editor()->selectedText();
text.replace(QChar(0xa0), QLatin1Char(' '));
m_writableData->setText(text);
- m_writableData->setHtml(createMarkup(range, 0, AnnotateForInterchange, false, AbsoluteURLs));
+ m_writableData->setHtml(createMarkup(range, 0, AnnotateForInterchange, false, ResolveNonLocalURLs));
#ifndef QT_NO_CLIPBOARD
if (isForCopyAndPaste())
QApplication::clipboard()->setMimeData(m_writableData);
Modified: trunk/Source/WebCore/platform/qt/PasteboardQt.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/qt/PasteboardQt.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/qt/PasteboardQt.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -64,7 +64,7 @@
text.replace(QChar(0xa0), QLatin1Char(' '));
md->setText(text);
- QString markup = createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs);
+ QString markup = createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs);
#ifdef Q_OS_MAC
markup.prepend(QLatin1String("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>"));
markup.append(QLatin1String("</body></html>"));
Modified: trunk/Source/WebCore/platform/win/ClipboardWin.cpp (92768 => 92769)
--- trunk/Source/WebCore/platform/win/ClipboardWin.cpp 2011-08-10 14:37:23 UTC (rev 92768)
+++ trunk/Source/WebCore/platform/win/ClipboardWin.cpp 2011-08-10 15:27:17 UTC (rev 92769)
@@ -683,7 +683,7 @@
// Put img tag on the clipboard referencing the image
Vector<char> data;
- markupToCFHTML(imageToMarkup(fullURL, element), "", data);
+ markupToCFHTML(createMarkup(element, IncludeNode, 0, ResolveAllURLs), "", data);
medium.hGlobal = createGlobalData(data);
if (medium.hGlobal && FAILED(m_writableDataObject->SetData(htmlFormat(), &medium, TRUE)))
::GlobalFree(medium.hGlobal);