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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user