Title: [249188] trunk
Revision
249188
Author
[email protected]
Date
2019-08-27 18:40:42 -0700 (Tue, 27 Aug 2019)

Log Message

Make FrameLoader::open() set outgoing referrer properly
https://bugs.webkit.org/show_bug.cgi?id=167050
Source/WebCore:

<rdar://problem/27972404>

Reviewed by Youenn Fablet.

In debug builds, an assertion failed in WebCore::SecurityPolicy::generateReferrerHeader:
ASSERTION FAILED: referrer == URL(URL(), referrer).strippedForUseAsReferrer()

In release builds, cached pages with a URL fragment sent its URL fragment in the referrer.

m_outgoingReferrer mistakenly had a URL fragment.

Test: http/tests/navigation/page-cache-fragment-referrer.html

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::open): Set m_outgoingReferrer by using
FrameLoader::setOutgoingReferrer to remove URL fragments.

LayoutTests:

Reviewed by Youenn Fablet.

* http/tests/navigation/page-cache-fragment-referrer-expected.html: Added.
* http/tests/navigation/page-cache-fragment-referrer.html: Added.
* http/tests/navigation/resources/referrer.php: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (249187 => 249188)


--- trunk/LayoutTests/ChangeLog	2019-08-28 01:22:37 UTC (rev 249187)
+++ trunk/LayoutTests/ChangeLog	2019-08-28 01:40:42 UTC (rev 249188)
@@ -1,3 +1,14 @@
+2019-08-27  Fujii Hironori  <[email protected]>
+
+        Make FrameLoader::open() set outgoing referrer properly
+        https://bugs.webkit.org/show_bug.cgi?id=167050
+
+        Reviewed by Youenn Fablet.
+
+        * http/tests/navigation/page-cache-fragment-referrer-expected.html: Added.
+        * http/tests/navigation/page-cache-fragment-referrer.html: Added.
+        * http/tests/navigation/resources/referrer.php: Added.
+
 2019-08-27  Devin Rousso  <[email protected]>
 
         Web Inspector: replace uses of added utility `Array.prototype.keySet` with an actual `Set`

Added: trunk/LayoutTests/http/tests/navigation/page-cache-fragment-referrer-expected.txt (0 => 249188)


--- trunk/LayoutTests/http/tests/navigation/page-cache-fragment-referrer-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/page-cache-fragment-referrer-expected.txt	2019-08-28 01:40:42 UTC (rev 249188)
@@ -0,0 +1,11 @@
+A cached page with a URL fragment shouldn't send the fragment in the referrer
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+PASS xhr.responseText is "http://127.0.0.1:8000/navigation/page-cache-fragment-referrer.html"
+PASS xhr.responseText is "http://127.0.0.1:8000/navigation/page-cache-fragment-referrer.html"
+

Added: trunk/LayoutTests/http/tests/navigation/page-cache-fragment-referrer.html (0 => 249188)


--- trunk/LayoutTests/http/tests/navigation/page-cache-fragment-referrer.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/page-cache-fragment-referrer.html	2019-08-28 01:40:42 UTC (rev 249188)
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+description("A cached page with a URL fragment shouldn't send the fragment in the referrer");
+
+if (window.testRunner) {
+    testRunner.clearBackForwardList();
+    testRunner.overridePreference('WebKitUsesPageCachePreferenceKey', 1);
+    testRunner.dumpAsText();
+
+    testRunner.queueLoad('resources/success.html');
+    testRunner.queueBackNavigation(1);
+}
+
+const locationWithoutHash = document.location.href;
+
+document.location = '#fragment';
+
+window.addEventListener('pageshow', () => {
+    xhr = new XMLHttpRequest();
+    xhr.open('GET', 'resources/referrer.php', false);
+    xhr.send(null);
+    shouldBeEqualToString('xhr.responseText', locationWithoutHash);
+});
+</script>
+</head>
+<body>
+</body>
+<script src=""
+</head>
+</html>

Added: trunk/LayoutTests/http/tests/navigation/resources/referrer.php (0 => 249188)


--- trunk/LayoutTests/http/tests/navigation/resources/referrer.php	                        (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/resources/referrer.php	2019-08-28 01:40:42 UTC (rev 249188)
@@ -0,0 +1,6 @@
+<?php
+    // Prevent from being cached.
+    header("Cache-Control: no-store, private, max-age=0");
+    header("Content-Type: text/plain");
+?>
+<?php echo $_SERVER['HTTP_REFERER']; ?>

Modified: trunk/Source/WebCore/ChangeLog (249187 => 249188)


--- trunk/Source/WebCore/ChangeLog	2019-08-28 01:22:37 UTC (rev 249187)
+++ trunk/Source/WebCore/ChangeLog	2019-08-28 01:40:42 UTC (rev 249188)
@@ -1,3 +1,24 @@
+2019-08-27  John Wilander  <[email protected]>  and  Fujii Hironori  <[email protected]>
+
+        Make FrameLoader::open() set outgoing referrer properly
+        https://bugs.webkit.org/show_bug.cgi?id=167050
+        <rdar://problem/27972404>
+
+        Reviewed by Youenn Fablet.
+
+        In debug builds, an assertion failed in WebCore::SecurityPolicy::generateReferrerHeader:
+        ASSERTION FAILED: referrer == URL(URL(), referrer).strippedForUseAsReferrer()
+
+        In release builds, cached pages with a URL fragment sent its URL fragment in the referrer.
+
+        m_outgoingReferrer mistakenly had a URL fragment.
+
+        Test: http/tests/navigation/page-cache-fragment-referrer.html
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::open): Set m_outgoingReferrer by using
+        FrameLoader::setOutgoingReferrer to remove URL fragments.
+
 2019-08-27  Said Abou-Hallawa  <[email protected]>
 
         Unreviewed. Build fix after r249175.

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (249187 => 249188)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2019-08-28 01:22:37 UTC (rev 249187)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2019-08-28 01:40:42 UTC (rev 249188)
@@ -2309,7 +2309,7 @@
     m_needsClear = true;
     m_isComplete = false;
     m_didCallImplicitClose = false;
-    m_outgoingReferrer = url.string();
+    setOutgoingReferrer(url);
 
     FrameView* view = cachedFrame.view();
     
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to