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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 const URLRequestContext* context, | 86 const URLRequestContext* context, |
87 const url::Origin& origin, | 87 const url::Origin& origin, |
88 const GURL& first_party_for_cookies, | 88 const GURL& first_party_for_cookies, |
89 const std::string& additional_headers, | 89 const std::string& additional_headers, |
90 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate, | 90 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate, |
91 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) | 91 std::unique_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) |
92 : delegate_(new Delegate(this)), | 92 : delegate_(new Delegate(this)), |
93 url_request_( | 93 url_request_( |
94 context->CreateRequest(url, DEFAULT_PRIORITY, delegate_.get())), | 94 context->CreateRequest(url, DEFAULT_PRIORITY, delegate_.get())), |
95 connect_delegate_(std::move(connect_delegate)), | 95 connect_delegate_(std::move(connect_delegate)), |
96 handshake_stream_create_helper_(create_helper.release()), | |
97 handshake_stream_(nullptr) { | 96 handshake_stream_(nullptr) { |
98 handshake_stream_create_helper_->set_stream_request(this); | 97 create_helper->set_stream_request(this); |
99 HttpRequestHeaders headers; | 98 HttpRequestHeaders headers; |
100 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); | 99 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); |
101 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); | 100 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); |
102 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.Serialize()); | 101 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.Serialize()); |
103 headers.SetHeader(websockets::kSecWebSocketVersion, | 102 headers.SetHeader(websockets::kSecWebSocketVersion, |
104 websockets::kSupportedVersion); | 103 websockets::kSupportedVersion); |
105 | 104 |
106 headers.AddHeadersFromString(additional_headers); | 105 headers.AddHeadersFromString(additional_headers); |
107 | 106 |
108 url_request_->SetExtraRequestHeaders(headers); | 107 url_request_->SetExtraRequestHeaders(headers); |
109 url_request_->set_initiator(origin); | 108 url_request_->set_initiator(origin); |
110 url_request_->set_first_party_for_cookies(first_party_for_cookies); | 109 url_request_->set_first_party_for_cookies(first_party_for_cookies); |
111 | 110 |
112 // This passes the ownership of |handshake_stream_create_helper_| to | |
113 // |url_request_|. | |
114 url_request_->SetUserData( | 111 url_request_->SetUserData( |
115 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), | 112 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), |
116 handshake_stream_create_helper_); | 113 std::move(create_helper)); |
117 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE | LOAD_BYPASS_CACHE); | 114 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE | LOAD_BYPASS_CACHE); |
118 connect_delegate_->OnCreateRequest(url_request_.get()); | 115 connect_delegate_->OnCreateRequest(url_request_.get()); |
119 } | 116 } |
120 | 117 |
121 // Destroying this object destroys the URLRequest, which cancels the request | 118 // Destroying this object destroys the URLRequest, which cancels the request |
122 // and so terminates the handshake if it is incomplete. | 119 // and so terminates the handshake if it is incomplete. |
123 ~WebSocketStreamRequestImpl() override {} | 120 ~WebSocketStreamRequestImpl() override {} |
124 | 121 |
125 void OnHandshakeStreamCreated( | 122 void OnHandshakeStreamCreated( |
126 WebSocketHandshakeStreamBase* handshake_stream) override { | 123 WebSocketHandshakeStreamBase* handshake_stream) override { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 // |delegate_| needs to be declared before |url_request_| so that it gets | 212 // |delegate_| needs to be declared before |url_request_| so that it gets |
216 // initialised first. | 213 // initialised first. |
217 std::unique_ptr<Delegate> delegate_; | 214 std::unique_ptr<Delegate> delegate_; |
218 | 215 |
219 // Deleting the WebSocketStreamRequestImpl object deletes this URLRequest | 216 // Deleting the WebSocketStreamRequestImpl object deletes this URLRequest |
220 // object, cancelling the whole connection. | 217 // object, cancelling the whole connection. |
221 std::unique_ptr<URLRequest> url_request_; | 218 std::unique_ptr<URLRequest> url_request_; |
222 | 219 |
223 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate_; | 220 std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate_; |
224 | 221 |
225 // Owned by the URLRequest. | |
226 WebSocketHandshakeStreamCreateHelper* handshake_stream_create_helper_; | |
227 | |
228 // This is owned by the caller of CreateBaseStream() or | 222 // This is owned by the caller of CreateBaseStream() or |
229 // CreateSpdyStream() of WebsocketHandshakeStreamCreateHelper. Both the | 223 // CreateSpdyStream() of WebsocketHandshakeStreamCreateHelper. Both the |
230 // stream and this object will be destroyed during the destruction of the | 224 // stream and this object will be destroyed during the destruction of the |
231 // URLRequest object associated with the handshake. This is only guaranteed | 225 // URLRequest object associated with the handshake. This is only guaranteed |
232 // to be a valid pointer if the handshake succeeded. | 226 // to be a valid pointer if the handshake succeeded. |
233 WebSocketHandshakeStreamBase* handshake_stream_; | 227 WebSocketHandshakeStreamBase* handshake_stream_; |
234 | 228 |
235 // The failure message supplied by WebSocketBasicHandshakeStream, if any. | 229 // The failure message supplied by WebSocketBasicHandshakeStream, if any. |
236 std::string failure_message_; | 230 std::string failure_message_; |
237 | 231 |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 DCHECK(connect_delegate); | 401 DCHECK(connect_delegate); |
408 if (headers.get()) { | 402 if (headers.get()) { |
409 connect_delegate->OnFinishOpeningHandshake( | 403 connect_delegate->OnFinishOpeningHandshake( |
410 base::MakeUnique<WebSocketHandshakeResponseInfo>( | 404 base::MakeUnique<WebSocketHandshakeResponseInfo>( |
411 url, headers->response_code(), headers->GetStatusText(), headers, | 405 url, headers->response_code(), headers->GetStatusText(), headers, |
412 response_time)); | 406 response_time)); |
413 } | 407 } |
414 } | 408 } |
415 | 409 |
416 } // namespace net | 410 } // namespace net |
OLD | NEW |