Index: Source/modules/gamepad/NavigatorGamepad.cpp |
diff --git a/Source/modules/gamepad/NavigatorGamepad.cpp b/Source/modules/gamepad/NavigatorGamepad.cpp |
index d1c006ef9a76fdb2b6725626b327a8a675a79c49..493494814c274de7767aa8f6f9b6f0bbcda1277c 100644 |
--- a/Source/modules/gamepad/NavigatorGamepad.cpp |
+++ b/Source/modules/gamepad/NavigatorGamepad.cpp |
@@ -129,11 +129,8 @@ void NavigatorGamepad::trace(Visitor* visitor) |
WillBeHeapSupplement<Navigator>::trace(visitor); |
} |
-void NavigatorGamepad::didConnectOrDisconnectGamepad(unsigned index, const blink::WebGamepad& webGamepad, bool connected) |
+void NavigatorGamepad::didUpdateData() |
{ |
- ASSERT(index < blink::WebGamepads::itemsLengthCap); |
- ASSERT(connected == webGamepad.connected); |
- |
// We should stop listening once we detached. |
ASSERT(window()); |
@@ -144,23 +141,24 @@ void NavigatorGamepad::didConnectOrDisconnectGamepad(unsigned index, const blink |
if (window()->document()->activeDOMObjectsAreStopped() || window()->document()->activeDOMObjectsAreSuspended()) |
return; |
+ const GamepadDispatcher::ConnectionChange& change = GamepadDispatcher::instance().latestConnectionChange(); |
+ |
if (!m_gamepads) |
m_gamepads = GamepadList::create(); |
- Gamepad* gamepad = m_gamepads->item(index); |
+ Gamepad* gamepad = m_gamepads->item(change.index); |
if (!gamepad) |
gamepad = Gamepad::create(); |
- sampleGamepad(index, *gamepad, webGamepad); |
- m_gamepads->set(index, gamepad); |
+ sampleGamepad(change.index, *gamepad, change.pad); |
+ m_gamepads->set(change.index, gamepad); |
- const AtomicString& eventName = connected ? EventTypeNames::gamepadconnected : EventTypeNames::gamepaddisconnected; |
- RefPtrWillBeRawPtr<GamepadEvent> event = GamepadEvent::create(eventName, false, true, gamepad); |
- window()->dispatchEvent(event); |
+ const AtomicString& eventName = change.pad.connected ? EventTypeNames::gamepadconnected : EventTypeNames::gamepaddisconnected; |
+ window()->dispatchEvent(GamepadEvent::create(eventName, false, true, gamepad)); |
} |
NavigatorGamepad::NavigatorGamepad(LocalFrame* frame) |
: DOMWindowProperty(frame) |
- , DeviceSensorEventController(frame ? frame->page() : 0) |
+ , DeviceEventControllerBase(frame ? frame->page() : 0) |
, DOMWindowLifecycleObserver(frame ? frame->domWindow() : 0) |
{ |
} |
@@ -188,12 +186,12 @@ void NavigatorGamepad::willDetachGlobalObjectFromFrame() |
void NavigatorGamepad::registerWithDispatcher() |
{ |
- GamepadDispatcher::instance().addClient(this); |
+ GamepadDispatcher::instance().addController(this); |
} |
void NavigatorGamepad::unregisterWithDispatcher() |
{ |
- GamepadDispatcher::instance().removeClient(this); |
+ GamepadDispatcher::instance().removeController(this); |
} |
bool NavigatorGamepad::hasLastData() |
@@ -202,25 +200,6 @@ bool NavigatorGamepad::hasLastData() |
return false; |
} |
-PassRefPtrWillBeRawPtr<Event> NavigatorGamepad::getLastEvent() |
-{ |
- // This is called only when hasLastData() is true. |
- ASSERT_NOT_REACHED(); |
- return nullptr; |
-} |
- |
-bool NavigatorGamepad::isNullEvent(Event*) |
-{ |
- // This is called only when hasLastData() is true. |
- ASSERT_NOT_REACHED(); |
- return false; |
-} |
- |
-Document* NavigatorGamepad::document() |
-{ |
- return window() ? window()->document() : 0; |
-} |
- |
static bool isGamepadEvent(const AtomicString& eventType) |
{ |
return eventType == EventTypeNames::gamepadconnected || eventType == EventTypeNames::gamepaddisconnected; |
@@ -235,10 +214,13 @@ void NavigatorGamepad::didAddEventListener(DOMWindow*, const AtomicString& event |
} |
} |
-void NavigatorGamepad::didRemoveEventListener(DOMWindow*, const AtomicString& eventType) |
+void NavigatorGamepad::didRemoveEventListener(DOMWindow* window, const AtomicString& eventType) |
{ |
- if (isGamepadEvent(eventType)) |
+ if (isGamepadEvent(eventType) |
+ && !window->hasEventListeners(EventTypeNames::gamepadconnected) |
+ && !window->hasEventListeners(EventTypeNames::gamepaddisconnected)) { |
m_hasEventListener = false; |
+ } |
} |
void NavigatorGamepad::didRemoveAllEventListeners(DOMWindow*) |