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