Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Unified Diff: Source/modules/gamepad/NavigatorGamepad.cpp

Issue 256593010: Gracefully support Navigator Gamepad methods in a detached state. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Have document supplements keep a reference to their document Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/modules/gamepad/NavigatorGamepad.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/gamepad/NavigatorGamepad.cpp
diff --git a/Source/modules/gamepad/NavigatorGamepad.cpp b/Source/modules/gamepad/NavigatorGamepad.cpp
index f481b405b0b281c90b72eb29b880359f26831e0e..1d85c7176205fc1f911e1ea2095a9bce4c0bcc93 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->page() : 0)
+ , DOMWindowLifecycleObserver(frame ? frame->domWindow() : 0)
{
}
@@ -211,9 +215,19 @@ bool NavigatorGamepad::isNullEvent(Event*)
return false;
}
+Document* NavigatorGamepad::document()
+{
+ return window() ? window()->document() : 0;
+}
+
+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 +236,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;
}
« no previous file with comments | « Source/modules/gamepad/NavigatorGamepad.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698