зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1776755 - Skip ordering ExpandedPrincipals to speed up creation; r=nika,necko-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D161450
This commit is contained in:
Родитель
950eb588f8
Коммит
05c279a3d2
|
@ -410,6 +410,16 @@ inline bool BasePrincipal::FastEqualsConsideringDomain(nsIPrincipal* aOther) {
|
||||||
return FastEquals(aOther);
|
return FastEquals(aOther);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Principals of different kinds can't be equal.
|
||||||
|
if (Kind() != other->Kind()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only ContentPrincipals should have mHasExplicitDomain set to true, so test
|
||||||
|
// that we haven't ended up here instead of FastEquals by mistake.
|
||||||
|
MOZ_ASSERT(IsContentPrincipal(),
|
||||||
|
"Only content principals can set mHasExplicitDomain");
|
||||||
|
|
||||||
return Subsumes(aOther, ConsiderDocumentDomain) &&
|
return Subsumes(aOther, ConsiderDocumentDomain) &&
|
||||||
other->Subsumes(this, ConsiderDocumentDomain);
|
other->Subsumes(this, ConsiderDocumentDomain);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,28 +20,6 @@ NS_IMPL_QUERY_INTERFACE_CI(ExpandedPrincipal, nsIPrincipal,
|
||||||
NS_IMPL_CI_INTERFACE_GETTER(ExpandedPrincipal, nsIPrincipal,
|
NS_IMPL_CI_INTERFACE_GETTER(ExpandedPrincipal, nsIPrincipal,
|
||||||
nsIExpandedPrincipal)
|
nsIExpandedPrincipal)
|
||||||
|
|
||||||
struct OriginComparator {
|
|
||||||
bool LessThan(nsIPrincipal* a, nsIPrincipal* b) const {
|
|
||||||
nsAutoCString originA;
|
|
||||||
DebugOnly<nsresult> rv = a->GetOrigin(originA);
|
|
||||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
|
||||||
nsAutoCString originB;
|
|
||||||
rv = b->GetOrigin(originB);
|
|
||||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
|
||||||
return originA < originB;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Equals(nsIPrincipal* a, nsIPrincipal* b) const {
|
|
||||||
nsAutoCString originA;
|
|
||||||
DebugOnly<nsresult> rv = a->GetOrigin(originA);
|
|
||||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
|
||||||
nsAutoCString originB;
|
|
||||||
rv = b->GetOrigin(originB);
|
|
||||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
|
||||||
return a == b;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ExpandedPrincipal::ExpandedPrincipal(
|
ExpandedPrincipal::ExpandedPrincipal(
|
||||||
nsTArray<nsCOMPtr<nsIPrincipal>>&& aPrincipals,
|
nsTArray<nsCOMPtr<nsIPrincipal>>&& aPrincipals,
|
||||||
const nsACString& aOriginNoSuffix, const OriginAttributes& aAttrs)
|
const nsACString& aOriginNoSuffix, const OriginAttributes& aAttrs)
|
||||||
|
@ -53,12 +31,9 @@ ExpandedPrincipal::~ExpandedPrincipal() = default;
|
||||||
already_AddRefed<ExpandedPrincipal> ExpandedPrincipal::Create(
|
already_AddRefed<ExpandedPrincipal> ExpandedPrincipal::Create(
|
||||||
const nsTArray<nsCOMPtr<nsIPrincipal>>& aAllowList,
|
const nsTArray<nsCOMPtr<nsIPrincipal>>& aAllowList,
|
||||||
const OriginAttributes& aAttrs) {
|
const OriginAttributes& aAttrs) {
|
||||||
// We force the principals to be sorted by origin so that ExpandedPrincipal
|
|
||||||
// origins can have a canonical form.
|
|
||||||
nsTArray<nsCOMPtr<nsIPrincipal>> principals;
|
nsTArray<nsCOMPtr<nsIPrincipal>> principals;
|
||||||
OriginComparator c;
|
|
||||||
for (size_t i = 0; i < aAllowList.Length(); ++i) {
|
for (size_t i = 0; i < aAllowList.Length(); ++i) {
|
||||||
principals.InsertElementSorted(aAllowList[i], c);
|
principals.AppendElement(aAllowList[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
nsAutoCString origin;
|
nsAutoCString origin;
|
||||||
|
@ -248,7 +223,6 @@ ExpandedPrincipal::Deserializer::Read(nsIObjectInputStream* aStream) {
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
OriginComparator c;
|
|
||||||
for (uint32_t i = 0; i < count; ++i) {
|
for (uint32_t i = 0; i < count; ++i) {
|
||||||
nsCOMPtr<nsISupports> read;
|
nsCOMPtr<nsISupports> read;
|
||||||
rv = aStream->ReadObject(true, getter_AddRefs(read));
|
rv = aStream->ReadObject(true, getter_AddRefs(read));
|
||||||
|
@ -261,9 +235,7 @@ ExpandedPrincipal::Deserializer::Read(nsIObjectInputStream* aStream) {
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Play it safe and InsertElementSorted, in case the sort order
|
principals.AppendElement(std::move(principal));
|
||||||
// changed for some bizarre reason.
|
|
||||||
principals.InsertElementSorted(std::move(principal), c);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mPrincipal = ExpandedPrincipal::Create(principals, OriginAttributes());
|
mPrincipal = ExpandedPrincipal::Create(principals, OriginAttributes());
|
||||||
|
|
|
@ -127,7 +127,7 @@ function run_test() {
|
||||||
// nsEP origins should be in lexical order.
|
// nsEP origins should be in lexical order.
|
||||||
Assert.equal(
|
Assert.equal(
|
||||||
ep.origin,
|
ep.origin,
|
||||||
`[Expanded Principal [${exampleOrg.origin}, ${exampleCom.origin}, ${nullPrin.origin}]]`
|
`[Expanded Principal [${exampleCom.origin}, ${nullPrin.origin}, ${exampleOrg.origin}]]`
|
||||||
);
|
);
|
||||||
|
|
||||||
// Make sure createContentPrincipal does what the rest of gecko does.
|
// Make sure createContentPrincipal does what the rest of gecko does.
|
||||||
|
|
|
@ -63,7 +63,7 @@ function run_test()
|
||||||
|
|
||||||
var principal = res.responseXML.nodePrincipal;
|
var principal = res.responseXML.nodePrincipal;
|
||||||
Assert.ok(principal.isContentPrincipal);
|
Assert.ok(principal.isContentPrincipal);
|
||||||
var requestURL = "http://localhost:4444/simple";
|
var requestURL = "http://localhost:4444/redirect";
|
||||||
Assert.equal(principal.spec, requestURL);
|
Assert.equal(principal.spec, requestURL);
|
||||||
|
|
||||||
// negative test sync XHR sending (to ensure that the xhr do not have chrome caps, see bug 779821)
|
// negative test sync XHR sending (to ensure that the xhr do not have chrome caps, see bug 779821)
|
||||||
|
@ -85,7 +85,7 @@ function run_test()
|
||||||
|
|
||||||
var principal = res.responseXML.nodePrincipal;
|
var principal = res.responseXML.nodePrincipal;
|
||||||
Assert.ok(principal.isContentPrincipal);
|
Assert.ok(principal.isContentPrincipal);
|
||||||
var requestURL = "http://localhost:4444/simple";
|
var requestURL = "http://localhost:4444/redirect";
|
||||||
Assert.equal(principal.spec, requestURL);
|
Assert.equal(principal.spec, requestURL);
|
||||||
|
|
||||||
httpserver2.stop(finishIfDone);
|
httpserver2.stop(finishIfDone);
|
||||||
|
|
|
@ -1258,7 +1258,7 @@ function getOrigins(extension) {
|
||||||
page: Services.scriptSecurityManager.createContentPrincipal(pageURI, {})
|
page: Services.scriptSecurityManager.createContentPrincipal(pageURI, {})
|
||||||
.origin,
|
.origin,
|
||||||
contentScript: Cu.getObjectPrincipal(
|
contentScript: Cu.getObjectPrincipal(
|
||||||
Cu.Sandbox([extension.principal, pageURL])
|
Cu.Sandbox([pageURL, extension.principal])
|
||||||
).origin,
|
).origin,
|
||||||
extension: extension.principal.origin,
|
extension: extension.principal.origin,
|
||||||
};
|
};
|
||||||
|
|
Загрузка…
Ссылка в новой задаче