зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1657404 - Prepare GamepadTestChannelChild for "refcounted protocol" r=handyman
Depends on D93021 Differential Revision: https://phabricator.services.mozilla.com/D93022
This commit is contained in:
Родитель
ce23fd6cf4
Коммит
c1246c7e52
|
@ -71,9 +71,10 @@ void GamepadServiceTest::InitPBackgroundActor() {
|
|||
MOZ_CRASH("Failed to create a PBackgroundChild actor!");
|
||||
}
|
||||
|
||||
mChild = new GamepadTestChannelChild();
|
||||
mChild = GamepadTestChannelChild::Create();
|
||||
PGamepadTestChannelChild* initedChild =
|
||||
actor->SendPGamepadTestChannelConstructor(mChild);
|
||||
actor->SendPGamepadTestChannelConstructor(
|
||||
RefPtr<GamepadTestChannelChild>(mChild).forget().take());
|
||||
if (NS_WARN_IF(!initedChild)) {
|
||||
MOZ_CRASH("Failed to create a PBackgroundChild actor!");
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ class GamepadServiceTest final : public DOMEventTargetHelper {
|
|||
// IPDL Channel for us to send test events to GamepadPlatformService, it
|
||||
// will only be used in this singleton class and deleted during the IPDL
|
||||
// shutdown chain
|
||||
GamepadTestChannelChild* MOZ_NON_OWNING_REF mChild;
|
||||
RefPtr<GamepadTestChannelChild> mChild;
|
||||
|
||||
explicit GamepadServiceTest(nsPIDOMWindowInner* aWindow);
|
||||
~GamepadServiceTest();
|
||||
|
|
|
@ -9,6 +9,11 @@
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
already_AddRefed<GamepadTestChannelChild> GamepadTestChannelChild::Create() {
|
||||
return RefPtr<GamepadTestChannelChild>(new GamepadTestChannelChild())
|
||||
.forget();
|
||||
}
|
||||
|
||||
void GamepadTestChannelChild::AddPromise(const uint32_t& aID,
|
||||
Promise* aPromise) {
|
||||
MOZ_ASSERT(!mPromiseList.Get(aID, nullptr));
|
||||
|
|
|
@ -14,18 +14,28 @@ namespace mozilla {
|
|||
namespace dom {
|
||||
|
||||
class GamepadTestChannelChild final : public PGamepadTestChannelChild {
|
||||
friend class PGamepadTestChannelChild;
|
||||
|
||||
public:
|
||||
GamepadTestChannelChild() = default;
|
||||
~GamepadTestChannelChild() = default;
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GamepadTestChannelChild)
|
||||
|
||||
static already_AddRefed<GamepadTestChannelChild> Create();
|
||||
|
||||
void AddPromise(const uint32_t& aID, Promise* aPromise);
|
||||
|
||||
GamepadTestChannelChild(const GamepadTestChannelChild&) = delete;
|
||||
GamepadTestChannelChild(GamepadTestChannelChild&&) = delete;
|
||||
GamepadTestChannelChild& operator=(const GamepadTestChannelChild&) = delete;
|
||||
GamepadTestChannelChild& operator=(GamepadTestChannelChild&&) = delete;
|
||||
|
||||
private:
|
||||
GamepadTestChannelChild() = default;
|
||||
~GamepadTestChannelChild() = default;
|
||||
|
||||
mozilla::ipc::IPCResult RecvReplyGamepadIndex(const uint32_t& aID,
|
||||
const uint32_t& aIndex);
|
||||
|
||||
nsRefPtrHashtable<nsUint32HashKey, dom::Promise> mPromiseList;
|
||||
|
||||
friend class PGamepadTestChannelChild;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
|
|
@ -628,7 +628,8 @@ BackgroundChildImpl::AllocPGamepadTestChannelChild() {
|
|||
bool BackgroundChildImpl::DeallocPGamepadTestChannelChild(
|
||||
PGamepadTestChannelChild* aActor) {
|
||||
MOZ_ASSERT(aActor);
|
||||
delete static_cast<dom::GamepadTestChannelChild*>(aActor);
|
||||
RefPtr<dom::GamepadTestChannelChild> child(
|
||||
dont_AddRef(static_cast<dom::GamepadTestChannelChild*>(aActor)));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче