mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 07:45:30 +00:00
Bug 1527505 - Part 2: Inline the IsSystemPrincipal check; r=nika
Depends on D20229 Differential Revision: https://phabricator.services.mozilla.com/D20230 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
354461335a
commit
f017471b08
@ -9,7 +9,6 @@
|
||||
#include "mozilla/DebugOnly.h"
|
||||
|
||||
#include "mozilla/dom/ContentParent.h"
|
||||
#include "mozilla/BasePrincipal.h"
|
||||
#include "mozilla/ContentPrincipal.h"
|
||||
#include "mozilla/Pair.h"
|
||||
#include "mozilla/Services.h"
|
||||
@ -2280,6 +2279,13 @@ NS_IMETHODIMP
|
||||
nsPermissionManager::TestPermissionOriginNoSuffix(
|
||||
const nsACString& aOriginNoSuffix, const char* aType,
|
||||
uint32_t* aPermission) {
|
||||
auto preparationResult = CommonPrepareToTestPermission(nullptr, aPermission);
|
||||
if (preparationResult.mShouldContinue == eDone) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(!preparationResult.mPrincipal);
|
||||
|
||||
return CommonTestPermissionInternal(nullptr, nullptr, aOriginNoSuffix, aType,
|
||||
aPermission, false, true);
|
||||
}
|
||||
@ -2373,7 +2379,7 @@ nsPermissionManager::GetPermissionObject(nsIPrincipal* aPrincipal,
|
||||
}
|
||||
|
||||
nsresult nsPermissionManager::CommonTestPermissionInternal(
|
||||
nsIPrincipal* aPrincipal, nsIURI* aURI, const nsACString& aOriginNoSuffix,
|
||||
BasePrincipal* aPrincipal, nsIURI* aURI, const nsACString& aOriginNoSuffix,
|
||||
const char* aType, uint32_t* aPermission, bool aExactHostMatch,
|
||||
bool aIncludingSession) {
|
||||
MOZ_ASSERT(aPrincipal || aURI || !aOriginNoSuffix.IsEmpty());
|
||||
@ -2382,11 +2388,6 @@ nsresult nsPermissionManager::CommonTestPermissionInternal(
|
||||
NS_ENSURE_ARG_POINTER(aPrincipal || aURI || !aOriginNoSuffix.IsEmpty());
|
||||
NS_ENSURE_ARG_POINTER(aType);
|
||||
|
||||
if (aPrincipal && nsContentUtils::IsSystemPrincipal(aPrincipal)) {
|
||||
*aPermission = nsIPermissionManager::ALLOW_ACTION;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Set the default.
|
||||
*aPermission = nsIPermissionManager::UNKNOWN_ACTION;
|
||||
|
||||
@ -2403,9 +2404,8 @@ nsresult nsPermissionManager::CommonTestPermissionInternal(
|
||||
|
||||
// For expanded principals, we want to iterate over the allowlist and see
|
||||
// if the permission is granted for any of them.
|
||||
auto* basePrin = BasePrincipal::Cast(aPrincipal);
|
||||
if (basePrin && basePrin->Is<ExpandedPrincipal>()) {
|
||||
auto ep = basePrin->As<ExpandedPrincipal>();
|
||||
if (aPrincipal && aPrincipal->Is<ExpandedPrincipal>()) {
|
||||
auto ep = aPrincipal->As<ExpandedPrincipal>();
|
||||
for (auto& prin : ep->AllowList()) {
|
||||
uint32_t perm;
|
||||
nsresult rv = CommonTestPermission(prin, aType, &perm, aExactHostMatch,
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "nsDataHashtable.h"
|
||||
#include "nsIRunnable.h"
|
||||
#include "nsRefPtrHashtable.h"
|
||||
#include "mozilla/BasePrincipal.h"
|
||||
#include "mozilla/MozPromise.h"
|
||||
|
||||
namespace mozilla {
|
||||
@ -273,27 +274,55 @@ class nsPermissionManager final : public nsIPermissionManager,
|
||||
const nsACString& aOriginNoSuffix,
|
||||
uint32_t aType, bool aExactHostMatch);
|
||||
|
||||
enum TestPreparationEnum { eContinue, eDone };
|
||||
struct TestPreparationResult {
|
||||
mozilla::BasePrincipal* mPrincipal;
|
||||
TestPreparationEnum mShouldContinue;
|
||||
};
|
||||
TestPreparationResult CommonPrepareToTestPermission(nsIPrincipal* aPrincipal,
|
||||
uint32_t* aPermission) {
|
||||
auto* basePrin = mozilla::BasePrincipal::Cast(aPrincipal);
|
||||
if (basePrin && basePrin->IsSystemPrincipal()) {
|
||||
*aPermission = nsIPermissionManager::ALLOW_ACTION;
|
||||
return {basePrin, eDone};
|
||||
}
|
||||
|
||||
return {basePrin, eContinue};
|
||||
}
|
||||
|
||||
nsresult CommonTestPermission(nsIPrincipal* aPrincipal, const char* aType,
|
||||
uint32_t* aPermission, bool aExactHostMatch,
|
||||
bool aIncludingSession) {
|
||||
return CommonTestPermissionInternal(aPrincipal, nullptr, EmptyCString(),
|
||||
aType, aPermission, aExactHostMatch,
|
||||
aIncludingSession);
|
||||
auto preparationResult =
|
||||
CommonPrepareToTestPermission(aPrincipal, aPermission);
|
||||
if (preparationResult.mShouldContinue == eDone) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return CommonTestPermissionInternal(preparationResult.mPrincipal, nullptr,
|
||||
EmptyCString(), aType, aPermission,
|
||||
aExactHostMatch, aIncludingSession);
|
||||
}
|
||||
nsresult CommonTestPermission(nsIURI* aURI, const char* aType,
|
||||
uint32_t* aPermission, bool aExactHostMatch,
|
||||
bool aIncludingSession) {
|
||||
auto preparationResult =
|
||||
CommonPrepareToTestPermission(nullptr, aPermission);
|
||||
if (preparationResult.mShouldContinue == eDone) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(!preparationResult.mPrincipal);
|
||||
|
||||
return CommonTestPermissionInternal(nullptr, aURI, EmptyCString(), aType,
|
||||
aPermission, aExactHostMatch,
|
||||
aIncludingSession);
|
||||
}
|
||||
// Only one of aPrincipal or aURI is allowed to be passed in.
|
||||
nsresult CommonTestPermissionInternal(nsIPrincipal* aPrincipal, nsIURI* aURI,
|
||||
const nsACString& aOriginNoSuffix,
|
||||
const char* aType,
|
||||
uint32_t* aPermission,
|
||||
bool aExactHostMatch,
|
||||
bool aIncludingSession);
|
||||
nsresult CommonTestPermissionInternal(
|
||||
mozilla::BasePrincipal* aPrincipal, nsIURI* aURI,
|
||||
const nsACString& aOriginNoSuffix, const char* aType,
|
||||
uint32_t* aPermission, bool aExactHostMatch, bool aIncludingSession);
|
||||
|
||||
nsresult OpenDatabase(nsIFile* permissionsFile);
|
||||
nsresult InitDB(bool aRemoveFile);
|
||||
|
Loading…
Reference in New Issue
Block a user