Bug 1534681 Use ReferrerInfo class in document r=ckerschb,baku,Gijs

Also, in many place, we use document uri as referrer. It is not right
for the case srdoc iframe. We should use the last non-srdoc parent
document's uri

Differential Revision: https://phabricator.services.mozilla.com/D30191
This commit is contained in:
Thomas Nguyen
2019-06-06 07:23:37 +00:00
parent 1b5939ce7f
commit 5a46d126ce
38 changed files with 575 additions and 318 deletions

View File

@@ -12679,7 +12679,8 @@ nsDocShell::OnLinkClickSync(
}
uint32_t flags = INTERNAL_LOAD_FLAGS_NONE;
if (IsElementAnchorOrArea(aContent)) {
bool isElementAnchorOrArea = IsElementAnchorOrArea(aContent);
if (isElementAnchorOrArea) {
MOZ_ASSERT(aContent->IsHTMLElement());
nsAutoString relString;
aContent->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::rel,
@@ -12745,20 +12746,6 @@ nsDocShell::OnLinkClickSync(
return NS_OK;
}
nsCOMPtr<nsIURI> referrer = referrerDoc->GetDocumentURI();
uint32_t referrerPolicy = referrerDoc->GetReferrerPolicy();
// get referrer attribute from clicked link and parse it
// if per element referrer is enabled, the element referrer overrules
// the document wide referrer
if (IsElementAnchorOrArea(aContent)) {
net::ReferrerPolicy refPolEnum =
aContent->AsElement()->GetReferrerPolicyAsEnum();
if (refPolEnum != RP_Unset) {
referrerPolicy = refPolEnum;
}
}
// referrer could be null here in some odd cases, but that's ok,
// we'll just load the link w/o sending a referrer in those cases.
@@ -12783,9 +12770,13 @@ nsDocShell::OnLinkClickSync(
flags |= INTERNAL_LOAD_FLAGS_IS_USER_TRIGGERED;
}
bool sendReferrer = !(flags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(referrer, referrerPolicy, sendReferrer);
nsCOMPtr<nsIReferrerInfo> referrerInfo = new ReferrerInfo();
if (isElementAnchorOrArea) {
referrerInfo->InitWithNode(aContent);
} else {
referrerInfo->InitWithDocument(referrerDoc);
}
RefPtr<nsDocShellLoadState> loadState = new nsDocShellLoadState(aURI);
loadState->SetReferrerInfo(referrerInfo);
loadState->SetTriggeringPrincipal(triggeringPrincipal);