Chromium Code Reviews| Index: Source/modules/gamepad/NavigatorGamepad.cpp |
| diff --git a/Source/modules/gamepad/NavigatorGamepad.cpp b/Source/modules/gamepad/NavigatorGamepad.cpp |
| index d1c006ef9a76fdb2b6725626b327a8a675a79c49..bd3091ccf93bbea1a7b7e3324cad986953f7b35b 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,6 +141,9 @@ void NavigatorGamepad::didConnectOrDisconnectGamepad(unsigned index, const blink |
| if (window()->document()->activeDOMObjectsAreStopped() || window()->document()->activeDOMObjectsAreSuspended()) |
| return; |
| + unsigned index; |
| + const blink::WebGamepad& webGamepad = GamepadDispatcher::instance().latestGamepadEventData(index); |
|
timvolodine
2014/06/16 13:05:17
do you need to pass index here? maybe just return
kbalazs
2014/06/16 17:01:47
Yes, the index is used below, it was an argument o
timvolodine
2014/06/16 17:13:35
ah I see, so that looks confusing to me. maybe int
|
| + |
| if (!m_gamepads) |
| m_gamepads = GamepadList::create(); |
| @@ -153,14 +153,13 @@ void NavigatorGamepad::didConnectOrDisconnectGamepad(unsigned index, const blink |
| sampleGamepad(index, *gamepad, webGamepad); |
| m_gamepads->set(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 = webGamepad.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 +187,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 +201,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 +215,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*) |