| 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..ac45f2b9313c29d0a7267a5dff4a8fb03db99178 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;
|
|
|
| +// Timeout to get response from request.
|
| +const unsigned int kRequestTimeOutInSeconds = 3;
|
| +
|
| // Default url for connectivity checking.
|
| const char kDefaultConnectivityCheckUrl[] =
|
| "https://clients3.google.com/generate_204";
|
| @@ -39,7 +42,8 @@ ConnectivityCheckerImpl::ConnectivityCheckerImpl(
|
| : ConnectivityChecker(),
|
| task_runner_(task_runner),
|
| connected_(false),
|
| - check_errors_(0) {
|
| + check_errors_(0),
|
| + request_index_(0) {
|
| DCHECK(task_runner_.get());
|
| task_runner->PostTask(FROM_HERE,
|
| base::Bind(&ConnectivityCheckerImpl::Initialize, this));
|
| @@ -101,11 +105,18 @@ void ConnectivityCheckerImpl::Check() {
|
| if (url_request_.get())
|
| return;
|
|
|
| + ++request_index_;
|
| VLOG(1) << "Connectivity check: url=" << *connectivity_check_url_;
|
| url_request_ = url_request_context_->CreateRequest(
|
| *connectivity_check_url_, net::MAXIMUM_PRIORITY, this);
|
| url_request_->set_method("HEAD");
|
| url_request_->Start();
|
| +
|
| + // Schedule time out callback.
|
| + task_runner_->PostDelayedTask(
|
| + FROM_HERE, base::Bind(&ConnectivityCheckerImpl::OnUrlRequestTimeOut, this,
|
| + request_index_),
|
| + base::TimeDelta::FromSeconds(kRequestTimeOutInSeconds));
|
| }
|
|
|
| void ConnectivityCheckerImpl::OnNetworkChanged(
|
| @@ -162,6 +173,17 @@ void ConnectivityCheckerImpl::OnUrlRequestError() {
|
| base::TimeDelta::FromSeconds(kConnectivityPeriodSeconds));
|
| }
|
|
|
| +void ConnectivityCheckerImpl::OnUrlRequestTimeOut(unsigned int request_index) {
|
| + if (request_index_ != request_index)
|
| + return;
|
| + if (!url_request_.get()) {
|
| + LOG(INFO) << "OnUrlRequestTimeOut, request has completed";
|
| + return;
|
| + }
|
| + VLOG(2) << "UrlRequest timed out";
|
| + OnUrlRequestError();
|
| +}
|
| +
|
| void ConnectivityCheckerImpl::OnReadCompleted(net::URLRequest* request,
|
| int bytes_read) {
|
| NOTREACHED();
|
|
|