Index: chromecast/net/connectivity_checker_impl.cc |
diff --git a/chromecast/net/connectivity_checker_impl.cc b/chromecast/net/connectivity_checker_impl.cc |
index d10d06a13f40de64aba74f9586ab203f8b48febc..40f56c66e05ce35af32180a5b1c19f03a5d06d68 100644 |
--- a/chromecast/net/connectivity_checker_impl.cc |
+++ b/chromecast/net/connectivity_checker_impl.cc |
@@ -28,6 +28,9 @@ const unsigned int kConnectivityPeriodSeconds = 1; |
// to offline. |
const unsigned int kNumErrorsToNotifyOffline = 3; |
+// Request timeout value in seconds. |
+const unsigned int kRequestTimeoutInSeconds = 3; |
+ |
// Default url for connectivity checking. |
const char kDefaultConnectivityCheckUrl[] = |
"https://clients3.google.com/generate_204"; |
@@ -65,6 +68,7 @@ void ConnectivityCheckerImpl::Initialize() { |
ConnectivityCheckerImpl::~ConnectivityCheckerImpl() { |
DCHECK(task_runner_.get()); |
+ timeout_.Cancel(); |
net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
task_runner_->DeleteSoon(FROM_HERE, url_request_.release()); |
task_runner_->DeleteSoon(FROM_HERE, url_request_context_.release()); |
@@ -106,6 +110,13 @@ void ConnectivityCheckerImpl::Check() { |
*connectivity_check_url_, net::MAXIMUM_PRIORITY, this); |
url_request_->set_method("HEAD"); |
url_request_->Start(); |
+ |
+ timeout_.Reset(base::Bind(&ConnectivityCheckerImpl::OnUrlRequestTimeout, |
+ this)); |
+ base::MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ timeout_.callback(), |
+ base::TimeDelta::FromSeconds(kRequestTimeoutInSeconds)); |
} |
void ConnectivityCheckerImpl::OnNetworkChanged( |
@@ -122,6 +133,7 @@ void ConnectivityCheckerImpl::OnNetworkChanged( |
} |
void ConnectivityCheckerImpl::OnResponseStarted(net::URLRequest* request) { |
+ timeout_.Cancel(); |
int http_response_code = |
(request->status().is_success() && |
request->response_info().headers.get() != NULL) |
@@ -141,11 +153,17 @@ void ConnectivityCheckerImpl::OnResponseStarted(net::URLRequest* request) { |
OnUrlRequestError(); |
} |
+void ConnectivityCheckerImpl::OnReadCompleted(net::URLRequest* request, |
+ int bytes_read) { |
+ NOTREACHED(); |
+} |
+ |
void ConnectivityCheckerImpl::OnSSLCertificateError( |
net::URLRequest* request, |
const net::SSLInfo& ssl_info, |
bool fatal) { |
LOG(ERROR) << "OnSSLCertificateError"; |
+ timeout_.Cancel(); |
OnUrlRequestError(); |
} |
@@ -162,9 +180,9 @@ void ConnectivityCheckerImpl::OnUrlRequestError() { |
base::TimeDelta::FromSeconds(kConnectivityPeriodSeconds)); |
} |
-void ConnectivityCheckerImpl::OnReadCompleted(net::URLRequest* request, |
- int bytes_read) { |
- NOTREACHED(); |
+void ConnectivityCheckerImpl::OnUrlRequestTimeout() { |
+ LOG(ERROR) << "time out"; |
+ OnUrlRequestError(); |
} |
void ConnectivityCheckerImpl::Cancel() { |