<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[207797] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/207797">207797</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-10-24 18:48:42 -0700 (Mon, 24 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>event.(dataTransfer|clipboardData).getData('text/html') (onpaste, ondrop)
https://bugs.webkit.org/show_bug.cgi?id=19893
&lt;rdar://problem/6055546&gt;

Reviewed by Ryosuke Niwa.

Source/WebCore:

We now write selection as HTML as well to the pasteboard so that
event.(dataTransfer|clipboardData).getData('text/html') now works.

I have verified manually that it is still possible to copy text from
Safari and paste it to Excel 2011 Mac after this change. The text is
now pasted as HTML instead of text, which is fine because Excel can
display HTML.

No new tests, unskipped existing tests.

* editing/Editor.h:
* editing/mac/EditorMac.mm:
(WebCore::Editor::selectionInHTMLFormat):
(WebCore::Editor::writeSelectionToPasteboard):
* platform/Pasteboard.h:
* platform/mac/PasteboardMac.mm:
(WebCore::Pasteboard::write):

LayoutTests:

Unskip corresponding tests on Mac.

* editing/pasteboard/onpaste-text-html-expected.txt:
* fast/events/ondrop-text-html-expected.txt:
* platform/mac/TestExpectations:
* platform/wk2/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestseditingpasteboardonpastetexthtmlexpectedtxt">trunk/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasteventsondroptexthtmlexpectedtxt">trunk/LayoutTests/fast/events/ondrop-text-html-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformwk2TestExpectations">trunk/LayoutTests/platform/wk2/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreeditingEditorh">trunk/Source/WebCore/editing/Editor.h</a></li>
<li><a href="#trunkSourceWebCoreeditingmacEditorMacmm">trunk/Source/WebCore/editing/mac/EditorMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformPasteboardh">trunk/Source/WebCore/platform/Pasteboard.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmacPasteboardMacmm">trunk/Source/WebCore/platform/mac/PasteboardMac.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/LayoutTests/ChangeLog        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-10-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        event.(dataTransfer|clipboardData).getData('text/html') (onpaste, ondrop)
+        https://bugs.webkit.org/show_bug.cgi?id=19893
+        &lt;rdar://problem/6055546&gt;
+
+        Reviewed by Ryosuke Niwa.
+
+        Unskip corresponding tests on Mac.
+
+        * editing/pasteboard/onpaste-text-html-expected.txt:
+        * fast/events/ondrop-text-html-expected.txt:
+        * platform/mac/TestExpectations:
+        * platform/wk2/TestExpectations:
+
</ins><span class="cx"> 2016-10-24  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         URLParser should match old URL::parse with %2E in path
</span></span></pre></div>
<a id="trunkLayoutTestseditingpasteboardonpastetexthtmlexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/LayoutTests/editing/pasteboard/onpaste-text-html-expected.txt        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> CONSOLE MESSAGE: line 21: text/plain: This test verifies that we can get text/html from the clipboard during an onpaste event. 
</span><del>-CONSOLE MESSAGE: line 23: text/html: &lt;span style=&quot;color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;&quot;&gt;This test verifies that we can get text/html from the clipboard during an onpaste event.&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;/span&gt;
</del><ins>+CONSOLE MESSAGE: line 23: text/html: &lt;span style=&quot;color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none;&quot;&gt;This test verifies that we can get text/html from the clipboard during an onpaste event.&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;/span&gt;
</ins><span class="cx"> This test verifies that we can get text/html from the clipboard during an onpaste event. This test requires DRT.
</span><span class="cx"> Paste content in this div.This test verifies that we can get text/html from the clipboard during an onpaste event. 
</span><span class="cx"> PASS
</span></span></pre></div>
<a id="trunkLayoutTestsfasteventsondroptexthtmlexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/events/ondrop-text-html-expected.txt (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/events/ondrop-text-html-expected.txt        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/LayoutTests/fast/events/ondrop-text-html-expected.txt        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> CONSOLE MESSAGE: line 21: text/plain: This test verifies that we can get text/html from the drag object during an ondrop event. 
</span><del>-CONSOLE MESSAGE: line 23: text/html: &lt;span style=&quot;color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none;&quot;&gt;This test verifies that we can get text/html from the drag object during an ondrop event.&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;/span&gt;
</del><ins>+CONSOLE MESSAGE: line 23: text/html: &lt;span style=&quot;color: rgb(0, 0, 0); font-size: medium; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none;&quot;&gt;This test verifies that we can get text/html from the drag object during an ondrop event.&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;/span&gt;
</ins><span class="cx"> This test verifies that we can get text/html from the drag object during an ondrop event. This test requires DRT.
</span><span class="cx"> PASS
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -96,11 +96,6 @@
</span><span class="cx"> # Need to add functionality to DumpRenderTree to handle scrollbar policy changes
</span><span class="cx"> fast/overflow/scrollbar-restored-and-then-locked.html
</span><span class="cx"> 
</span><del>-# Mac port doesn't put text/html on the pasteboard for app compatibility: https://bugs.webkit.org/show_bug.cgi?id=19893
-editing/pasteboard/onpaste-text-html-types.html
-editing/pasteboard/onpaste-text-html.html
-fast/events/ondrop-text-html.html
-
</del><span class="cx"> # EventSendingController does not send events on areas outside the WebView.
</span><span class="cx"> scrollbars/scrollbar-click-does-not-blur-content.html
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/wk2/TestExpectations (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/wk2/TestExpectations        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/LayoutTests/platform/wk2/TestExpectations        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -224,6 +224,7 @@
</span><span class="cx"> fast/events/controlclick-no-onclick.html
</span><span class="cx"> fast/events/moving-text-should-fire-drop-and-dragend-events.html
</span><span class="cx"> fast/events/moving-text-should-fire-drop-and-dragend-events-2.html
</span><ins>+fast/events/ondrop-text-html.html
</ins><span class="cx"> editing/pasteboard/drag-drop-url-with-style.html
</span><span class="cx"> 
</span><span class="cx"> # WTR needs an implementation for eventSender.continuousMouseScrollBy
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/Source/WebCore/ChangeLog        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2016-10-24  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        event.(dataTransfer|clipboardData).getData('text/html') (onpaste, ondrop)
+        https://bugs.webkit.org/show_bug.cgi?id=19893
+        &lt;rdar://problem/6055546&gt;
+
+        Reviewed by Ryosuke Niwa.
+
+        We now write selection as HTML as well to the pasteboard so that
+        event.(dataTransfer|clipboardData).getData('text/html') now works.
+
+        I have verified manually that it is still possible to copy text from
+        Safari and paste it to Excel 2011 Mac after this change. The text is
+        now pasted as HTML instead of text, which is fine because Excel can
+        display HTML.
+
+        No new tests, unskipped existing tests.
+
+        * editing/Editor.h:
+        * editing/mac/EditorMac.mm:
+        (WebCore::Editor::selectionInHTMLFormat):
+        (WebCore::Editor::writeSelectionToPasteboard):
+        * platform/Pasteboard.h:
+        * platform/mac/PasteboardMac.mm:
+        (WebCore::Pasteboard::write):
+
</ins><span class="cx"> 2016-10-24  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         URLParser should match old URL::parse with %2E in path
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingEditorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/Editor.h (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/Editor.h        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/Source/WebCore/editing/Editor.h        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -509,6 +509,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     RefPtr&lt;SharedBuffer&gt; selectionInWebArchiveFormat();
</span><ins>+    String selectionInHTMLFormat();
</ins><span class="cx">     RefPtr&lt;SharedBuffer&gt; imageInWebArchiveFormat(Element&amp;);
</span><span class="cx">     RefPtr&lt;Range&gt; adjustedSelectionRange();
</span><span class="cx">     RefPtr&lt;DocumentFragment&gt; createFragmentForImageResourceAndAddResource(RefPtr&lt;ArchiveResource&gt;&amp;&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingmacEditorMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/mac/EditorMac.mm (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/mac/EditorMac.mm        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/Source/WebCore/editing/mac/EditorMac.mm        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -310,6 +310,11 @@
</span><span class="cx">     return SharedBuffer::wrapCFData(archive-&gt;rawDataRepresentation().get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+String Editor::selectionInHTMLFormat()
+{
+    return createMarkup(*selectedRange(), nullptr, AnnotateForInterchange, false, ResolveNonLocalURLs);
+}
+
</ins><span class="cx"> RefPtr&lt;SharedBuffer&gt; Editor::imageInWebArchiveFormat(Element&amp; imageElement)
</span><span class="cx"> {
</span><span class="cx">     RefPtr&lt;LegacyWebArchive&gt; archive = LegacyWebArchive::create(imageElement);
</span><span class="lines">@@ -393,6 +398,7 @@
</span><span class="cx">     content.dataInWebArchiveFormat = selectionInWebArchiveFormat();
</span><span class="cx">     content.dataInRTFDFormat = [attributedString containsAttachments] ? dataInRTFDFormat(attributedString) : 0;
</span><span class="cx">     content.dataInRTFFormat = dataInRTFFormat(attributedString);
</span><ins>+    content.dataInHTMLFormat = selectionInHTMLFormat();
</ins><span class="cx">     content.dataInStringFormat = stringSelectionForPasteboardWithImageAltText();
</span><span class="cx">     client()-&gt;getClientPasteboardDataForRange(selectedRange().get(), content.clientTypes, content.clientData);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformPasteboardh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/Pasteboard.h (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/Pasteboard.h        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/Source/WebCore/platform/Pasteboard.h        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -70,6 +70,7 @@
</span><span class="cx">     RefPtr&lt;SharedBuffer&gt; dataInWebArchiveFormat;
</span><span class="cx">     RefPtr&lt;SharedBuffer&gt; dataInRTFDFormat;
</span><span class="cx">     RefPtr&lt;SharedBuffer&gt; dataInRTFFormat;
</span><ins>+    String dataInHTMLFormat;
</ins><span class="cx">     String dataInStringFormat;
</span><span class="cx">     Vector&lt;String&gt; clientTypes;
</span><span class="cx">     Vector&lt;RefPtr&lt;SharedBuffer&gt;&gt; clientData;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacPasteboardMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/PasteboardMac.mm (207796 => 207797)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/PasteboardMac.mm        2016-10-25 01:38:19 UTC (rev 207796)
+++ trunk/Source/WebCore/platform/mac/PasteboardMac.mm        2016-10-25 01:48:42 UTC (rev 207797)
</span><span class="lines">@@ -153,6 +153,8 @@
</span><span class="cx">         types.append(String(NSRTFDPboardType));
</span><span class="cx">     if (content.dataInRTFFormat)
</span><span class="cx">         types.append(String(NSRTFPboardType));
</span><ins>+    if (!content.dataInHTMLFormat.isNull())
+        types.append(String(NSHTMLPboardType));
</ins><span class="cx">     if (!content.dataInStringFormat.isNull())
</span><span class="cx">         types.append(String(NSStringPboardType));
</span><span class="cx">     types.appendVector(content.clientTypes);
</span><span class="lines">@@ -170,6 +172,8 @@
</span><span class="cx">         m_changeCount = platformStrategies()-&gt;pasteboardStrategy()-&gt;setBufferForType(content.dataInRTFDFormat.get(), NSRTFDPboardType, m_pasteboardName);
</span><span class="cx">     if (content.dataInRTFFormat)
</span><span class="cx">         m_changeCount = platformStrategies()-&gt;pasteboardStrategy()-&gt;setBufferForType(content.dataInRTFFormat.get(), NSRTFPboardType, m_pasteboardName);
</span><ins>+    if (!content.dataInHTMLFormat.isNull())
+        m_changeCount = platformStrategies()-&gt;pasteboardStrategy()-&gt;setStringForType(content.dataInHTMLFormat, NSHTMLPboardType, m_pasteboardName);
</ins><span class="cx">     if (!content.dataInStringFormat.isNull())
</span><span class="cx">         m_changeCount = platformStrategies()-&gt;pasteboardStrategy()-&gt;setStringForType(content.dataInStringFormat, NSStringPboardType, m_pasteboardName);
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>