Bug 1704473 - Remove <head> requirement for <meta name=referrer>. r=ckerschb

Differential Revision: https://phabricator.services.mozilla.com/D116618
This commit is contained in:
Niklas Goegge 2021-06-09 09:21:53 +00:00
parent dd69afcc43
commit 75b4aba015
5 changed files with 89 additions and 9 deletions

View File

@ -41,13 +41,9 @@ void HTMLMetaElement::SetMetaReferrer(Document* aDocument) {
}
nsAutoString content;
GetContent(content);
Element* headElt = aDocument->GetHeadElement();
if (headElt && IsInclusiveDescendantOf(headElt)) {
content = nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(
content);
aDocument->UpdateReferrerInfoFromMeta(content, false);
}
content =
nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(content);
aDocument->UpdateReferrerInfoFromMeta(content, false);
}
nsresult HTMLMetaElement::AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName,
@ -135,8 +131,6 @@ nsresult HTMLMetaElement::BindToTree(BindContext& aContext, nsINode& aParent) {
}
}
// Referrer Policy spec requires a <meta name="referrer" tag to be in the
// <head> element.
SetMetaReferrer(&doc);
CreateAndDispatchEvent(&doc, u"DOMMetaAdded"_ns);
return rv;

View File

@ -0,0 +1,13 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="referrer" content="no-referrer" />
<title>Bug 1704473 - Remove head requirement for meta name=referrer</title>
<script type="application/javascript">
fetch("https://example.com");
</script>
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Bug 1704473 - Remove head requirement for meta name=referrer</title>
</head>
<body>
<meta name="referrer" content="no-referrer" />
<script type="application/javascript">
fetch("https://example.com");
</script>
</body>
</html>

View File

@ -60,3 +60,7 @@ support-files = closeWindow.sjs
[test_xfo_error_page.html]
support-files = file_xfo_error_page.sjs
[test_bug1450853.html]
[test_meta_referrer.html]
support-files =
file_meta_referrer_in_head.html
file_meta_referrer_notin_head.html

View File

@ -0,0 +1,55 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Bug 1704473 - Remove head requirement for meta name=referrer</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<iframe id="frame_meta_in_head"></iframe>
<iframe id="frame_meta_notin_head"></iframe>
<script type="application/javascript">
SimpleTest.waitForExplicitFinish();
let testCounter = 0;
function checkTestsDone() {
testCounter++;
if(testCounter == 2) {
SimpleTest.finish();
}
}
/* eslint-env mozilla/frame-script */
var script = SpecialPowers.loadChromeScript(() => {
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
Services.obs.addObserver(function onExamResp(subject, topic, data) {
let channel = subject.QueryInterface(Ci.nsIHttpChannel);
if (!channel.URI.spec.startsWith("https://example.com")) {
return;
}
let refererHeaderSet = false;
try {
channel.getRequestHeader("referer");
refererHeaderSet = true;
} catch (e) {
refererHeaderSet = false;
}
ok(!refererHeaderSet, "the referer header should not be set");
sendAsyncMessage("checked-referer-header");
}, "http-on-stop-request");
});
script.addMessageListener("checked-referer-header", checkTestsDone);
let frame1 = document.getElementById("frame_meta_in_head");
frame1.src = "/tests/dom/security/test/general/file_meta_referrer_in_head.html";
let frame2 = document.getElementById("frame_meta_notin_head");
frame2.src = "/tests/dom/security/test/general/file_meta_referrer_notin_head.html";
</script>
</body>
</html>