summaryrefslogtreecommitdiff
path: root/chromium/net/nqe/network_quality_store.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-05 14:08:31 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-04-11 07:46:53 +0000
commit6a4cabb866f66d4128a97cdc6d9d08ce074f1247 (patch)
treeab00f70a5e89278d6a0d16ff0c42578dc4d84a2d /chromium/net/nqe/network_quality_store.cc
parente733310db58160074f574c429d48f8308c0afe17 (diff)
downloadqtwebengine-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.cc43
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