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 #include "chrome/browser/net/nqe/ui_network_quality_estimator_service.h" | 5 #include "chrome/browser/net/nqe/ui_network_quality_estimator_service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
12 #include "base/threading/thread_checker.h" | 12 #include "base/threading/thread_checker.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chrome/browser/browser_process.h" | 14 #include "chrome/browser/browser_process.h" |
15 #include "chrome/browser/io_thread.h" | 15 #include "chrome/browser/io_thread.h" |
16 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
17 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
18 #include "components/prefs/pref_registry.h" | 18 #include "components/prefs/pref_registry.h" |
19 #include "components/prefs/pref_registry_simple.h" | 19 #include "components/prefs/pref_registry_simple.h" |
20 #include "components/prefs/pref_service.h" | 20 #include "components/prefs/pref_service.h" |
21 #include "components/variations/variations_associated_data.h" | 21 #include "components/variations/variations_associated_data.h" |
22 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
23 #include "net/nqe/network_qualities_prefs_manager.h" | 23 #include "net/nqe/network_qualities_prefs_manager.h" |
| 24 #include "net/nqe/network_quality.h" |
24 | 25 |
25 namespace { | 26 namespace { |
26 | 27 |
27 // PrefDelegateImpl writes the provided dictionary value to the network quality | 28 // PrefDelegateImpl writes the provided dictionary value to the network quality |
28 // estimator prefs on the disk. | 29 // estimator prefs on the disk. |
29 class PrefDelegateImpl | 30 class PrefDelegateImpl |
30 : public net::NetworkQualitiesPrefsManager::PrefDelegate { | 31 : public net::NetworkQualitiesPrefsManager::PrefDelegate { |
31 public: | 32 public: |
32 // |pref_service| is used to read and write prefs from/to the disk. | 33 // |pref_service| is used to read and write prefs from/to the disk. |
33 explicit PrefDelegateImpl(PrefService* pref_service) | 34 explicit PrefDelegateImpl(PrefService* pref_service) |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 private: | 139 private: |
139 base::WeakPtr<UINetworkQualityEstimatorService> service_; | 140 base::WeakPtr<UINetworkQualityEstimatorService> service_; |
140 net::NetworkQualityEstimator* network_quality_estimator_; | 141 net::NetworkQualityEstimator* network_quality_estimator_; |
141 | 142 |
142 DISALLOW_COPY_AND_ASSIGN(IONetworkQualityObserver); | 143 DISALLOW_COPY_AND_ASSIGN(IONetworkQualityObserver); |
143 }; | 144 }; |
144 | 145 |
145 UINetworkQualityEstimatorService::UINetworkQualityEstimatorService( | 146 UINetworkQualityEstimatorService::UINetworkQualityEstimatorService( |
146 Profile* profile) | 147 Profile* profile) |
147 : type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN), | 148 : type_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN), |
148 http_rtt_(base::TimeDelta::FromMilliseconds(-1)), | 149 http_rtt_(net::nqe::internal::InvalidRTT()), |
149 transport_rtt_(base::TimeDelta::FromMilliseconds(-1)), | 150 transport_rtt_(net::nqe::internal::InvalidRTT()), |
150 downstream_throughput_kbps_(-1), | 151 downstream_throughput_kbps_(net::nqe::internal::kInvalidThroughput), |
151 weak_factory_(this) { | 152 weak_factory_(this) { |
152 DCHECK(profile); | 153 DCHECK(profile); |
153 // If this is running in a context without an IOThread, don't try to create | 154 // If this is running in a context without an IOThread, don't try to create |
154 // the IO object. | 155 // the IO object. |
155 if (!g_browser_process->io_thread()) | 156 if (!g_browser_process->io_thread()) |
156 return; | 157 return; |
157 io_observer_ = base::WrapUnique( | 158 io_observer_ = base::WrapUnique( |
158 new IONetworkQualityObserver(weak_factory_.GetWeakPtr())); | 159 new IONetworkQualityObserver(weak_factory_.GetWeakPtr())); |
159 std::unique_ptr<PrefDelegateImpl> pref_delegate( | 160 std::unique_ptr<PrefDelegateImpl> pref_delegate( |
160 new PrefDelegateImpl(profile->GetPrefs())); | 161 new PrefDelegateImpl(profile->GetPrefs())); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 NotifyEffectiveConnectionTypeObserverIfPresent, | 233 NotifyEffectiveConnectionTypeObserverIfPresent, |
233 weak_factory_.GetWeakPtr(), observer)); | 234 weak_factory_.GetWeakPtr(), observer)); |
234 } | 235 } |
235 | 236 |
236 void UINetworkQualityEstimatorService::RemoveEffectiveConnectionTypeObserver( | 237 void UINetworkQualityEstimatorService::RemoveEffectiveConnectionTypeObserver( |
237 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) { | 238 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) { |
238 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 239 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
239 effective_connection_type_observer_list_.RemoveObserver(observer); | 240 effective_connection_type_observer_list_.RemoveObserver(observer); |
240 } | 241 } |
241 | 242 |
| 243 bool UINetworkQualityEstimatorService::GetHttpRTT( |
| 244 base::TimeDelta* http_rtt) const { |
| 245 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 246 |
| 247 if (http_rtt_ == net::nqe::internal::InvalidRTT()) |
| 248 return false; |
| 249 *http_rtt = http_rtt_; |
| 250 return true; |
| 251 } |
| 252 |
| 253 bool UINetworkQualityEstimatorService::GetTransportRTT( |
| 254 base::TimeDelta* transport_rtt) const { |
| 255 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 256 |
| 257 if (transport_rtt_ == net::nqe::internal::InvalidRTT()) |
| 258 return false; |
| 259 *transport_rtt = transport_rtt_; |
| 260 return true; |
| 261 } |
| 262 |
| 263 bool UINetworkQualityEstimatorService::GetDownstreamThroughputKbps( |
| 264 int32_t* downstream_throughput_kbps) const { |
| 265 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 266 |
| 267 if (downstream_throughput_kbps_ == net::nqe::internal::kInvalidThroughput) |
| 268 return false; |
| 269 *downstream_throughput_kbps = downstream_throughput_kbps_; |
| 270 return true; |
| 271 } |
| 272 |
242 void UINetworkQualityEstimatorService::AddRTTAndThroughputEstimatesObserver( | 273 void UINetworkQualityEstimatorService::AddRTTAndThroughputEstimatesObserver( |
243 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) { | 274 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) { |
244 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 275 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
245 rtt_throughput_observer_list_.AddObserver(observer); | 276 rtt_throughput_observer_list_.AddObserver(observer); |
246 | 277 |
247 // Notify the |observer| on the next message pump since |observer| may not | 278 // Notify the |observer| on the next message pump since |observer| may not |
248 // be completely set up for receiving the callbacks. | 279 // be completely set up for receiving the callbacks. |
249 content::BrowserThread::PostTask( | 280 content::BrowserThread::PostTask( |
250 content::BrowserThread::UI, FROM_HERE, | 281 content::BrowserThread::UI, FROM_HERE, |
251 base::Bind(&UINetworkQualityEstimatorService:: | 282 base::Bind(&UINetworkQualityEstimatorService:: |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 | 344 |
314 std::map<net::nqe::internal::NetworkID, | 345 std::map<net::nqe::internal::NetworkID, |
315 net::nqe::internal::CachedNetworkQuality> | 346 net::nqe::internal::CachedNetworkQuality> |
316 UINetworkQualityEstimatorService::ForceReadPrefsForTesting() const { | 347 UINetworkQualityEstimatorService::ForceReadPrefsForTesting() const { |
317 if (!prefs_manager_) { | 348 if (!prefs_manager_) { |
318 return std::map<net::nqe::internal::NetworkID, | 349 return std::map<net::nqe::internal::NetworkID, |
319 net::nqe::internal::CachedNetworkQuality>(); | 350 net::nqe::internal::CachedNetworkQuality>(); |
320 } | 351 } |
321 return prefs_manager_->ForceReadPrefsForTesting(); | 352 return prefs_manager_->ForceReadPrefsForTesting(); |
322 } | 353 } |
OLD | NEW |