Index: Source/modules/vibration/NavigatorVibration.cpp |
diff --git a/Source/modules/vibration/NavigatorVibration.cpp b/Source/modules/vibration/NavigatorVibration.cpp |
index a397bb1a448ce25da88b4e163f9ddc9506762446..05ff456debd2367b505d37ca5edcd887586c4229 100644 |
--- a/Source/modules/vibration/NavigatorVibration.cpp |
+++ b/Source/modules/vibration/NavigatorVibration.cpp |
@@ -21,7 +21,9 @@ |
#include "modules/vibration/NavigatorVibration.h" |
#include "core/page/Frame.h" |
+#include "core/page/Navigator.h" |
#include "core/page/Page.h" |
+#include "core/page/PageVisibilityState.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebVibration.h" |
@@ -30,8 +32,9 @@ namespace WebCore { |
// Maximum number of entries in a vibration pattern. |
const unsigned kVibrationPatternLengthMax = 99; |
-NavigatorVibration::NavigatorVibration() |
- : m_timerStart(this, &NavigatorVibration::timerStartFired) |
+NavigatorVibration::NavigatorVibration(Page* page) |
+ : PageLifecycleObserver(page) |
+ , m_timerStart(this, &NavigatorVibration::timerStartFired) |
, m_timerStop(this, &NavigatorVibration::timerStopFired) |
, m_isVibrating(false) |
{ |
@@ -95,23 +98,6 @@ void NavigatorVibration::cancelVibration() |
} |
} |
-void NavigatorVibration::suspendVibration() |
-{ |
- if (!m_isVibrating) |
- return; |
- |
- m_pattern.insert(0, m_timerStop.nextFireInterval()); |
- m_timerStop.stop(); |
- cancelVibration(); |
-} |
- |
-void NavigatorVibration::resumeVibration() |
-{ |
- ASSERT(!m_timerStart.isActive()); |
- |
- m_timerStart.startOneShot(0); |
-} |
- |
void NavigatorVibration::timerStartFired(Timer<NavigatorVibration>* timer) |
{ |
ASSERT_UNUSED(timer, timer == &m_timerStart); |
@@ -136,6 +122,12 @@ void NavigatorVibration::timerStopFired(Timer<NavigatorVibration>* timer) |
} |
} |
+void NavigatorVibration::pageVisibilityChanged() |
+{ |
+ if (page()->visibilityState() != PageVisibilityStateVisible) |
+ cancelVibration(); |
+} |
+ |
bool NavigatorVibration::vibrate(Navigator* navigator, unsigned time) |
{ |
VibrationPattern pattern; |
@@ -145,21 +137,22 @@ bool NavigatorVibration::vibrate(Navigator* navigator, unsigned time) |
bool NavigatorVibration::vibrate(Navigator* navigator, const VibrationPattern& pattern) |
{ |
- if (!navigator->frame()->page()) |
+ Page* page = navigator->frame()->page(); |
+ if (!page) |
return false; |
- if (navigator->frame()->page()->visibilityState() != PageVisibilityStateVisible) |
+ if (page->visibilityState() != PageVisibilityStateVisible) |
return false; |
- return NavigatorVibration::from(navigator)->vibrate(pattern); |
+ return NavigatorVibration::from(page)->vibrate(pattern); |
} |
-NavigatorVibration* NavigatorVibration::from(Navigator* navigator) |
+NavigatorVibration* NavigatorVibration::from(Page* page) |
{ |
- NavigatorVibration* navigatorVibration = static_cast<NavigatorVibration*>(Supplement<Navigator>::from(navigator, supplementName())); |
+ NavigatorVibration* navigatorVibration = static_cast<NavigatorVibration*>(Supplement<Page>::from(page, supplementName())); |
if (!navigatorVibration) { |
- navigatorVibration = new NavigatorVibration(); |
- Supplement<Navigator>::provideTo(navigator, supplementName(), adoptPtr(navigatorVibration)); |
+ navigatorVibration = new NavigatorVibration(page); |
+ Supplement<Page>::provideTo(page, supplementName(), adoptPtr(navigatorVibration)); |
} |
return navigatorVibration; |
} |