| Index: Source/modules/beacon/NavigatorBeacon.cpp
 | 
| diff --git a/Source/modules/beacon/NavigatorBeacon.cpp b/Source/modules/beacon/NavigatorBeacon.cpp
 | 
| index 990ef896287ec354ab0d546b710ed1d29daaa382..e1b2ba1afef7175fad7b4733612695c11ba156ef 100644
 | 
| --- a/Source/modules/beacon/NavigatorBeacon.cpp
 | 
| +++ b/Source/modules/beacon/NavigatorBeacon.cpp
 | 
| @@ -21,14 +21,19 @@
 | 
|  namespace blink {
 | 
|  
 | 
|  NavigatorBeacon::NavigatorBeacon(Navigator& navigator)
 | 
| -    : m_transmittedBytes(0)
 | 
| -    , m_navigator(navigator)
 | 
| +    : LocalFrameLifecycleObserver(navigator.frame())
 | 
| +    , m_transmittedBytes(0)
 | 
| +{
 | 
| +}
 | 
| +
 | 
| +NavigatorBeacon::~NavigatorBeacon()
 | 
|  {
 | 
|  }
 | 
|  
 | 
|  DEFINE_TRACE(NavigatorBeacon)
 | 
|  {
 | 
| -    WillBeHeapSupplement<Navigator>::trace(visitor);
 | 
| +    LocalFrameLifecycleObserver::trace(visitor);
 | 
| +    HeapSupplement<Navigator>::trace(visitor);
 | 
|  }
 | 
|  
 | 
|  const char* NavigatorBeacon::supplementName()
 | 
| @@ -38,10 +43,10 @@ const char* NavigatorBeacon::supplementName()
 | 
|  
 | 
|  NavigatorBeacon& NavigatorBeacon::from(Navigator& navigator)
 | 
|  {
 | 
| -    NavigatorBeacon* supplement = static_cast<NavigatorBeacon*>(WillBeHeapSupplement<Navigator>::from(navigator, supplementName()));
 | 
| +    NavigatorBeacon* supplement = static_cast<NavigatorBeacon*>(HeapSupplement<Navigator>::from(navigator, supplementName()));
 | 
|      if (!supplement) {
 | 
|          supplement = new NavigatorBeacon(navigator);
 | 
| -        provideTo(navigator, supplementName(), adoptPtrWillBeNoop(supplement));
 | 
| +        provideTo(navigator, supplementName(), supplement);
 | 
|      }
 | 
|      return *supplement;
 | 
|  }
 | 
| @@ -64,8 +69,8 @@ bool NavigatorBeacon::canSendBeacon(ExecutionContext* context, const KURL& url,
 | 
|          return false;
 | 
|      }
 | 
|  
 | 
| -    // Do not allow sending Beacons over a Navigator that is detached.
 | 
| -    if (!m_navigator.frame() || !m_navigator.frame()->client())
 | 
| +    // If detached from frame, do not allow sending a Beacon.
 | 
| +    if (!frame() || !frame()->client())
 | 
|          return false;
 | 
|  
 | 
|      return true;
 | 
| @@ -73,7 +78,8 @@ bool NavigatorBeacon::canSendBeacon(ExecutionContext* context, const KURL& url,
 | 
|  
 | 
|  int NavigatorBeacon::maxAllowance() const
 | 
|  {
 | 
| -    const Settings* settings = m_navigator.frame()->settings();
 | 
| +    ASSERT(frame());
 | 
| +    const Settings* settings = frame()->settings();
 | 
|      if (settings) {
 | 
|          int maxAllowed = settings->maxBeaconTransmission();
 | 
|          if (maxAllowed < m_transmittedBytes)
 | 
| @@ -107,15 +113,15 @@ bool NavigatorBeacon::sendBeacon(ExecutionContext* context, Navigator& navigator
 | 
|      bool allowed;
 | 
|  
 | 
|      if (data.isArrayBufferView())
 | 
| -        allowed = BeaconLoader::sendBeacon(navigator.frame(), allowance, url, data.getAsArrayBufferView(), bytes);
 | 
| +        allowed = BeaconLoader::sendBeacon(impl.frame(), allowance, url, data.getAsArrayBufferView(), bytes);
 | 
|      else if (data.isBlob())
 | 
| -        allowed = BeaconLoader::sendBeacon(navigator.frame(), allowance, url, data.getAsBlob(), bytes);
 | 
| +        allowed = BeaconLoader::sendBeacon(impl.frame(), allowance, url, data.getAsBlob(), bytes);
 | 
|      else if (data.isString())
 | 
| -        allowed = BeaconLoader::sendBeacon(navigator.frame(), allowance, url, data.getAsString(), bytes);
 | 
| +        allowed = BeaconLoader::sendBeacon(impl.frame(), allowance, url, data.getAsString(), bytes);
 | 
|      else if (data.isFormData())
 | 
| -        allowed = BeaconLoader::sendBeacon(navigator.frame(), allowance, url, data.getAsFormData(), bytes);
 | 
| +        allowed = BeaconLoader::sendBeacon(impl.frame(), allowance, url, data.getAsFormData(), bytes);
 | 
|      else
 | 
| -        allowed = BeaconLoader::sendBeacon(navigator.frame(), allowance, url, String(), bytes);
 | 
| +        allowed = BeaconLoader::sendBeacon(impl.frame(), allowance, url, String(), bytes);
 | 
|  
 | 
|      return impl.beaconResult(context, allowed, bytes);
 | 
|  }
 | 
| 
 |