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.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@249188
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2019-08-27 Fujii Hironori <Hironori.Fujii@sony.com>
+
+ 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 <drousso@apple.com>
Web Inspector: replace uses of added utility `Array.prototype.keySet` with an actual `Set`
--- /dev/null
+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"
+
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+<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="../resources/js-test-post.js"></script>
+</head>
+</html>
--- /dev/null
+<?php
+ // Prevent from being cached.
+ header("Cache-Control: no-store, private, max-age=0");
+ header("Content-Type: text/plain");
+?>
+<?php echo $_SERVER['HTTP_REFERER']; ?>
+2019-08-27 John Wilander <wilander@apple.com> and Fujii Hironori <Hironori.Fujii@sony.com>
+
+ 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 <sabouhallawa@apple.com>
Unreviewed. Build fix after r249175.
m_needsClear = true;
m_isComplete = false;
m_didCallImplicitClose = false;
- m_outgoingReferrer = url.string();
+ setOutgoingReferrer(url);
FrameView* view = cachedFrame.view();