Bug 1663924 - Change GetCurrentPermission to return a Result rather than use an output parameter. r=dom-workers-and-storage-reviewers,ttung

Differential Revision: https://phabricator.services.mozilla.com/D89894
This commit is contained in:
Simon Giesecke 2020-09-14 12:15:55 +00:00
Родитель 3b8bc2cbac
Коммит 8708305c70
3 изменённых файлов: 30 добавлений и 43 удалений

Просмотреть файл

@ -16673,7 +16673,7 @@ nsresult FactoryOp::CheckPermission(
MOZ_ASSERT(principalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
IDB_TRY_VAR(auto principal, PrincipalInfoToPrincipal(principalInfo));
IDB_TRY_VAR(const auto principal, PrincipalInfoToPrincipal(principalInfo));
nsCString suffix;
nsCString group;
@ -16684,24 +16684,22 @@ nsresult FactoryOp::CheckPermission(
return rv;
}
PermissionRequestBase::PermissionValue permission;
if (persistenceType == PERSISTENCE_TYPE_PERSISTENT) {
if (QuotaManager::IsOriginInternal(origin)) {
permission = PermissionRequestBase::kPermissionAllowed;
} else {
IDB_TRY_VAR(const auto permission,
([persistenceType, &origin, &principal = *principal]()
-> mozilla::Result<PermissionRequestBase::PermissionValue,
nsresult> {
if (persistenceType == PERSISTENCE_TYPE_PERSISTENT) {
if (QuotaManager::IsOriginInternal(origin)) {
return PermissionRequestBase::kPermissionAllowed;
}
#ifdef IDB_MOBILE
return NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR;
return Err(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR);
#else
rv = PermissionRequestBase::GetCurrentPermission(principal, &permission);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return PermissionRequestBase::GetCurrentPermission(principal);
#endif
}
} else {
permission = PermissionRequestBase::kPermissionAllowed;
}
}
return PermissionRequestBase::kPermissionAllowed;
})());
if (permission != PermissionRequestBase::kPermissionDenied &&
State::Initial == mState) {

Просмотреть файл

@ -56,32 +56,25 @@ PermissionRequestBase::PermissionRequestBase(Element* aOwnerElement,
PermissionRequestBase::~PermissionRequestBase() { AssertSanity(); }
// static
nsresult PermissionRequestBase::GetCurrentPermission(
nsIPrincipal* aPrincipal, PermissionValue* aCurrentValue) {
Result<PermissionRequestBase::PermissionValue, nsresult>
PermissionRequestBase::GetCurrentPermission(nsIPrincipal& aPrincipal) {
AssertSanity();
MOZ_ASSERT(aPrincipal);
MOZ_ASSERT(aCurrentValue);
nsCOMPtr<nsIPermissionManager> permMan = GetPermissionManager();
if (NS_WARN_IF(!permMan)) {
return NS_ERROR_FAILURE;
}
const nsCOMPtr<nsIPermissionManager> permMan = GetPermissionManager();
IDB_TRY(OkIf(permMan), Err(NS_ERROR_FAILURE));
uint32_t intPermission;
nsresult rv = permMan->TestExactPermissionFromPrincipal(
aPrincipal, kPermissionString, &intPermission);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
IDB_TRY_VAR(const uint32_t intPermission,
MOZ_TO_RESULT_INVOKE(permMan, TestExactPermissionFromPrincipal,
&aPrincipal, kPermissionString));
PermissionValue permission = PermissionValueForIntPermission(intPermission);
const PermissionValue permission =
PermissionValueForIntPermission(intPermission);
MOZ_ASSERT(permission == kPermissionAllowed ||
permission == kPermissionDenied ||
permission == kPermissionPrompt);
*aCurrentValue = permission;
return NS_OK;
return permission;
}
// static
@ -113,12 +106,8 @@ nsresult PermissionRequestBase::PromptIfNeeded(PermissionValue* aCurrentValue) {
nsCOMPtr<Element> element = std::move(mOwnerElement);
nsCOMPtr<nsIPrincipal> principal = std::move(mPrincipal);
PermissionValue currentValue;
nsresult rv = GetCurrentPermission(principal, &currentValue);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
IDB_TRY_VAR(const PermissionValue currentValue,
GetCurrentPermission(*principal));
MOZ_ASSERT(currentValue != kPermissionDefault);
if (currentValue == kPermissionPrompt) {
@ -131,8 +120,8 @@ nsresult PermissionRequestBase::PromptIfNeeded(PermissionValue* aCurrentValue) {
mOwnerElement = std::move(element);
mPrincipal = std::move(principal);
rv = obsSvc->NotifyObservers(static_cast<nsIObserver*>(this),
kPermissionPromptTopic, nullptr);
nsresult rv = obsSvc->NotifyObservers(static_cast<nsIObserver*>(this),
kPermissionPromptTopic, nullptr);
if (NS_WARN_IF(NS_FAILED(rv))) {
// Finally release if we failed the prompt.
mOwnerElement = nullptr;

Просмотреть файл

@ -41,8 +41,8 @@ class PermissionRequestBase : public nsIObserver,
// This function will not actually prompt. It will never return
// kPermissionDefault but will instead translate the permission manager value
// into the correct value for the given type.
static nsresult GetCurrentPermission(nsIPrincipal* aPrincipal,
PermissionValue* aCurrentValue);
static Result<PermissionValue, nsresult> GetCurrentPermission(
nsIPrincipal& aPrincipal);
static PermissionValue PermissionValueForIntPermission(
uint32_t aIntPermission);