| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/network_change_notifier.h" | 5 #include "net/base/network_change_notifier.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/synchronization/lock.h" | 8 #include "base/synchronization/lock.h" |
| 9 #include "base/threading/thread_checker.h" | 9 #include "base/threading/thread_checker.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 class MockNetworkChangeNotifier : public NetworkChangeNotifier { | 38 class MockNetworkChangeNotifier : public NetworkChangeNotifier { |
| 39 public: | 39 public: |
| 40 virtual ConnectionType GetCurrentConnectionType() const OVERRIDE { | 40 virtual ConnectionType GetCurrentConnectionType() const OVERRIDE { |
| 41 return CONNECTION_UNKNOWN; | 41 return CONNECTION_UNKNOWN; |
| 42 } | 42 } |
| 43 }; | 43 }; |
| 44 | 44 |
| 45 } // namespace | 45 } // namespace |
| 46 | 46 |
| 47 // The main observer class that records UMAs for network events. | 47 // The main observer class that records UMAs for network events. |
| 48 class HistogramWatcher | 48 class HistogramWatcher : public NetworkChangeNotifier::ConnectionTypeObserver, |
| 49 : public NetworkChangeNotifier::ConnectionTypeObserver, | 49 public NetworkChangeNotifier::IPAddressObserver, |
| 50 public NetworkChangeNotifier::IPAddressObserver, | 50 public NetworkChangeNotifier::DNSObserver, |
| 51 public NetworkChangeNotifier::DNSObserver, | 51 public NetworkChangeNotifier::NetworkChangeObserver { |
| 52 public NetworkChangeNotifier::NetworkChangeObserver { | |
| 53 public: | 52 public: |
| 54 HistogramWatcher() | 53 HistogramWatcher() |
| 55 : last_ip_address_change_(base::TimeTicks::Now()), | 54 : last_ip_address_change_(base::TimeTicks::Now()), |
| 56 last_connection_change_(base::TimeTicks::Now()), | 55 last_connection_change_(base::TimeTicks::Now()), |
| 57 last_dns_change_(base::TimeTicks::Now()), | 56 last_dns_change_(base::TimeTicks::Now()), |
| 58 last_network_change_(base::TimeTicks::Now()), | 57 last_network_change_(base::TimeTicks::Now()), |
| 59 last_connection_type_(NetworkChangeNotifier::CONNECTION_UNKNOWN), | 58 last_connection_type_(NetworkChangeNotifier::CONNECTION_UNKNOWN), |
| 60 offline_packets_received_(0), | 59 offline_packets_received_(0), |
| 61 bytes_read_since_last_connection_change_(0), | 60 bytes_read_since_last_connection_change_(0), |
| 62 peak_kbps_since_last_connection_change_(0) {} | 61 peak_kbps_since_last_connection_change_(0) {} |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 break; | 209 break; |
| 211 } | 210 } |
| 212 | 211 |
| 213 if (type != NetworkChangeNotifier::CONNECTION_NONE) { | 212 if (type != NetworkChangeNotifier::CONNECTION_NONE) { |
| 214 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OnlineChange", state_duration); | 213 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OnlineChange", state_duration); |
| 215 | 214 |
| 216 if (offline_packets_received_) { | 215 if (offline_packets_received_) { |
| 217 if ((now - last_offline_packet_received_) < | 216 if ((now - last_offline_packet_received_) < |
| 218 base::TimeDelta::FromSeconds(5)) { | 217 base::TimeDelta::FromSeconds(5)) { |
| 219 // We can compare this sum with the sum of NCN.OfflineDataRecv. | 218 // We can compare this sum with the sum of NCN.OfflineDataRecv. |
| 220 UMA_HISTOGRAM_COUNTS_10000( | 219 UMA_HISTOGRAM_COUNTS_10000("NCN.OfflineDataRecvAny5sBeforeOnline", |
| 221 "NCN.OfflineDataRecvAny5sBeforeOnline", | 220 offline_packets_received_); |
| 222 offline_packets_received_); | |
| 223 } | 221 } |
| 224 | 222 |
| 225 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OfflineDataRecvUntilOnline", | 223 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OfflineDataRecvUntilOnline", |
| 226 now - last_offline_packet_received_); | 224 now - last_offline_packet_received_); |
| 227 } | 225 } |
| 228 } else { | 226 } else { |
| 229 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OfflineChange", state_duration); | 227 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OfflineChange", state_duration); |
| 230 } | 228 } |
| 231 UMA_HISTOGRAM_MEDIUM_TIMES( | 229 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.IPAddressChangeToConnectionTypeChange", |
| 232 "NCN.IPAddressChangeToConnectionTypeChange", | 230 now - last_ip_address_change_); |
| 233 now - last_ip_address_change_); | |
| 234 | 231 |
| 235 offline_packets_received_ = 0; | 232 offline_packets_received_ = 0; |
| 236 bytes_read_since_last_connection_change_ = 0; | 233 bytes_read_since_last_connection_change_ = 0; |
| 237 peak_kbps_since_last_connection_change_ = 0; | 234 peak_kbps_since_last_connection_change_ = 0; |
| 238 last_connection_type_ = type; | 235 last_connection_type_ = type; |
| 239 polling_interval_ = base::TimeDelta::FromSeconds(1); | 236 polling_interval_ = base::TimeDelta::FromSeconds(1); |
| 240 } | 237 } |
| 241 | 238 |
| 242 // NetworkChangeNotifier::DNSObserver implementation. | 239 // NetworkChangeNotifier::DNSObserver implementation. |
| 243 virtual void OnDNSChanged() OVERRIDE { | 240 virtual void OnDNSChanged() OVERRIDE { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 return; | 288 return; |
| 292 | 289 |
| 293 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OfflineDataRecv", | 290 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.OfflineDataRecv", |
| 294 now - last_connection_change_); | 291 now - last_connection_change_); |
| 295 offline_packets_received_++; | 292 offline_packets_received_++; |
| 296 last_offline_packet_received_ = now; | 293 last_offline_packet_received_ = now; |
| 297 | 294 |
| 298 if ((now - last_polled_connection_) > polling_interval_) { | 295 if ((now - last_polled_connection_) > polling_interval_) { |
| 299 polling_interval_ *= 2; | 296 polling_interval_ *= 2; |
| 300 last_polled_connection_ = now; | 297 last_polled_connection_ = now; |
| 301 last_polled_connection_type_ = | 298 last_polled_connection_type_ = NetworkChangeNotifier::GetConnectionType(); |
| 302 NetworkChangeNotifier::GetConnectionType(); | |
| 303 } | 299 } |
| 304 if (last_polled_connection_type_ == | 300 if (last_polled_connection_type_ == |
| 305 NetworkChangeNotifier::CONNECTION_NONE) { | 301 NetworkChangeNotifier::CONNECTION_NONE) { |
| 306 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.PollingOfflineDataRecv", | 302 UMA_HISTOGRAM_MEDIUM_TIMES("NCN.PollingOfflineDataRecv", |
| 307 now - last_connection_change_); | 303 now - last_connection_change_); |
| 308 } | 304 } |
| 309 } | 305 } |
| 310 | 306 |
| 311 private: | 307 private: |
| 312 static base::TimeDelta SinceLast(base::TimeTicks *last_time) { | 308 static base::TimeDelta SinceLast(base::TimeTicks* last_time) { |
| 313 base::TimeTicks current_time = base::TimeTicks::Now(); | 309 base::TimeTicks current_time = base::TimeTicks::Now(); |
| 314 base::TimeDelta delta = current_time - *last_time; | 310 base::TimeDelta delta = current_time - *last_time; |
| 315 *last_time = current_time; | 311 *last_time = current_time; |
| 316 return delta; | 312 return delta; |
| 317 } | 313 } |
| 318 | 314 |
| 319 base::TimeTicks last_ip_address_change_; | 315 base::TimeTicks last_ip_address_change_; |
| 320 base::TimeTicks last_connection_change_; | 316 base::TimeTicks last_connection_change_; |
| 321 base::TimeTicks last_dns_change_; | 317 base::TimeTicks last_dns_change_; |
| 322 base::TimeTicks last_network_change_; | 318 base::TimeTicks last_network_change_; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 DCHECK(thread_checker_.CalledOnValidThread()); | 400 DCHECK(thread_checker_.CalledOnValidThread()); |
| 405 DCHECK(g_network_change_notifier); | 401 DCHECK(g_network_change_notifier); |
| 406 RemoveConnectionTypeObserver(this); | 402 RemoveConnectionTypeObserver(this); |
| 407 RemoveIPAddressObserver(this); | 403 RemoveIPAddressObserver(this); |
| 408 } | 404 } |
| 409 | 405 |
| 410 // NetworkChangeNotifier::IPAddressObserver implementation. | 406 // NetworkChangeNotifier::IPAddressObserver implementation. |
| 411 virtual void OnIPAddressChanged() OVERRIDE { | 407 virtual void OnIPAddressChanged() OVERRIDE { |
| 412 DCHECK(thread_checker_.CalledOnValidThread()); | 408 DCHECK(thread_checker_.CalledOnValidThread()); |
| 413 base::TimeDelta delay = last_announced_connection_type_ == CONNECTION_NONE | 409 base::TimeDelta delay = last_announced_connection_type_ == CONNECTION_NONE |
| 414 ? params_.ip_address_offline_delay_ : params_.ip_address_online_delay_; | 410 ? params_.ip_address_offline_delay_ |
| 411 : params_.ip_address_online_delay_; |
| 415 // Cancels any previous timer. | 412 // Cancels any previous timer. |
| 416 timer_.Start(FROM_HERE, delay, this, &NetworkChangeCalculator::Notify); | 413 timer_.Start(FROM_HERE, delay, this, &NetworkChangeCalculator::Notify); |
| 417 } | 414 } |
| 418 | 415 |
| 419 // NetworkChangeNotifier::ConnectionTypeObserver implementation. | 416 // NetworkChangeNotifier::ConnectionTypeObserver implementation. |
| 420 virtual void OnConnectionTypeChanged(ConnectionType type) OVERRIDE { | 417 virtual void OnConnectionTypeChanged(ConnectionType type) OVERRIDE { |
| 421 DCHECK(thread_checker_.CalledOnValidThread()); | 418 DCHECK(thread_checker_.CalledOnValidThread()); |
| 422 pending_connection_type_ = type; | 419 pending_connection_type_ = type; |
| 423 base::TimeDelta delay = last_announced_connection_type_ == CONNECTION_NONE | 420 base::TimeDelta delay = last_announced_connection_type_ == CONNECTION_NONE |
| 424 ? params_.connection_type_offline_delay_ | 421 ? params_.connection_type_offline_delay_ |
| 425 : params_.connection_type_online_delay_; | 422 : params_.connection_type_online_delay_; |
| 426 // Cancels any previous timer. | 423 // Cancels any previous timer. |
| 427 timer_.Start(FROM_HERE, delay, this, &NetworkChangeCalculator::Notify); | 424 timer_.Start(FROM_HERE, delay, this, &NetworkChangeCalculator::Notify); |
| 428 } | 425 } |
| 429 | 426 |
| 430 private: | 427 private: |
| 431 void Notify() { | 428 void Notify() { |
| 432 DCHECK(thread_checker_.CalledOnValidThread()); | 429 DCHECK(thread_checker_.CalledOnValidThread()); |
| 433 // Don't bother signaling about dead connections. | 430 // Don't bother signaling about dead connections. |
| 434 if (have_announced_ && | 431 if (have_announced_ && |
| 435 (last_announced_connection_type_ == CONNECTION_NONE) && | 432 (last_announced_connection_type_ == CONNECTION_NONE) && |
| (...skipping 26 matching lines...) Expand all Loading... |
| 462 DISALLOW_COPY_AND_ASSIGN(NetworkChangeCalculator); | 459 DISALLOW_COPY_AND_ASSIGN(NetworkChangeCalculator); |
| 463 }; | 460 }; |
| 464 | 461 |
| 465 NetworkChangeNotifier::~NetworkChangeNotifier() { | 462 NetworkChangeNotifier::~NetworkChangeNotifier() { |
| 466 network_change_calculator_.reset(); | 463 network_change_calculator_.reset(); |
| 467 DCHECK_EQ(this, g_network_change_notifier); | 464 DCHECK_EQ(this, g_network_change_notifier); |
| 468 g_network_change_notifier = NULL; | 465 g_network_change_notifier = NULL; |
| 469 } | 466 } |
| 470 | 467 |
| 471 // static | 468 // static |
| 472 void NetworkChangeNotifier::SetFactory( | 469 void NetworkChangeNotifier::SetFactory(NetworkChangeNotifierFactory* factory) { |
| 473 NetworkChangeNotifierFactory* factory) { | |
| 474 CHECK(!g_network_change_notifier_factory); | 470 CHECK(!g_network_change_notifier_factory); |
| 475 g_network_change_notifier_factory = factory; | 471 g_network_change_notifier_factory = factory; |
| 476 } | 472 } |
| 477 | 473 |
| 478 // static | 474 // static |
| 479 NetworkChangeNotifier* NetworkChangeNotifier::Create() { | 475 NetworkChangeNotifier* NetworkChangeNotifier::Create() { |
| 480 if (g_network_change_notifier_factory) | 476 if (g_network_change_notifier_factory) |
| 481 return g_network_change_notifier_factory->CreateInstance(); | 477 return g_network_change_notifier_factory->CreateInstance(); |
| 482 | 478 |
| 483 #if defined(OS_WIN) | 479 #if defined(OS_WIN) |
| 484 NetworkChangeNotifierWin* network_change_notifier = | 480 NetworkChangeNotifierWin* network_change_notifier = |
| 485 new NetworkChangeNotifierWin(); | 481 new NetworkChangeNotifierWin(); |
| 486 network_change_notifier->WatchForAddressChange(); | 482 network_change_notifier->WatchForAddressChange(); |
| 487 return network_change_notifier; | 483 return network_change_notifier; |
| 488 #elif defined(OS_CHROMEOS) || defined(OS_ANDROID) | 484 #elif defined(OS_CHROMEOS) || defined(OS_ANDROID) |
| 489 // ChromeOS and Android builds MUST use their own class factory. | 485 // ChromeOS and Android builds MUST use their own class factory. |
| 490 #if !defined(OS_CHROMEOS) | 486 #if !defined(OS_CHROMEOS) |
| 491 // TODO(oshima): ash_shell do not have access to chromeos'es | 487 // TODO(oshima): ash_shell do not have access to chromeos'es |
| 492 // notifier yet. Re-enable this when chromeos'es notifier moved to | 488 // notifier yet. Re-enable this when chromeos'es notifier moved to |
| 493 // chromeos root directory. crbug.com/119298. | 489 // chromeos root directory. crbug.com/119298. |
| 494 CHECK(false); | 490 CHECK(false); |
| 495 #endif | 491 #endif |
| 496 return NULL; | 492 return NULL; |
| 497 #elif defined(OS_LINUX) | 493 #elif defined(OS_LINUX) |
| 498 return NetworkChangeNotifierLinux::Create(); | 494 return NetworkChangeNotifierLinux::Create(); |
| 499 #elif defined(OS_MACOSX) | 495 #elif defined(OS_MACOSX) |
| 500 return new NetworkChangeNotifierMac(); | 496 return new NetworkChangeNotifierMac(); |
| 501 #else | 497 #else |
| 502 NOTIMPLEMENTED(); | 498 NOTIMPLEMENTED(); |
| 503 return NULL; | 499 return NULL; |
| 504 #endif | 500 #endif |
| 505 } | 501 } |
| 506 | 502 |
| 507 // static | 503 // static |
| 508 NetworkChangeNotifier::ConnectionType | 504 NetworkChangeNotifier::ConnectionType |
| 509 NetworkChangeNotifier::GetConnectionType() { | 505 NetworkChangeNotifier::GetConnectionType() { |
| 510 return g_network_change_notifier ? | 506 return g_network_change_notifier |
| 511 g_network_change_notifier->GetCurrentConnectionType() : | 507 ? g_network_change_notifier->GetCurrentConnectionType() |
| 512 CONNECTION_UNKNOWN; | 508 : CONNECTION_UNKNOWN; |
| 513 } | 509 } |
| 514 | 510 |
| 515 // static | 511 // static |
| 516 void NetworkChangeNotifier::GetDnsConfig(DnsConfig* config) { | 512 void NetworkChangeNotifier::GetDnsConfig(DnsConfig* config) { |
| 517 if (!g_network_change_notifier) { | 513 if (!g_network_change_notifier) { |
| 518 *config = DnsConfig(); | 514 *config = DnsConfig(); |
| 519 } else { | 515 } else { |
| 520 g_network_change_notifier->network_state_->GetDnsConfig(config); | 516 g_network_change_notifier->network_state_->GetDnsConfig(config); |
| 521 } | 517 } |
| 522 } | 518 } |
| 523 | 519 |
| 524 // static | 520 // static |
| 525 const char* NetworkChangeNotifier::ConnectionTypeToString( | 521 const char* NetworkChangeNotifier::ConnectionTypeToString(ConnectionType type) { |
| 526 ConnectionType type) { | |
| 527 static const char* kConnectionTypeNames[] = { | 522 static const char* kConnectionTypeNames[] = { |
| 528 "CONNECTION_UNKNOWN", | 523 "CONNECTION_UNKNOWN", "CONNECTION_ETHERNET", "CONNECTION_WIFI", |
| 529 "CONNECTION_ETHERNET", | 524 "CONNECTION_2G", "CONNECTION_3G", "CONNECTION_4G", |
| 530 "CONNECTION_WIFI", | 525 "CONNECTION_NONE"}; |
| 531 "CONNECTION_2G", | 526 COMPILE_ASSERT(arraysize(kConnectionTypeNames) == |
| 532 "CONNECTION_3G", | 527 NetworkChangeNotifier::CONNECTION_NONE + 1, |
| 533 "CONNECTION_4G", | 528 ConnectionType_name_count_mismatch); |
| 534 "CONNECTION_NONE" | |
| 535 }; | |
| 536 COMPILE_ASSERT( | |
| 537 arraysize(kConnectionTypeNames) == | |
| 538 NetworkChangeNotifier::CONNECTION_NONE + 1, | |
| 539 ConnectionType_name_count_mismatch); | |
| 540 if (type < CONNECTION_UNKNOWN || type > CONNECTION_NONE) { | 529 if (type < CONNECTION_UNKNOWN || type > CONNECTION_NONE) { |
| 541 NOTREACHED(); | 530 NOTREACHED(); |
| 542 return "CONNECTION_INVALID"; | 531 return "CONNECTION_INVALID"; |
| 543 } | 532 } |
| 544 return kConnectionTypeNames[type]; | 533 return kConnectionTypeNames[type]; |
| 545 } | 534 } |
| 546 | 535 |
| 547 // static | 536 // static |
| 548 void NetworkChangeNotifier::NotifyDataReceived(const URLRequest& request, | 537 void NetworkChangeNotifier::NotifyDataReceived(const URLRequest& request, |
| 549 int bytes_read) { | 538 int bytes_read) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 567 void NetworkChangeNotifier::ShutdownHistogramWatcher() { | 556 void NetworkChangeNotifier::ShutdownHistogramWatcher() { |
| 568 if (!g_network_change_notifier) | 557 if (!g_network_change_notifier) |
| 569 return; | 558 return; |
| 570 g_network_change_notifier->histogram_watcher_.reset(); | 559 g_network_change_notifier->histogram_watcher_.reset(); |
| 571 } | 560 } |
| 572 | 561 |
| 573 #if defined(OS_LINUX) | 562 #if defined(OS_LINUX) |
| 574 // static | 563 // static |
| 575 const internal::AddressTrackerLinux* | 564 const internal::AddressTrackerLinux* |
| 576 NetworkChangeNotifier::GetAddressTracker() { | 565 NetworkChangeNotifier::GetAddressTracker() { |
| 577 return g_network_change_notifier ? | 566 return g_network_change_notifier |
| 578 g_network_change_notifier->GetAddressTrackerInternal() : NULL; | 567 ? g_network_change_notifier->GetAddressTrackerInternal() |
| 568 : NULL; |
| 579 } | 569 } |
| 580 #endif | 570 #endif |
| 581 | 571 |
| 582 // static | 572 // static |
| 583 bool NetworkChangeNotifier::IsOffline() { | 573 bool NetworkChangeNotifier::IsOffline() { |
| 584 return GetConnectionType() == CONNECTION_NONE; | 574 return GetConnectionType() == CONNECTION_NONE; |
| 585 } | 575 } |
| 586 | 576 |
| 587 // static | 577 // static |
| 588 bool NetworkChangeNotifier::IsConnectionCellular(ConnectionType type) { | 578 bool NetworkChangeNotifier::IsConnectionCellular(ConnectionType type) { |
| 589 bool is_cellular = false; | 579 bool is_cellular = false; |
| 590 switch (type) { | 580 switch (type) { |
| 591 case CONNECTION_2G: | 581 case CONNECTION_2G: |
| 592 case CONNECTION_3G: | 582 case CONNECTION_3G: |
| 593 case CONNECTION_4G: | 583 case CONNECTION_4G: |
| 594 is_cellular = true; | 584 is_cellular = true; |
| 595 break; | 585 break; |
| 596 case CONNECTION_UNKNOWN: | 586 case CONNECTION_UNKNOWN: |
| 597 case CONNECTION_ETHERNET: | 587 case CONNECTION_ETHERNET: |
| 598 case CONNECTION_WIFI: | 588 case CONNECTION_WIFI: |
| 599 case CONNECTION_NONE: | 589 case CONNECTION_NONE: |
| 600 is_cellular = false; | 590 is_cellular = false; |
| 601 break; | 591 break; |
| 602 } | 592 } |
| 603 return is_cellular; | 593 return is_cellular; |
| 604 } | 594 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 void NetworkChangeNotifier::RemoveNetworkChangeObserver( | 652 void NetworkChangeNotifier::RemoveNetworkChangeObserver( |
| 663 NetworkChangeObserver* observer) { | 653 NetworkChangeObserver* observer) { |
| 664 if (g_network_change_notifier) { | 654 if (g_network_change_notifier) { |
| 665 g_network_change_notifier->network_change_observer_list_->RemoveObserver( | 655 g_network_change_notifier->network_change_observer_list_->RemoveObserver( |
| 666 observer); | 656 observer); |
| 667 } | 657 } |
| 668 } | 658 } |
| 669 | 659 |
| 670 NetworkChangeNotifier::NetworkChangeNotifier( | 660 NetworkChangeNotifier::NetworkChangeNotifier( |
| 671 const NetworkChangeCalculatorParams& params | 661 const NetworkChangeCalculatorParams& params |
| 672 /*= NetworkChangeCalculatorParams()*/) | 662 /*= NetworkChangeCalculatorParams()*/) |
| 673 : ip_address_observer_list_( | 663 : ip_address_observer_list_(new ObserverListThreadSafe<IPAddressObserver>( |
| 674 new ObserverListThreadSafe<IPAddressObserver>( | 664 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), |
| 675 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), | |
| 676 connection_type_observer_list_( | 665 connection_type_observer_list_( |
| 677 new ObserverListThreadSafe<ConnectionTypeObserver>( | 666 new ObserverListThreadSafe<ConnectionTypeObserver>( |
| 678 ObserverListBase<ConnectionTypeObserver>::NOTIFY_EXISTING_ONLY)), | 667 ObserverListBase<ConnectionTypeObserver>::NOTIFY_EXISTING_ONLY)), |
| 679 resolver_state_observer_list_( | 668 resolver_state_observer_list_(new ObserverListThreadSafe<DNSObserver>( |
| 680 new ObserverListThreadSafe<DNSObserver>( | 669 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)), |
| 681 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)), | |
| 682 network_change_observer_list_( | 670 network_change_observer_list_( |
| 683 new ObserverListThreadSafe<NetworkChangeObserver>( | 671 new ObserverListThreadSafe<NetworkChangeObserver>( |
| 684 ObserverListBase<NetworkChangeObserver>::NOTIFY_EXISTING_ONLY)), | 672 ObserverListBase<NetworkChangeObserver>::NOTIFY_EXISTING_ONLY)), |
| 685 network_state_(new NetworkState()), | 673 network_state_(new NetworkState()), |
| 686 network_change_calculator_(new NetworkChangeCalculator(params)) { | 674 network_change_calculator_(new NetworkChangeCalculator(params)) { |
| 687 DCHECK(!g_network_change_notifier); | 675 DCHECK(!g_network_change_notifier); |
| 688 g_network_change_notifier = this; | 676 g_network_change_notifier = this; |
| 689 network_change_calculator_->Init(); | 677 network_change_calculator_->Init(); |
| 690 } | 678 } |
| 691 | 679 |
| 692 #if defined(OS_LINUX) | 680 #if defined(OS_LINUX) |
| 693 const internal::AddressTrackerLinux* | 681 const internal::AddressTrackerLinux* |
| 694 NetworkChangeNotifier::GetAddressTrackerInternal() const { | 682 NetworkChangeNotifier::GetAddressTrackerInternal() const { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 716 void NetworkChangeNotifier::SetDnsConfig(const DnsConfig& config) { | 704 void NetworkChangeNotifier::SetDnsConfig(const DnsConfig& config) { |
| 717 if (!g_network_change_notifier) | 705 if (!g_network_change_notifier) |
| 718 return; | 706 return; |
| 719 g_network_change_notifier->network_state_->SetDnsConfig(config); | 707 g_network_change_notifier->network_state_->SetDnsConfig(config); |
| 720 NotifyObserversOfDNSChange(); | 708 NotifyObserversOfDNSChange(); |
| 721 } | 709 } |
| 722 | 710 |
| 723 void NetworkChangeNotifier::NotifyObserversOfConnectionTypeChange() { | 711 void NetworkChangeNotifier::NotifyObserversOfConnectionTypeChange() { |
| 724 if (g_network_change_notifier) { | 712 if (g_network_change_notifier) { |
| 725 g_network_change_notifier->connection_type_observer_list_->Notify( | 713 g_network_change_notifier->connection_type_observer_list_->Notify( |
| 726 &ConnectionTypeObserver::OnConnectionTypeChanged, | 714 &ConnectionTypeObserver::OnConnectionTypeChanged, GetConnectionType()); |
| 727 GetConnectionType()); | |
| 728 } | 715 } |
| 729 } | 716 } |
| 730 | 717 |
| 731 void NetworkChangeNotifier::NotifyObserversOfNetworkChange( | 718 void NetworkChangeNotifier::NotifyObserversOfNetworkChange( |
| 732 ConnectionType type) { | 719 ConnectionType type) { |
| 733 if (g_network_change_notifier) { | 720 if (g_network_change_notifier) { |
| 734 g_network_change_notifier->network_change_observer_list_->Notify( | 721 g_network_change_notifier->network_change_observer_list_->Notify( |
| 735 &NetworkChangeObserver::OnNetworkChanged, | 722 &NetworkChangeObserver::OnNetworkChanged, type); |
| 736 type); | |
| 737 } | 723 } |
| 738 } | 724 } |
| 739 | 725 |
| 740 NetworkChangeNotifier::DisableForTest::DisableForTest() | 726 NetworkChangeNotifier::DisableForTest::DisableForTest() |
| 741 : network_change_notifier_(g_network_change_notifier) { | 727 : network_change_notifier_(g_network_change_notifier) { |
| 742 DCHECK(g_network_change_notifier); | 728 DCHECK(g_network_change_notifier); |
| 743 g_network_change_notifier = NULL; | 729 g_network_change_notifier = NULL; |
| 744 } | 730 } |
| 745 | 731 |
| 746 NetworkChangeNotifier::DisableForTest::~DisableForTest() { | 732 NetworkChangeNotifier::DisableForTest::~DisableForTest() { |
| 747 DCHECK(!g_network_change_notifier); | 733 DCHECK(!g_network_change_notifier); |
| 748 g_network_change_notifier = network_change_notifier_; | 734 g_network_change_notifier = network_change_notifier_; |
| 749 } | 735 } |
| 750 | 736 |
| 751 } // namespace net | 737 } // namespace net |
| OLD | NEW |