<!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>[206810] 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/206810">206810</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-05 07:26:40 -0700 (Wed, 05 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WK2][NetworkSession] Ping requests should follow redirects if applicable
https://bugs.webkit.org/show_bug.cgi?id=162580
&lt;rdar://problem/28631274&gt;

Reviewed by Alex Christensen.

Source/WebKit2:

Implement support for following redirects, if applicable, of a ping request when using the
Network Session (ENABLE(NETWORK_SESSION)) code path in WebKit2. For ping requests that are
in response to hyperlink auditing (e.g. &lt;a ping&gt;) we should follow redirect responses.
For Content Security Policy and XSS Auditor violation reports we should not follow redirect
responses.

Currently we always ignore redirects for ping requests that are sent using the Network Session
code path in WebKit2. This behavior disagrees with the behavior described in section
&quot;Hyperlink auditing&quot; of the HTML standard, &lt;https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing&gt; (27 September 2016),
as well as the behavior in Legacy WebKit and WebKit2 with Network Session disabled. We should
follow redirects for ping requests initiated as part of hyperlink auditing to more closely
conform to the HTML standard and match the behavior in Legacy WebKit and WebKit2 with Network
Session disabled.

* NetworkProcess/PingLoad.h:

LayoutTests:

Add tests to ensure that we follow redirects for ping requests that are initiated as part
of hyperlink auditing.

Modified http/tests/navigation/resources/save-Ping.php to include the host and request URI
information in the saved report and updated expected results for existing tests as a result
of this change.

* http/tests/contentextensions/block-cookies-in-csp-report-expected.txt:
* http/tests/contentextensions/block-cookies-in-image-load-in-onunload-expected.txt:
* http/tests/contentextensions/block-cookies-in-ping-expected.txt:
* http/tests/contentextensions/hide-on-csp-report-expected.txt:
* http/tests/contentextensions/hide-on-ping-expected.txt:
* http/tests/contentextensions/hide-on-ping-with-ping-that-redirects-expected.txt: Added.
* http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html: Added.
* http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html.json: Added.
* http/tests/contentextensions/resources/save-ping-and-redirect-to-save-ping.php: Added.
* http/tests/contentextensions/resources/save-ping.php:
* http/tests/navigation/image-load-in-pagehide-handler-expected.txt:
* http/tests/navigation/image-load-in-unload-handler-expected.txt:
* http/tests/navigation/ping-attribute/anchor-cookie-expected.txt:
* http/tests/navigation/ping-attribute/anchor-cross-origin-expected.txt:
* http/tests/navigation/ping-attribute/anchor-cross-origin-from-https-expected.txt:
* http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping-expected.txt: Added.
* http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html: Added.
* http/tests/navigation/ping-attribute/anchor-same-origin-expected.txt:
* http/tests/navigation/ping-attribute/area-cookie-expected.txt:
* http/tests/navigation/ping-attribute/area-cross-origin-expected.txt:
* http/tests/navigation/ping-attribute/area-cross-origin-from-https-expected.txt:
* http/tests/navigation/ping-attribute/area-same-origin-expected.txt:
* http/tests/navigation/resources/save-Ping.php:
* http/tests/navigation/resources/save-ping-and-redirect-to-save-ping.php: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionsblockcookiesincspreportexpectedtxt">trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-csp-report-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionsblockcookiesinimageloadinonunloadexpectedtxt">trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-image-load-in-onunload-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionsblockcookiesinpingexpectedtxt">trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-ping-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionshideoncspreportexpectedtxt">trunk/LayoutTests/http/tests/contentextensions/hide-on-csp-report-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionshideonpingexpectedtxt">trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionsresourcessavepingphp">trunk/LayoutTests/http/tests/contentextensions/resources/save-ping.php</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationimageloadinpagehidehandlerexpectedtxt">trunk/LayoutTests/http/tests/navigation/image-load-in-pagehide-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationimageloadinunloadhandlerexpectedtxt">trunk/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeanchorcookieexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cookie-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeanchorcrossoriginexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeanchorcrossoriginfromhttpsexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-from-https-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeanchorsameoriginexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-same-origin-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeareacookieexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cookie-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeareacrossoriginexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeareacrossoriginfromhttpsexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-from-https-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeareasameoriginexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/area-same-origin-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationresourcessavePingphp">trunk/LayoutTests/http/tests/navigation/resources/save-Ping.php</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessPingLoadh">trunk/Source/WebKit2/NetworkProcess/PingLoad.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestscontentextensionshideonpingwithpingthatredirectsexpectedtxt">trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionshideonpingwithpingthatredirectshtml">trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionshideonpingwithpingthatredirectshtmljson">trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html.json</a></li>
<li><a href="#trunkLayoutTestshttptestscontentextensionsresourcessavepingandredirecttosavepingphp">trunk/LayoutTests/http/tests/contentextensions/resources/save-ping-and-redirect-to-save-ping.php</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeanchorpinganddonotfollowredirectwhensendingpingexpectedtxt">trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationpingattributeanchorpinganddonotfollowredirectwhensendingpinghtml">trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationresourcessavepingandredirecttosavepingphp">trunk/LayoutTests/http/tests/navigation/resources/save-ping-and-redirect-to-save-ping.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/ChangeLog        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,5 +1,45 @@
</span><span class="cx"> 2016-10-05  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [WK2][NetworkSession] Ping requests should follow redirects if applicable
+        https://bugs.webkit.org/show_bug.cgi?id=162580
+        &lt;rdar://problem/28631274&gt;
+
+        Reviewed by Alex Christensen.
+
+        Add tests to ensure that we follow redirects for ping requests that are initiated as part
+        of hyperlink auditing.
+
+        Modified http/tests/navigation/resources/save-Ping.php to include the host and request URI
+        information in the saved report and updated expected results for existing tests as a result
+        of this change.
+
+        * http/tests/contentextensions/block-cookies-in-csp-report-expected.txt:
+        * http/tests/contentextensions/block-cookies-in-image-load-in-onunload-expected.txt:
+        * http/tests/contentextensions/block-cookies-in-ping-expected.txt:
+        * http/tests/contentextensions/hide-on-csp-report-expected.txt:
+        * http/tests/contentextensions/hide-on-ping-expected.txt:
+        * http/tests/contentextensions/hide-on-ping-with-ping-that-redirects-expected.txt: Added.
+        * http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html: Added.
+        * http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html.json: Added.
+        * http/tests/contentextensions/resources/save-ping-and-redirect-to-save-ping.php: Added.
+        * http/tests/contentextensions/resources/save-ping.php:
+        * http/tests/navigation/image-load-in-pagehide-handler-expected.txt:
+        * http/tests/navigation/image-load-in-unload-handler-expected.txt:
+        * http/tests/navigation/ping-attribute/anchor-cookie-expected.txt:
+        * http/tests/navigation/ping-attribute/anchor-cross-origin-expected.txt:
+        * http/tests/navigation/ping-attribute/anchor-cross-origin-from-https-expected.txt:
+        * http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping-expected.txt: Added.
+        * http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html: Added.
+        * http/tests/navigation/ping-attribute/anchor-same-origin-expected.txt:
+        * http/tests/navigation/ping-attribute/area-cookie-expected.txt:
+        * http/tests/navigation/ping-attribute/area-cross-origin-expected.txt:
+        * http/tests/navigation/ping-attribute/area-cross-origin-from-https-expected.txt:
+        * http/tests/navigation/ping-attribute/area-same-origin-expected.txt:
+        * http/tests/navigation/resources/save-Ping.php:
+        * http/tests/navigation/resources/save-ping-and-redirect-to-save-ping.php: Added.
+
+2016-10-05  Daniel Bates  &lt;dabates@apple.com&gt;
+
</ins><span class="cx">         Do not follow redirects when sending violation report
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=162520
</span><span class="cx">         &lt;rdar://problem/27957639&gt;
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionsblockcookiesincspreportexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-csp-report-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-csp-report-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-csp-report-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -7,4 +7,6 @@
</span><span class="cx"> Frame: 'result_frame'
</span><span class="cx"> --------
</span><span class="cx"> Ping received.
</span><ins>+HTTP_HOST: 127.0.0.1:8000
+REQUEST_URI: /contentextensions/resources/save-ping.php?test=contentextensions-block-cookies-in-csp-report
</ins><span class="cx"> No cookies in ping.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionsblockcookiesinimageloadinonunloadexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-image-load-in-onunload-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-image-load-in-onunload-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-image-load-in-onunload-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,3 +1,5 @@
</span><span class="cx"> main frame - has 1 onunload handler(s)
</span><span class="cx"> Ping received.
</span><ins>+HTTP_HOST: 127.0.0.1:8000
+REQUEST_URI: /contentextensions/resources/save-ping.php?test=contentextensions-block-cookies-in-image-load-in-onunload
</ins><span class="cx"> No cookies in ping.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionsblockcookiesinpingexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-ping-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-ping-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/contentextensions/block-cookies-in-ping-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -9,4 +9,6 @@
</span><span class="cx"> Frame: 'result_frame'
</span><span class="cx"> --------
</span><span class="cx"> Ping received.
</span><ins>+HTTP_HOST: 127.0.0.1:8000
+REQUEST_URI: /contentextensions/resources/save-ping.php?test=contentextensions-block-cookies-in-ping
</ins><span class="cx"> No cookies in ping.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionshideoncspreportexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/contentextensions/hide-on-csp-report-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/hide-on-csp-report-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/contentextensions/hide-on-csp-report-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -8,4 +8,6 @@
</span><span class="cx"> Frame: 'result_frame'
</span><span class="cx"> --------
</span><span class="cx"> Ping received.
</span><ins>+HTTP_HOST: localhost:8000
+REQUEST_URI: /contentextensions/resources/save-ping.php?test=contentextensions-hide-on-csp-report
</ins><span class="cx"> No cookies in ping.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionshideonpingexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -7,4 +7,6 @@
</span><span class="cx"> Frame: 'result_frame'
</span><span class="cx"> --------
</span><span class="cx"> Ping received.
</span><ins>+HTTP_HOST: 127.0.0.1:8000
+REQUEST_URI: /contentextensions/resources/save-ping.php?test=contentextensions-hide-on-ping
</ins><span class="cx"> No cookies in ping.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionshideonpingwithpingthatredirectsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects-expected.txt (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects-expected.txt                                (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+This test follows a link with a ping attribute where the redirected ping URL matches a 'css-display-none' rule.
+This text should remain visible.
+ Link with ping
+
+
+--------
+Frame: 'result_frame'
+--------
+Ping received.
+HTTP_HOST: 127.0.0.1:8000
+REQUEST_URI: /contentextensions/resources/save-ping.php?test=contentextensions-hide-on-ping-with-ping-that-redirects
+No cookies in ping.
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionshideonpingwithpingthatredirectshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+&lt;head&gt;
+&lt;script&gt;
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.dumpChildFramesAsText();
+    testRunner.overridePreference(&quot;WebKitHyperlinkAuditingEnabled&quot;, 1);
+    testRunner.waitUntilDone();
+}
+
+function clickOnLinkWithPing() {
+    if (window.eventSender) {
+        var a = document.getElementById(&quot;a&quot;);
+        var x = a.offsetLeft + 2;
+        var y = a.offsetTop + 2;
+        eventSender.mouseMoveTo(x, y);
+        eventSender.mouseDown();
+        eventSender.mouseUp();
+    }
+}
+
+function showPingResult() {
+    function actualShowPingResult() {
+        var iframe = document.getElementById(&quot;result_frame&quot;);
+        iframe.onload = function() {
+            if (window.testRunner) { testRunner.notifyDone(); }
+        }
+        iframe.src = &quot;resources/get-ping-data.php?test=contentextensions-hide-on-ping-with-ping-that-redirects&quot;;
+    }
+    // We assume that if redirects were followed when saving a ping that they will complete within one second.
+    // FIXME: Is there are better way to test that a redirect occurred?
+    window.setTimeout(actualShowPingResult, 1000);
+}
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body&gt;
+This test follows a link with a ping attribute where the redirected ping URL matches a 'css-display-none' rule.
+&lt;div class=&quot;foo&quot;&gt;This text should be hidden once the ping is sent.&lt;/div&gt;
+&lt;div class=&quot;bar&quot;&gt;This text should remain visible.&lt;/div&gt;
+&lt;div&gt;
+&lt;img src=&quot;resources/delete-ping.php?test=contentextensions-hide-on-ping&quot; onerror=&quot;clickOnLinkWithPing();&quot;&gt;
+&lt;a id=&quot;a&quot; href=&quot;#a&quot; ping=&quot;resources/save-ping-and-redirect-to-save-ping.php?test=contentextensions-hide-on-ping-with-ping-that-redirects&quot; onclick=&quot;showPingResult();&quot;&gt;Link with ping&lt;/a&gt;
+&lt;/div&gt;
+&lt;iframe id=&quot;result_frame&quot; name=&quot;result_frame&quot;&gt;&lt;!-- Will contain ping data received by server --&gt;&lt;/iframe&gt;
+&lt;/body&gt;
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionshideonpingwithpingthatredirectshtmljson"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html.json (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html.json                                (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/hide-on-ping-with-ping-that-redirects.html.json        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+[
+    {
+        &quot;trigger&quot;: {
+            &quot;url-filter&quot;: &quot;save-ping.php&quot;
+        },
+        &quot;action&quot;: {
+            &quot;type&quot;: &quot;css-display-none&quot;,
+            &quot;selector&quot;: &quot;.foo&quot;
+        }
+    }
+]
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionsresourcessavepingandredirecttosavepingphp"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/contentextensions/resources/save-ping-and-redirect-to-save-ping.php (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/resources/save-ping-and-redirect-to-save-ping.php                                (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/resources/save-ping-and-redirect-to-save-ping.php        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;?php
+require_once 'ping-file-path.php';
+
+$DO_NOT_CLEAR_COOKIES = true;
+require_once 'save-ping.php';
+
+header('HTTP/1.1 307');
+header('Location: save-ping.php' . (isset($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : ''));
+?&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscontentextensionsresourcessavepingphp"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/contentextensions/resources/save-ping.php (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/contentextensions/resources/save-ping.php        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/contentextensions/resources/save-ping.php        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -5,7 +5,9 @@
</span><span class="cx"> $httpHeaders = $_SERVER;
</span><span class="cx"> $cookiesFound = false;
</span><span class="cx"> foreach ($httpHeaders as $name =&gt; $value) {
</span><del>-    if ($name === &quot;HTTP_COOKIE&quot;) {
</del><ins>+    if ($name === &quot;HTTP_HOST&quot; || $name === &quot;REQUEST_URI&quot;)
+        fwrite($pingFile, &quot;$name: $value\n&quot;);
+    else if ($name === &quot;HTTP_COOKIE&quot;) {
</ins><span class="cx">         fwrite($pingFile, &quot;Cookies in ping: $value\n&quot;);
</span><span class="cx">         $cookiesFound = true;
</span><span class="cx">     }
</span><span class="lines">@@ -15,6 +17,9 @@
</span><span class="cx"> }
</span><span class="cx"> fclose($pingFile);
</span><span class="cx"> rename($pingFilePath . &quot;.tmp&quot;, $pingFilePath);
</span><del>-foreach ($_COOKIE as $name =&gt; $value)
-    setcookie($name, &quot;deleted&quot;, time() - 60, &quot;/&quot;);
</del><ins>+
+if (!isset($DO_NOT_CLEAR_COOKIES) || !$DO_NOT_CLEAR_COOKIES) {
+    foreach ($_COOKIE as $name =&gt; $value)
+        setcookie($name, &quot;deleted&quot;, time() - 60, &quot;/&quot;);
+}
</ins><span class="cx"> ?&gt;
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationimageloadinpagehidehandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/image-load-in-pagehide-handler-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/image-load-in-pagehide-handler-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/image-load-in-pagehide-handler-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,3 +1,5 @@
</span><span class="cx"> Ping sent successfully
</span><ins>+HTTP_HOST: 127.0.0.1:8000
</ins><span class="cx"> HTTP_REFERER: http://127.0.0.1:8000/navigation/image-load-in-pagehide-handler.html
</span><span class="cx"> REQUEST_METHOD: GET
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationimageloadinunloadhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/image-load-in-unload-handler-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,4 +1,6 @@
</span><span class="cx"> main frame - has 1 onunload handler(s)
</span><span class="cx"> Ping sent successfully
</span><ins>+HTTP_HOST: 127.0.0.1:8000
</ins><span class="cx"> HTTP_REFERER: http://127.0.0.1:8000/navigation/image-load-in-unload-handler.html
</span><span class="cx"> REQUEST_METHOD: GET
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeanchorcookieexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cookie-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cookie-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cookie-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,6 +1,8 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><span class="cx"> HTTP_COOKIE: hello=world
</span><ins>+HTTP_HOST: 127.0.0.1:8000
</ins><span class="cx"> HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/anchor-cookie.html
</span><span class="cx"> HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeanchorcrossoriginexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,6 +1,8 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><ins>+HTTP_HOST: localhost:8000
</ins><span class="cx"> HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/anchor-cross-origin.html
</span><span class="cx"> HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
</span><span class="cx"> HTTP_REFERER: http://127.0.0.1:8000/navigation/ping-attribute/anchor-cross-origin.html
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeanchorcrossoriginfromhttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-from-https-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-from-https-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-cross-origin-from-https-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,4 +1,6 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><ins>+HTTP_HOST: localhost:8000
</ins><span class="cx"> HTTP_PING_TO: https://127.0.0.1:8443/navigation/resources/check-ping.php
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php?test=/navigation/ping-attribute/anchor-cross-origin-from-https.html
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeanchorpinganddonotfollowredirectwhensendingpingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping-expected.txt (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping-expected.txt                                (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Ping sent successfully
+CONTENT_TYPE: text/ping
+HTTP_HOST: 127.0.0.1:8000
+HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html
+HTTP_PING_TO: javascript:checkPing()
+REQUEST_METHOD: POST
+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeanchorpinganddonotfollowredirectwhensendingpinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-ping-and-do-not-follow-redirect-when-sending-ping.html        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;resources/utilities.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.overridePreference(&quot;WebKitHyperlinkAuditingEnabled&quot;, 1);
+    testRunner.waitUntilDone();
+}
+
+function test()
+{
+    clickElement(document.getElementById(&quot;a&quot;));
+}
+
+function checkPing()
+{
+    function actualCheckPing()
+    {
+        window.location = &quot;../resources/check-ping.php&quot;;
+    }
+    // We assume that if redirects were followed when saving a ping that they will complete within one second.
+    // FIXME: Is there are better way to test that a redirect occurred?
+    window.setTimeout(actualCheckPing, 1000);
+}
+
+window.onload = function ()
+{
+    clearLastPingResultAndRunTest(test);
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p&gt;This test PASSED if the filename of the REQUEST_URI in the dumped report is save-Ping.php. Otherwise, it FAIL.&lt;/p&gt;
+&lt;a id=&quot;a&quot; href=&quot;javascript:checkPing()&quot; ping=&quot;../resources/save-ping-and-redirect-to-save-ping.php&quot;&gt;Navigate and send ping&lt;/a&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeanchorsameoriginexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-same-origin-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-same-origin-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/anchor-same-origin-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,5 +1,7 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><ins>+HTTP_HOST: 127.0.0.1:8000
</ins><span class="cx"> HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/anchor-same-origin.html
</span><span class="cx"> HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeareacookieexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cookie-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cookie-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cookie-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,6 +1,8 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><span class="cx"> HTTP_COOKIE: hello=world
</span><ins>+HTTP_HOST: 127.0.0.1:8000
</ins><span class="cx"> HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/area-cookie.html
</span><span class="cx"> HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeareacrossoriginexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,6 +1,8 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><ins>+HTTP_HOST: localhost:8000
</ins><span class="cx"> HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/area-cross-origin.html
</span><span class="cx"> HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
</span><span class="cx"> HTTP_REFERER: http://127.0.0.1:8000/navigation/ping-attribute/area-cross-origin.html
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeareacrossoriginfromhttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-from-https-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-from-https-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/area-cross-origin-from-https-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,4 +1,6 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><ins>+HTTP_HOST: localhost:8000
</ins><span class="cx"> HTTP_PING_TO: https://127.0.0.1:8443/navigation/resources/check-ping.php
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php?test=/navigation/ping-attribute/area-cross-origin-from-https.html
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationpingattributeareasameoriginexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/ping-attribute/area-same-origin-expected.txt (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/ping-attribute/area-same-origin-expected.txt        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/ping-attribute/area-same-origin-expected.txt        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,5 +1,7 @@
</span><span class="cx"> Ping sent successfully
</span><span class="cx"> CONTENT_TYPE: text/ping
</span><ins>+HTTP_HOST: 127.0.0.1:8000
</ins><span class="cx"> HTTP_PING_FROM: http://127.0.0.1:8000/navigation/ping-attribute/area-same-origin.html
</span><span class="cx"> HTTP_PING_TO: http://127.0.0.1:8000/navigation/resources/check-ping.php
</span><span class="cx"> REQUEST_METHOD: POST
</span><ins>+REQUEST_URI: /navigation/resources/save-Ping.php
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationresourcessavePingphp"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/navigation/resources/save-Ping.php (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/resources/save-Ping.php        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/LayoutTests/http/tests/navigation/resources/save-Ping.php        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -5,11 +5,15 @@
</span><span class="cx"> $httpHeaders = $_SERVER;
</span><span class="cx"> ksort($httpHeaders, SORT_STRING);
</span><span class="cx"> foreach ($httpHeaders as $name =&gt; $value) {
</span><del>-    if ($name === &quot;CONTENT_TYPE&quot; || $name === &quot;HTTP_REFERER&quot; || $name === &quot;HTTP_PING_TO&quot; || $name === &quot;HTTP_PING_FROM&quot; || $name === &quot;REQUEST_METHOD&quot; || $name === &quot;HTTP_COOKIE&quot;)
</del><ins>+    if ($name === &quot;CONTENT_TYPE&quot; || $name === &quot;HTTP_REFERER&quot; || $name === &quot;HTTP_PING_TO&quot; || $name === &quot;HTTP_PING_FROM&quot;
+        || $name === &quot;REQUEST_METHOD&quot; || $name === &quot;REQUEST_URI&quot; || $name === &quot;HTTP_HOST&quot; || $name === &quot;HTTP_COOKIE&quot;)
</ins><span class="cx">         fwrite($pingFile, &quot;$name: $value\n&quot;);
</span><span class="cx"> }
</span><span class="cx"> fclose($pingFile);
</span><span class="cx"> rename($pingFilePath . &quot;.tmp&quot;, $pingFilePath);
</span><del>-foreach ($_COOKIE as $name =&gt; $value)
-    setcookie($name, &quot;deleted&quot;, time() - 60, &quot;/&quot;);
</del><ins>+
+if (!isset($DO_NOT_CLEAR_COOKIES) || !$DO_NOT_CLEAR_COOKIES) {
+    foreach ($_COOKIE as $name =&gt; $value)
+        setcookie($name, &quot;deleted&quot;, time() - 60, &quot;/&quot;);
+}
</ins><span class="cx"> ?&gt;
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationresourcessavepingandredirecttosavepingphp"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/navigation/resources/save-ping-and-redirect-to-save-ping.php (0 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/resources/save-ping-and-redirect-to-save-ping.php                                (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/resources/save-ping-and-redirect-to-save-ping.php        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;?php
+require_once 'ping-file-path.php';
+
+$DO_NOT_CLEAR_COOKIES = true; // Used by save-Ping.php
+require_once 'save-Ping.php';
+
+header('HTTP/1.1 307');
+header('Location: save-Ping.php' . (isset($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : ''));
+?&gt;
</ins></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/Source/WebKit2/ChangeLog        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -1,5 +1,29 @@
</span><span class="cx"> 2016-10-05  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [WK2][NetworkSession] Ping requests should follow redirects if applicable
+        https://bugs.webkit.org/show_bug.cgi?id=162580
+        &lt;rdar://problem/28631274&gt;
+
+        Reviewed by Alex Christensen.
+
+        Implement support for following redirects, if applicable, of a ping request when using the
+        Network Session (ENABLE(NETWORK_SESSION)) code path in WebKit2. For ping requests that are
+        in response to hyperlink auditing (e.g. &lt;a ping&gt;) we should follow redirect responses.
+        For Content Security Policy and XSS Auditor violation reports we should not follow redirect
+        responses.
+
+        Currently we always ignore redirects for ping requests that are sent using the Network Session
+        code path in WebKit2. This behavior disagrees with the behavior described in section
+        &quot;Hyperlink auditing&quot; of the HTML standard, &lt;https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing&gt; (27 September 2016),
+        as well as the behavior in Legacy WebKit and WebKit2 with Network Session disabled. We should
+        follow redirects for ping requests initiated as part of hyperlink auditing to more closely
+        conform to the HTML standard and match the behavior in Legacy WebKit and WebKit2 with Network
+        Session disabled.
+
+        * NetworkProcess/PingLoad.h:
+
+2016-10-05  Daniel Bates  &lt;dabates@apple.com&gt;
+
</ins><span class="cx">         Do not follow redirects when sending violation report
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=162520
</span><span class="cx">         &lt;rdar://problem/27957639&gt;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessPingLoadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/PingLoad.h (206809 => 206810)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/PingLoad.h        2016-10-05 14:22:43 UTC (rev 206809)
+++ trunk/Source/WebKit2/NetworkProcess/PingLoad.h        2016-10-05 14:26:40 UTC (rev 206810)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> public:
</span><span class="cx">     PingLoad(const NetworkResourceLoadParameters&amp; parameters)
</span><span class="cx">         : m_timeoutTimer(*this, &amp;PingLoad::timeoutTimerFired)
</span><ins>+        , m_shouldFollowRedirects(parameters.shouldFollowRedirects)
</ins><span class="cx">     {
</span><span class="cx">         if (auto* networkSession = SessionTracker::networkSession(parameters.sessionID)) {
</span><span class="cx">             m_task = NetworkDataTask::create(*networkSession, *this, parameters.request, parameters.allowStoredCredentials, parameters.contentSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect);
</span><span class="lines">@@ -48,11 +49,9 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx"> private:
</span><del>-    void willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp;, WebCore::ResourceRequest&amp;&amp;, RedirectCompletionHandler&amp;&amp; completionHandler) final
</del><ins>+    void willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp;, WebCore::ResourceRequest&amp;&amp; request, RedirectCompletionHandler&amp;&amp; completionHandler) final
</ins><span class="cx">     {
</span><del>-        // FIXME: Follow redirects for hyperlink auditing. See &lt;https://bugs.webkit.org/show_bug.cgi?id=162580&gt;.
-        completionHandler({ });
-        delete this;
</del><ins>+        completionHandler(m_shouldFollowRedirects ? request : WebCore::ResourceRequest());
</ins><span class="cx">     }
</span><span class="cx">     void didReceiveChallenge(const WebCore::AuthenticationChallenge&amp;, ChallengeCompletionHandler&amp;&amp; completionHandler) final
</span><span class="cx">     {
</span><span class="lines">@@ -84,6 +83,7 @@
</span><span class="cx">     
</span><span class="cx">     RefPtr&lt;NetworkDataTask&gt; m_task;
</span><span class="cx">     WebCore::Timer m_timeoutTimer;
</span><ins>+    bool m_shouldFollowRedirects;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>