зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1619762 - Remove Geturi calls in LocationBase.cpp r=ckerschb
Differential Revision: https://phabricator.services.mozilla.com/D65207 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
b9a43d893b
Коммит
c05fb6d867
|
@ -31,6 +31,7 @@ already_AddRefed<nsDocShellLoadState> LocationBase::CheckURL(
|
||||||
nsCOMPtr<nsIPrincipal> triggeringPrincipal;
|
nsCOMPtr<nsIPrincipal> triggeringPrincipal;
|
||||||
nsCOMPtr<nsIURI> sourceURI;
|
nsCOMPtr<nsIURI> sourceURI;
|
||||||
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
|
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
|
||||||
|
nsCOMPtr<nsIReferrerInfo> referrerInfo;
|
||||||
|
|
||||||
// Get security manager.
|
// Get security manager.
|
||||||
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();
|
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();
|
||||||
|
@ -71,51 +72,35 @@ already_AddRefed<nsDocShellLoadState> LocationBase::CheckURL(
|
||||||
do_QueryInterface(mozilla::dom::GetIncumbentGlobal());
|
do_QueryInterface(mozilla::dom::GetIncumbentGlobal());
|
||||||
nsCOMPtr<Document> doc = incumbent ? incumbent->GetDoc() : nullptr;
|
nsCOMPtr<Document> doc = incumbent ? incumbent->GetDoc() : nullptr;
|
||||||
|
|
||||||
if (doc) {
|
|
||||||
nsCOMPtr<nsIURI> docOriginalURI, docCurrentURI, principalURI;
|
|
||||||
docOriginalURI = doc->GetOriginalURI();
|
|
||||||
docCurrentURI = doc->GetDocumentURI();
|
|
||||||
rv = doc->NodePrincipal()->GetURI(getter_AddRefs(principalURI));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
aRv.Throw(rv);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
triggeringPrincipal = doc->NodePrincipal();
|
|
||||||
referrerPolicy = doc->GetReferrerPolicy();
|
|
||||||
|
|
||||||
bool urisEqual = false;
|
|
||||||
if (docOriginalURI && docCurrentURI && principalURI) {
|
|
||||||
principalURI->Equals(docOriginalURI, &urisEqual);
|
|
||||||
}
|
|
||||||
if (urisEqual) {
|
|
||||||
sourceURI = docCurrentURI;
|
|
||||||
} else {
|
|
||||||
// Use principalURI as long as it is not an NullPrincipalURI. We
|
|
||||||
// could add a method such as GetReferrerURI to principals to make this
|
|
||||||
// cleaner, but given that we need to start using Source Browsing
|
|
||||||
// Context for referrer (see Bug 960639) this may be wasted effort at
|
|
||||||
// this stage.
|
|
||||||
if (principalURI && !principalURI->SchemeIs(NS_NULLPRINCIPAL_SCHEME)) {
|
|
||||||
sourceURI = principalURI;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// No document; just use our subject principal as the triggering principal.
|
|
||||||
triggeringPrincipal = &aSubjectPrincipal;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create load info
|
// Create load info
|
||||||
RefPtr<nsDocShellLoadState> loadState = new nsDocShellLoadState(aURI);
|
RefPtr<nsDocShellLoadState> loadState = new nsDocShellLoadState(aURI);
|
||||||
|
|
||||||
loadState->SetTriggeringPrincipal(triggeringPrincipal);
|
if (!doc) {
|
||||||
if (doc) {
|
// No document; just use our subject principal as the triggering principal.
|
||||||
loadState->SetCsp(doc->GetCsp());
|
loadState->SetTriggeringPrincipal(&aSubjectPrincipal);
|
||||||
|
return loadState.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sourceURI) {
|
nsCOMPtr<nsIURI> docOriginalURI, docCurrentURI, principalURI;
|
||||||
nsCOMPtr<nsIReferrerInfo> referrerInfo =
|
docOriginalURI = doc->GetOriginalURI();
|
||||||
new ReferrerInfo(sourceURI, referrerPolicy);
|
docCurrentURI = doc->GetDocumentURI();
|
||||||
|
nsCOMPtr<nsIPrincipal> principal = doc->NodePrincipal();
|
||||||
|
|
||||||
|
triggeringPrincipal = doc->NodePrincipal();
|
||||||
|
referrerPolicy = doc->GetReferrerPolicy();
|
||||||
|
|
||||||
|
bool urisEqual = false;
|
||||||
|
if (docOriginalURI && docCurrentURI && principal) {
|
||||||
|
principal->EqualsURI(docOriginalURI, &urisEqual);
|
||||||
|
}
|
||||||
|
if (urisEqual) {
|
||||||
|
referrerInfo = new ReferrerInfo(docCurrentURI, referrerPolicy);
|
||||||
|
} else {
|
||||||
|
principal->CreateReferrerInfo(referrerPolicy, getter_AddRefs(referrerInfo));
|
||||||
|
}
|
||||||
|
loadState->SetTriggeringPrincipal(triggeringPrincipal);
|
||||||
|
loadState->SetCsp(doc->GetCsp());
|
||||||
|
if (referrerInfo) {
|
||||||
loadState->SetReferrerInfo(referrerInfo);
|
loadState->SetReferrerInfo(referrerInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче