| OLD | NEW |
| 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 <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 StreamRequestImpl* owner_; | 79 StreamRequestImpl* owner_; |
| 80 HandshakeResult result_; | 80 HandshakeResult result_; |
| 81 }; | 81 }; |
| 82 | 82 |
| 83 class StreamRequestImpl : public WebSocketStreamRequest { | 83 class StreamRequestImpl : public WebSocketStreamRequest { |
| 84 public: | 84 public: |
| 85 StreamRequestImpl( | 85 StreamRequestImpl( |
| 86 const GURL& url, | 86 const GURL& url, |
| 87 const URLRequestContext* context, | 87 const URLRequestContext* context, |
| 88 const url::Origin& origin, | 88 const url::Origin& origin, |
| 89 const std::string& additional_headers, |
| 89 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate, | 90 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate, |
| 90 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) | 91 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) |
| 91 : delegate_(new Delegate(this)), | 92 : delegate_(new Delegate(this)), |
| 92 url_request_( | 93 url_request_( |
| 93 context->CreateRequest(url, DEFAULT_PRIORITY, delegate_.get())), | 94 context->CreateRequest(url, DEFAULT_PRIORITY, delegate_.get())), |
| 94 connect_delegate_(std::move(connect_delegate)), | 95 connect_delegate_(std::move(connect_delegate)), |
| 95 create_helper_(create_helper.release()) { | 96 create_helper_(create_helper.release()) { |
| 96 create_helper_->set_failure_message(&failure_message_); | 97 create_helper_->set_failure_message(&failure_message_); |
| 97 HttpRequestHeaders headers; | 98 HttpRequestHeaders headers; |
| 98 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); | 99 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); |
| 99 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); | 100 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); |
| 100 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.Serialize()); | 101 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.Serialize()); |
| 101 headers.SetHeader(websockets::kSecWebSocketVersion, | 102 headers.SetHeader(websockets::kSecWebSocketVersion, |
| 102 websockets::kSupportedVersion); | 103 websockets::kSupportedVersion); |
| 104 |
| 105 headers.AddHeadersFromString(additional_headers); |
| 106 |
| 103 url_request_->SetExtraRequestHeaders(headers); | 107 url_request_->SetExtraRequestHeaders(headers); |
| 104 | 108 |
| 105 // This passes the ownership of |create_helper_| to |url_request_|. | 109 // This passes the ownership of |create_helper_| to |url_request_|. |
| 106 url_request_->SetUserData( | 110 url_request_->SetUserData( |
| 107 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), | 111 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), |
| 108 create_helper_); | 112 create_helper_); |
| 109 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE | LOAD_BYPASS_CACHE); | 113 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE | LOAD_BYPASS_CACHE); |
| 110 } | 114 } |
| 111 | 115 |
| 112 // Destroying this object destroys the URLRequest, which cancels the request | 116 // Destroying this object destroys the URLRequest, which cancels the request |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 329 |
| 326 WebSocketStream::WebSocketStream() {} | 330 WebSocketStream::WebSocketStream() {} |
| 327 WebSocketStream::~WebSocketStream() {} | 331 WebSocketStream::~WebSocketStream() {} |
| 328 | 332 |
| 329 WebSocketStream::ConnectDelegate::~ConnectDelegate() {} | 333 WebSocketStream::ConnectDelegate::~ConnectDelegate() {} |
| 330 | 334 |
| 331 std::unique_ptr<WebSocketStreamRequest> WebSocketStream::CreateAndConnectStream( | 335 std::unique_ptr<WebSocketStreamRequest> WebSocketStream::CreateAndConnectStream( |
| 332 const GURL& socket_url, | 336 const GURL& socket_url, |
| 333 const std::vector<std::string>& requested_subprotocols, | 337 const std::vector<std::string>& requested_subprotocols, |
| 334 const url::Origin& origin, | 338 const url::Origin& origin, |
| 339 const std::string& additional_headers, |
| 335 URLRequestContext* url_request_context, | 340 URLRequestContext* url_request_context, |
| 336 const BoundNetLog& net_log, | 341 const BoundNetLog& net_log, |
| 337 std::unique_ptr<ConnectDelegate> connect_delegate) { | 342 std::unique_ptr<ConnectDelegate> connect_delegate) { |
| 338 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper( | 343 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper( |
| 339 new WebSocketHandshakeStreamCreateHelper(connect_delegate.get(), | 344 new WebSocketHandshakeStreamCreateHelper(connect_delegate.get(), |
| 340 requested_subprotocols)); | 345 requested_subprotocols)); |
| 341 std::unique_ptr<StreamRequestImpl> request(new StreamRequestImpl( | 346 std::unique_ptr<StreamRequestImpl> request(new StreamRequestImpl( |
| 342 socket_url, url_request_context, origin, std::move(connect_delegate), | 347 socket_url, url_request_context, origin, additional_headers, |
| 343 std::move(create_helper))); | 348 std::move(connect_delegate), std::move(create_helper))); |
| 344 request->Start(std::unique_ptr<base::Timer>(new base::Timer(false, false))); | 349 request->Start(std::unique_ptr<base::Timer>(new base::Timer(false, false))); |
| 345 return std::move(request); | 350 return std::move(request); |
| 346 } | 351 } |
| 347 | 352 |
| 348 // This is declared in websocket_test_util.h. | 353 // This is declared in websocket_test_util.h. |
| 349 std::unique_ptr<WebSocketStreamRequest> CreateAndConnectStreamForTesting( | 354 std::unique_ptr<WebSocketStreamRequest> CreateAndConnectStreamForTesting( |
| 350 const GURL& socket_url, | 355 const GURL& socket_url, |
| 351 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper, | 356 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper, |
| 352 const url::Origin& origin, | 357 const url::Origin& origin, |
| 358 const std::string& additional_headers, |
| 353 URLRequestContext* url_request_context, | 359 URLRequestContext* url_request_context, |
| 354 const BoundNetLog& net_log, | 360 const BoundNetLog& net_log, |
| 355 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate, | 361 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate, |
| 356 std::unique_ptr<base::Timer> timer) { | 362 std::unique_ptr<base::Timer> timer) { |
| 357 std::unique_ptr<StreamRequestImpl> request(new StreamRequestImpl( | 363 std::unique_ptr<StreamRequestImpl> request(new StreamRequestImpl( |
| 358 socket_url, url_request_context, origin, std::move(connect_delegate), | 364 socket_url, url_request_context, origin, additional_headers, |
| 359 std::move(create_helper))); | 365 std::move(connect_delegate), std::move(create_helper))); |
| 360 request->Start(std::move(timer)); | 366 request->Start(std::move(timer)); |
| 361 return std::move(request); | 367 return std::move(request); |
| 362 } | 368 } |
| 363 | 369 |
| 364 void WebSocketDispatchOnFinishOpeningHandshake( | 370 void WebSocketDispatchOnFinishOpeningHandshake( |
| 365 WebSocketStream::ConnectDelegate* connect_delegate, | 371 WebSocketStream::ConnectDelegate* connect_delegate, |
| 366 const GURL& url, | 372 const GURL& url, |
| 367 const scoped_refptr<HttpResponseHeaders>& headers, | 373 const scoped_refptr<HttpResponseHeaders>& headers, |
| 368 base::Time response_time) { | 374 base::Time response_time) { |
| 369 DCHECK(connect_delegate); | 375 DCHECK(connect_delegate); |
| 370 if (headers.get()) { | 376 if (headers.get()) { |
| 371 connect_delegate->OnFinishOpeningHandshake( | 377 connect_delegate->OnFinishOpeningHandshake( |
| 372 base::WrapUnique(new WebSocketHandshakeResponseInfo( | 378 base::WrapUnique(new WebSocketHandshakeResponseInfo( |
| 373 url, headers->response_code(), headers->GetStatusText(), headers, | 379 url, headers->response_code(), headers->GetStatusText(), headers, |
| 374 response_time))); | 380 response_time))); |
| 375 } | 381 } |
| 376 } | 382 } |
| 377 | 383 |
| 378 } // namespace net | 384 } // namespace net |
| OLD | NEW |