Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / netinfo / NavigatorNetworkInformation.cpp
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 blink {
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 blink