| Index: Source/modules/vibration/NavigatorVibration.cpp
 | 
| diff --git a/Source/modules/vibration/NavigatorVibration.cpp b/Source/modules/vibration/NavigatorVibration.cpp
 | 
| index b8fd026b8522b4fe913424749140cd41d38e458a..5cfab2e00b986a280c51b99f0dde61f39167f14c 100644
 | 
| --- a/Source/modules/vibration/NavigatorVibration.cpp
 | 
| +++ b/Source/modules/vibration/NavigatorVibration.cpp
 | 
| @@ -20,34 +20,19 @@
 | 
|  #include "config.h"
 | 
|  #include "modules/vibration/NavigatorVibration.h"
 | 
|  
 | 
| +#include "bindings/modules/v8/UnionTypesModules.h"
 | 
|  #include "core/frame/LocalFrame.h"
 | 
|  #include "core/frame/Navigator.h"
 | 
|  #include "core/page/PageVisibilityState.h"
 | 
|  #include "public/platform/Platform.h"
 | 
|  #include "public/platform/WebVibration.h"
 | 
|  
 | 
| -namespace blink {
 | 
| -
 | 
|  // Maximum number of entries in a vibration pattern.
 | 
|  const unsigned kVibrationPatternLengthMax = 99;
 | 
|  
 | 
| -NavigatorVibration::NavigatorVibration(Page& page)
 | 
| -    : PageLifecycleObserver(&page)
 | 
| -    , m_timerStart(this, &NavigatorVibration::timerStartFired)
 | 
| -    , m_timerStop(this, &NavigatorVibration::timerStopFired)
 | 
| -    , m_isVibrating(false)
 | 
| -{
 | 
| -}
 | 
| -
 | 
| -NavigatorVibration::~NavigatorVibration()
 | 
| +blink::NavigatorVibration::VibrationPattern sanitizeVibrationPatternInternal(const blink::NavigatorVibration::VibrationPattern& pattern)
 | 
|  {
 | 
| -    if (m_isVibrating)
 | 
| -        cancelVibration();
 | 
| -}
 | 
| -
 | 
| -bool NavigatorVibration::vibrate(const VibrationPattern& pattern)
 | 
| -{
 | 
| -    VibrationPattern sanitized = pattern;
 | 
| +    blink::NavigatorVibration::VibrationPattern sanitized = pattern;
 | 
|      size_t length = sanitized.size();
 | 
|  
 | 
|      // If the pattern is too long then truncate it.
 | 
| @@ -58,19 +43,52 @@ bool NavigatorVibration::vibrate(const VibrationPattern& pattern)
 | 
|  
 | 
|      // If any pattern entry is too long then truncate it.
 | 
|      for (size_t i = 0; i < length; ++i) {
 | 
| -        if (sanitized[i] > kVibrationDurationMax)
 | 
| -            sanitized[i] = kVibrationDurationMax;
 | 
| +        if (sanitized[i] > blink::kVibrationDurationMax)
 | 
| +            sanitized[i] = blink::kVibrationDurationMax;
 | 
|      }
 | 
|  
 | 
|      // If the last item in the pattern is a pause then discard it.
 | 
|      if (length && !(length % 2))
 | 
|          sanitized.removeLast();
 | 
|  
 | 
| +    return sanitized;
 | 
| +}
 | 
| +
 | 
| +namespace blink {
 | 
| +
 | 
| +NavigatorVibration::VibrationPattern NavigatorVibration::sanitizeVibrationPattern(const UnsignedLongOrUnsignedLongSequence& pattern)
 | 
| +{
 | 
| +    VibrationPattern sanitized;
 | 
| +
 | 
| +    if (pattern.isUnsignedLong())
 | 
| +        sanitized.append(pattern.getAsUnsignedLong());
 | 
| +    else if (pattern.isUnsignedLongSequence())
 | 
| +        sanitized = pattern.getAsUnsignedLongSequence();
 | 
| +
 | 
| +    return sanitizeVibrationPatternInternal(sanitized);
 | 
| +}
 | 
| +
 | 
| +NavigatorVibration::NavigatorVibration(Page& page)
 | 
| +    : PageLifecycleObserver(&page)
 | 
| +    , m_timerStart(this, &NavigatorVibration::timerStartFired)
 | 
| +    , m_timerStop(this, &NavigatorVibration::timerStopFired)
 | 
| +    , m_isVibrating(false)
 | 
| +{
 | 
| +}
 | 
| +
 | 
| +NavigatorVibration::~NavigatorVibration()
 | 
| +{
 | 
| +    if (m_isVibrating)
 | 
| +        cancelVibration();
 | 
| +}
 | 
| +
 | 
| +bool NavigatorVibration::vibrate(const VibrationPattern& pattern)
 | 
| +{
 | 
|      // Cancelling clears the stored pattern so do it before setting the new one.
 | 
|      if (m_isVibrating)
 | 
|          cancelVibration();
 | 
|  
 | 
| -    m_pattern = sanitized;
 | 
| +    m_pattern = sanitizeVibrationPatternInternal(pattern);
 | 
|  
 | 
|      if (m_timerStart.isActive())
 | 
|          m_timerStart.stop();
 | 
| 
 |