| 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 <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| (...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 } | 681 } |
| 682 | 682 |
| 683 void NetworkChangeNotifier::AddNetworkChangeObserver( | 683 void NetworkChangeNotifier::AddNetworkChangeObserver( |
| 684 NetworkChangeObserver* observer) { | 684 NetworkChangeObserver* observer) { |
| 685 if (g_network_change_notifier) { | 685 if (g_network_change_notifier) { |
| 686 g_network_change_notifier->network_change_observer_list_->AddObserver( | 686 g_network_change_notifier->network_change_observer_list_->AddObserver( |
| 687 observer); | 687 observer); |
| 688 } | 688 } |
| 689 } | 689 } |
| 690 | 690 |
| 691 void NetworkChangeNotifier::AddMaxBandwidthObserver( |
| 692 MaxBandwidthObserver* observer) { |
| 693 if (g_network_change_notifier) { |
| 694 g_network_change_notifier->max_bandwidth_observer_list_->AddObserver( |
| 695 observer); |
| 696 } |
| 697 } |
| 698 |
| 691 void NetworkChangeNotifier::RemoveIPAddressObserver( | 699 void NetworkChangeNotifier::RemoveIPAddressObserver( |
| 692 IPAddressObserver* observer) { | 700 IPAddressObserver* observer) { |
| 693 if (g_network_change_notifier) { | 701 if (g_network_change_notifier) { |
| 694 g_network_change_notifier->ip_address_observer_list_->RemoveObserver( | 702 g_network_change_notifier->ip_address_observer_list_->RemoveObserver( |
| 695 observer); | 703 observer); |
| 696 } | 704 } |
| 697 } | 705 } |
| 698 | 706 |
| 699 void NetworkChangeNotifier::RemoveConnectionTypeObserver( | 707 void NetworkChangeNotifier::RemoveConnectionTypeObserver( |
| 700 ConnectionTypeObserver* observer) { | 708 ConnectionTypeObserver* observer) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 712 } | 720 } |
| 713 | 721 |
| 714 void NetworkChangeNotifier::RemoveNetworkChangeObserver( | 722 void NetworkChangeNotifier::RemoveNetworkChangeObserver( |
| 715 NetworkChangeObserver* observer) { | 723 NetworkChangeObserver* observer) { |
| 716 if (g_network_change_notifier) { | 724 if (g_network_change_notifier) { |
| 717 g_network_change_notifier->network_change_observer_list_->RemoveObserver( | 725 g_network_change_notifier->network_change_observer_list_->RemoveObserver( |
| 718 observer); | 726 observer); |
| 719 } | 727 } |
| 720 } | 728 } |
| 721 | 729 |
| 730 void NetworkChangeNotifier::RemoveMaxBandwidthObserver( |
| 731 MaxBandwidthObserver* observer) { |
| 732 if (g_network_change_notifier) { |
| 733 g_network_change_notifier->max_bandwidth_observer_list_->RemoveObserver( |
| 734 observer); |
| 735 } |
| 736 } |
| 737 |
| 722 // static | 738 // static |
| 723 void NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests() { | 739 void NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests() { |
| 724 if (g_network_change_notifier) | 740 if (g_network_change_notifier) |
| 725 g_network_change_notifier->NotifyObserversOfIPAddressChangeImpl(); | 741 g_network_change_notifier->NotifyObserversOfIPAddressChangeImpl(); |
| 726 } | 742 } |
| 727 | 743 |
| 728 // static | 744 // static |
| 729 void NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests( | 745 void NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests( |
| 730 ConnectionType type) { | 746 ConnectionType type) { |
| 731 if (g_network_change_notifier) | 747 if (g_network_change_notifier) |
| 732 g_network_change_notifier->NotifyObserversOfConnectionTypeChangeImpl(type); | 748 g_network_change_notifier->NotifyObserversOfConnectionTypeChangeImpl(type); |
| 733 } | 749 } |
| 734 | 750 |
| 735 // static | 751 // static |
| 736 void NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( | 752 void NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( |
| 737 ConnectionType type) { | 753 ConnectionType type) { |
| 738 if (g_network_change_notifier) | 754 if (g_network_change_notifier) |
| 739 g_network_change_notifier->NotifyObserversOfNetworkChangeImpl(type); | 755 g_network_change_notifier->NotifyObserversOfNetworkChangeImpl(type); |
| 740 } | 756 } |
| 741 | 757 |
| 742 // static | 758 // static |
| 743 void NetworkChangeNotifier::SetTestNotificationsOnly(bool test_only) { | 759 void NetworkChangeNotifier::SetTestNotificationsOnly(bool test_only) { |
| 744 if (g_network_change_notifier) | 760 if (g_network_change_notifier) |
| 745 g_network_change_notifier->test_notifications_only_ = test_only; | 761 g_network_change_notifier->test_notifications_only_ = test_only; |
| 746 } | 762 } |
| 747 | 763 |
| 748 NetworkChangeNotifier::NetworkChangeNotifier( | 764 NetworkChangeNotifier::NetworkChangeNotifier( |
| 749 const NetworkChangeCalculatorParams& params | 765 const NetworkChangeCalculatorParams& params |
| 750 /*= NetworkChangeCalculatorParams()*/) | 766 /*= NetworkChangeCalculatorParams()*/) |
| 751 : ip_address_observer_list_( | 767 : ip_address_observer_list_(new ObserverListThreadSafe<IPAddressObserver>( |
| 752 new ObserverListThreadSafe<IPAddressObserver>( | 768 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), |
| 753 ObserverListBase<IPAddressObserver>::NOTIFY_EXISTING_ONLY)), | |
| 754 connection_type_observer_list_( | 769 connection_type_observer_list_( |
| 755 new ObserverListThreadSafe<ConnectionTypeObserver>( | 770 new ObserverListThreadSafe<ConnectionTypeObserver>( |
| 756 ObserverListBase<ConnectionTypeObserver>::NOTIFY_EXISTING_ONLY)), | 771 ObserverListBase<ConnectionTypeObserver>::NOTIFY_EXISTING_ONLY)), |
| 757 resolver_state_observer_list_( | 772 resolver_state_observer_list_(new ObserverListThreadSafe<DNSObserver>( |
| 758 new ObserverListThreadSafe<DNSObserver>( | 773 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)), |
| 759 ObserverListBase<DNSObserver>::NOTIFY_EXISTING_ONLY)), | |
| 760 network_change_observer_list_( | 774 network_change_observer_list_( |
| 761 new ObserverListThreadSafe<NetworkChangeObserver>( | 775 new ObserverListThreadSafe<NetworkChangeObserver>( |
| 762 ObserverListBase<NetworkChangeObserver>::NOTIFY_EXISTING_ONLY)), | 776 ObserverListBase<NetworkChangeObserver>::NOTIFY_EXISTING_ONLY)), |
| 777 max_bandwidth_observer_list_( |
| 778 new ObserverListThreadSafe<MaxBandwidthObserver>( |
| 779 ObserverListBase<MaxBandwidthObserver>::NOTIFY_EXISTING_ONLY)), |
| 763 network_state_(new NetworkState()), | 780 network_state_(new NetworkState()), |
| 764 network_change_calculator_(new NetworkChangeCalculator(params)), | 781 network_change_calculator_(new NetworkChangeCalculator(params)), |
| 765 test_notifications_only_(false) { | 782 test_notifications_only_(false) { |
| 766 DCHECK(!g_network_change_notifier); | 783 DCHECK(!g_network_change_notifier); |
| 767 g_network_change_notifier = this; | 784 g_network_change_notifier = this; |
| 768 network_change_calculator_->Init(); | 785 network_change_calculator_->Init(); |
| 769 } | 786 } |
| 770 | 787 |
| 771 #if defined(OS_LINUX) | 788 #if defined(OS_LINUX) |
| 772 const internal::AddressTrackerLinux* | 789 const internal::AddressTrackerLinux* |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 // static | 896 // static |
| 880 void NetworkChangeNotifier::NotifyObserversOfNetworkChange( | 897 void NetworkChangeNotifier::NotifyObserversOfNetworkChange( |
| 881 ConnectionType type) { | 898 ConnectionType type) { |
| 882 if (g_network_change_notifier && | 899 if (g_network_change_notifier && |
| 883 !g_network_change_notifier->test_notifications_only_) { | 900 !g_network_change_notifier->test_notifications_only_) { |
| 884 g_network_change_notifier->NotifyObserversOfNetworkChangeImpl(type); | 901 g_network_change_notifier->NotifyObserversOfNetworkChangeImpl(type); |
| 885 } | 902 } |
| 886 } | 903 } |
| 887 | 904 |
| 888 // static | 905 // static |
| 906 void NetworkChangeNotifier::NotifyObserversOfMaxBandwidthChange( |
| 907 double max_bandwidth_mbps) { |
| 908 if (g_network_change_notifier && |
| 909 !g_network_change_notifier->test_notifications_only_) { |
| 910 g_network_change_notifier->NotifyObserversOfMaxBandwidthChangeImpl( |
| 911 max_bandwidth_mbps); |
| 912 } |
| 913 } |
| 914 |
| 915 // static |
| 889 void NetworkChangeNotifier::NotifyObserversOfDNSChange() { | 916 void NetworkChangeNotifier::NotifyObserversOfDNSChange() { |
| 890 if (g_network_change_notifier && | 917 if (g_network_change_notifier && |
| 891 !g_network_change_notifier->test_notifications_only_) { | 918 !g_network_change_notifier->test_notifications_only_) { |
| 892 g_network_change_notifier->NotifyObserversOfDNSChangeImpl(); | 919 g_network_change_notifier->NotifyObserversOfDNSChangeImpl(); |
| 893 } | 920 } |
| 894 } | 921 } |
| 895 | 922 |
| 896 // static | 923 // static |
| 897 void NetworkChangeNotifier::SetDnsConfig(const DnsConfig& config) { | 924 void NetworkChangeNotifier::SetDnsConfig(const DnsConfig& config) { |
| 898 if (!g_network_change_notifier) | 925 if (!g_network_change_notifier) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 914 void NetworkChangeNotifier::NotifyObserversOfNetworkChangeImpl( | 941 void NetworkChangeNotifier::NotifyObserversOfNetworkChangeImpl( |
| 915 ConnectionType type) { | 942 ConnectionType type) { |
| 916 network_change_observer_list_->Notify( | 943 network_change_observer_list_->Notify( |
| 917 &NetworkChangeObserver::OnNetworkChanged, type); | 944 &NetworkChangeObserver::OnNetworkChanged, type); |
| 918 } | 945 } |
| 919 | 946 |
| 920 void NetworkChangeNotifier::NotifyObserversOfDNSChangeImpl() { | 947 void NetworkChangeNotifier::NotifyObserversOfDNSChangeImpl() { |
| 921 resolver_state_observer_list_->Notify(&DNSObserver::OnDNSChanged); | 948 resolver_state_observer_list_->Notify(&DNSObserver::OnDNSChanged); |
| 922 } | 949 } |
| 923 | 950 |
| 951 void NetworkChangeNotifier::NotifyObserversOfMaxBandwidthChangeImpl( |
| 952 double max_bandwidth_mbps) { |
| 953 max_bandwidth_observer_list_->Notify( |
| 954 &MaxBandwidthObserver::OnMaxBandwidthChanged, max_bandwidth_mbps); |
| 955 } |
| 956 |
| 924 NetworkChangeNotifier::DisableForTest::DisableForTest() | 957 NetworkChangeNotifier::DisableForTest::DisableForTest() |
| 925 : network_change_notifier_(g_network_change_notifier) { | 958 : network_change_notifier_(g_network_change_notifier) { |
| 926 DCHECK(g_network_change_notifier); | 959 DCHECK(g_network_change_notifier); |
| 927 g_network_change_notifier = NULL; | 960 g_network_change_notifier = NULL; |
| 928 } | 961 } |
| 929 | 962 |
| 930 NetworkChangeNotifier::DisableForTest::~DisableForTest() { | 963 NetworkChangeNotifier::DisableForTest::~DisableForTest() { |
| 931 DCHECK(!g_network_change_notifier); | 964 DCHECK(!g_network_change_notifier); |
| 932 g_network_change_notifier = network_change_notifier_; | 965 g_network_change_notifier = network_change_notifier_; |
| 933 } | 966 } |
| 934 | 967 |
| 935 } // namespace net | 968 } // namespace net |
| OLD | NEW |