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 13namespace blink { 14 15NavigatorNetworkInformation::NavigatorNetworkInformation(Navigator& navigator) 16 : DOMWindowProperty(navigator.frame()) 17{ 18} 19 20DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(NavigatorNetworkInformation); 21 22NavigatorNetworkInformation& NavigatorNetworkInformation::from(Navigator& navigator) 23{ 24 NavigatorNetworkInformation* supplement = toNavigatorNetworkInformation(navigator); 25 if (!supplement) { 26 supplement = new NavigatorNetworkInformation(navigator); 27 provideTo(navigator, supplementName(), adoptPtrWillBeNoop(supplement)); 28 } 29 return *supplement; 30} 31 32NavigatorNetworkInformation* NavigatorNetworkInformation::toNavigatorNetworkInformation(Navigator& navigator) 33{ 34 return static_cast<NavigatorNetworkInformation*>(WillBeHeapSupplement<Navigator>::from(navigator, supplementName())); 35} 36 37const char* NavigatorNetworkInformation::supplementName() 38{ 39 return "NavigatorNetworkInformation"; 40} 41 42NetworkInformation* NavigatorNetworkInformation::connection(Navigator& navigator) 43{ 44 return NavigatorNetworkInformation::from(navigator).connection(); 45} 46 47NetworkInformation* NavigatorNetworkInformation::connection() 48{ 49 if (!m_connection && frame()) { 50 ASSERT(frame()->domWindow()); 51 m_connection = NetworkInformation::create(frame()->domWindow()->executionContext()); 52 } 53 return m_connection.get(); 54} 55 56void NavigatorNetworkInformation::trace(Visitor* visitor) 57{ 58 visitor->trace(m_connection); 59 WillBeHeapSupplement<Navigator>::trace(visitor); 60 DOMWindowProperty::trace(visitor); 61} 62 63} // namespace blink 64