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