Bug 1589407 - Part 1: Avoid calling nsPermissionManager::GetAllForPrincipal() if no permissions are available in the current process; r=baku

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Ehsan Akhgari 2019-10-28 10:57:51 +00:00
parent f8c0061b8f
commit 9a5d7b4dfa
2 changed files with 15 additions and 9 deletions

View File

@ -284,6 +284,15 @@ class nsPermissionManager final : public nsIPermissionManager,
// From ContentChild.
nsresult RemoveAllFromIPC();
/**
* Returns false if this permission manager wouldn't have the permission
* requested available.
*
* If aType is empty, checks that the permission manager would have all
* permissions available for the given principal.
*/
bool PermissionAvailable(nsIPrincipal* aPrincipal, const nsACString& aType);
private:
virtual ~nsPermissionManager();
@ -518,15 +527,6 @@ class nsPermissionManager final : public nsIPermissionManager,
template <class T>
nsresult RemovePermissionEntries(T aCondition);
/**
* Returns false if this permission manager wouldn't have the permission
* requested available.
*
* If aType is nullptr, checks that the permission manager would have all
* permissions available for the given principal.
*/
bool PermissionAvailable(nsIPrincipal* aPrincipal, const nsACString& aType);
nsRefPtrHashtable<nsCStringHashKey,
mozilla::GenericNonExclusivePromise::Private>
mPermissionKeyPromiseMap;

View File

@ -793,6 +793,12 @@ bool CheckAntiTrackingPermission(nsIPrincipal* aPrincipal,
"permission of type %s for %s",
aType.get(), _spec),
aPrincipalURI);
if (!permManager->PermissionAvailable(aPrincipal, aType)) {
LOG(
("Permission isn't available for this principal in the current "
"process"));
return false;
}
nsCOMPtr<nsISimpleEnumerator> se;
nsresult rv =
permManager->GetAllForPrincipal(aPrincipal, getter_AddRefs(se));