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

Unified Diff: webrtc/base/network.cc

Issue 1391703003: Create network change notifier. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Minor fix on the comment 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
Index: webrtc/base/network.cc
diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc
index bc7d50528cfdfa58283617e5f360e8dbe65c6a0e..c2141abfbbcf8b1ffffe0729f7d048f26408a29c 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/networkchangenotifier.h"
#include "webrtc/base/scoped_ptr.h"
#include "webrtc/base/socket.h" // includes something that makes windows happy
#include "webrtc/base/stream.h"
@@ -64,6 +65,7 @@ const int kMaxIPv6Networks = 5;
const uint32 kUpdateNetworksMessage = 1;
pthatcher1 2015/10/09 23:11:29 Similarly, kUpdateNetworksContinuallyMessage
honghaiz3 2015/10/13 23:19:56 I kept the message name because now I do not need
const uint32 kSignalNetworksMessage = 2;
+const uint32 kUpdateNetworksOnceMessage = 3;
// Fetch list of networks every two seconds.
const int kNetworksUpdateIntervalMs = 2000;
@@ -329,6 +331,11 @@ BasicNetworkManager::BasicNetworkManager()
BasicNetworkManager::~BasicNetworkManager() {
}
+void BasicNetworkManager::OnNetworkChangeNotified() {
pthatcher1 2015/10/09 23:11:29 I think OnNetworksChanged would be a better name.
honghaiz3 2015/10/13 23:19:56 Done.
+ LOG(LS_VERBOSE) << "Network change was notified at the network manager";
+ thread_->Post(this, kUpdateNetworksOnceMessage);
+}
+
#if defined(__native_client__)
bool BasicNetworkManager::CreateNetworks(bool include_ignored,
@@ -663,6 +670,7 @@ void BasicNetworkManager::StartUpdating() {
thread_->Post(this, kSignalNetworksMessage);
} else {
thread_->Post(this, kUpdateNetworksMessage);
+ StartNetworkChangeNotifier();
}
++start_count_;
}
@@ -676,12 +684,34 @@ void BasicNetworkManager::StopUpdating() {
if (!start_count_) {
thread_->Clear(this);
sent_first_update_ = false;
+ StopNetworkChangeNotifier();
}
}
+void BasicNetworkManager::StartNetworkChangeNotifier() {
+ NetworkChangeNotifierFactory* factory = NetworkChangeNotifier::GetFactory();
+ if (factory == nullptr) {
+ return;
+ }
+ network_change_notifier_.reset(factory->CreateNotifier());
pthatcher1 2015/10/09 23:11:29 Why do we have GetFactory()->CreateNotifier()? Wh
honghaiz3 2015/10/13 23:19:56 I keep the factory as it helps unittests and allow
+ if (!network_change_notifier_) {
+ return;
+ }
+ network_change_notifier_->SignalNetworksChanged.connect(
+ this, &BasicNetworkManager::OnNetworkChangeNotified);
+}
+
+void BasicNetworkManager::StopNetworkChangeNotifier() {
+ network_change_notifier_.reset();
+}
+
void BasicNetworkManager::OnMessage(Message* msg) {
switch (msg->message_id) {
case kUpdateNetworksMessage: {
+ UpdateNetworks();
+ break;
+ }
+ case kUpdateNetworksOnceMessage: {
DoUpdateNetworks();
break;
}
@@ -711,7 +741,10 @@ void BasicNetworkManager::DoUpdateNetworks() {
sent_first_update_ = true;
}
}
+}
+void BasicNetworkManager::UpdateNetworks() {
+ DoUpdateNetworks();
thread_->PostDelayed(kNetworksUpdateIntervalMs, this, kUpdateNetworksMessage);
}

Powered by Google App Engine
This is Rietveld 408576698