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

Side by Side Diff: net/nqe/network_qualities_prefs_manager.cc

Issue 2322183002: Add Network Quality Estimator (NQE) pref manager (Closed)
Patch Set: PS Created 4 years, 3 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
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698