Line data Source code
1 : /* This Source Code Form is subject to the terms of the Mozilla Public
2 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
4 : #include "GamepadEventChannelChild.h"
5 : #include "mozilla/dom/GamepadManager.h"
6 :
7 : namespace mozilla {
8 : namespace dom{
9 :
10 : namespace {
11 :
12 0 : class GamepadUpdateRunnable final : public Runnable
13 : {
14 : public:
15 0 : explicit GamepadUpdateRunnable(const GamepadChangeEvent& aGamepadEvent)
16 0 : : Runnable("dom::GamepadUpdateRunnable")
17 0 : , mEvent(aGamepadEvent)
18 : {
19 0 : }
20 0 : NS_IMETHOD Run() override
21 : {
22 0 : RefPtr<GamepadManager> svc(GamepadManager::GetService());
23 0 : if (svc) {
24 0 : svc->Update(mEvent);
25 : }
26 0 : return NS_OK;
27 : }
28 : protected:
29 : GamepadChangeEvent mEvent;
30 : };
31 :
32 : } // namespace
33 :
34 : mozilla::ipc::IPCResult
35 0 : GamepadEventChannelChild::RecvGamepadUpdate(
36 : const GamepadChangeEvent& aGamepadEvent)
37 : {
38 : DebugOnly<nsresult> rv =
39 0 : NS_DispatchToMainThread(new GamepadUpdateRunnable(aGamepadEvent));
40 0 : NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "NS_DispatchToMainThread failed");
41 0 : return IPC_OK();
42 : }
43 :
44 : void
45 0 : GamepadEventChannelChild::AddPromise(const uint32_t& aID, dom::Promise* aPromise)
46 : {
47 0 : MOZ_ASSERT(!mPromiseList.Get(aID, nullptr));
48 0 : mPromiseList.Put(aID, aPromise);
49 0 : }
50 :
51 : mozilla::ipc::IPCResult
52 0 : GamepadEventChannelChild::RecvReplyGamepadVibrateHaptic(const uint32_t& aPromiseID)
53 : {
54 0 : RefPtr<dom::Promise> p;
55 0 : if (!mPromiseList.Get(aPromiseID, getter_AddRefs(p))) {
56 0 : MOZ_CRASH("We should always have a promise.");
57 : }
58 :
59 0 : p->MaybeResolve(true);
60 0 : mPromiseList.Remove(aPromiseID);
61 0 : return IPC_OK();
62 : }
63 :
64 : } // namespace dom
65 : } // namespace mozilla
|