Index: Source/modules/gamepad/NavigatorGamepad.cpp |
diff --git a/Source/modules/gamepad/NavigatorGamepad.cpp b/Source/modules/gamepad/NavigatorGamepad.cpp |
index 0b39cea0a4775edb93e83c9af4196c9516b2f78a..780b1f67be0d20cdf2f55b7c13e42083176b445a 100644 |
--- a/Source/modules/gamepad/NavigatorGamepad.cpp |
+++ b/Source/modules/gamepad/NavigatorGamepad.cpp |
@@ -102,6 +102,7 @@ GamepadList* NavigatorGamepad::getGamepads(Navigator& navigator) |
WebKitGamepadList* NavigatorGamepad::webkitGamepads() |
{ |
+ m_wasPolled = true; |
if (!m_webkitGamepads) |
m_webkitGamepads = WebKitGamepadList::create(); |
if (window()) { |
@@ -113,6 +114,7 @@ WebKitGamepadList* NavigatorGamepad::webkitGamepads() |
GamepadList* NavigatorGamepad::gamepads() |
{ |
+ m_wasPolled = true; |
if (!m_gamepads) |
m_gamepads = GamepadList::create(); |
if (window()) { |
@@ -160,6 +162,7 @@ NavigatorGamepad::NavigatorGamepad(LocalFrame* frame) |
: DOMWindowProperty(frame) |
, DeviceEventControllerBase(frame ? frame->page() : 0) |
, DOMWindowLifecycleObserver(frame ? frame->domWindow() : 0) |
+ , m_wasPolled(false) |
{ |
} |
@@ -228,4 +231,13 @@ void NavigatorGamepad::didRemoveAllEventListeners(LocalDOMWindow*) |
m_hasEventListener = false; |
} |
+void NavigatorGamepad::pageVisibilityChanged() |
+{ |
+ // Inform the embedder whether it needs to provide gamepad data for us. |
+ if (page()->visibilityState() == PageVisibilityStateVisible && (m_hasEventListener || m_wasPolled)) |
+ startUpdating(); |
+ else |
+ stopUpdating(); |
+} |
+ |
} // namespace WebCore |