| Index: net/websockets/websocket_stream.cc | 
| diff --git a/net/websockets/websocket_stream.cc b/net/websockets/websocket_stream.cc | 
| index 62ce35bb3e78921c6dab3f291fef3d3a7786cd92..9ec6f5c9344674b46ec0f87cbaa5d350465d6960 100644 | 
| --- a/net/websockets/websocket_stream.cc | 
| +++ b/net/websockets/websocket_stream.cc | 
| @@ -61,7 +61,7 @@ class Delegate : public URLRequest::Delegate { | 
| const RedirectInfo& redirect_info, | 
| bool* defer_redirect) override; | 
|  | 
| -  void OnResponseStarted(URLRequest* request) override; | 
| +  void OnResponseStarted(URLRequest* request, int net_error) override; | 
|  | 
| void OnAuthRequired(URLRequest* request, | 
| AuthChallengeInfo* auth_info) override; | 
| @@ -153,9 +153,8 @@ class WebSocketStreamRequestImpl : public WebSocketStreamRequest { | 
| connect_delegate_->OnSuccess(handshake_stream->Upgrade()); | 
| } | 
|  | 
| -  std::string FailureMessageFromNetError() { | 
| -    int error = url_request_->status().error(); | 
| -    if (error == ERR_TUNNEL_CONNECTION_FAILED) { | 
| +  std::string FailureMessageFromNetError(int net_error) { | 
| +    if (net_error == ERR_TUNNEL_CONNECTION_FAILED) { | 
| // This error is common and confusing, so special-case it. | 
| // TODO(ricea): Include the HostPortPair of the selected proxy server in | 
| // the error message. This is not currently possible because it isn't set | 
| @@ -163,26 +162,26 @@ class WebSocketStreamRequestImpl : public WebSocketStreamRequest { | 
| return "Establishing a tunnel via proxy server failed."; | 
| } else { | 
| return std::string("Error in connection establishment: ") + | 
| -             ErrorToString(url_request_->status().error()); | 
| +             ErrorToString(net_error); | 
| } | 
| } | 
|  | 
| -  void ReportFailure() { | 
| +  void ReportFailure(int net_error) { | 
| DCHECK(timer_); | 
| timer_->Stop(); | 
| if (failure_message_.empty()) { | 
| -      switch (url_request_->status().status()) { | 
| -        case URLRequestStatus::SUCCESS: | 
| -        case URLRequestStatus::IO_PENDING: | 
| +      switch (net_error) { | 
| +        case OK: | 
| +        case ERR_IO_PENDING: | 
| break; | 
| -        case URLRequestStatus::CANCELED: | 
| -          if (url_request_->status().error() == ERR_TIMED_OUT) | 
| -            failure_message_ = "WebSocket opening handshake timed out"; | 
| -          else | 
| -            failure_message_ = "WebSocket opening handshake was canceled"; | 
| +        case ERR_ABORTED: | 
| +          failure_message_ = "WebSocket opening handshake was canceled"; | 
| break; | 
| -        case URLRequestStatus::FAILED: | 
| -          failure_message_ = FailureMessageFromNetError(); | 
| +        case ERR_TIMED_OUT: | 
| +          failure_message_ = "WebSocket opening handshake timed out"; | 
| +          break; | 
| +        default: | 
| +          failure_message_ = FailureMessageFromNetError(net_error); | 
| break; | 
| } | 
| } | 
| @@ -282,14 +281,14 @@ void Delegate::OnReceivedRedirect(URLRequest* request, | 
| } | 
| } | 
|  | 
| -void Delegate::OnResponseStarted(URLRequest* request) { | 
| +void Delegate::OnResponseStarted(URLRequest* request, int net_error) { | 
| +  DCHECK_NE(ERR_IO_PENDING, net_error); | 
| // All error codes, including OK and ABORTED, as with | 
| // Net.ErrorCodesForMainFrame3 | 
| -  UMA_HISTOGRAM_SPARSE_SLOWLY("Net.WebSocket.ErrorCodes", | 
| -                              -request->status().error()); | 
| -  if (!request->status().is_success()) { | 
| +  UMA_HISTOGRAM_SPARSE_SLOWLY("Net.WebSocket.ErrorCodes", -net_error); | 
| +  if (net_error != OK) { | 
| DVLOG(3) << "OnResponseStarted (request failed)"; | 
| -    owner_->ReportFailure(); | 
| +    owner_->ReportFailure(net_error); | 
| return; | 
| } | 
| const int response_code = request->GetResponseCode(); | 
| @@ -315,7 +314,7 @@ void Delegate::OnResponseStarted(URLRequest* request) { | 
|  | 
| default: | 
| result_ = FAILED; | 
| -      owner_->ReportFailure(); | 
| +      owner_->ReportFailure(net_error); | 
| } | 
| } | 
|  | 
|  |