Index: Source/modules/gamepad/NavigatorGamepad.cpp |
diff --git a/Source/modules/gamepad/NavigatorGamepad.cpp b/Source/modules/gamepad/NavigatorGamepad.cpp |
index f481b405b0b281c90b72eb29b880359f26831e0e..3ae883a439faa31374bbbc11c6c79c171989b769 100644 |
--- a/Source/modules/gamepad/NavigatorGamepad.cpp |
+++ b/Source/modules/gamepad/NavigatorGamepad.cpp |
@@ -84,7 +84,7 @@ NavigatorGamepad& NavigatorGamepad::from(Navigator& navigator) |
{ |
NavigatorGamepad* supplement = static_cast<NavigatorGamepad*>(WillBeHeapSupplement<Navigator>::from(navigator, supplementName())); |
if (!supplement) { |
- supplement = new NavigatorGamepad(*navigator.frame()->document()); |
+ supplement = new NavigatorGamepad(navigator.frame()); |
provideTo(navigator, supplementName(), adoptPtrWillBeNoop(supplement)); |
} |
return *supplement; |
@@ -102,19 +102,23 @@ GamepadList* NavigatorGamepad::getGamepads(Navigator& navigator) |
WebKitGamepadList* NavigatorGamepad::webkitGamepads() |
{ |
- startUpdating(); |
if (!m_webkitGamepads) |
m_webkitGamepads = WebKitGamepadList::create(); |
- sampleGamepads<WebKitGamepad>(m_webkitGamepads.get()); |
+ if (window()) { |
+ startUpdating(); |
+ sampleGamepads<WebKitGamepad>(m_webkitGamepads.get()); |
+ } |
return m_webkitGamepads.get(); |
} |
GamepadList* NavigatorGamepad::gamepads() |
{ |
- startUpdating(); |
if (!m_gamepads) |
m_gamepads = GamepadList::create(); |
- sampleGamepads<Gamepad>(m_gamepads.get()); |
+ if (window()) { |
+ startUpdating(); |
+ sampleGamepads<Gamepad>(m_gamepads.get()); |
+ } |
return m_gamepads.get(); |
} |
@@ -153,10 +157,10 @@ void NavigatorGamepad::didConnectOrDisconnectGamepad(unsigned index, const blink |
window()->dispatchEvent(event); |
} |
-NavigatorGamepad::NavigatorGamepad(Document& document) |
- : DOMWindowProperty(document.frame()) |
- , DeviceSensorEventController(document) |
- , DOMWindowLifecycleObserver(document.frame()->domWindow()) |
+NavigatorGamepad::NavigatorGamepad(LocalFrame* frame) |
+ : DOMWindowProperty(frame) |
+ , DeviceSensorEventController(frame ? frame->document() : 0) |
+ , DOMWindowLifecycleObserver(frame ? frame->domWindow() : 0) |
{ |
} |
@@ -211,9 +215,14 @@ bool NavigatorGamepad::isNullEvent(Event*) |
return false; |
} |
+static bool isGamepadEvent(const AtomicString& eventType) |
+{ |
+ return eventType == EventTypeNames::gamepadconnected || eventType == EventTypeNames::gamepaddisconnected; |
+} |
+ |
void NavigatorGamepad::didAddEventListener(DOMWindow*, const AtomicString& eventType) |
{ |
- if (RuntimeEnabledFeatures::gamepadEnabled() && (eventType == EventTypeNames::gamepadconnected || eventType == EventTypeNames::gamepaddisconnected)) { |
+ if (RuntimeEnabledFeatures::gamepadEnabled() && isGamepadEvent(eventType)) { |
if (page() && page()->visibilityState() == PageVisibilityStateVisible) |
startUpdating(); |
m_hasEventListener = true; |
@@ -222,7 +231,7 @@ void NavigatorGamepad::didAddEventListener(DOMWindow*, const AtomicString& event |
void NavigatorGamepad::didRemoveEventListener(DOMWindow*, const AtomicString& eventType) |
{ |
- if (eventType == EventTypeNames::gamepadconnected || eventType == EventTypeNames::gamepaddisconnected) |
+ if (isGamepadEvent(eventType)) |
m_hasEventListener = false; |
} |