mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1105827 - Part 11: Use nsRefPtr to store PermissionStatus. r=baku
This commit is contained in:
parent
c05106a48e
commit
e1e7f1d119
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user