diff --git a/extensions/cookie/nsPermissionManager.cpp b/extensions/cookie/nsPermissionManager.cpp index 1979fe696afe..6cd0ab079803 100644 --- a/extensions/cookie/nsPermissionManager.cpp +++ b/extensions/cookie/nsPermissionManager.cpp @@ -2245,6 +2245,36 @@ NS_IMETHODIMP nsPermissionManager::GetEnumerator(nsISimpleEnumerator **aEnum) return NS_NewArrayEnumerator(aEnum, array); } +NS_IMETHODIMP nsPermissionManager::GetAllForURI(nsIURI* aURI, nsISimpleEnumerator **aEnum) +{ + nsCOMArray array; + + nsCOMPtr principal; + nsresult rv = GetPrincipal(aURI, getter_AddRefs(principal)); + NS_ENSURE_SUCCESS(rv, rv); + + RefPtr key = new PermissionKey(principal); + PermissionHashKey* entry = mPermissionTable.GetEntry(key); + + if (entry) { + for (const auto& permEntry : entry->GetPermissions()) { + // Only return custom permissions + if (permEntry.mPermission == nsIPermissionManager::UNKNOWN_ACTION) { + continue; + } + + array.AppendObject( + new nsPermission(principal, + mTypeArray.ElementAt(permEntry.mType), + permEntry.mPermission, + permEntry.mExpireType, + permEntry.mExpireTime)); + } + } + + return NS_NewArrayEnumerator(aEnum, array); +} + NS_IMETHODIMP nsPermissionManager::Observe(nsISupports *aSubject, const char *aTopic, const char16_t *someData) { ENSURE_NOT_CHILD_PROCESS; diff --git a/netwerk/base/nsIPermissionManager.idl b/netwerk/base/nsIPermissionManager.idl index 5e4c630bbd79..58a4810b7f11 100644 --- a/netwerk/base/nsIPermissionManager.idl +++ b/netwerk/base/nsIPermissionManager.idl @@ -93,6 +93,15 @@ interface nsIPermissionManager : nsISupports [optional] in uint32_t expireType, [optional] in int64_t expireTime); + /** + * Get all custom permissions for a given URI. This will return + * an enumerator of all permissions which are not set to default + * and which belong to the matching prinicpal of the given URI. + * + * @param uri the URI to get all permissions for + */ + nsISimpleEnumerator getAllForURI(in nsIURI uri); + /** * Add permission information for a given principal. * It is internally calling the other add() method using the nsIURI from the