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 |