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

Unified Diff: net/base/network_change_notifier_mac.cc

Issue 2896203003: [NetworkChangeNotifier] Return more specific network connection types (ethernet/wifi) on OSX (Closed)
Patch Set: Fixes Created 3 years, 7 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: net/base/network_change_notifier_mac.cc
diff --git a/net/base/network_change_notifier_mac.cc b/net/base/network_change_notifier_mac.cc
index 0082153613a1ef79c2c85c9c8081759fb20336d1..8037146a6beabd2777407045e4d29ddfbc48d88e 100644
--- a/net/base/network_change_notifier_mac.cc
+++ b/net/base/network_change_notifier_mac.cc
@@ -9,6 +9,7 @@
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
+#include "base/task_runner_util.h"
#include "base/threading/thread.h"
#include "base/threading/thread_restrictions.h"
#include "net/dns/dns_config_service.h"
@@ -21,24 +22,6 @@ static bool CalculateReachability(SCNetworkConnectionFlags flags) {
return reachable && !connection_required;
}
-NetworkChangeNotifier::ConnectionType CalculateConnectionType(
- SCNetworkConnectionFlags flags) {
- bool reachable = CalculateReachability(flags);
- if (reachable) {
-#if defined(OS_IOS)
- return (flags & kSCNetworkReachabilityFlagsIsWWAN) ?
- NetworkChangeNotifier::CONNECTION_3G :
- NetworkChangeNotifier::CONNECTION_WIFI;
-#else
- // TODO(droger): Get something more detailed than CONNECTION_UNKNOWN.
- // http://crbug.com/112937
- return NetworkChangeNotifier::CONNECTION_UNKNOWN;
-#endif // defined(OS_IOS)
- } else {
- return NetworkChangeNotifier::CONNECTION_NONE;
- }
-}
-
// Thread on which we can run DnsConfigService, which requires a TYPE_IO
// message loop.
class NetworkChangeNotifierMac::DnsConfigServiceThread : public base::Thread {
@@ -66,7 +49,8 @@ NetworkChangeNotifierMac::NetworkChangeNotifierMac()
connection_type_initialized_(false),
initial_connection_type_cv_(&connection_type_lock_),
forwarder_(this),
- dns_config_service_thread_(new DnsConfigServiceThread()) {
+ dns_config_service_thread_(new DnsConfigServiceThread()),
+ weak_ptr_factory_(this) {
// Must be initialized after the rest of this object, as it may call back into
// SetInitialConnectionType().
config_watcher_.reset(new NetworkConfigWatcherMac(&forwarder_));
@@ -102,6 +86,28 @@ NetworkChangeNotifierMac::NetworkChangeCalculatorParamsMac() {
return params;
}
+// static
+NetworkChangeNotifier::ConnectionType
+NetworkChangeNotifierMac::CalculateConnectionType(
+ SCNetworkConnectionFlags flags) {
+ // Called on notifier thread during forwarder initialization, otherwise on
+ // the dns thread.
+ bool reachable = CalculateReachability(flags);
+ if (reachable) {
+#if defined(OS_IOS)
+ return (flags & kSCNetworkReachabilityFlagsIsWWAN)
+ ? NetworkChangeNotifier::CONNECTION_3G
+ : NetworkChangeNotifier::CONNECTION_WIFI;
+#else
+ // TODO(droger): Get something more detailed than CONNECTION_UNKNOWN.
+ // http://crbug.com/112937
pauljensen 2017/05/23 15:10:30 I think we can remove this comment now. Can you a
jkarlin 2017/05/27 01:06:19 Done.
+ return ConnectionTypeFromInterfaces();
+#endif // defined(OS_IOS)
+ } else {
+ return CONNECTION_NONE;
+ }
+}
+
NetworkChangeNotifier::ConnectionType
NetworkChangeNotifierMac::GetCurrentConnectionType() const {
base::ThreadRestrictions::ScopedAllowWait allow_wait;
@@ -248,21 +254,30 @@ void NetworkChangeNotifierMac::ReachabilityCallback(
void* notifier) {
NetworkChangeNotifierMac* notifier_mac =
static_cast<NetworkChangeNotifierMac*>(notifier);
-
pauljensen 2017/05/23 15:10:30 whitespace change?
jkarlin 2017/05/27 01:06:19 Done.
DCHECK_EQ(notifier_mac->run_loop_.get(), CFRunLoopGetCurrent());
- ConnectionType new_type = CalculateConnectionType(flags);
+ base::PostTaskAndReplyWithResult(
+ notifier_mac->dns_config_service_thread_->message_loop()
+ ->task_runner()
pauljensen 2017/05/23 15:18:15 hmm so I think this may not be the thread we want
jkarlin 2017/05/27 01:06:19 After F2F, moved to notifier thread and enabled bl
+ .get(),
+ FROM_HERE,
+ base::Bind(&NetworkChangeNotifierMac::CalculateConnectionType, flags),
+ base::Bind(&NetworkChangeNotifierMac::ReachabilityCallbackImpl,
+ notifier_mac->weak_ptr_factory_.GetWeakPtr()));
+}
+
+void NetworkChangeNotifierMac::ReachabilityCallbackImpl(
+ ConnectionType new_type) {
ConnectionType old_type;
{
- base::AutoLock lock(notifier_mac->connection_type_lock_);
- old_type = notifier_mac->connection_type_;
- notifier_mac->connection_type_ = new_type;
+ base::AutoLock lock(connection_type_lock_);
+ old_type = connection_type_;
+ connection_type_ = new_type;
}
if (old_type != new_type) {
NotifyObserversOfConnectionTypeChange();
- double max_bandwidth_mbps =
- NetworkChangeNotifier::GetMaxBandwidthForConnectionSubtype(
- new_type == CONNECTION_NONE ? SUBTYPE_NONE : SUBTYPE_UNKNOWN);
+ double max_bandwidth_mbps = GetMaxBandwidthForConnectionSubtype(
+ new_type == CONNECTION_NONE ? SUBTYPE_NONE : SUBTYPE_UNKNOWN);
NotifyObserversOfMaxBandwidthChange(max_bandwidth_mbps, new_type);
}
« net/base/network_change_notifier_mac.h ('K') | « net/base/network_change_notifier_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698