Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/nqe/network_qualities_prefs_manager.h" | |
| 6 | |
| 7 #include <utility> | |
| 8 | |
| 9 #include "base/bind.h" | |
| 10 #include "base/threading/thread_checker.h" | |
| 11 #include "base/values.h" | |
| 12 #include "net/nqe/cached_network_quality.h" | |
| 13 #include "net/nqe/network_quality_estimator.h" | |
| 14 #include "net/nqe/network_quality_store.h" | |
| 15 | |
| 16 namespace net { | |
| 17 | |
| 18 // CacheObserver lives on the network thread. | |
| 19 class NetworkQualitiesPrefsManager::CacheObserver | |
|
RyanSturm
2016/09/12 20:26:55
Is it cleaner to have NetworkQualitiesPrefsManager
tbansal1
2016/09/15 21:00:59
Done.
| |
| 20 : public nqe::internal::NetworkQualityStore::NetworkQualitiesCacheObserver { | |
| 21 public: | |
| 22 // CacheObserver receives notification when there is a change in the network | |
| 23 // quality. On receiving the notification, it calls |callback| on | |
| 24 // |callback_task_runner|. | |
| 25 CacheObserver( | |
| 26 OnChangeInCachedNetworkQualityCallback callback, | |
| 27 const scoped_refptr<base::SequencedTaskRunner>& callback_task_runner, | |
| 28 NetworkQualityEstimator* network_quality_estimator) | |
| 29 : callback_(callback), | |
| 30 callback_task_runner_(callback_task_runner), | |
| 31 network_quality_estimator_(network_quality_estimator) { | |
| 32 DCHECK(callback_task_runner_); | |
| 33 // Add |this| as a cache observer so that notification is received | |
| 34 // every time there is a change in the cached network quality. | |
| 35 network_quality_estimator_->AddNetworkQualitiesCacheObserver(this); | |
| 36 } | |
| 37 ~CacheObserver() override { | |
| 38 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 39 network_quality_estimator_->RemoveNetworkQualitiesCacheObserver(this); | |
| 40 } | |
| 41 | |
| 42 // nqe::internal::NetworkQualityStore::NetworkQualitiesCacheObserver | |
| 43 // implementation: | |
| 44 void OnChangeInCachedNetworkQuality( | |
| 45 const nqe::internal::NetworkID& network_id, | |
| 46 const nqe::internal::CachedNetworkQuality& cached_network_quality) | |
| 47 override { | |
| 48 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 49 | |
| 50 // Run the callback on the provided task runner. | |
| 51 callback_task_runner_->PostTask( | |
|
RyanSturm
2016/09/12 20:26:55
Why do you post this task directly to the prefs th
tbansal1
2016/09/15 21:00:58
Removed CacheObserver.
| |
| 52 FROM_HERE, base::Bind(callback_, network_id, cached_network_quality)); | |
| 53 } | |
| 54 | |
| 55 private: | |
| 56 // Called when a notification is received about change in the cached | |
| 57 // network quality. Should be called only on |callback_task_runner_|. | |
| 58 OnChangeInCachedNetworkQualityCallback callback_; | |
| 59 | |
| 60 const scoped_refptr<base::SequencedTaskRunner> callback_task_runner_; | |
| 61 | |
| 62 NetworkQualityEstimator* network_quality_estimator_; | |
| 63 | |
| 64 base::ThreadChecker thread_checker_; | |
| 65 DISALLOW_COPY_AND_ASSIGN(CacheObserver); | |
| 66 }; | |
| 67 | |
| 68 NetworkQualitiesPrefsManager::NetworkQualitiesPrefsManager( | |
| 69 std::unique_ptr<PrefDelegate> pref_delegate) | |
| 70 : pref_delegate_(std::move(pref_delegate)), | |
| 71 pref_task_runner_(base::ThreadTaskRunnerHandle::Get()) { | |
| 72 DCHECK(pref_delegate_); | |
| 73 | |
| 74 pref_weak_ptr_factory_.reset( | |
| 75 new base::WeakPtrFactory<NetworkQualitiesPrefsManager>(this)); | |
| 76 pref_weak_ptr_ = pref_weak_ptr_factory_->GetWeakPtr(); | |
| 77 } | |
| 78 | |
| 79 NetworkQualitiesPrefsManager::~NetworkQualitiesPrefsManager() { | |
| 80 DCHECK(network_task_runner_->RunsTasksOnCurrentThread()); | |
| 81 network_weak_ptr_factory_.reset(); | |
| 82 } | |
| 83 | |
| 84 void NetworkQualitiesPrefsManager::InitializeOnNetworkThread( | |
| 85 NetworkQualityEstimator* network_quality_estimator) { | |
| 86 DCHECK(!network_task_runner_); | |
| 87 DCHECK(network_quality_estimator); | |
| 88 | |
| 89 network_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | |
| 90 network_weak_ptr_factory_.reset( | |
|
Not at Google. Contact bengr
2016/09/09 20:30:40
|network_weak_ptr_factory_| unused?
tbansal1
2016/09/15 21:00:59
Done.
| |
| 91 new base::WeakPtrFactory<NetworkQualitiesPrefsManager>(this)); | |
| 92 | |
| 93 // Create the cache observer on the network thread, and provide the callback. | |
| 94 // |this| will be notified every time there is a change in the network | |
| 95 // quality. | |
| 96 cache_observer_.reset(new NetworkQualitiesPrefsManager::CacheObserver( | |
| 97 base::Bind(&NetworkQualitiesPrefsManager:: | |
| 98 OnChangeInCachedNetworkQualityOnPrefThread, | |
| 99 pref_weak_ptr_), | |
| 100 pref_task_runner_, network_quality_estimator)); | |
|
RyanSturm
2016/09/12 20:26:55
Instead of passing in network_quality_estimator, c
tbansal1
2016/09/15 21:00:58
Done.
| |
| 101 } | |
| 102 | |
| 103 void NetworkQualitiesPrefsManager::ShutdownOnPrefThread() { | |
| 104 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); | |
| 105 pref_weak_ptr_factory_.reset(); | |
| 106 pref_delegate_.reset(); | |
| 107 } | |
| 108 | |
| 109 void NetworkQualitiesPrefsManager::OnChangeInCachedNetworkQualityOnPrefThread( | |
| 110 const nqe::internal::NetworkID& network_id, | |
| 111 const nqe::internal::CachedNetworkQuality& cached_network_quality) { | |
| 112 // The prefs can only be written on the pref thread. | |
| 113 DCHECK(pref_task_runner_->RunsTasksOnCurrentThread()); | |
| 114 | |
| 115 base::DictionaryValue dictionary_value; | |
| 116 dictionary_value.SetString( | |
| 117 network_id.ToString(), | |
| 118 GetNameForEffectiveConnectionType( | |
| 119 cached_network_quality.effective_connection_type())); | |
| 120 | |
| 121 // Notify the pref delegate so that it updates the prefs on the disk. | |
| 122 pref_delegate_->SetDictionaryValue(dictionary_value); | |
| 123 } | |
| 124 | |
| 125 } // namespace net | |
| OLD | NEW |