blob: d09d52773ee59bc374322a08b366e30b8be661d9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/download/internal/scheduler/network_listener.h"
namespace download {
namespace {
// Converts a ConnectionType to NetworkListener::NetworkStatus.
NetworkListener::NetworkStatus ToNetworkStatus(
net::NetworkChangeNotifier::ConnectionType type) {
switch (type) {
case net::NetworkChangeNotifier::CONNECTION_ETHERNET:
case net::NetworkChangeNotifier::CONNECTION_WIFI:
return NetworkListener::NetworkStatus::UNMETERED;
case net::NetworkChangeNotifier::CONNECTION_2G:
case net::NetworkChangeNotifier::CONNECTION_3G:
case net::NetworkChangeNotifier::CONNECTION_4G:
return NetworkListener::NetworkStatus::METERED;
case net::NetworkChangeNotifier::CONNECTION_UNKNOWN:
case net::NetworkChangeNotifier::CONNECTION_NONE:
case net::NetworkChangeNotifier::CONNECTION_BLUETOOTH:
return NetworkListener::NetworkStatus::DISCONNECTED;
}
NOTREACHED();
return NetworkListener::NetworkStatus::DISCONNECTED;
}
} // namespace
NetworkListener::NetworkListener()
: status_(NetworkStatus::DISCONNECTED), listening_(false) {}
NetworkListener::~NetworkListener() {
Stop();
}
NetworkListener::NetworkStatus NetworkListener::CurrentNetworkStatus() const {
return ToNetworkStatus(net::NetworkChangeNotifier::GetConnectionType());
}
void NetworkListener::Start() {
if (listening_)
return;
net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
status_ = ToNetworkStatus(net::NetworkChangeNotifier::GetConnectionType());
listening_ = true;
}
void NetworkListener::Stop() {
if (!listening_)
return;
net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
status_ = ToNetworkStatus(net::NetworkChangeNotifier::CONNECTION_UNKNOWN);
listening_ = false;
}
void NetworkListener::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void NetworkListener::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void NetworkListener::OnConnectionTypeChanged(
net::NetworkChangeNotifier::ConnectionType type) {
NetworkStatus new_status = ToNetworkStatus(type);
if (status_ != new_status) {
status_ = new_status;
NotifyNetworkChange(status_);
}
}
void NetworkListener::NotifyNetworkChange(NetworkStatus network_status) {
for (auto& observer : observers_)
observer.OnNetworkChange(network_status);
}
} // namespace download
|