<!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>[245784] 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/245784">245784</a></dd>
<dt>Author</dt> <dd>wilander@apple.com</dd>
<dt>Date</dt> <dd>2019-05-26 15:39:09 -0700 (Sun, 26 May 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Resource Load Statistics: Downgrade document.referrer to the referrer's eTLD+1 if the page was navigated to with a prevalent resource referrer containing link decoration
https://bugs.webkit.org/show_bug.cgi?id=198227
<rdar://problem/51117258>

Reviewed by Alex Christensen.

Source/WebCore:

Test: http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html

* Headers.cmake:
* WebCore.xcodeproj/project.pbxproj:
* dom/Document.cpp:
(WebCore::Document::referrer const):
    Now checks if the referrer has been overridden.
(WebCore::Document::wasLoadedWithDataTransferFromPrevalentResource):
(WebCore::Document::downgradeReferrerToRegistrableDomain):
* dom/Document.h:
* page/CrossSiteNavigationDataTransfer.h: Added.
    New option set for the growing number of navigational data transfers we care about.
* platform/network/NetworkStorageSession.cpp:
(WebCore::NetworkStorageSession::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
(WebCore::NetworkStorageSession::committedCrossSiteLoadWithLinkDecoration): Deleted.
    New name since we no longer only look for link decoration but also other means of navigational data transfer.
* platform/network/NetworkStorageSession.h:

Source/WebKit:

This patch adds a call back to the UI process if the network process finds the navigational
data transfer was done by a prevalent resource and we need to adjust something for the page.
Currently, that adjustment is to downgrade document.referrer.

The patch also removes an unused completion handler.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::didCommitCrossSiteLoadWithDataTransfer):
(WebKit::NetworkProcess::committedCrossSiteLoadWithLinkDecoration): Deleted.
    New name since we no longer only look for link decoration but also other means of navigational data transfer.
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransfer):
(WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
(WebKit::NetworkProcessProxy::committedCrossSiteLoadWithLinkDecoration): Deleted.
    New name since we no longer only look for link decoration but also other means of navigational data transfer.
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.messages.in:
* UIProcess/WebPageProxy.cpp:
(WebKit::checkIfNavigationContainsDataTransfer):
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
(WebKit::isNonUniqueNavigationWithLinkDecoration): Deleted.
    New name since we no longer only look for link decoration but also other means of navigational data transfer.
* UIProcess/WebPageProxy.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer):
(WebKit::WebProcessPool::committedCrossSiteLoadWithLinkDecoration): Deleted.
    New name since we no longer only look for link decoration but also other means of navigational data transfer.
* UIProcess/WebProcessPool.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::wasLoadedWithDataTransferFromPrevalentResource):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

LayoutTests:

* http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-expected.txt: Added.
* http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreHeaderscmake">trunk/Source/WebCore/Headers.cmake</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumenth">trunk/Source/WebCore/dom/Document.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkNetworkStorageSessioncpp">trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkNetworkStorageSessionh">trunk/Source/WebCore/platform/network/NetworkStorageSession.h</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitNetworkProcessNetworkProcesscpp">trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp</a></li>
<li><a href="#trunkSourceWebKitNetworkProcessNetworkProcessh">trunk/Source/WebKit/NetworkProcess/NetworkProcess.h</a></li>
<li><a href="#trunkSourceWebKitNetworkProcessNetworkProcessmessagesin">trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in</a></li>
<li><a href="#trunkSourceWebKitUIProcessNetworkNetworkProcessProxycpp">trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp</a></li>
<li><a href="#trunkSourceWebKitUIProcessNetworkNetworkProcessProxyh">trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessNetworkNetworkProcessProxymessagesin">trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKitUIProcessWebPageProxycpp">trunk/Source/WebKit/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKitUIProcessWebPageProxyh">trunk/Source/WebKit/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessWebProcessPoolcpp">trunk/Source/WebKit/UIProcess/WebProcessPool.cpp</a></li>
<li><a href="#trunkSourceWebKitUIProcessWebProcessPoolh">trunk/Source/WebKit/UIProcess/WebProcessPool.h</a></li>
<li><a href="#trunkSourceWebKitWebProcessWebPageWebPagecpp">trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKitWebProcessWebPageWebPageh">trunk/Source/WebKit/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKitWebProcessWebPageWebPagemessagesin">trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsresourceLoadStatisticsdowngradedreferrerfornavigationwithlinkqueryfromprevalentresourceexpectedtxt">trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsresourceLoadStatisticsdowngradedreferrerfornavigationwithlinkqueryfromprevalentresourcehtml">trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html</a></li>
<li><a href="#trunkSourceWebCorepageCrossSiteNavigationDataTransferh">trunk/Source/WebCore/page/CrossSiteNavigationDataTransfer.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/LayoutTests/ChangeLog 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2019-05-26  John Wilander  <wilander@apple.com>
+
+        Resource Load Statistics: Downgrade document.referrer to the referrer's eTLD+1 if the page was navigated to with a prevalent resource referrer containing link decoration
+        https://bugs.webkit.org/show_bug.cgi?id=198227
+        <rdar://problem/51117258>
+
+        Reviewed by Alex Christensen.
+
+        * http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-expected.txt: Added.
+        * http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html: Added.
+
</ins><span class="cx"> 2019-05-25  Youenn Fablet  <youenn@apple.com>
</span><span class="cx"> 
</span><span class="cx">         media/video-remote-control-playpause.html is timing out after r245712
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsresourceLoadStatisticsdowngradedreferrerfornavigationwithlinkqueryfromprevalentresourceexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-expected.txt (0 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-expected.txt                              (rev 0)
+++ trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-expected.txt 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Check that document.referrer is downgraded to the eTLD+1 after a cross-site navigation with link query.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS The referrer is downgraded.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsresourceLoadStatisticsdowngradedreferrerfornavigationwithlinkqueryfromprevalentresourcehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html (0 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html                              (rev 0)
+++ trunk/LayoutTests/http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+    <script src="/js-test-resources/js-test.js"></script>
+    <script src="/cookies/resources/cookie-utilities.js"></script>
+    <script src="resources/util.js"></script>
+</head>
+<body onload="setTimeout('runTest()', 0)">
+<script>
+    description("Check that document.referrer is downgraded to the eTLD+1 after a cross-site navigation with link query.");
+    jsTestIsAsync = true;
+
+    let numberOfTries = 0;
+    function testReferrer() {
+        if (document.referrer === prevalentResourceOrigin + "/") {
+            testPassed("The referrer is downgraded.");
+            setEnableFeature(false, finishJSTest);
+        } else if (++numberOfTries <= 5)
+            setTimeout(testReferrer, 200);
+        else {
+            testFailed("The referrer is not downgraded: " + document.referrer);
+            setEnableFeature(false, finishJSTest);
+        }
+    }
+
+    function navigateSameOriginToAddQuery() {
+        document.location.href = prevalentResourceOrigin + "/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html?link=query";
+    }
+
+    function navigateCrossOrigin() {
+        document.location.href = destinationOrigin + "/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html";
+    }
+
+    const destinationOrigin = "http://localhost:8000";
+    const prevalentResourceOrigin = "http://127.0.0.1:8000";
+    function runTest() {
+        if (document.location.origin === prevalentResourceOrigin && document.location.search === "") {
+            navigateSameOriginToAddQuery();
+        } else if (document.location.origin === prevalentResourceOrigin) {
+            setEnableFeature(true, function () {
+                testRunner.setStatisticsPrevalentResource(prevalentResourceOrigin, true, function() {
+                    if (!testRunner.isStatisticsPrevalentResource(prevalentResourceOrigin))
+                        testFailed("Host did not get set as prevalent resource.");
+                    testRunner.statisticsUpdateCookieBlocking(navigateCrossOrigin);
+                });
+            });
+        } else {
+            testReferrer();
+        }
+    }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/ChangeLog      2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2019-05-26  John Wilander  <wilander@apple.com>
+
+        Resource Load Statistics: Downgrade document.referrer to the referrer's eTLD+1 if the page was navigated to with a prevalent resource referrer containing link decoration
+        https://bugs.webkit.org/show_bug.cgi?id=198227
+        <rdar://problem/51117258>
+
+        Reviewed by Alex Christensen.
+
+        Test: http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource.html
+
+        * Headers.cmake:
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/Document.cpp:
+        (WebCore::Document::referrer const):
+            Now checks if the referrer has been overridden.
+        (WebCore::Document::wasLoadedWithDataTransferFromPrevalentResource):
+        (WebCore::Document::downgradeReferrerToRegistrableDomain):
+        * dom/Document.h:
+        * page/CrossSiteNavigationDataTransfer.h: Added.
+            New option set for the growing number of navigational data transfers we care about.
+        * platform/network/NetworkStorageSession.cpp:
+        (WebCore::NetworkStorageSession::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
+        (WebCore::NetworkStorageSession::committedCrossSiteLoadWithLinkDecoration): Deleted.
+            New name since we no longer only look for link decoration but also other means of navigational data transfer.
+        * platform/network/NetworkStorageSession.h:
+
</ins><span class="cx"> 2019-05-26  Zalan Bujtas  <zalan@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [LFC][Verification] Add areEssentiallyEqual for LayoutRect
</span></span></pre></div>
<a id="trunkSourceWebCoreHeaderscmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Headers.cmake (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Headers.cmake       2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/Headers.cmake  2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -742,6 +742,7 @@
</span><span class="cx">     page/ContextMenuContext.h
</span><span class="cx">     page/ContextMenuController.h
</span><span class="cx">     page/ContextMenuProvider.h
</span><ins>+    page/CrossSiteNavigationDataTransfer.h
</ins><span class="cx">     page/DOMSelection.h
</span><span class="cx">     page/DOMTimer.h
</span><span class="cx">     page/DOMWindow.h
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj   2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj      2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1978,6 +1978,7 @@
</span><span class="cx">          6A22E8701F10418600F546C3 /* InspectorCanvas.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A22E86F1F10418600F546C3 /* InspectorCanvas.h */; };
</span><span class="cx">          6A72798B1F16C29C003F39B8 /* InspectorShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A7279881F16C29B003F39B8 /* InspectorShaderProgram.h */; };
</span><span class="cx">          6B0A07F221FA4B5C00D57391 /* AdClickAttribution.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0A07F021FA4B5C00D57391 /* AdClickAttribution.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+               6B1F48112298A37E00DE8B82 /* CrossSiteNavigationDataTransfer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B1F480F22989EC400DE8B82 /* CrossSiteNavigationDataTransfer.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">           6B3480940EEF50D400AC1B41 /* NativeImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B3480920EEF50D400AC1B41 /* NativeImage.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          6B4E8613221B713F0022F389 /* RegistrableDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B4E8612221B713F0022F389 /* RegistrableDomain.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          6B693A2E1C51A82E00B03BEF /* ResourceLoadObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B693A2D1C51A82E00B03BEF /* ResourceLoadObserver.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -9055,6 +9056,7 @@
</span><span class="cx">          6A7279891F16C29B003F39B8 /* InspectorShaderProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorShaderProgram.cpp; sourceTree = "<group>"; };
</span><span class="cx">          6B0A07F021FA4B5C00D57391 /* AdClickAttribution.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdClickAttribution.h; sourceTree = "<group>"; };
</span><span class="cx">          6B0A07F121FA4B5C00D57391 /* AdClickAttribution.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AdClickAttribution.cpp; sourceTree = "<group>"; };
</span><ins>+               6B1F480F22989EC400DE8B82 /* CrossSiteNavigationDataTransfer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CrossSiteNavigationDataTransfer.h; sourceTree = "<group>"; };
</ins><span class="cx">           6B3480920EEF50D400AC1B41 /* NativeImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NativeImage.h; sourceTree = "<group>"; };
</span><span class="cx">          6B4E8612221B713F0022F389 /* RegistrableDomain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RegistrableDomain.h; sourceTree = "<group>"; };
</span><span class="cx">          6B693A2D1C51A82E00B03BEF /* ResourceLoadObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLoadObserver.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -20095,6 +20097,7 @@
</span><span class="cx">                          065AD4F30B0C2EDA005A2B1D /* ContextMenuController.cpp */,
</span><span class="cx">                          065AD4F40B0C2EDA005A2B1D /* ContextMenuController.h */,
</span><span class="cx">                          7ADE722510CBBB9B006B3B3A /* ContextMenuProvider.h */,
</span><ins>+                               6B1F480F22989EC400DE8B82 /* CrossSiteNavigationDataTransfer.h */,
</ins><span class="cx">                           975CA287130365F800E99AD9 /* Crypto.cpp */,
</span><span class="cx">                          975CA288130365F800E99AD9 /* Crypto.h */,
</span><span class="cx">                          975CA289130365F800E99AD9 /* Crypto.idl */,
</span><span class="lines">@@ -28554,6 +28557,7 @@
</span><span class="cx">                          E1C416120F6562FD0092D2FB /* CrossOriginAccessControl.h in Headers */,
</span><span class="cx">                          41ABE67B1D0580DB006D862D /* CrossOriginPreflightChecker.h in Headers */,
</span><span class="cx">                          E1C415DA0F655D6F0092D2FB /* CrossOriginPreflightResultCache.h in Headers */,
</span><ins>+                               6B1F48112298A37E00DE8B82 /* CrossSiteNavigationDataTransfer.h in Headers */,
</ins><span class="cx">                           E169803D1133542D00894115 /* CRuntimeObject.h in Headers */,
</span><span class="cx">                          975CA28B130365F800E99AD9 /* Crypto.h in Headers */,
</span><span class="cx">                          7C9ACA981F3CCDAD00F3AA09 /* CryptoAesKeyAlgorithm.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/dom/Document.cpp       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -4863,6 +4863,10 @@
</span><span class="cx"> 
</span><span class="cx"> String Document::referrer() const
</span><span class="cx"> {
</span><ins>+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+    if (!m_referrerOverride.isEmpty())
+        return m_referrerOverride;
+#endif
</ins><span class="cx">     if (frame())
</span><span class="cx">         return frame()->loader().referrer();
</span><span class="cx">     return String();
</span><span class="lines">@@ -7847,6 +7851,37 @@
</span><span class="cx"> {
</span><span class="cx">     m_registrableDomainRequestedPageSpecificStorageAccessWithUserInteraction = domain;
</span><span class="cx"> }
</span><ins>+
+void Document::wasLoadedWithDataTransferFromPrevalentResource()
+{
+    downgradeReferrerToRegistrableDomain();
+}
+
+void Document::downgradeReferrerToRegistrableDomain()
+{
+    auto referrerStr = referrer();
+    if (referrerStr.isEmpty())
+        return;
+
+    URL referrerURL { URL(), referrerStr };
+    auto referrerPort = referrerURL.port();
+    RegistrableDomain referrerRegistrableDomain { referrerURL };
+    auto referrerRegistrableDomainStr = referrerRegistrableDomain.string();
+    if (referrerRegistrableDomainStr.isEmpty())
+        return;
+
+    StringBuilder builder;
+    builder.append(referrerURL.protocol());
+    builder.appendLiteral("://");
+    builder.append(referrerRegistrableDomainStr);
+    if (referrerPort) {
+        builder.append(':');
+        builder.appendNumber(*referrerPort);
+    }
+    builder.append('/');
+
+    m_referrerOverride = builder.toString();
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> void Document::setConsoleMessageListener(RefPtr<StringCallback>&& listener)
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.h      2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/dom/Document.h 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1496,6 +1496,8 @@
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><span class="cx">     bool hasRequestedPageSpecificStorageAccessWithUserInteraction(const RegistrableDomain&);
</span><span class="cx">     void setHasRequestedPageSpecificStorageAccessWithUserInteraction(const RegistrableDomain&);
</span><ins>+    WEBCORE_EXPORT void wasLoadedWithDataTransferFromPrevalentResource();
+    void downgradeReferrerToRegistrableDomain();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String& challengeString, const URL&);
</span><span class="lines">@@ -2043,6 +2045,7 @@
</span><span class="cx">     
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><span class="cx">     RegistrableDomain m_registrableDomainRequestedPageSpecificStorageAccessWithUserInteraction { };
</span><ins>+    String m_referrerOverride;
</ins><span class="cx"> #endif
</span><span class="cx">     
</span><span class="cx">     CSSRegisteredCustomPropertySet m_CSSRegisteredPropertySet;
</span></span></pre></div>
<a id="trunkSourceWebCorepageCrossSiteNavigationDataTransferh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/page/CrossSiteNavigationDataTransfer.h (0 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/CrossSiteNavigationDataTransfer.h                              (rev 0)
+++ trunk/Source/WebCore/page/CrossSiteNavigationDataTransfer.h 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+#include <wtf/OptionSet.h>
+
+namespace WebCore {
+
+struct CrossSiteNavigationDataTransfer {
+    enum class Flag : uint8_t {
+        DestinationLinkDecoration = 1 << 1,
+        ReferrerLinkDecoration = 1 << 2,
+    };
+};
+
+} // namespace WebCore
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkNetworkStorageSessioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp  2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp     2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -215,10 +215,9 @@
</span><span class="cx">     m_cacheMaxAgeCapForPrevalentResources = WTF::nullopt;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkStorageSession::committedCrossSiteLoadWithLinkDecoration(const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID)
</del><ins>+void NetworkStorageSession::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource(const RegistrableDomain& toDomain, uint64_t pageID)
</ins><span class="cx"> {
</span><del>-    if (shouldBlockThirdPartyCookies(fromDomain))
-        m_navigatedToWithLinkDecorationByPrevalentResource.add(pageID, toDomain);
</del><ins>+    m_navigatedToWithLinkDecorationByPrevalentResource.add(pageID, toDomain);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkStorageSession::resetCrossSiteLoadsWithLinkDecorationForTesting()
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkNetworkStorageSessionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/NetworkStorageSession.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/NetworkStorageSession.h    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebCore/platform/network/NetworkStorageSession.h       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -144,6 +144,7 @@
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><span class="cx">     WEBCORE_EXPORT bool shouldBlockCookies(const ResourceRequest&, Optional<uint64_t> frameID, Optional<uint64_t> pageID) const;
</span><span class="cx">     WEBCORE_EXPORT bool shouldBlockCookies(const URL& firstPartyForCookies, const URL& resource, Optional<uint64_t> frameID, Optional<uint64_t> pageID) const;
</span><ins>+    WEBCORE_EXPORT bool shouldBlockThirdPartyCookies(const RegistrableDomain&) const;
</ins><span class="cx">     WEBCORE_EXPORT void setPrevalentDomainsToBlockCookiesFor(const Vector<RegistrableDomain>&);
</span><span class="cx">     WEBCORE_EXPORT void setAgeCapForClientSideCookies(Optional<Seconds>);
</span><span class="cx">     WEBCORE_EXPORT void removePrevalentDomains(const Vector<RegistrableDomain>& domains);
</span><span class="lines">@@ -156,7 +157,7 @@
</span><span class="cx">     WEBCORE_EXPORT void setCacheMaxAgeCapForPrevalentResources(Seconds);
</span><span class="cx">     WEBCORE_EXPORT void resetCacheMaxAgeCapForPrevalentResources();
</span><span class="cx">     WEBCORE_EXPORT Optional<Seconds> maxAgeCacheCap(const ResourceRequest&);
</span><del>-    WEBCORE_EXPORT void committedCrossSiteLoadWithLinkDecoration(const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID);
</del><ins>+    WEBCORE_EXPORT void didCommitCrossSiteLoadWithDataTransferFromPrevalentResource(const RegistrableDomain& toDomain, uint64_t pageID);
</ins><span class="cx">     WEBCORE_EXPORT void resetCrossSiteLoadsWithLinkDecorationForTesting();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -181,7 +182,6 @@
</span><span class="cx">     CredentialStorage m_credentialStorage;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><del>-    bool shouldBlockThirdPartyCookies(const RegistrableDomain&) const;
</del><span class="cx">     Optional<Seconds> clientSideCookieCap(const RegistrableDomain& firstParty, Optional<uint64_t> pageID) const;
</span><span class="cx">     HashSet<RegistrableDomain> m_registrableDomainsToBlockCookieFor;
</span><span class="cx">     HashMap<uint64_t, HashMap<uint64_t, RegistrableDomain, DefaultHash<uint64_t>::Hash, WTF::UnsignedWithZeroKeyHashTraits<uint64_t>>, DefaultHash<uint64_t>::Hash, WTF::UnsignedWithZeroKeyHashTraits<uint64_t>> m_framesGrantedStorageAccess;
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/ChangeLog       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2019-05-26  John Wilander  <wilander@apple.com>
+
+        Resource Load Statistics: Downgrade document.referrer to the referrer's eTLD+1 if the page was navigated to with a prevalent resource referrer containing link decoration
+        https://bugs.webkit.org/show_bug.cgi?id=198227
+        <rdar://problem/51117258>
+
+        Reviewed by Alex Christensen.
+
+        This patch adds a call back to the UI process if the network process finds the navigational
+        data transfer was done by a prevalent resource and we need to adjust something for the page.
+        Currently, that adjustment is to downgrade document.referrer.
+
+        The patch also removes an unused completion handler.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::didCommitCrossSiteLoadWithDataTransfer):
+        (WebKit::NetworkProcess::committedCrossSiteLoadWithLinkDecoration): Deleted.
+            New name since we no longer only look for link decoration but also other means of navigational data transfer.
+        * NetworkProcess/NetworkProcess.h:
+        * NetworkProcess/NetworkProcess.messages.in:
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransfer):
+        (WebKit::NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
+        (WebKit::NetworkProcessProxy::committedCrossSiteLoadWithLinkDecoration): Deleted.
+            New name since we no longer only look for link decoration but also other means of navigational data transfer.
+        * UIProcess/Network/NetworkProcessProxy.h:
+        * UIProcess/Network/NetworkProcessProxy.messages.in:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::checkIfNavigationContainsDataTransfer):
+        (WebKit::WebPageProxy::didCommitLoadForFrame):
+        (WebKit::WebPageProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource):
+        (WebKit::isNonUniqueNavigationWithLinkDecoration): Deleted.
+            New name since we no longer only look for link decoration but also other means of navigational data transfer.
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::didCommitCrossSiteLoadWithDataTransfer):
+        (WebKit::WebProcessPool::committedCrossSiteLoadWithLinkDecoration): Deleted.
+            New name since we no longer only look for link decoration but also other means of navigational data transfer.
+        * UIProcess/WebProcessPool.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::wasLoadedWithDataTransferFromPrevalentResource):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
</ins><span class="cx"> 2019-05-26  Wenson Hsieh  <wenson_hsieh@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [iOS] Dropped text, attachments, and images should animate into place
</span></span></pre></div>
<a id="trunkSourceWebKitNetworkProcessNetworkProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1155,21 +1155,28 @@
</span><span class="cx">     completionHandler();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkProcess::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID, CompletionHandler<void()>&& completionHandler)
</del><ins>+void NetworkProcess::didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer, uint64_t pageID)
</ins><span class="cx"> {
</span><del>-    if (auto* networkStorageSession = storageSession(sessionID))
-        networkStorageSession->committedCrossSiteLoadWithLinkDecoration(fromDomain, toDomain, pageID);
-    else
</del><ins>+    ASSERT(!navigationDataTransfer.isEmpty());
+
+    if (auto* networkStorageSession = storageSession(sessionID)) {
+        if (!networkStorageSession->shouldBlockThirdPartyCookies(fromDomain))
+            return;
+
+        if (navigationDataTransfer.contains(CrossSiteNavigationDataTransfer::Flag::DestinationLinkDecoration))
+            networkStorageSession->didCommitCrossSiteLoadWithDataTransferFromPrevalentResource(toDomain, pageID);
+
+        if (navigationDataTransfer.contains(CrossSiteNavigationDataTransfer::Flag::ReferrerLinkDecoration))
+            parentProcessConnection()->send(Messages::NetworkProcessProxy::DidCommitCrossSiteLoadWithDataTransferFromPrevalentResource(pageID), 0);
+    } else
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><del>-    
-    if (auto* networkSession = this->networkSession(sessionID)) {
-        if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
-            resourceLoadStatistics->logCrossSiteLoadWithLinkDecoration(fromDomain, toDomain, WTFMove(completionHandler));
-        else
-            completionHandler();
-    } else {
-        ASSERT_NOT_REACHED();
-        completionHandler();
</del><ins>+
+    if (navigationDataTransfer.contains(CrossSiteNavigationDataTransfer::Flag::DestinationLinkDecoration)) {
+        if (auto* networkSession = this->networkSession(sessionID)) {
+            if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+                resourceLoadStatistics->logCrossSiteLoadWithLinkDecoration(fromDomain, toDomain, [] { });
+        } else
+            ASSERT_NOT_REACHED();
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitNetworkProcessNetworkProcessh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h      2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> #include "WebsiteData.h"
</span><span class="cx"> #include <WebCore/AdClickAttribution.h>
</span><span class="cx"> #include <WebCore/ClientOrigin.h>
</span><ins>+#include <WebCore/CrossSiteNavigationDataTransfer.h>
</ins><span class="cx"> #include <WebCore/DiagnosticLoggingClient.h>
</span><span class="cx"> #include <WebCore/FetchIdentifier.h>
</span><span class="cx"> #include <WebCore/IDBKeyData.h>
</span><span class="lines">@@ -258,7 +259,7 @@
</span><span class="cx">     void setTopFrameUniqueRedirectTo(PAL::SessionID, const TopFrameDomain&, const RedirectedToDomain&, CompletionHandler<void()>&&);
</span><span class="cx">     void setTopFrameUniqueRedirectFrom(PAL::SessionID, const TopFrameDomain&, const RedirectedFromDomain&, CompletionHandler<void()>&&);
</span><span class="cx">     void registrableDomainsWithWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, bool shouldNotifyPage, CompletionHandler<void(HashSet<RegistrableDomain>&&)>&&);
</span><del>-    void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID, CompletionHandler<void()>&&);
</del><ins>+    void didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag>, uint64_t pageID);
</ins><span class="cx">     void setCrossSiteLoadWithLinkDecorationForTesting(PAL::SessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, CompletionHandler<void()>&&);
</span><span class="cx">     void resetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID, CompletionHandler<void()>&&);
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKitNetworkProcessNetworkProcessmessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">     SetTopFrameUniqueRedirectTo(PAL::SessionID sessionID, WebCore::RegistrableDomain topFrameDomain, WebCore::RegistrableDomain redirectedToDomain) -> () Async
</span><span class="cx">     SetTopFrameUniqueRedirectFrom(PAL::SessionID sessionID, WebCore::RegistrableDomain topFrameDomain, WebCore::RegistrableDomain redirectedFromDomain) -> () Async
</span><span class="cx">     ResetCacheMaxAgeCapForPrevalentResources(PAL::SessionID sessionID) -> () Async
</span><del>-    CommittedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, WebCore::RegistrableDomain fromDomain, WebCore::RegistrableDomain toDomain, uint64_t pageID) -> () Async
</del><ins>+    DidCommitCrossSiteLoadWithDataTransfer(PAL::SessionID sessionID, WebCore::RegistrableDomain fromDomain, WebCore::RegistrableDomain toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer, uint64_t pageID)
</ins><span class="cx">     SetCrossSiteLoadWithLinkDecorationForTesting(PAL::SessionID sessionID, WebCore::RegistrableDomain fromDomain, WebCore::RegistrableDomain toDomain) -> () Async
</span><span class="cx">     ResetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID sessionID) -> () Async
</span><span class="cx">     DeleteCookiesForTesting(PAL::SessionID sessionID, WebCore::RegistrableDomain domain, bool includeHttpOnlyCookies) -> () Async
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessNetworkNetworkProcessProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -908,16 +908,26 @@
</span><span class="cx">     WebProcessProxy::notifyPageStatisticsTelemetryFinished(API::Dictionary::create(messageBody).ptr());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkProcessProxy::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID, CompletionHandler<void()>&& completionHandler)
</del><ins>+void NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer, uint64_t pageID)
</ins><span class="cx"> {
</span><del>-    if (!canSendMessage()) {
-        completionHandler();
</del><ins>+    if (!canSendMessage())
</ins><span class="cx">         return;
</span><del>-    }
-    
-    sendWithAsyncReply(Messages::NetworkProcess::CommittedCrossSiteLoadWithLinkDecoration(sessionID, fromDomain, toDomain, pageID), WTFMove(completionHandler));
</del><ins>+
+    send(Messages::NetworkProcess::DidCommitCrossSiteLoadWithDataTransfer(sessionID, fromDomain, toDomain, navigationDataTransfer, pageID), 0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void NetworkProcessProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource(uint64_t pageID)
+{
+    if (!canSendMessage())
+        return;
+
+    WebPageProxy* page = WebProcessProxy::webPage(pageID);
+    if (!page)
+        return;
+
+    page->didCommitCrossSiteLoadWithDataTransferFromPrevalentResource();
+}
+
</ins><span class="cx"> void NetworkProcessProxy::setCrossSiteLoadWithLinkDecorationForTesting(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, CompletionHandler<void()>&& completionHandler)
</span><span class="cx"> {
</span><span class="cx">     if (!canSendMessage()) {
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessNetworkNetworkProcessProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h      2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include "ProcessThrottlerClient.h"
</span><span class="cx"> #include "UserContentControllerIdentifier.h"
</span><span class="cx"> #include "WebProcessProxyMessages.h"
</span><ins>+#include <WebCore/CrossSiteNavigationDataTransfer.h>
</ins><span class="cx"> #include <WebCore/RegistrableDomain.h>
</span><span class="cx"> #include <memory>
</span><span class="cx"> #include <wtf/Deque.h>
</span><span class="lines">@@ -145,7 +146,8 @@
</span><span class="cx">     void setResourceLoadStatisticsDebugMode(PAL::SessionID, bool debugMode, CompletionHandler<void()>&&);
</span><span class="cx">     void setShouldClassifyResourcesBeforeDataRecordsRemoval(PAL::SessionID, bool, CompletionHandler<void()>&&);
</span><span class="cx">     void resetCacheMaxAgeCapForPrevalentResources(PAL::SessionID, CompletionHandler<void()>&&);
</span><del>-    void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const NavigatedFromDomain&, const NavigatedToDomain&, PageID, CompletionHandler<void()>&&);
</del><ins>+    void didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID, const NavigatedFromDomain&, const NavigatedToDomain&, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag>, PageID);
+    void didCommitCrossSiteLoadWithDataTransferFromPrevalentResource(PageID);
</ins><span class="cx">     void setCrossSiteLoadWithLinkDecorationForTesting(PAL::SessionID, const NavigatedFromDomain&, const NavigatedToDomain&, CompletionHandler<void()>&&);
</span><span class="cx">     void resetCrossSiteLoadsWithLinkDecorationForTesting(PAL::SessionID, CompletionHandler<void()>&&);
</span><span class="cx">     void deleteCookiesForTesting(PAL::SessionID, const RegistrableDomain&, bool includeHttpOnlyCookies, CompletionHandler<void()>&&);
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessNetworkNetworkProcessProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in    2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in       2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -48,6 +48,7 @@
</span><span class="cx">     NotifyResourceLoadStatisticsTelemetryFinished(unsigned totalPrevalentResources, unsigned totalPrevalentResourcesWithUserInteraction, unsigned top3SubframeUnderTopFrameOrigins)
</span><span class="cx">     RequestStorageAccessConfirm(uint64_t pageID, uint64_t frameID, WebCore::RegistrableDomain subFrameDomain, WebCore::RegistrableDomain topFrameDomain) -> (bool userDidGrantAccess) Async
</span><span class="cx">     DeleteWebsiteDataInUIProcessForRegistrableDomains(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> dataTypes, OptionSet<WebKit::WebsiteDataFetchOption> fetchOptions, Vector<WebCore::RegistrableDomain> domains) -> (HashSet<WebCore::RegistrableDomain> domainsWithMatchingDataRecords) Async
</span><ins>+    DidCommitCrossSiteLoadWithDataTransferFromPrevalentResource(uint64_t pageID)
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="cx">     ContentExtensionRules(WebKit::UserContentControllerIdentifier identifier)
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp   2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp      2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -134,6 +134,7 @@
</span><span class="cx"> #include "WebsiteDataStore.h"
</span><span class="cx"> #include <WebCore/AdClickAttribution.h>
</span><span class="cx"> #include <WebCore/BitmapImage.h>
</span><ins>+#include <WebCore/CrossSiteNavigationDataTransfer.h>
</ins><span class="cx"> #include <WebCore/DOMPasteAccess.h>
</span><span class="cx"> #include <WebCore/DeprecatedGlobalSettings.h>
</span><span class="cx"> #include <WebCore/DiagnosticLoggingClient.h>
</span><span class="lines">@@ -4133,9 +4134,21 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><del>-static bool isNonUniqueNavigationWithLinkDecoration(const SecurityOriginData requesterOrigin, const URL& currentURL)
</del><ins>+static OptionSet<CrossSiteNavigationDataTransfer::Flag> checkIfNavigationContainsDataTransfer(const SecurityOriginData requesterOrigin, const ResourceRequest& currentRequest)
</ins><span class="cx"> {
</span><del>-    return !requesterOrigin.securityOrigin()->isUnique() && (!currentURL.query().isEmpty() || !currentURL.fragmentIdentifier().isEmpty());
</del><ins>+    OptionSet<CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer;
+    if (requesterOrigin.securityOrigin()->isUnique())
+        return navigationDataTransfer;
+
+    auto currentURL = currentRequest.url();
+    if (!currentURL.query().isEmpty() || !currentURL.fragmentIdentifier().isEmpty())
+        navigationDataTransfer.add(CrossSiteNavigationDataTransfer::Flag::DestinationLinkDecoration);
+
+    URL referrerURL { URL(), currentRequest.httpReferrer() };
+    if (!referrerURL.query().isEmpty() || !referrerURL.fragmentIdentifier().isEmpty())
+        navigationDataTransfer.add(CrossSiteNavigationDataTransfer::Flag::ReferrerLinkDecoration);
+
+    return navigationDataTransfer;
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -4155,12 +4168,13 @@
</span><span class="cx">     if (frame->isMainFrame() && navigationID && (navigation = navigationState().navigation(navigationID))) {
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><span class="cx">         auto requesterOrigin = navigation->lastNavigationAction().requesterOrigin;
</span><del>-        auto currentURL = navigation->currentRequest().url();
-        if (isNonUniqueNavigationWithLinkDecoration(requesterOrigin, currentURL)) {
-            RegistrableDomain currentDomain { currentURL };
</del><ins>+        auto currentRequest = navigation->currentRequest();
+        auto navigationDataTransfer = checkIfNavigationContainsDataTransfer(requesterOrigin, currentRequest);
+        if (!navigationDataTransfer.isEmpty()) {
+            RegistrableDomain currentDomain { currentRequest.url() };
</ins><span class="cx">             URL requesterURL { URL(), requesterOrigin.toString() };
</span><span class="cx">             if (!currentDomain.matches(requesterURL))
</span><del>-                m_process->processPool().committedCrossSiteLoadWithLinkDecoration(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, m_pageID);
</del><ins>+                m_process->processPool().didCommitCrossSiteLoadWithDataTransfer(m_websiteDataStore->sessionID(), RegistrableDomain { requesterURL }, currentDomain, navigationDataTransfer, m_pageID);
</ins><span class="cx">         }
</span><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="lines">@@ -8634,6 +8648,14 @@
</span><span class="cx"> {
</span><span class="cx">     m_uiClient->requestStorageAccessConfirm(*this, m_process->webFrame(frameID), subFrameDomain, topFrameDomain, WTFMove(completionHandler));
</span><span class="cx"> }
</span><ins>+
+void WebPageProxy::didCommitCrossSiteLoadWithDataTransferFromPrevalentResource()
+{
+    if (!hasRunningProcess())
+        return;
+
+    m_process->send(Messages::WebPage::WasLoadedWithDataTransferFromPrevalentResource(), m_pageID);
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> bool WebPageProxy::useDarkAppearance() const
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/WebPageProxy.h     2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h        2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1449,6 +1449,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><span class="cx">     void requestStorageAccessConfirm(const WebCore::RegistrableDomain& subFrameDomain, const WebCore::RegistrableDomain& topFrameDomain, uint64_t frameID, CompletionHandler<void(bool)>&&);
</span><ins>+    void didCommitCrossSiteLoadWithDataTransferFromPrevalentResource();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(DEVICE_ORIENTATION)
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessWebProcessPoolcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp    2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -2519,20 +2519,15 @@
</span><span class="cx">     sendToAllProcesses(Messages::WebProcess::ClearCurrentModifierStateForTesting());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebProcessPool::committedCrossSiteLoadWithLinkDecoration(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, uint64_t pageID)
</del><ins>+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+void WebProcessPool::didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID sessionID, const RegistrableDomain& fromDomain, const RegistrableDomain& toDomain, OptionSet<CrossSiteNavigationDataTransfer::Flag> navigationDataTransfer, uint64_t pageID)
</ins><span class="cx"> {
</span><del>-#if ENABLE(RESOURCE_LOAD_STATISTICS)
</del><span class="cx">     if (!m_networkProcess)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_networkProcess->committedCrossSiteLoadWithLinkDecoration(sessionID, fromDomain, toDomain, pageID, [] { });
-#else
-    UNUSED_PARAM(sessionID);
-    UNUSED_PARAM(fromDomain);
-    UNUSED_PARAM(toDomain);
-    UNUSED_PARAM(pageID);
</del><ins>+    m_networkProcess->didCommitCrossSiteLoadWithDataTransfer(sessionID, fromDomain, toDomain, navigationDataTransfer, pageID);
+}
</ins><span class="cx"> #endif
</span><del>-}
</del><span class="cx"> 
</span><span class="cx"> void WebProcessPool::setWebProcessHasUploads(ProcessIdentifier processID)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessWebProcessPoolh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/WebProcessPool.h   2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h      2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -44,6 +44,7 @@
</span><span class="cx"> #include "WebContextClient.h"
</span><span class="cx"> #include "WebContextConnectionClient.h"
</span><span class="cx"> #include "WebProcessProxy.h"
</span><ins>+#include <WebCore/CrossSiteNavigationDataTransfer.h>
</ins><span class="cx"> #include <WebCore/ProcessIdentifier.h>
</span><span class="cx"> #include <WebCore/RegistrableDomain.h>
</span><span class="cx"> #include <WebCore/SecurityOriginHash.h>
</span><span class="lines">@@ -53,6 +54,7 @@
</span><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="cx"> #include <wtf/MemoryPressureHandler.h>
</span><ins>+#include <wtf/OptionSet.h>
</ins><span class="cx"> #include <wtf/RefCounter.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> #include <wtf/text/StringHash.h>
</span><span class="lines">@@ -493,7 +495,9 @@
</span><span class="cx">     void sendDisplayConfigurationChangedMessageForTesting();
</span><span class="cx">     void clearCurrentModifierStateForTesting();
</span><span class="cx"> 
</span><del>-    void committedCrossSiteLoadWithLinkDecoration(PAL::SessionID, const WebCore::RegistrableDomain& fromDomain, const WebCore::RegistrableDomain& toDomain, uint64_t pageID);
</del><ins>+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+    void didCommitCrossSiteLoadWithDataTransfer(PAL::SessionID, const WebCore::RegistrableDomain& fromDomain, const WebCore::RegistrableDomain& toDomain, OptionSet<WebCore::CrossSiteNavigationDataTransfer::Flag>, uint64_t pageID);
+#endif
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(GTK) || PLATFORM(WPE)
</span><span class="cx">     void setSandboxEnabled(bool enabled) { m_sandboxEnabled = enabled; };
</span></span></pre></div>
<a id="trunkSourceWebKitWebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp       2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp  2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -6492,6 +6492,15 @@
</span><span class="cx"> {
</span><span class="cx">     WebProcess::singleton().ensureNetworkProcessConnection().connection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::RequestStorageAccess(sessionID(), WTFMove(subFrameDomain), WTFMove(topFrameDomain), frameID, m_pageID), WTFMove(completionHandler));
</span><span class="cx"> }
</span><ins>+
+void WebPage::wasLoadedWithDataTransferFromPrevalentResource()
+{
+    auto* frame = mainFrame();
+    if (!frame || !frame->document())
+        return;
+
+    frame->document()->wasLoadedWithDataTransferFromPrevalentResource();
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(DEVICE_ORIENTATION)
</span></span></pre></div>
<a id="trunkSourceWebKitWebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h    2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -1133,6 +1133,7 @@
</span><span class="cx"> #if ENABLE(RESOURCE_LOAD_STATISTICS)
</span><span class="cx">     void hasStorageAccess(WebCore::RegistrableDomain&& subFrameDomain, WebCore::RegistrableDomain&& topFrameDomain, uint64_t frameID, CompletionHandler<void(bool)>&&);
</span><span class="cx">     void requestStorageAccess(WebCore::RegistrableDomain&& subFrameDomain, WebCore::RegistrableDomain&& topFrameDomain, uint64_t frameID, CompletionHandler<void(WebCore::StorageAccessWasGranted, WebCore::StorageAccessPromptWasShown)>&&);
</span><ins>+    void wasLoadedWithDataTransferFromPrevalentResource();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(DEVICE_ORIENTATION)
</span></span></pre></div>
<a id="trunkSourceWebKitWebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (245783 => 245784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in       2019-05-26 19:56:11 UTC (rev 245783)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in  2019-05-26 22:39:09 UTC (rev 245784)
</span><span class="lines">@@ -567,4 +567,8 @@
</span><span class="cx"> 
</span><span class="cx">     TextInputContextsInRect(WebCore::FloatRect rect) -> (Vector<struct WebKit::TextInputContext> contexts) Async
</span><span class="cx">     FocusTextInputContext(struct WebKit::TextInputContext context) -> (bool success) Async
</span><ins>+
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+    WasLoadedWithDataTransferFromPrevalentResource()
+#endif
</ins><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>