| Index: net/websockets/websocket_stream.cc
|
| diff --git a/net/websockets/websocket_stream.cc b/net/websockets/websocket_stream.cc
|
| index 36b0ad4e5c95352afcf3a80e5af147a0dd7f8b3c..b6a235991979d01ff9a062c693d73c83cbda1afc 100644
|
| --- a/net/websockets/websocket_stream.cc
|
| +++ b/net/websockets/websocket_stream.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/metrics/sparse_histogram.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/http/http_request_headers.h"
|
| +#include "net/http/http_response_headers.h"
|
| #include "net/http/http_status_code.h"
|
| #include "net/url_request/url_request.h"
|
| #include "net/url_request/url_request_context.h"
|
| @@ -133,7 +134,18 @@ class StreamRequestImpl : public WebSocketStreamRequest {
|
| break;
|
| }
|
| }
|
| - connect_delegate_->OnFailure(failure_message_);
|
| + ReportFailureWithMessage(failure_message_);
|
| + }
|
| +
|
| + void ReportFailureWithMessage(const std::string& failure_message) {
|
| + connect_delegate_->OnFailure(failure_message);
|
| + }
|
| +
|
| + void OnFinishOpeningHandshake() {
|
| + WebSocketDispatchOnFinishOpeningHandshake(connect_delegate(),
|
| + url_request_.url(),
|
| + url_request_.response_headers(),
|
| + url_request_.response_time());
|
| }
|
|
|
| WebSocketStream::ConnectDelegate* connect_delegate() const {
|
| @@ -198,7 +210,16 @@ void Delegate::OnResponseStarted(URLRequest* request) {
|
| return;
|
|
|
| case HTTP_UNAUTHORIZED:
|
| + result_ = FAILED;
|
| + owner_->OnFinishOpeningHandshake();
|
| + owner_->ReportFailureWithMessage(
|
| + "HTTP Authentication failed; no valid credentials available");
|
| + return;
|
| +
|
| case HTTP_PROXY_AUTHENTICATION_REQUIRED:
|
| + result_ = FAILED;
|
| + owner_->OnFinishOpeningHandshake();
|
| + owner_->ReportFailureWithMessage("Proxy authentication failed");
|
| return;
|
|
|
| default:
|
| @@ -285,4 +306,20 @@ scoped_ptr<WebSocketStreamRequest> CreateAndConnectStreamForTesting(
|
| return request.PassAs<WebSocketStreamRequest>();
|
| }
|
|
|
| +void WebSocketDispatchOnFinishOpeningHandshake(
|
| + WebSocketStream::ConnectDelegate* connect_delegate,
|
| + const GURL& url,
|
| + const scoped_refptr<HttpResponseHeaders>& headers,
|
| + base::Time response_time) {
|
| + DCHECK(connect_delegate);
|
| + if (headers) {
|
| + connect_delegate->OnFinishOpeningHandshake(make_scoped_ptr(
|
| + new WebSocketHandshakeResponseInfo(url,
|
| + headers->response_code(),
|
| + headers->GetStatusText(),
|
| + headers,
|
| + response_time)));
|
| + }
|
| +}
|
| +
|
| } // namespace net
|
|
|