diff options
Diffstat (limited to 'dom/gamepad/GamepadServiceTest.h')
-rw-r--r-- | dom/gamepad/GamepadServiceTest.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/dom/gamepad/GamepadServiceTest.h b/dom/gamepad/GamepadServiceTest.h new file mode 100644 index 0000000000..57bb33a7f7 --- /dev/null +++ b/dom/gamepad/GamepadServiceTest.h @@ -0,0 +1,97 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_GamepadServiceTest_h_ +#define mozilla_dom_GamepadServiceTest_h_ + +#include "mozilla/DOMEventTargetHelper.h" +#include "mozilla/dom/GamepadBinding.h" +#include "mozilla/dom/GamepadHandle.h" +#include "mozilla/dom/TypedArray.h" +#include "mozilla/WeakPtr.h" + +namespace mozilla { +namespace dom { + +class GamepadChangeEvent; +class GamepadManager; +class GamepadTestChannelChild; +class Promise; + +// Service for testing purposes +class GamepadServiceTest final : public DOMEventTargetHelper, + public SupportsWeakPtr { + public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GamepadServiceTest, + DOMEventTargetHelper) + + GamepadMappingType NoMapping() const { return GamepadMappingType::_empty; } + GamepadMappingType StandardMapping() const { + return GamepadMappingType::Standard; + } + GamepadHand NoHand() const { return GamepadHand::_empty; } + GamepadHand LeftHand() const { return GamepadHand::Left; } + GamepadHand RightHand() const { return GamepadHand::Right; } + + already_AddRefed<Promise> AddGamepad( + const nsAString& aID, GamepadMappingType aMapping, GamepadHand aHand, + uint32_t aNumButtons, uint32_t aNumAxes, uint32_t aNumHaptics, + uint32_t aNumLightIndicator, uint32_t aNumTouchEvents, ErrorResult& aRv); + void ReplyGamepadHandle(uint32_t aPromiseId, const GamepadHandle& aHandle); + + void RemoveGamepad(uint32_t aHandleSlot); + void NewButtonEvent(uint32_t aHandleSlot, uint32_t aButton, bool aPressed, + bool aTouched); + void NewButtonValueEvent(uint32_t aHandleSlot, uint32_t aButton, + bool aPressed, bool aTouched, double aValue); + void NewAxisMoveEvent(uint32_t aHandleSlot, uint32_t aAxis, double aValue); + void NewPoseMove(uint32_t aHandleSlot, const Nullable<Float32Array>& aOrient, + const Nullable<Float32Array>& aPos, + const Nullable<Float32Array>& aAngVelocity, + const Nullable<Float32Array>& aAngAcceleration, + const Nullable<Float32Array>& aLinVelocity, + const Nullable<Float32Array>& aLinAcceleration); + void NewTouch(uint32_t aHandleSlot, uint32_t aTouchArrayIndex, + uint32_t aTouchId, uint8_t aSurfaceId, const Float32Array& aPos, + const Nullable<Float32Array>& aSurfDim); + void Shutdown(); + + static already_AddRefed<GamepadServiceTest> CreateTestService( + nsPIDOMWindowInner* aWindow); + nsPIDOMWindowInner* GetParentObject() const { return mWindow; } + JSObject* WrapObject(JSContext* aCx, JS::HandleObject aGivenProto) override; + + private: + // Hold a reference to the gamepad service so we don't have to worry about + // execution order in tests. + RefPtr<GamepadManager> mService; + nsCOMPtr<nsPIDOMWindowInner> mWindow; + uint32_t mEventNumber; + bool mShuttingDown; + + // 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 + RefPtr<GamepadTestChannelChild> mChild; + nsTArray<GamepadHandle> mGamepadHandles; + + nsRefPtrHashtable<nsUint32HashKey, dom::Promise> mPromiseList; + + explicit GamepadServiceTest(nsPIDOMWindowInner* aWindow); + ~GamepadServiceTest(); + void InitPBackgroundActor(); + void DestroyPBackgroundActor(); + + uint32_t AddGamepadHandle(GamepadHandle aHandle); + void RemoveGamepadHandle(uint32_t aHandleSlot); + GamepadHandle GetHandleInSlot(uint32_t aHandleSlot) const; +}; + +} // namespace dom +} // namespace mozilla + +#endif |