blob: 92e1c76beed199c28b255cc1f58cf701b02aaaae (
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
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_POSIX_H_
#define NET_BASE_NETWORK_CHANGE_NOTIFIER_POSIX_H_
#include "base/gtest_prod_util.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/synchronization/lock.h"
#include "base/threading/thread.h"
#include "base/threading/thread_checker.h"
#include "net/base/net_export.h"
#include "net/base/network_change_notifier.h"
namespace net {
// A NetworkChangeNotifier that needs to be told about network changes by some
// other object. This class can't directly listen for network changes because on
// ChromeOS and Android only objects running in the browser process can listen
// for network state changes.
class NET_EXPORT NetworkChangeNotifierPosix : public NetworkChangeNotifier {
public:
NetworkChangeNotifierPosix(
NetworkChangeNotifier::ConnectionType initial_connection_type,
NetworkChangeNotifier::ConnectionSubtype initial_connection_subtype);
NetworkChangeNotifierPosix(const NetworkChangeNotifierPosix&) = delete;
NetworkChangeNotifierPosix& operator=(const NetworkChangeNotifierPosix&) =
delete;
~NetworkChangeNotifierPosix() override;
// These methods are used to notify this object that a network property has
// changed. These must be called from the thread that owns this object.
void OnDNSChanged();
void OnIPAddressChanged();
void OnConnectionChanged(
NetworkChangeNotifier::ConnectionType connection_type);
void OnConnectionSubtypeChanged(
NetworkChangeNotifier::ConnectionType connection_type,
NetworkChangeNotifier::ConnectionSubtype connection_subtype);
protected:
// NetworkChangeNotifier overrides.
NetworkChangeNotifier::ConnectionType GetCurrentConnectionType()
const override;
void GetCurrentMaxBandwidthAndConnectionType(
double* max_bandwidth_mbps,
ConnectionType* connection_type) const override;
private:
friend class NetworkChangeNotifierPosixTest;
// For testing purposes, allows specifying a SystemDnsConfigChangeNotifier.
// If |system_dns_config_notifier| is nullptr, NetworkChangeNotifier create a
// global one.
NetworkChangeNotifierPosix(
NetworkChangeNotifier::ConnectionType initial_connection_type,
NetworkChangeNotifier::ConnectionSubtype initial_connection_subtype,
SystemDnsConfigChangeNotifier* system_dns_config_notifier);
// Calculates parameters used for network change notifier online/offline
// signals.
static NetworkChangeNotifier::NetworkChangeCalculatorParams
NetworkChangeCalculatorParamsPosix();
THREAD_CHECKER(thread_checker_);
mutable base::Lock lock_;
NetworkChangeNotifier::ConnectionType
connection_type_; // Guarded by |lock_|.
double max_bandwidth_mbps_; // Guarded by |lock_|.
};
} // namespace net
#endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_POSIX_H_
|