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 "net/nqe/network_quality_store.h" | 5 #include "net/nqe/network_quality_store.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/threading/thread_task_runner_handle.h" | 8 #include "base/threading/thread_task_runner_handle.h" |
9 #include "net/base/network_change_notifier.h" | 9 #include "net/base/network_change_notifier.h" |
10 | 10 |
(...skipping 17 matching lines...) Expand all Loading... |
28 DCHECK(thread_checker_.CalledOnValidThread()); | 28 DCHECK(thread_checker_.CalledOnValidThread()); |
29 } | 29 } |
30 | 30 |
31 void NetworkQualityStore::Add( | 31 void NetworkQualityStore::Add( |
32 const nqe::internal::NetworkID& network_id, | 32 const nqe::internal::NetworkID& network_id, |
33 const nqe::internal::CachedNetworkQuality& cached_network_quality) { | 33 const nqe::internal::CachedNetworkQuality& cached_network_quality) { |
34 DCHECK(thread_checker_.CalledOnValidThread()); | 34 DCHECK(thread_checker_.CalledOnValidThread()); |
35 DCHECK_LE(cached_network_qualities_.size(), | 35 DCHECK_LE(cached_network_qualities_.size(), |
36 static_cast<size_t>(kMaximumNetworkQualityCacheSize)); | 36 static_cast<size_t>(kMaximumNetworkQualityCacheSize)); |
37 | 37 |
38 // If the network name is unavailable, caching should not be performed. If | 38 if (!EligibleForCaching(network_id)) |
39 // |disable_offline_check_| is set to true, cache the network quality even if | |
40 // the network is set to offline. | |
41 if (network_id.type != NetworkChangeNotifier::CONNECTION_ETHERNET && | |
42 network_id.id.empty() && | |
43 (network_id.type != NetworkChangeNotifier::CONNECTION_NONE || | |
44 !disable_offline_check_)) { | |
45 return; | 39 return; |
46 } | |
47 | 40 |
48 // Remove the entry from the map, if it is already present. | 41 // Remove the entry from the map, if it is already present. |
49 cached_network_qualities_.erase(network_id); | 42 cached_network_qualities_.erase(network_id); |
50 | 43 |
51 if (cached_network_qualities_.size() == kMaximumNetworkQualityCacheSize) { | 44 if (cached_network_qualities_.size() == kMaximumNetworkQualityCacheSize) { |
52 // Remove the oldest entry. | 45 // Remove the oldest entry. |
53 CachedNetworkQualities::iterator oldest_entry_iterator = | 46 CachedNetworkQualities::iterator oldest_entry_iterator = |
54 cached_network_qualities_.begin(); | 47 cached_network_qualities_.begin(); |
55 | 48 |
56 for (CachedNetworkQualities::iterator it = | 49 for (CachedNetworkQualities::iterator it = |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 FROM_HERE, base::Bind(&NetworkQualityStore::NotifyCacheObserverIfPresent, | 90 FROM_HERE, base::Bind(&NetworkQualityStore::NotifyCacheObserverIfPresent, |
98 weak_ptr_factory_.GetWeakPtr(), observer)); | 91 weak_ptr_factory_.GetWeakPtr(), observer)); |
99 } | 92 } |
100 | 93 |
101 void NetworkQualityStore::RemoveNetworkQualitiesCacheObserver( | 94 void NetworkQualityStore::RemoveNetworkQualitiesCacheObserver( |
102 NetworkQualitiesCacheObserver* observer) { | 95 NetworkQualitiesCacheObserver* observer) { |
103 DCHECK(thread_checker_.CalledOnValidThread()); | 96 DCHECK(thread_checker_.CalledOnValidThread()); |
104 network_qualities_cache_observer_list_.RemoveObserver(observer); | 97 network_qualities_cache_observer_list_.RemoveObserver(observer); |
105 } | 98 } |
106 | 99 |
| 100 bool NetworkQualityStore::EligibleForCaching( |
| 101 const NetworkID& network_id) const { |
| 102 DCHECK(thread_checker_.CalledOnValidThread()); |
| 103 |
| 104 // |disable_offline_check_| forces caching of the network quality even if |
| 105 // the network is set to offline. |
| 106 return network_id.type == NetworkChangeNotifier::CONNECTION_ETHERNET || |
| 107 !network_id.id.empty() || |
| 108 (network_id.type == NetworkChangeNotifier::CONNECTION_NONE && |
| 109 disable_offline_check_); |
| 110 } |
| 111 |
107 void NetworkQualityStore::DisableOfflineCheckForTesting( | 112 void NetworkQualityStore::DisableOfflineCheckForTesting( |
108 bool disable_offline_check) { | 113 bool disable_offline_check) { |
109 DCHECK(thread_checker_.CalledOnValidThread()); | 114 DCHECK(thread_checker_.CalledOnValidThread()); |
110 disable_offline_check_ = disable_offline_check; | 115 disable_offline_check_ = disable_offline_check; |
111 } | 116 } |
112 | 117 |
113 void NetworkQualityStore::NotifyCacheObserverIfPresent( | 118 void NetworkQualityStore::NotifyCacheObserverIfPresent( |
114 NetworkQualitiesCacheObserver* observer) const { | 119 NetworkQualitiesCacheObserver* observer) const { |
115 DCHECK(thread_checker_.CalledOnValidThread()); | 120 DCHECK(thread_checker_.CalledOnValidThread()); |
116 | 121 |
117 if (!network_qualities_cache_observer_list_.HasObserver(observer)) | 122 if (!network_qualities_cache_observer_list_.HasObserver(observer)) |
118 return; | 123 return; |
119 for (const auto it : cached_network_qualities_) | 124 for (const auto it : cached_network_qualities_) |
120 observer->OnChangeInCachedNetworkQuality(it.first, it.second); | 125 observer->OnChangeInCachedNetworkQuality(it.first, it.second); |
121 } | 126 } |
122 | 127 |
123 } // namespace internal | 128 } // namespace internal |
124 | 129 |
125 } // namespace nqe | 130 } // namespace nqe |
126 | 131 |
127 } // namespace net | 132 } // namespace net |
OLD | NEW |