OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #ifndef CHROME_BROWSER_NET_NQE_UI_NETWORK_QUALITY_ESTIMATOR_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_NET_NQE_UI_NETWORK_QUALITY_ESTIMATOR_SERVICE_H_ |
6 #define CHROME_BROWSER_NET_NQE_UI_NETWORK_QUALITY_ESTIMATOR_SERVICE_H_ | 6 #define CHROME_BROWSER_NET_NQE_UI_NETWORK_QUALITY_ESTIMATOR_SERVICE_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 29 matching lines...) Expand all Loading... |
40 // thread. |observer| would be notified of the current effective connection | 40 // thread. |observer| would be notified of the current effective connection |
41 // type in the next message pump. | 41 // type in the next message pump. |
42 void AddEffectiveConnectionTypeObserver( | 42 void AddEffectiveConnectionTypeObserver( |
43 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) | 43 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) |
44 override; | 44 override; |
45 // Must be called on the UI thread. | 45 // Must be called on the UI thread. |
46 void RemoveEffectiveConnectionTypeObserver( | 46 void RemoveEffectiveConnectionTypeObserver( |
47 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) | 47 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) |
48 override; | 48 override; |
49 | 49 |
| 50 // Must be called on the UI thread. |observer| will be notified on the UI |
| 51 // thread. |observer| would be notified of the changes in the HTTP RTT, |
| 52 // transport RTT or throughput. |observer| would be notified of the current |
| 53 // values in the next message pump. |
| 54 void AddRTTAndThroughputEstimatesObserver( |
| 55 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) |
| 56 override; |
| 57 |
| 58 // Removes |observer| from the list of RTT and throughput estimate observers. |
| 59 // Must be called on the UI thread. |
| 60 void RemoveRTTAndThroughputEstimatesObserver( |
| 61 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) |
| 62 override; |
| 63 |
50 // Registers the profile-specific network quality estimator prefs. | 64 // Registers the profile-specific network quality estimator prefs. |
51 static void RegisterProfilePrefs(PrefRegistrySimple* registry); | 65 static void RegisterProfilePrefs(PrefRegistrySimple* registry); |
52 | 66 |
53 // Clear the network quality estimator prefs. | 67 // Clear the network quality estimator prefs. |
54 void ClearPrefs(); | 68 void ClearPrefs(); |
55 | 69 |
56 // Tests can manually set EffectiveConnectionType, but browser tests should | 70 // Tests can manually set EffectiveConnectionType, but browser tests should |
57 // expect that the EffectiveConnectionType could change. | 71 // expect that the EffectiveConnectionType could change. |
58 void SetEffectiveConnectionTypeForTesting(net::EffectiveConnectionType type); | 72 void SetEffectiveConnectionTypeForTesting(net::EffectiveConnectionType type); |
59 | 73 |
60 // Reads the prefs from the disk, parses them into a map of NetworkIDs and | 74 // Reads the prefs from the disk, parses them into a map of NetworkIDs and |
61 // CachedNetworkQualities, and returns the map. | 75 // CachedNetworkQualities, and returns the map. |
62 std::map<net::nqe::internal::NetworkID, | 76 std::map<net::nqe::internal::NetworkID, |
63 net::nqe::internal::CachedNetworkQuality> | 77 net::nqe::internal::CachedNetworkQuality> |
64 ForceReadPrefsForTesting() const; | 78 ForceReadPrefsForTesting() const; |
65 | 79 |
66 private: | 80 private: |
67 class IONetworkQualityObserver; | 81 class IONetworkQualityObserver; |
68 | 82 |
69 // Notifies |observer| of the current effective connection type if |observer| | 83 // Notifies |observer| of the current effective connection type if |observer| |
70 // is still registered as an observer. | 84 // is still registered as an observer. |
71 void NotifyEffectiveConnectionTypeObserverIfPresent( | 85 void NotifyEffectiveConnectionTypeObserverIfPresent( |
72 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) | 86 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) |
73 const; | 87 const; |
74 | 88 |
| 89 // Notifies |observer| of the current effective connection type if |observer| |
| 90 // is still registered as an observer. |
| 91 void NotifyRTTAndThroughputObserverIfPresent( |
| 92 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) |
| 93 const; |
| 94 |
75 // KeyedService implementation: | 95 // KeyedService implementation: |
76 void Shutdown() override; | 96 void Shutdown() override; |
77 | 97 |
78 // Called when the EffectiveConnectionType has updated to |type|. | 98 // Called when the EffectiveConnectionType has updated to |type|. |
79 // NetworkQualityEstimator::EffectiveConnectionType is an estimate of the | 99 // NetworkQualityEstimator::EffectiveConnectionType is an estimate of the |
80 // quality of the network that may differ from the actual network type | 100 // quality of the network that may differ from the actual network type |
81 // reported by NetworkchangeNotifier::GetConnectionType. | 101 // reported by NetworkchangeNotifier::GetConnectionType. |
82 void EffectiveConnectionTypeChanged(net::EffectiveConnectionType type); | 102 void EffectiveConnectionTypeChanged(net::EffectiveConnectionType type); |
83 | 103 |
| 104 // Called when the estimated HTTP RTT, estimated transport RTT or estimated |
| 105 // downstream throughput is computed. |
| 106 void RTTOrThroughputComputed(base::TimeDelta http_rtt, |
| 107 base::TimeDelta transport_rtt, |
| 108 int32_t downstream_throughput_kbps); |
| 109 |
84 // The current EffectiveConnectionType. | 110 // The current EffectiveConnectionType. |
85 net::EffectiveConnectionType type_; | 111 net::EffectiveConnectionType type_; |
86 | 112 |
| 113 // Current network quality metrics. |
| 114 base::TimeDelta http_rtt_; |
| 115 base::TimeDelta transport_rtt_; |
| 116 int32_t downstream_throughput_kbps_; |
| 117 |
87 // IO thread based observer that is owned by this service. Created on the UI | 118 // IO thread based observer that is owned by this service. Created on the UI |
88 // thread, but used and deleted on the IO thread. | 119 // thread, but used and deleted on the IO thread. |
89 std::unique_ptr<IONetworkQualityObserver> io_observer_; | 120 std::unique_ptr<IONetworkQualityObserver> io_observer_; |
90 | 121 |
91 // Observer list for changes in effective connection type. | 122 // Observer list for changes in effective connection type. |
92 base::ObserverList< | 123 base::ObserverList< |
93 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver> | 124 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver> |
94 effective_connection_type_observer_list_; | 125 effective_connection_type_observer_list_; |
95 | 126 |
| 127 // Observer list for changes in RTT or throughput values. |
| 128 base::ObserverList< |
| 129 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver> |
| 130 rtt_throughput_observer_list_; |
| 131 |
96 // Prefs manager that is owned by this service. Created on the UI thread, but | 132 // Prefs manager that is owned by this service. Created on the UI thread, but |
97 // used and deleted on the IO thread. | 133 // used and deleted on the IO thread. |
98 std::unique_ptr<net::NetworkQualitiesPrefsManager> prefs_manager_; | 134 std::unique_ptr<net::NetworkQualitiesPrefsManager> prefs_manager_; |
99 | 135 |
100 base::WeakPtrFactory<UINetworkQualityEstimatorService> weak_factory_; | 136 base::WeakPtrFactory<UINetworkQualityEstimatorService> weak_factory_; |
101 | 137 |
102 DISALLOW_COPY_AND_ASSIGN(UINetworkQualityEstimatorService); | 138 DISALLOW_COPY_AND_ASSIGN(UINetworkQualityEstimatorService); |
103 }; | 139 }; |
104 | 140 |
105 #endif // CHROME_BROWSER_NET_NQE_UI_NETWORK_QUALITY_ESTIMATOR_SERVICE_H_ | 141 #endif // CHROME_BROWSER_NET_NQE_UI_NETWORK_QUALITY_ESTIMATOR_SERVICE_H_ |
OLD | NEW |