Chromium Code Reviews| 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 ca314a199f9f6343b105a034bde290f5c55d3e72..67cb69637cd1bd40bc08a45c99f4ea3f5a96d865 100644 |
| --- a/net/base/network_change_notifier_mac.cc |
| +++ b/net/base/network_change_notifier_mac.cc |
| @@ -8,15 +8,20 @@ |
| namespace net { |
| -static bool CalculateReachability(SCNetworkConnectionFlags flags) { |
| +static NetworkChangeNotifier::ConnectionType |
|
wtc
2012/05/11 01:35:05
Nit: NetworkChangeNotifier::ConnectionType is very
|
| +CalculateReachability(SCNetworkConnectionFlags flags) { |
|
wtc
2012/05/11 01:35:05
IMPORTANT: It seems wrong for a function named
Cal
|
| bool reachable = flags & kSCNetworkFlagsReachable; |
| bool connection_required = flags & kSCNetworkFlagsConnectionRequired; |
| - return reachable && !connection_required; |
| + // TODO: Return something more detailed than CONNECTION_UNKNOWN. |
| + return (reachable && !connection_required) ? |
| + NetworkChangeNotifier::CONNECTION_UNKNOWN : |
| + NetworkChangeNotifier::CONNECTION_NONE; |
| } |
| NetworkChangeNotifierMac::NetworkChangeNotifierMac() |
| - : online_state_(UNINITIALIZED), |
| - initial_state_cv_(&online_state_lock_), |
| + : connection_type_(CONNECTION_UNKNOWN), |
| + initialized_(false), |
| + initial_state_cv_(&connection_type_lock_), |
| forwarder_(this) { |
| // Must be initialized after the rest of this object, as it may call back into |
| // SetInitialState(). |
| @@ -37,13 +42,14 @@ NetworkChangeNotifierMac::~NetworkChangeNotifierMac() { |
| } |
| } |
| -bool NetworkChangeNotifierMac::IsCurrentlyOffline() const { |
| - base::AutoLock lock(online_state_lock_); |
| +NetworkChangeNotifier::ConnectionType |
| +NetworkChangeNotifierMac::GetCurrentConnectionType() const { |
| + base::AutoLock lock(connection_type_lock_); |
| // Make sure the initial state is set before returning. |
| - while (online_state_ == UNINITIALIZED) { |
| + while (!initialized_) { |
| initial_state_cv_.Wait(); |
| } |
| - return online_state_ == OFFLINE; |
| + return connection_type_; |
| } |
| void NetworkChangeNotifierMac::SetInitialState() { |
| @@ -62,14 +68,15 @@ void NetworkChangeNotifierMac::SetInitialState() { |
| kCFAllocatorDefault, reinterpret_cast<struct sockaddr*>(&addr))); |
| SCNetworkConnectionFlags flags; |
| - bool reachable = true; |
| + ConnectionType reachable = CONNECTION_UNKNOWN; |
| if (SCNetworkReachabilityGetFlags(reachability_, &flags)) |
| reachable = CalculateReachability(flags); |
| else |
| LOG(ERROR) << "Could not get initial network state, assuming online."; |
| { |
| - base::AutoLock lock(online_state_lock_); |
| - online_state_ = reachable ? ONLINE : OFFLINE; |
| + base::AutoLock lock(connection_type_lock_); |
| + connection_type_ = reachable; |
| + initialized_ = true; |
| initial_state_cv_.Signal(); |
| } |
| } |
| @@ -153,15 +160,15 @@ void NetworkChangeNotifierMac::ReachabilityCallback( |
| DCHECK_EQ(notifier_mac->run_loop_.get(), CFRunLoopGetCurrent()); |
| - OnlineState new_state = CalculateReachability(flags) ? ONLINE : OFFLINE; |
| - OnlineState old_state; |
| + ConnectionType new_type = CalculateReachability(flags); |
| + ConnectionType old_type; |
| { |
| - base::AutoLock lock(notifier_mac->online_state_lock_); |
| - old_state = notifier_mac->online_state_; |
| - notifier_mac->online_state_ = new_state; |
| + base::AutoLock lock(notifier_mac->connection_type_lock_); |
| + old_type = notifier_mac->connection_type_; |
| + notifier_mac->connection_type_ = new_type; |
| } |
| - if (old_state != new_state) |
| - NotifyObserversOfOnlineStateChange(); |
| + if (old_type != new_type) |
| + NotifyObserversOfConnectionTypeChange(); |
| } |
| } // namespace net |