Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(402)

Side by Side Diff: chrome/browser/net/nqe/ui_network_quality_estimator_service.cc

Issue 2927453002: Make NQE a derived class of NetworkQualityProvider (Closed)
Patch Set: some more IWYU fixes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/effective_connection_type_observer.h"
23 #include "net/nqe/network_qualities_prefs_manager.h" 24 #include "net/nqe/network_qualities_prefs_manager.h"
24 #include "net/nqe/network_quality.h" 25 #include "net/nqe/network_quality.h"
26 #include "net/nqe/rtt_throughput_estimates_observer.h"
25 27
26 namespace { 28 namespace {
27 29
28 // PrefDelegateImpl writes the provided dictionary value to the network quality 30 // PrefDelegateImpl writes the provided dictionary value to the network quality
29 // estimator prefs on the disk. 31 // estimator prefs on the disk.
30 class PrefDelegateImpl 32 class PrefDelegateImpl
31 : public net::NetworkQualitiesPrefsManager::PrefDelegate { 33 : public net::NetworkQualitiesPrefsManager::PrefDelegate {
32 public: 34 public:
33 // |pref_service| is used to read and write prefs from/to the disk. 35 // |pref_service| is used to read and write prefs from/to the disk.
34 explicit PrefDelegateImpl(PrefService* pref_service) 36 explicit PrefDelegateImpl(PrefService* pref_service)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 io_thread->globals()->network_quality_estimator.get()); 76 io_thread->globals()->network_quality_estimator.get());
75 } 77 }
76 78
77 } // namespace 79 } // namespace
78 80
79 // A class that sets itself as an observer of the EffectiveconnectionType for 81 // A class that sets itself as an observer of the EffectiveconnectionType for
80 // the browser IO thread. It reports any change in EffectiveConnectionType back 82 // the browser IO thread. It reports any change in EffectiveConnectionType back
81 // to the UI service. 83 // to the UI service.
82 // It is created on the UI thread, but used and deleted on the IO thread. 84 // It is created on the UI thread, but used and deleted on the IO thread.
83 class UINetworkQualityEstimatorService::IONetworkQualityObserver 85 class UINetworkQualityEstimatorService::IONetworkQualityObserver
84 : public net::NetworkQualityEstimator::EffectiveConnectionTypeObserver, 86 : public net::EffectiveConnectionTypeObserver,
85 public net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver { 87 public net::RTTAndThroughputEstimatesObserver {
86 public: 88 public:
87 explicit IONetworkQualityObserver( 89 explicit IONetworkQualityObserver(
88 base::WeakPtr<UINetworkQualityEstimatorService> service) 90 base::WeakPtr<UINetworkQualityEstimatorService> service)
89 : service_(service), network_quality_estimator_(nullptr) { 91 : service_(service), network_quality_estimator_(nullptr) {
90 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 92 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
91 } 93 }
92 94
93 ~IONetworkQualityObserver() override { 95 ~IONetworkQualityObserver() override {
94 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 96 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
95 if (network_quality_estimator_) { 97 if (network_quality_estimator_) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 transport_rtt_ = transport_rtt; 216 transport_rtt_ = transport_rtt;
215 downstream_throughput_kbps_ = downstream_throughput_kbps; 217 downstream_throughput_kbps_ = downstream_throughput_kbps;
216 218
217 for (auto& observer : rtt_throughput_observer_list_) { 219 for (auto& observer : rtt_throughput_observer_list_) {
218 observer.OnRTTOrThroughputEstimatesComputed(http_rtt, transport_rtt, 220 observer.OnRTTOrThroughputEstimatesComputed(http_rtt, transport_rtt,
219 downstream_throughput_kbps); 221 downstream_throughput_kbps);
220 } 222 }
221 } 223 }
222 224
223 void UINetworkQualityEstimatorService::AddEffectiveConnectionTypeObserver( 225 void UINetworkQualityEstimatorService::AddEffectiveConnectionTypeObserver(
224 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) { 226 net::EffectiveConnectionTypeObserver* observer) {
225 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 227 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
226 effective_connection_type_observer_list_.AddObserver(observer); 228 effective_connection_type_observer_list_.AddObserver(observer);
227 229
228 // Notify the |observer| on the next message pump since |observer| may not 230 // Notify the |observer| on the next message pump since |observer| may not
229 // be completely set up for receiving the callbacks. 231 // be completely set up for receiving the callbacks.
230 content::BrowserThread::PostTask( 232 content::BrowserThread::PostTask(
231 content::BrowserThread::UI, FROM_HERE, 233 content::BrowserThread::UI, FROM_HERE,
232 base::BindOnce(&UINetworkQualityEstimatorService:: 234 base::BindOnce(&UINetworkQualityEstimatorService::
233 NotifyEffectiveConnectionTypeObserverIfPresent, 235 NotifyEffectiveConnectionTypeObserverIfPresent,
234 weak_factory_.GetWeakPtr(), observer)); 236 weak_factory_.GetWeakPtr(), observer));
235 } 237 }
236 238
237 void UINetworkQualityEstimatorService::RemoveEffectiveConnectionTypeObserver( 239 void UINetworkQualityEstimatorService::RemoveEffectiveConnectionTypeObserver(
238 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) { 240 net::EffectiveConnectionTypeObserver* observer) {
239 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 241 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
240 effective_connection_type_observer_list_.RemoveObserver(observer); 242 effective_connection_type_observer_list_.RemoveObserver(observer);
241 } 243 }
242 244
243 base::Optional<base::TimeDelta> UINetworkQualityEstimatorService::GetHttpRTT() 245 base::Optional<base::TimeDelta> UINetworkQualityEstimatorService::GetHttpRTT()
244 const { 246 const {
245 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 247 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
246 248
247 if (http_rtt_ == net::nqe::internal::InvalidRTT()) 249 if (http_rtt_ == net::nqe::internal::InvalidRTT())
248 return base::Optional<base::TimeDelta>(); 250 return base::Optional<base::TimeDelta>();
(...skipping 12 matching lines...) Expand all
261 base::Optional<int32_t> 263 base::Optional<int32_t>
262 UINetworkQualityEstimatorService::GetDownstreamThroughputKbps() const { 264 UINetworkQualityEstimatorService::GetDownstreamThroughputKbps() const {
263 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 265 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
264 266
265 if (downstream_throughput_kbps_ == net::nqe::internal::kInvalidThroughput) 267 if (downstream_throughput_kbps_ == net::nqe::internal::kInvalidThroughput)
266 return base::Optional<int32_t>(); 268 return base::Optional<int32_t>();
267 return downstream_throughput_kbps_; 269 return downstream_throughput_kbps_;
268 } 270 }
269 271
270 void UINetworkQualityEstimatorService::AddRTTAndThroughputEstimatesObserver( 272 void UINetworkQualityEstimatorService::AddRTTAndThroughputEstimatesObserver(
271 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) { 273 net::RTTAndThroughputEstimatesObserver* observer) {
272 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 274 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
273 rtt_throughput_observer_list_.AddObserver(observer); 275 rtt_throughput_observer_list_.AddObserver(observer);
274 276
275 // Notify the |observer| on the next message pump since |observer| may not 277 // Notify the |observer| on the next message pump since |observer| may not
276 // be completely set up for receiving the callbacks. 278 // be completely set up for receiving the callbacks.
277 content::BrowserThread::PostTask( 279 content::BrowserThread::PostTask(
278 content::BrowserThread::UI, FROM_HERE, 280 content::BrowserThread::UI, FROM_HERE,
279 base::BindOnce(&UINetworkQualityEstimatorService:: 281 base::BindOnce(&UINetworkQualityEstimatorService::
280 NotifyRTTAndThroughputObserverIfPresent, 282 NotifyRTTAndThroughputObserverIfPresent,
281 weak_factory_.GetWeakPtr(), observer)); 283 weak_factory_.GetWeakPtr(), observer));
282 } 284 }
283 285
284 // Removes |observer| from the list of RTT and throughput estimate observers. 286 // Removes |observer| from the list of RTT and throughput estimate observers.
285 // Must be called on the IO thread. 287 // Must be called on the IO thread.
286 void UINetworkQualityEstimatorService::RemoveRTTAndThroughputEstimatesObserver( 288 void UINetworkQualityEstimatorService::RemoveRTTAndThroughputEstimatesObserver(
287 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) { 289 net::RTTAndThroughputEstimatesObserver* observer) {
288 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 290 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
289 rtt_throughput_observer_list_.RemoveObserver(observer); 291 rtt_throughput_observer_list_.RemoveObserver(observer);
290 } 292 }
291 293
292 void UINetworkQualityEstimatorService::SetEffectiveConnectionTypeForTesting( 294 void UINetworkQualityEstimatorService::SetEffectiveConnectionTypeForTesting(
293 net::EffectiveConnectionType type) { 295 net::EffectiveConnectionType type) {
294 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 296 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
295 EffectiveConnectionTypeChanged(type); 297 EffectiveConnectionTypeChanged(type);
296 } 298 }
297 299
298 net::EffectiveConnectionType 300 net::EffectiveConnectionType
299 UINetworkQualityEstimatorService::GetEffectiveConnectionType() const { 301 UINetworkQualityEstimatorService::GetEffectiveConnectionType() const {
300 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 302 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
301 return type_; 303 return type_;
302 } 304 }
303 305
304 void UINetworkQualityEstimatorService::ClearPrefs() { 306 void UINetworkQualityEstimatorService::ClearPrefs() {
305 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 307 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
306 if (!prefs_manager_) 308 if (!prefs_manager_)
307 return; 309 return;
308 prefs_manager_->ClearPrefs(); 310 prefs_manager_->ClearPrefs();
309 } 311 }
310 312
311 void UINetworkQualityEstimatorService:: 313 void UINetworkQualityEstimatorService::
312 NotifyEffectiveConnectionTypeObserverIfPresent( 314 NotifyEffectiveConnectionTypeObserverIfPresent(
313 net::NetworkQualityEstimator::EffectiveConnectionTypeObserver* observer) 315 net::EffectiveConnectionTypeObserver* observer) const {
314 const {
315 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 316 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
316 317
317 if (!effective_connection_type_observer_list_.HasObserver(observer)) 318 if (!effective_connection_type_observer_list_.HasObserver(observer))
318 return; 319 return;
319 if (type_ == net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) 320 if (type_ == net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN)
320 return; 321 return;
321 observer->OnEffectiveConnectionTypeChanged(type_); 322 observer->OnEffectiveConnectionTypeChanged(type_);
322 } 323 }
323 324
324 void UINetworkQualityEstimatorService::NotifyRTTAndThroughputObserverIfPresent( 325 void UINetworkQualityEstimatorService::NotifyRTTAndThroughputObserverIfPresent(
325 net::NetworkQualityEstimator::RTTAndThroughputEstimatesObserver* observer) 326 net::RTTAndThroughputEstimatesObserver* observer) const {
326 const {
327 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 327 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
328 328
329 if (!rtt_throughput_observer_list_.HasObserver(observer)) 329 if (!rtt_throughput_observer_list_.HasObserver(observer))
330 return; 330 return;
331 observer->OnRTTOrThroughputEstimatesComputed(http_rtt_, transport_rtt_, 331 observer->OnRTTOrThroughputEstimatesComputed(http_rtt_, transport_rtt_,
332 downstream_throughput_kbps_); 332 downstream_throughput_kbps_);
333 } 333 }
334 334
335 // static 335 // static
336 void UINetworkQualityEstimatorService::RegisterProfilePrefs( 336 void UINetworkQualityEstimatorService::RegisterProfilePrefs(
337 PrefRegistrySimple* registry) { 337 PrefRegistrySimple* registry) {
338 registry->RegisterDictionaryPref(prefs::kNetworkQualities, 338 registry->RegisterDictionaryPref(prefs::kNetworkQualities,
339 PrefRegistry::LOSSY_PREF); 339 PrefRegistry::LOSSY_PREF);
340 } 340 }
341 341
342 std::map<net::nqe::internal::NetworkID, 342 std::map<net::nqe::internal::NetworkID,
343 net::nqe::internal::CachedNetworkQuality> 343 net::nqe::internal::CachedNetworkQuality>
344 UINetworkQualityEstimatorService::ForceReadPrefsForTesting() const { 344 UINetworkQualityEstimatorService::ForceReadPrefsForTesting() const {
345 if (!prefs_manager_) { 345 if (!prefs_manager_) {
346 return std::map<net::nqe::internal::NetworkID, 346 return std::map<net::nqe::internal::NetworkID,
347 net::nqe::internal::CachedNetworkQuality>(); 347 net::nqe::internal::CachedNetworkQuality>();
348 } 348 }
349 return prefs_manager_->ForceReadPrefsForTesting(); 349 return prefs_manager_->ForceReadPrefsForTesting();
350 } 350 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698