| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromecast/net/connectivity_checker.h" | 5 #include "chromecast/net/connectivity_checker.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "chromecast/net/net_switches.h" | 10 #include "chromecast/net/net_switches.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 connectivity_check_url_.reset(new GURL( | 53 connectivity_check_url_.reset(new GURL( |
| 54 check_url_str.empty() ? kDefaultConnectivityCheckUrl : check_url_str)); | 54 check_url_str.empty() ? kDefaultConnectivityCheckUrl : check_url_str)); |
| 55 | 55 |
| 56 net::URLRequestContextBuilder builder; | 56 net::URLRequestContextBuilder builder; |
| 57 builder.set_proxy_config_service( | 57 builder.set_proxy_config_service( |
| 58 new net::ProxyConfigServiceFixed(net::ProxyConfig::CreateDirect())); | 58 new net::ProxyConfigServiceFixed(net::ProxyConfig::CreateDirect())); |
| 59 builder.DisableHttpCache(); | 59 builder.DisableHttpCache(); |
| 60 url_request_context_.reset(builder.Build()); | 60 url_request_context_.reset(builder.Build()); |
| 61 | 61 |
| 62 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); | 62 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); |
| 63 net::NetworkChangeNotifier::AddIPAddressObserver(this); |
| 63 loop_proxy_->PostTask(FROM_HERE, | 64 loop_proxy_->PostTask(FROM_HERE, |
| 64 base::Bind(&ConnectivityChecker::Check, this)); | 65 base::Bind(&ConnectivityChecker::Check, this)); |
| 65 } | 66 } |
| 66 | 67 |
| 67 ConnectivityChecker::~ConnectivityChecker() { | 68 ConnectivityChecker::~ConnectivityChecker() { |
| 68 DCHECK(loop_proxy_.get()); | 69 DCHECK(loop_proxy_.get()); |
| 70 net::NetworkChangeNotifier::RemoveIPAddressObserver(this); |
| 71 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); |
| 69 loop_proxy_->DeleteSoon(FROM_HERE, url_request_context_.release()); | 72 loop_proxy_->DeleteSoon(FROM_HERE, url_request_context_.release()); |
| 70 loop_proxy_->DeleteSoon(FROM_HERE, url_request_.release()); | 73 loop_proxy_->DeleteSoon(FROM_HERE, url_request_.release()); |
| 71 } | 74 } |
| 72 | 75 |
| 73 void ConnectivityChecker::AddConnectivityObserver( | 76 void ConnectivityChecker::AddConnectivityObserver( |
| 74 ConnectivityObserver* observer) { | 77 ConnectivityObserver* observer) { |
| 75 connectivity_observer_list_->AddObserver(observer); | 78 connectivity_observer_list_->AddObserver(observer); |
| 76 } | 79 } |
| 77 | 80 |
| 78 void ConnectivityChecker::RemoveConnectivityObserver( | 81 void ConnectivityChecker::RemoveConnectivityObserver( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 109 | 112 |
| 110 VLOG(1) << "Connectivity check: url=" << *connectivity_check_url_; | 113 VLOG(1) << "Connectivity check: url=" << *connectivity_check_url_; |
| 111 url_request_ = url_request_context_->CreateRequest( | 114 url_request_ = url_request_context_->CreateRequest( |
| 112 *connectivity_check_url_, net::MAXIMUM_PRIORITY, this, NULL); | 115 *connectivity_check_url_, net::MAXIMUM_PRIORITY, this, NULL); |
| 113 url_request_->set_method("HEAD"); | 116 url_request_->set_method("HEAD"); |
| 114 url_request_->Start(); | 117 url_request_->Start(); |
| 115 } | 118 } |
| 116 | 119 |
| 117 void ConnectivityChecker::OnConnectionTypeChanged( | 120 void ConnectivityChecker::OnConnectionTypeChanged( |
| 118 net::NetworkChangeNotifier::ConnectionType type) { | 121 net::NetworkChangeNotifier::ConnectionType type) { |
| 122 VLOG(2) << "OnConnectionTypeChanged " << type; |
| 119 if (type == net::NetworkChangeNotifier::CONNECTION_NONE) | 123 if (type == net::NetworkChangeNotifier::CONNECTION_NONE) |
| 120 SetConnectivity(false); | 124 SetConnectivity(false); |
| 121 | 125 |
| 122 Cancel(); | 126 Cancel(); |
| 123 Check(); | 127 Check(); |
| 124 } | 128 } |
| 125 | 129 |
| 130 void ConnectivityChecker::OnIPAddressChanged() { |
| 131 VLOG(2) << "OnIPAddressChanged"; |
| 132 |
| 133 Cancel(); |
| 134 Check(); |
| 135 } |
| 136 |
| 126 void ConnectivityChecker::OnResponseStarted(net::URLRequest* request) { | 137 void ConnectivityChecker::OnResponseStarted(net::URLRequest* request) { |
| 127 int http_response_code = | 138 int http_response_code = |
| 128 (request->status().is_success() && | 139 (request->status().is_success() && |
| 129 request->response_info().headers.get() != NULL) | 140 request->response_info().headers.get() != NULL) |
| 130 ? request->response_info().headers->response_code() | 141 ? request->response_info().headers->response_code() |
| 131 : net::HTTP_BAD_REQUEST; | 142 : net::HTTP_BAD_REQUEST; |
| 132 | 143 |
| 133 // Clears resources. | 144 // Clears resources. |
| 134 url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. | 145 url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. |
| 135 | 146 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 159 } | 170 } |
| 160 | 171 |
| 161 void ConnectivityChecker::Cancel() { | 172 void ConnectivityChecker::Cancel() { |
| 162 if (url_request_.get()) { | 173 if (url_request_.get()) { |
| 163 VLOG(2) << "Cancel connectivity check in progress"; | 174 VLOG(2) << "Cancel connectivity check in progress"; |
| 164 url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. | 175 url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. |
| 165 } | 176 } |
| 166 } | 177 } |
| 167 | 178 |
| 168 } // namespace chromecast | 179 } // namespace chromecast |
| OLD | NEW |