123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // 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.
- #include <string>
- #include <utility>
- #include "base/bind.h"
- #include "base/task/task_traits.h"
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "net/base/network_change_notifier_posix.h"
- #include "net/dns/dns_config_service_posix.h"
- #include "net/dns/system_dns_config_change_notifier.h"
- #if BUILDFLAG(IS_ANDROID)
- #include "net/android/network_change_notifier_android.h"
- #endif
- namespace net {
- NetworkChangeNotifierPosix::NetworkChangeNotifierPosix(
- NetworkChangeNotifier::ConnectionType initial_connection_type,
- NetworkChangeNotifier::ConnectionSubtype initial_connection_subtype)
- : NetworkChangeNotifierPosix(initial_connection_type,
- initial_connection_subtype,
- /*system_dns_config_notifier=*/nullptr) {}
- NetworkChangeNotifierPosix::NetworkChangeNotifierPosix(
- NetworkChangeNotifier::ConnectionType initial_connection_type,
- NetworkChangeNotifier::ConnectionSubtype initial_connection_subtype,
- SystemDnsConfigChangeNotifier* system_dns_config_notifier)
- : NetworkChangeNotifier(NetworkChangeCalculatorParamsPosix(),
- system_dns_config_notifier),
- connection_type_(initial_connection_type),
- max_bandwidth_mbps_(
- NetworkChangeNotifier::GetMaxBandwidthMbpsForConnectionSubtype(
- initial_connection_subtype)) {}
- NetworkChangeNotifierPosix::~NetworkChangeNotifierPosix() {
- ClearGlobalPointer();
- }
- void NetworkChangeNotifierPosix::OnDNSChanged() {
- GetCurrentSystemDnsConfigNotifier()->RefreshConfig();
- }
- void NetworkChangeNotifierPosix::OnIPAddressChanged() {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- NetworkChangeNotifier::NotifyObserversOfIPAddressChange();
- }
- void NetworkChangeNotifierPosix::OnConnectionChanged(
- NetworkChangeNotifier::ConnectionType connection_type) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- {
- base::AutoLock scoped_lock(lock_);
- connection_type_ = connection_type;
- }
- NetworkChangeNotifier::NotifyObserversOfConnectionTypeChange();
- }
- void NetworkChangeNotifierPosix::OnConnectionSubtypeChanged(
- NetworkChangeNotifier::ConnectionType connection_type,
- NetworkChangeNotifier::ConnectionSubtype connection_subtype) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- double max_bandwidth_mbps =
- GetMaxBandwidthMbpsForConnectionSubtype(connection_subtype);
- {
- base::AutoLock scoped_lock(lock_);
- max_bandwidth_mbps_ = max_bandwidth_mbps;
- }
- NetworkChangeNotifier::NotifyObserversOfMaxBandwidthChange(max_bandwidth_mbps,
- connection_type);
- }
- NetworkChangeNotifier::ConnectionType
- NetworkChangeNotifierPosix::GetCurrentConnectionType() const {
- base::AutoLock scoped_lock(lock_);
- return connection_type_;
- }
- void NetworkChangeNotifierPosix::GetCurrentMaxBandwidthAndConnectionType(
- double* max_bandwidth_mbps,
- ConnectionType* connection_type) const {
- base::AutoLock scoped_lock(lock_);
- *connection_type = connection_type_;
- *max_bandwidth_mbps = max_bandwidth_mbps_;
- }
- // static
- NetworkChangeNotifier::NetworkChangeCalculatorParams
- NetworkChangeNotifierPosix::NetworkChangeCalculatorParamsPosix() {
- NetworkChangeCalculatorParams params;
- #if BUILDFLAG(IS_CHROMEOS)
- // Delay values arrived at by simple experimentation and adjusted so as to
- // produce a single signal when switching between network connections.
- params.ip_address_offline_delay_ = base::Milliseconds(4000);
- params.ip_address_online_delay_ = base::Milliseconds(1000);
- params.connection_type_offline_delay_ = base::Milliseconds(500);
- params.connection_type_online_delay_ = base::Milliseconds(500);
- #elif BUILDFLAG(IS_ANDROID)
- params =
- net::NetworkChangeNotifierAndroid::NetworkChangeCalculatorParamsAndroid();
- #else
- NOTIMPLEMENTED();
- #endif
- return params;
- }
- } // namespace net
|