Home | History | Annotate | Download | only in netinfo
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "config.h"
      6 #include "modules/netinfo/NavigatorNetworkInformation.h"
      7 
      8 #include "core/frame/LocalDOMWindow.h"
      9 #include "core/frame/LocalFrame.h"
     10 #include "core/frame/Navigator.h"
     11 #include "modules/netinfo/NetworkInformation.h"
     12 
     13 namespace WebCore {
     14 
     15 NavigatorNetworkInformation::NavigatorNetworkInformation(Navigator& navigator)
     16     : DOMWindowProperty(navigator.frame())
     17 {
     18 }
     19 
     20 NavigatorNetworkInformation::~NavigatorNetworkInformation()
     21 {
     22 }
     23 
     24 NavigatorNetworkInformation& NavigatorNetworkInformation::from(Navigator& navigator)
     25 {
     26     NavigatorNetworkInformation* supplement = toNavigatorNetworkInformation(navigator);
     27     if (!supplement) {
     28         supplement = new NavigatorNetworkInformation(navigator);
     29         provideTo(navigator, supplementName(), adoptPtrWillBeNoop(supplement));
     30     }
     31     return *supplement;
     32 }
     33 
     34 NavigatorNetworkInformation* NavigatorNetworkInformation::toNavigatorNetworkInformation(Navigator& navigator)
     35 {
     36     return static_cast<NavigatorNetworkInformation*>(WillBeHeapSupplement<Navigator>::from(navigator, supplementName()));
     37 }
     38 
     39 const char* NavigatorNetworkInformation::supplementName()
     40 {
     41     return "NavigatorNetworkInformation";
     42 }
     43 
     44 NetworkInformation* NavigatorNetworkInformation::connection(Navigator& navigator)
     45 {
     46     return NavigatorNetworkInformation::from(navigator).connection();
     47 }
     48 
     49 NetworkInformation* NavigatorNetworkInformation::connection()
     50 {
     51     if (!m_connection && frame()) {
     52         ASSERT(frame()->domWindow());
     53         m_connection = NetworkInformation::create(frame()->domWindow()->executionContext());
     54     }
     55     return m_connection.get();
     56 }
     57 
     58 void NavigatorNetworkInformation::trace(Visitor* visitor)
     59 {
     60     visitor->trace(m_connection);
     61     WillBeHeapSupplement<Navigator>::trace(visitor);
     62 }
     63 
     64 } // namespace WebCore
     65