Skip to content
Snippets Groups Projects
Commit 0a9fe4ff authored by Andrea Marchesini's avatar Andrea Marchesini
Browse files

Bug 1553867 - Reduce the number of ClonePrincipalForPermission() call in CookieSettings, r=Ehsan

Differential Revision: https://phabricator.services.mozilla.com/D32364

--HG--
extra : moz-landing-system : lando
parent 3b9d4bdf
No related branches found
No related tags found
No related merge requests found
......@@ -111,8 +111,19 @@ nsPermission::Matches(nsIPrincipal* aPrincipal, bool aExactHost,
return NS_OK;
}
return MatchesPrincipalForPermission(principal, aExactHost, aMatches);
}
NS_IMETHODIMP
nsPermission::MatchesPrincipalForPermission(nsIPrincipal* aPrincipal,
bool aExactHost, bool* aMatches) {
NS_ENSURE_ARG_POINTER(aPrincipal);
NS_ENSURE_ARG_POINTER(aMatches);
*aMatches = false;
// If the principals are equal, then they match.
if (mPrincipal->Equals(principal)) {
if (mPrincipal->Equals(aPrincipal)) {
*aMatches = true;
return NS_OK;
}
......@@ -125,7 +136,7 @@ nsPermission::Matches(nsIPrincipal* aPrincipal, bool aExactHost,
// Compare their OriginAttributes
const mozilla::OriginAttributes& theirAttrs =
principal->OriginAttributesRef();
aPrincipal->OriginAttributesRef();
const mozilla::OriginAttributes& ourAttrs = mPrincipal->OriginAttributesRef();
if (theirAttrs != ourAttrs) {
......@@ -133,7 +144,7 @@ nsPermission::Matches(nsIPrincipal* aPrincipal, bool aExactHost,
}
nsCOMPtr<nsIURI> theirURI;
nsresult rv = principal->GetURI(getter_AddRefs(theirURI));
nsresult rv = aPrincipal->GetURI(getter_AddRefs(theirURI));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIURI> ourURI;
......
......@@ -67,6 +67,13 @@ interface nsIPermission : nsISupports
boolean matches(in nsIPrincipal principal,
in boolean exactHost);
/**
* Similar to matches() but the principal's URI should be just an origin
* (no path, no queryString, etc).
*/
[noscript] boolean matchesPrincipalForPermission(in nsIPrincipal principal,
in boolean exactHost);
/**
* Test whether a URI would be affected by this permission.
* NOTE: This performs matches with default origin attribute values.
......
......@@ -125,19 +125,27 @@ CookieSettings::CookiePermission(nsIPrincipal* aPrincipal,
nsresult rv;
// Let's see if we know this permission.
for (const RefPtr<nsIPermission>& permission : mCookiePermissions) {
bool match = false;
rv = permission->Matches(aPrincipal, false, &match);
if (NS_WARN_IF(NS_FAILED(rv)) || !match) {
continue;
if (!mCookiePermissions.IsEmpty()) {
nsCOMPtr<nsIPrincipal> principal =
nsPermission::ClonePrincipalForPermission(aPrincipal);
if (NS_WARN_IF(!principal)) {
return NS_ERROR_FAILURE;
}
rv = permission->GetCapability(aCookiePermission);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
for (const RefPtr<nsIPermission>& permission : mCookiePermissions) {
bool match = false;
rv = permission->MatchesPrincipalForPermission(principal, false, &match);
if (NS_WARN_IF(NS_FAILED(rv)) || !match) {
continue;
}
return NS_OK;
rv = permission->GetCapability(aCookiePermission);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return NS_OK;
}
}
// Let's ask the permission manager.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment