90 lines
3.3 KiB
C++
90 lines
3.3 KiB
C++
// 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_PASSIVE_H_
|
|
#define NET_BASE_NETWORK_CHANGE_NOTIFIER_PASSIVE_H_
|
|
|
|
#include "base/gtest_prod_util.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"
|
|
|
|
#if BUILDFLAG(IS_LINUX)
|
|
#include "net/base/address_map_cache_linux.h"
|
|
#endif
|
|
|
|
namespace net {
|
|
|
|
// A NetworkChangeNotifier that needs to be told about network changes by some
|
|
// other object. This is useful on platforms like ChromeOS, Lacros, and Android
|
|
// where only objects running in the browser process can listen for network
|
|
// state changes, but other processes want to add observers for network state.
|
|
// It's also useful on Linux where listening for network state changes in a
|
|
// sandboxed process requires loosening the sandbox policy too much.
|
|
class NET_EXPORT NetworkChangeNotifierPassive : public NetworkChangeNotifier {
|
|
public:
|
|
NetworkChangeNotifierPassive(
|
|
NetworkChangeNotifier::ConnectionType initial_connection_type,
|
|
NetworkChangeNotifier::ConnectionSubtype initial_connection_subtype);
|
|
NetworkChangeNotifierPassive(const NetworkChangeNotifierPassive&) = delete;
|
|
NetworkChangeNotifierPassive& operator=(const NetworkChangeNotifierPassive&) =
|
|
delete;
|
|
~NetworkChangeNotifierPassive() 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;
|
|
#if BUILDFLAG(IS_LINUX)
|
|
AddressMapOwnerLinux* GetAddressMapOwnerInternal() override;
|
|
#endif
|
|
|
|
private:
|
|
friend class NetworkChangeNotifierPassiveTest;
|
|
|
|
// For testing purposes, allows specifying a SystemDnsConfigChangeNotifier.
|
|
// If |system_dns_config_notifier| is nullptr, NetworkChangeNotifier create a
|
|
// global one.
|
|
NetworkChangeNotifierPassive(
|
|
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
|
|
NetworkChangeCalculatorParamsPassive();
|
|
|
|
THREAD_CHECKER(thread_checker_);
|
|
|
|
#if BUILDFLAG(IS_LINUX)
|
|
AddressMapCacheLinux address_map_cache_;
|
|
#endif
|
|
|
|
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_PASSIVE_H_
|