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

Unified Diff: webrtc/base/network.cc

Issue 1391703003: Create network change notifier. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Changed comments Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/network.h ('k') | webrtc/base/network_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/network.cc
diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc
index bc714e30f405d3e23c49cd1bf430d0547f8efba9..879c1e4529d9f560e0b550795dc7f4826a5ae9d1 100644
--- a/webrtc/base/network.cc
+++ b/webrtc/base/network.cc
@@ -48,6 +48,7 @@
#include <algorithm>
#include "webrtc/base/logging.h"
+#include "webrtc/base/networkmonitor.h"
#include "webrtc/base/scoped_ptr.h"
#include "webrtc/base/socket.h" // includes something that makes windows happy
#include "webrtc/base/stream.h"
@@ -329,6 +330,11 @@ BasicNetworkManager::BasicNetworkManager()
BasicNetworkManager::~BasicNetworkManager() {
}
+void BasicNetworkManager::OnNetworksChanged() {
+ LOG(LS_VERBOSE) << "Network change was observed at the network manager";
+ UpdateNetworksOnce();
+}
+
#if defined(__native_client__)
bool BasicNetworkManager::CreateNetworks(bool include_ignored,
@@ -663,6 +669,7 @@ void BasicNetworkManager::StartUpdating() {
thread_->Post(this, kSignalNetworksMessage);
} else {
thread_->Post(this, kUpdateNetworksMessage);
+ StartNetworkMonitor();
}
++start_count_;
}
@@ -676,13 +683,36 @@ void BasicNetworkManager::StopUpdating() {
if (!start_count_) {
thread_->Clear(this);
sent_first_update_ = false;
+ StopNetworkMonitor();
}
}
+void BasicNetworkManager::StartNetworkMonitor() {
+ NetworkMonitorFactory* factory = NetworkMonitorFactory::GetFactory();
+ if (factory == nullptr) {
+ return;
+ }
+ network_monitor_.reset(factory->CreateNetworkMonitor());
+ if (!network_monitor_) {
+ return;
+ }
+ network_monitor_->SignalNetworksChanged.connect(
+ this, &BasicNetworkManager::OnNetworksChanged);
+ network_monitor_->Start();
+}
+
+void BasicNetworkManager::StopNetworkMonitor() {
+ if (!network_monitor_) {
+ return;
+ }
+ network_monitor_->Stop();
+ network_monitor_.reset();
+}
+
void BasicNetworkManager::OnMessage(Message* msg) {
switch (msg->message_id) {
- case kUpdateNetworksMessage: {
- DoUpdateNetworks();
+ case kUpdateNetworksMessage: {
+ UpdateNetworksContinually();
break;
}
case kSignalNetworksMessage: {
@@ -694,7 +724,7 @@ void BasicNetworkManager::OnMessage(Message* msg) {
}
}
-void BasicNetworkManager::DoUpdateNetworks() {
+void BasicNetworkManager::UpdateNetworksOnce() {
if (!start_count_)
return;
@@ -711,7 +741,10 @@ void BasicNetworkManager::DoUpdateNetworks() {
sent_first_update_ = true;
}
}
+}
+void BasicNetworkManager::UpdateNetworksContinually() {
+ UpdateNetworksOnce();
thread_->PostDelayed(kNetworksUpdateIntervalMs, this, kUpdateNetworksMessage);
}
« no previous file with comments | « webrtc/base/network.h ('k') | webrtc/base/network_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698