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 |