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