diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-04-05 14:08:31 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-04-11 07:46:53 +0000 |
commit | 6a4cabb866f66d4128a97cdc6d9d08ce074f1247 (patch) | |
tree | ab00f70a5e89278d6a0d16ff0c42578dc4d84a2d /chromium/net/nqe/network_quality_store.cc | |
parent | e733310db58160074f574c429d48f8308c0afe17 (diff) | |
download | qtwebengine-chromium-6a4cabb866f66d4128a97cdc6d9d08ce074f1247.tar.gz |
BASELINE: Update Chromium to 57.0.2987.144
Change-Id: I29db402ff696c71a04c4dbaec822c2e53efe0267
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'chromium/net/nqe/network_quality_store.cc')
-rw-r--r-- | chromium/net/nqe/network_quality_store.cc | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/chromium/net/nqe/network_quality_store.cc b/chromium/net/nqe/network_quality_store.cc index 01b50054a5e..43d2bcafaf8 100644 --- a/chromium/net/nqe/network_quality_store.cc +++ b/chromium/net/nqe/network_quality_store.cc @@ -4,6 +4,8 @@ #include "net/nqe/network_quality_store.h" +#include "base/location.h" +#include "base/threading/thread_task_runner_handle.h" #include "net/base/network_change_notifier.h" namespace net { @@ -12,7 +14,8 @@ namespace nqe { namespace internal { -NetworkQualityStore::NetworkQualityStore() { +NetworkQualityStore::NetworkQualityStore() + : disable_offline_check_(false), weak_ptr_factory_(this) { static_assert(kMaximumNetworkQualityCacheSize > 0, "Size of the network quality cache must be > 0"); // This limit should not be increased unless the logic for removing the @@ -32,9 +35,13 @@ void NetworkQualityStore::Add( DCHECK_LE(cached_network_qualities_.size(), static_cast<size_t>(kMaximumNetworkQualityCacheSize)); - // If the network name is unavailable, caching should not be performed. - if (network_id.type != net::NetworkChangeNotifier::CONNECTION_ETHERNET && - network_id.id.empty()) { + // If the network name is unavailable, caching should not be performed. If + // |disable_offline_check_| is set to true, cache the network quality even if + // the network is set to offline. + if (network_id.type != NetworkChangeNotifier::CONNECTION_ETHERNET && + network_id.id.empty() && + (network_id.type != NetworkChangeNotifier::CONNECTION_NONE || + !disable_offline_check_)) { return; } @@ -80,19 +87,39 @@ bool NetworkQualityStore::GetById( } void NetworkQualityStore::AddNetworkQualitiesCacheObserver( - nqe::internal::NetworkQualityStore::NetworkQualitiesCacheObserver* - observer) { + NetworkQualitiesCacheObserver* observer) { DCHECK(thread_checker_.CalledOnValidThread()); network_qualities_cache_observer_list_.AddObserver(observer); + + // Notify the |observer| on the next message pump since |observer| may not + // be completely set up for receiving the callbacks. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(&NetworkQualityStore::NotifyCacheObserverIfPresent, + weak_ptr_factory_.GetWeakPtr(), observer)); } void NetworkQualityStore::RemoveNetworkQualitiesCacheObserver( - nqe::internal::NetworkQualityStore::NetworkQualitiesCacheObserver* - observer) { + NetworkQualitiesCacheObserver* observer) { DCHECK(thread_checker_.CalledOnValidThread()); network_qualities_cache_observer_list_.RemoveObserver(observer); } +void NetworkQualityStore::DisableOfflineCheckForTesting( + bool disable_offline_check) { + DCHECK(thread_checker_.CalledOnValidThread()); + disable_offline_check_ = disable_offline_check; +} + +void NetworkQualityStore::NotifyCacheObserverIfPresent( + NetworkQualitiesCacheObserver* observer) const { + DCHECK(thread_checker_.CalledOnValidThread()); + + if (!network_qualities_cache_observer_list_.HasObserver(observer)) + return; + for (const auto it : cached_network_qualities_) + observer->OnChangeInCachedNetworkQuality(it.first, it.second); +} + } // namespace internal } // namespace nqe |