123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright (c) 2012 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.
- #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_
|