зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1105827 - Part 11: Use nsRefPtr to store PermissionStatus. r=baku
This commit is contained in:
Родитель
e08489fa66
Коммит
e53e26f42e
|
@ -8,7 +8,6 @@
|
|||
|
||||
#include "mozilla/AsyncEventDispatcher.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
#include "nsIPermissionManager.h"
|
||||
#include "PermissionObserver.h"
|
||||
#include "PermissionUtils.h"
|
||||
|
@ -16,22 +15,18 @@
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
/* static */ nsresult
|
||||
/* static */ already_AddRefed<PermissionStatus>
|
||||
PermissionStatus::Create(nsPIDOMWindow* aWindow,
|
||||
PermissionName aName,
|
||||
PermissionStatus** aStatus)
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
MOZ_ASSERT(aStatus);
|
||||
*aStatus = nullptr;
|
||||
|
||||
UniquePtr<PermissionStatus> status(new PermissionStatus(aWindow, aName));
|
||||
nsresult rv = status->Init();
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
nsRefPtr<PermissionStatus> status = new PermissionStatus(aWindow, aName);
|
||||
aRv = status->Init();
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
*aStatus = status.release();
|
||||
return NS_OK;
|
||||
return status.forget();
|
||||
}
|
||||
|
||||
PermissionStatus::PermissionStatus(nsPIDOMWindow* aWindow,
|
||||
|
|
|
@ -22,11 +22,9 @@ class PermissionStatus final
|
|||
friend class PermissionObserver;
|
||||
|
||||
public:
|
||||
~PermissionStatus();
|
||||
|
||||
static nsresult Create(nsPIDOMWindow* aWindow,
|
||||
PermissionName aName,
|
||||
PermissionStatus** aStatus);
|
||||
static already_AddRefed<PermissionStatus> Create(nsPIDOMWindow* aWindow,
|
||||
PermissionName aName,
|
||||
ErrorResult& aRv);
|
||||
|
||||
JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
@ -36,6 +34,8 @@ public:
|
|||
IMPL_EVENT_HANDLER(change)
|
||||
|
||||
private:
|
||||
~PermissionStatus();
|
||||
|
||||
PermissionStatus(nsPIDOMWindow* aWindow, PermissionName aName);
|
||||
|
||||
nsresult Init();
|
||||
|
|
|
@ -42,48 +42,52 @@ Permissions::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
|||
|
||||
namespace {
|
||||
|
||||
nsresult
|
||||
already_AddRefed<PermissionStatus>
|
||||
CreatePushPermissionStatus(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aPermission,
|
||||
nsPIDOMWindow* aWindow,
|
||||
PermissionStatus** aResult)
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
PushPermissionDescriptor permission;
|
||||
JS::Rooted<JS::Value> value(aCx, JS::ObjectOrNullValue(aPermission));
|
||||
if (NS_WARN_IF(!permission.Init(aCx, value))) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (permission.mUserVisible) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return PermissionStatus::Create(aWindow, permission.mName, aResult);
|
||||
return PermissionStatus::Create(aWindow, permission.mName, aRv);
|
||||
}
|
||||
|
||||
nsresult
|
||||
already_AddRefed<PermissionStatus>
|
||||
CreatePermissionStatus(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aPermission,
|
||||
nsPIDOMWindow* aWindow,
|
||||
PermissionStatus** aResult)
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
PermissionDescriptor permission;
|
||||
JS::Rooted<JS::Value> value(aCx, JS::ObjectOrNullValue(aPermission));
|
||||
if (NS_WARN_IF(!permission.Init(aCx, value))) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
switch (permission.mName) {
|
||||
case PermissionName::Geolocation:
|
||||
case PermissionName::Notifications:
|
||||
return PermissionStatus::Create(aWindow, permission.mName, aResult);
|
||||
return PermissionStatus::Create(aWindow, permission.mName, aRv);
|
||||
|
||||
case PermissionName::Push:
|
||||
return CreatePushPermissionStatus(aCx, aPermission, aWindow, aResult);
|
||||
return CreatePushPermissionStatus(aCx, aPermission, aWindow, aRv);
|
||||
|
||||
case PermissionName::Midi:
|
||||
default:
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -105,11 +109,11 @@ Permissions::Query(JSContext* aCx,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
PermissionStatus* status = nullptr;
|
||||
nsresult rv = CreatePermissionStatus(aCx, aPermission, mWindow, &status);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
nsRefPtr<PermissionStatus> status =
|
||||
CreatePermissionStatus(aCx, aPermission, mWindow, aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
MOZ_ASSERT(!status);
|
||||
promise->MaybeReject(rv);
|
||||
promise->MaybeReject(aRv);
|
||||
} else {
|
||||
MOZ_ASSERT(status);
|
||||
promise->MaybeResolve(status);
|
||||
|
|
Загрузка…
Ссылка в новой задаче