Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: net/websockets/websocket_stream.cc

Issue 336263005: Map WebSocket URL schemes to HTTP URL schemes for auth purposes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Replace accidentally removed #include <string> Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "net/websockets/websocket_stream.h" 5 #include "net/websockets/websocket_stream.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/metrics/sparse_histogram.h" 10 #include "base/metrics/sparse_histogram.h"
11 #include "net/base/load_flags.h" 11 #include "net/base/load_flags.h"
12 #include "net/http/http_request_headers.h" 12 #include "net/http/http_request_headers.h"
13 #include "net/http/http_response_headers.h"
13 #include "net/http/http_status_code.h" 14 #include "net/http/http_status_code.h"
14 #include "net/url_request/url_request.h" 15 #include "net/url_request/url_request.h"
15 #include "net/url_request/url_request_context.h" 16 #include "net/url_request/url_request_context.h"
16 #include "net/websockets/websocket_errors.h" 17 #include "net/websockets/websocket_errors.h"
17 #include "net/websockets/websocket_event_interface.h" 18 #include "net/websockets/websocket_event_interface.h"
18 #include "net/websockets/websocket_handshake_constants.h" 19 #include "net/websockets/websocket_handshake_constants.h"
19 #include "net/websockets/websocket_handshake_stream_base.h" 20 #include "net/websockets/websocket_handshake_stream_base.h"
20 #include "net/websockets/websocket_handshake_stream_create_helper.h" 21 #include "net/websockets/websocket_handshake_stream_create_helper.h"
21 #include "net/websockets/websocket_test_util.h" 22 #include "net/websockets/websocket_test_util.h"
22 #include "url/gurl.h" 23 #include "url/gurl.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 case URLRequestStatus::CANCELED: 127 case URLRequestStatus::CANCELED:
127 failure_message_ = "WebSocket opening handshake was canceled"; 128 failure_message_ = "WebSocket opening handshake was canceled";
128 break; 129 break;
129 case URLRequestStatus::FAILED: 130 case URLRequestStatus::FAILED:
130 failure_message_ = 131 failure_message_ =
131 std::string("Error in connection establishment: ") + 132 std::string("Error in connection establishment: ") +
132 ErrorToString(url_request_.status().error()); 133 ErrorToString(url_request_.status().error());
133 break; 134 break;
134 } 135 }
135 } 136 }
136 connect_delegate_->OnFailure(failure_message_); 137 ReportFailureWithMessage(failure_message_);
138 }
139
140 void ReportFailureWithMessage(const std::string& failure_message) {
141 connect_delegate_->OnFailure(failure_message);
142 }
143
144 void OnFinishOpeningHandshake() {
145 WebSocketDispatchOnFinishOpeningHandshake(connect_delegate(),
146 url_request_.url(),
147 url_request_.response_headers(),
148 url_request_.response_time());
137 } 149 }
138 150
139 WebSocketStream::ConnectDelegate* connect_delegate() const { 151 WebSocketStream::ConnectDelegate* connect_delegate() const {
140 return connect_delegate_.get(); 152 return connect_delegate_.get();
141 } 153 }
142 154
143 private: 155 private:
144 // |delegate_| needs to be declared before |url_request_| so that it gets 156 // |delegate_| needs to be declared before |url_request_| so that it gets
145 // initialised first. 157 // initialised first.
146 scoped_ptr<Delegate> delegate_; 158 scoped_ptr<Delegate> delegate_;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 } 203 }
192 const int response_code = request->GetResponseCode(); 204 const int response_code = request->GetResponseCode();
193 DVLOG(3) << "OnResponseStarted (response code " << response_code << ")"; 205 DVLOG(3) << "OnResponseStarted (response code " << response_code << ")";
194 switch (response_code) { 206 switch (response_code) {
195 case HTTP_SWITCHING_PROTOCOLS: 207 case HTTP_SWITCHING_PROTOCOLS:
196 result_ = CONNECTED; 208 result_ = CONNECTED;
197 owner_->PerformUpgrade(); 209 owner_->PerformUpgrade();
198 return; 210 return;
199 211
200 case HTTP_UNAUTHORIZED: 212 case HTTP_UNAUTHORIZED:
213 result_ = FAILED;
214 owner_->OnFinishOpeningHandshake();
215 owner_->ReportFailureWithMessage(
216 "HTTP Authentication failed; no valid credentials available");
217 return;
218
201 case HTTP_PROXY_AUTHENTICATION_REQUIRED: 219 case HTTP_PROXY_AUTHENTICATION_REQUIRED:
220 result_ = FAILED;
221 owner_->OnFinishOpeningHandshake();
222 owner_->ReportFailureWithMessage("Proxy authentication failed");
202 return; 223 return;
203 224
204 default: 225 default:
205 result_ = FAILED; 226 result_ = FAILED;
206 owner_->ReportFailure(); 227 owner_->ReportFailure();
207 } 228 }
208 } 229 }
209 230
210 void Delegate::OnAuthRequired(URLRequest* request, 231 void Delegate::OnAuthRequired(URLRequest* request,
211 AuthChallengeInfo* auth_info) { 232 AuthChallengeInfo* auth_info) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 scoped_ptr<StreamRequestImpl> request( 299 scoped_ptr<StreamRequestImpl> request(
279 new StreamRequestImpl(socket_url, 300 new StreamRequestImpl(socket_url,
280 url_request_context, 301 url_request_context,
281 origin, 302 origin,
282 connect_delegate.Pass(), 303 connect_delegate.Pass(),
283 create_helper.Pass())); 304 create_helper.Pass()));
284 request->Start(); 305 request->Start();
285 return request.PassAs<WebSocketStreamRequest>(); 306 return request.PassAs<WebSocketStreamRequest>();
286 } 307 }
287 308
309 void WebSocketDispatchOnFinishOpeningHandshake(
310 WebSocketStream::ConnectDelegate* connect_delegate,
311 const GURL& url,
312 const scoped_refptr<HttpResponseHeaders>& headers,
313 base::Time response_time) {
314 DCHECK(connect_delegate);
315 if (headers) {
316 connect_delegate->OnFinishOpeningHandshake(make_scoped_ptr(
317 new WebSocketHandshakeResponseInfo(url,
318 headers->response_code(),
319 headers->GetStatusText(),
320 headers,
321 response_time)));
322 }
323 }
324
288 } // namespace net 325 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698