Bug 1358064 - Part1: Combine MaybeWindowHasSeenGamepad and FireConnectionEvent; r?daoshengmu, ted.mielczarek
authorChih-Yi Leu <cleu@mozilla.com>
Fri, 21 Apr 2017 11:34:30 +0800
changeset 566240 626ec3e166e94cedb6218ca5d8fbf41f48feb478
parent 566156 8b854986038cf3f3f240697e27ef48ea65914c13
child 566241 2a3811137738482f10f4a4635af08458de8db204
child 566269 55a5023797f895d5ce6e5423b784bf814df0d249
push id55164
push userbmo:cleu@mozilla.com
push dateFri, 21 Apr 2017 08:17:00 +0000
reviewersdaoshengmu, ted.mielczarek
bugs1358064
milestone55.0a1
Bug 1358064 - Part1: Combine MaybeWindowHasSeenGamepad and FireConnectionEvent; r?daoshengmu, ted.mielczarek MozReview-Commit-ID: Fw9I5RCE6GV
dom/gamepad/GamepadManager.cpp
dom/gamepad/GamepadManager.h
--- a/dom/gamepad/GamepadManager.cpp
+++ b/dom/gamepad/GamepadManager.cpp
@@ -295,24 +295,20 @@ GamepadManager::NewButtonEvent(uint32_t 
     MOZ_ASSERT(listeners[i]->IsInnerWindow());
 
     // Only send events to non-background windows
     if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
         listeners[i]->GetOuterWindow()->IsBackground()) {
       continue;
     }
 
-    bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
     RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
     if (listenerGamepad) {
       listenerGamepad->SetButton(aButton, aPressed, aTouched, aValue);
-      if (firstTime) {
-        FireConnectionEvent(listeners[i], listenerGamepad, true);
-      }
+      MaybeFireConnectionEvent(listeners[i], newIndex);
       if (mNonstandardEventsEnabled) {
         // Fire event
         FireButtonEvent(listeners[i], listenerGamepad, aButton, aValue);
       }
     }
   }
 }
 
@@ -364,24 +360,20 @@ GamepadManager::NewAxisMoveEvent(uint32_
     MOZ_ASSERT(listeners[i]->IsInnerWindow());
 
     // Only send events to non-background windows
     if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
         listeners[i]->GetOuterWindow()->IsBackground()) {
       continue;
     }
 
-    bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
     RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
     if (listenerGamepad) {
       listenerGamepad->SetAxis(aAxis, aValue);
-      if (firstTime) {
-        FireConnectionEvent(listeners[i], listenerGamepad, true);
-      }
+      MaybeFireConnectionEvent(listeners[i], newIndex);
       if (mNonstandardEventsEnabled) {
         // Fire event
         FireAxisMoveEvent(listeners[i], listenerGamepad, aAxis, aValue);
       }
     }
   }
 }
 
@@ -434,24 +426,20 @@ GamepadManager::NewPoseEvent(uint32_t aI
     MOZ_ASSERT(listeners[i]->IsInnerWindow());
 
     // Only send events to non-background windows
     if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
         listeners[i]->GetOuterWindow()->IsBackground()) {
       continue;
     }
 
-    bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
     RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
     if (listenerGamepad) {
       listenerGamepad->SetPose(aPose);
-      if (firstTime) {
-        FireConnectionEvent(listeners[i], listenerGamepad, true);
-      }
+      MaybeFireConnectionEvent(listeners[i], newIndex);
     }
   }
 }
 
 void
 GamepadManager::NewHandChangeEvent(uint32_t aIndex, GamepadServiceType aServiceType,
                                    GamepadHand aHand)
 {
@@ -477,24 +465,20 @@ GamepadManager::NewHandChangeEvent(uint3
     MOZ_ASSERT(listeners[i]->IsInnerWindow());
 
     // Only send events to non-background windows
     if (!listeners[i]->AsInner()->IsCurrentInnerWindow() ||
         listeners[i]->GetOuterWindow()->IsBackground()) {
       continue;
     }
 
-    bool firstTime = MaybeWindowHasSeenGamepad(listeners[i], newIndex);
-
     RefPtr<Gamepad> listenerGamepad = listeners[i]->GetGamepad(newIndex);
     if (listenerGamepad) {
       listenerGamepad->SetHand(aHand);
-      if (firstTime) {
-        FireConnectionEvent(listeners[i], listenerGamepad, true);
-      }
+      MaybeFireConnectionEvent(listeners[i], newIndex);
     }
   }
 }
 
 void
 GamepadManager::NewConnectionEvent(uint32_t aIndex, bool aConnected)
 {
   if (mShuttingDown) {
@@ -623,22 +607,24 @@ GamepadManager::GetService()
 
 // static
 bool
 GamepadManager::IsAPIEnabled() {
   return Preferences::GetBool(kGamepadEnabledPref, false);
 }
 
 bool
-GamepadManager::MaybeWindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex)
+GamepadManager::MaybeFireConnectionEvent(nsGlobalWindow* aWindow, uint32_t aIndex)
 {
   if (!WindowHasSeenGamepad(aWindow, aIndex)) {
     // This window hasn't seen this gamepad before, so
     // send a connection event first.
     SetWindowHasSeenGamepad(aWindow, aIndex);
+    RefPtr<Gamepad> listenerGamepad = aWindow->GetGamepad(aIndex);
+    FireConnectionEvent(aWindow, listenerGamepad, true);
     return true;
   }
   return false;
 }
 
 bool
 GamepadManager::WindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex) const
 {
--- a/dom/gamepad/GamepadManager.h
+++ b/dom/gamepad/GamepadManager.h
@@ -136,17 +136,17 @@ class GamepadManager final : public nsIO
   // will be destroyed during the IPDL shutdown chain, so we
   // don't need to refcount it here.
   nsTArray<GamepadEventChannelChild *> mChannelChildren;
 
  private:
 
   nsresult Init();
 
-  bool MaybeWindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex);
+  bool MaybeFireConnectionEvent(nsGlobalWindow* aWindow, uint32_t aIndex);
   // Returns true if we have already sent data from this gamepad
   // to this window. This should only return true if the user
   // explicitly interacted with a gamepad while this window
   // was focused, by pressing buttons or similar actions.
   bool WindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex) const;
   // Indicate that a window has received data from a gamepad.
   void SetWindowHasSeenGamepad(nsGlobalWindow* aWindow, uint32_t aIndex,
                                bool aHasSeen = true);