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 <utility> |
| 8 |
7 #include "base/logging.h" | 9 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
9 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
10 #include "base/metrics/sparse_histogram.h" | 12 #include "base/metrics/sparse_histogram.h" |
11 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
12 #include "base/time/time.h" | 14 #include "base/time/time.h" |
13 #include "base/timer/timer.h" | 15 #include "base/timer/timer.h" |
14 #include "net/base/load_flags.h" | 16 #include "net/base/load_flags.h" |
15 #include "net/http/http_request_headers.h" | 17 #include "net/http/http_request_headers.h" |
16 #include "net/http/http_response_headers.h" | 18 #include "net/http/http_response_headers.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 public: | 83 public: |
82 StreamRequestImpl( | 84 StreamRequestImpl( |
83 const GURL& url, | 85 const GURL& url, |
84 const URLRequestContext* context, | 86 const URLRequestContext* context, |
85 const url::Origin& origin, | 87 const url::Origin& origin, |
86 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate, | 88 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate, |
87 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) | 89 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) |
88 : delegate_(new Delegate(this)), | 90 : delegate_(new Delegate(this)), |
89 url_request_( | 91 url_request_( |
90 context->CreateRequest(url, DEFAULT_PRIORITY, delegate_.get())), | 92 context->CreateRequest(url, DEFAULT_PRIORITY, delegate_.get())), |
91 connect_delegate_(connect_delegate.Pass()), | 93 connect_delegate_(std::move(connect_delegate)), |
92 create_helper_(create_helper.release()) { | 94 create_helper_(create_helper.release()) { |
93 create_helper_->set_failure_message(&failure_message_); | 95 create_helper_->set_failure_message(&failure_message_); |
94 HttpRequestHeaders headers; | 96 HttpRequestHeaders headers; |
95 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); | 97 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); |
96 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); | 98 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); |
97 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.Serialize()); | 99 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.Serialize()); |
98 headers.SetHeader(websockets::kSecWebSocketVersion, | 100 headers.SetHeader(websockets::kSecWebSocketVersion, |
99 websockets::kSupportedVersion); | 101 websockets::kSupportedVersion); |
100 url_request_->SetExtraRequestHeaders(headers); | 102 url_request_->SetExtraRequestHeaders(headers); |
101 | 103 |
102 // This passes the ownership of |create_helper_| to |url_request_|. | 104 // This passes the ownership of |create_helper_| to |url_request_|. |
103 url_request_->SetUserData( | 105 url_request_->SetUserData( |
104 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), | 106 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), |
105 create_helper_); | 107 create_helper_); |
106 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE | LOAD_BYPASS_CACHE); | 108 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE | LOAD_BYPASS_CACHE); |
107 } | 109 } |
108 | 110 |
109 // Destroying this object destroys the URLRequest, which cancels the request | 111 // Destroying this object destroys the URLRequest, which cancels the request |
110 // and so terminates the handshake if it is incomplete. | 112 // and so terminates the handshake if it is incomplete. |
111 ~StreamRequestImpl() override {} | 113 ~StreamRequestImpl() override {} |
112 | 114 |
113 void Start(scoped_ptr<base::Timer> timer) { | 115 void Start(scoped_ptr<base::Timer> timer) { |
114 DCHECK(timer); | 116 DCHECK(timer); |
115 base::TimeDelta timeout(base::TimeDelta::FromSeconds( | 117 base::TimeDelta timeout(base::TimeDelta::FromSeconds( |
116 kHandshakeTimeoutIntervalInSeconds)); | 118 kHandshakeTimeoutIntervalInSeconds)); |
117 timer_ = timer.Pass(); | 119 timer_ = std::move(timer); |
118 timer_->Start(FROM_HERE, timeout, | 120 timer_->Start(FROM_HERE, timeout, |
119 base::Bind(&StreamRequestImpl::OnTimeout, | 121 base::Bind(&StreamRequestImpl::OnTimeout, |
120 base::Unretained(this))); | 122 base::Unretained(this))); |
121 url_request_->Start(); | 123 url_request_->Start(); |
122 } | 124 } |
123 | 125 |
124 void PerformUpgrade() { | 126 void PerformUpgrade() { |
125 DCHECK(timer_); | 127 DCHECK(timer_); |
126 timer_->Stop(); | 128 timer_->Stop(); |
127 connect_delegate_->OnSuccess(create_helper_->Upgrade()); | 129 connect_delegate_->OnSuccess(create_helper_->Upgrade()); |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 scoped_ptr<WebSocketStreamRequest> WebSocketStream::CreateAndConnectStream( | 331 scoped_ptr<WebSocketStreamRequest> WebSocketStream::CreateAndConnectStream( |
330 const GURL& socket_url, | 332 const GURL& socket_url, |
331 const std::vector<std::string>& requested_subprotocols, | 333 const std::vector<std::string>& requested_subprotocols, |
332 const url::Origin& origin, | 334 const url::Origin& origin, |
333 URLRequestContext* url_request_context, | 335 URLRequestContext* url_request_context, |
334 const BoundNetLog& net_log, | 336 const BoundNetLog& net_log, |
335 scoped_ptr<ConnectDelegate> connect_delegate) { | 337 scoped_ptr<ConnectDelegate> connect_delegate) { |
336 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper( | 338 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper( |
337 new WebSocketHandshakeStreamCreateHelper(connect_delegate.get(), | 339 new WebSocketHandshakeStreamCreateHelper(connect_delegate.get(), |
338 requested_subprotocols)); | 340 requested_subprotocols)); |
339 scoped_ptr<StreamRequestImpl> request( | 341 scoped_ptr<StreamRequestImpl> request(new StreamRequestImpl( |
340 new StreamRequestImpl(socket_url, | 342 socket_url, url_request_context, origin, std::move(connect_delegate), |
341 url_request_context, | 343 std::move(create_helper))); |
342 origin, | |
343 connect_delegate.Pass(), | |
344 create_helper.Pass())); | |
345 request->Start(scoped_ptr<base::Timer>(new base::Timer(false, false))); | 344 request->Start(scoped_ptr<base::Timer>(new base::Timer(false, false))); |
346 return request.Pass(); | 345 return std::move(request); |
347 } | 346 } |
348 | 347 |
349 // This is declared in websocket_test_util.h. | 348 // This is declared in websocket_test_util.h. |
350 scoped_ptr<WebSocketStreamRequest> CreateAndConnectStreamForTesting( | 349 scoped_ptr<WebSocketStreamRequest> CreateAndConnectStreamForTesting( |
351 const GURL& socket_url, | 350 const GURL& socket_url, |
352 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper, | 351 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper, |
353 const url::Origin& origin, | 352 const url::Origin& origin, |
354 URLRequestContext* url_request_context, | 353 URLRequestContext* url_request_context, |
355 const BoundNetLog& net_log, | 354 const BoundNetLog& net_log, |
356 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate, | 355 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate, |
357 scoped_ptr<base::Timer> timer) { | 356 scoped_ptr<base::Timer> timer) { |
358 scoped_ptr<StreamRequestImpl> request( | 357 scoped_ptr<StreamRequestImpl> request(new StreamRequestImpl( |
359 new StreamRequestImpl(socket_url, | 358 socket_url, url_request_context, origin, std::move(connect_delegate), |
360 url_request_context, | 359 std::move(create_helper))); |
361 origin, | 360 request->Start(std::move(timer)); |
362 connect_delegate.Pass(), | 361 return std::move(request); |
363 create_helper.Pass())); | |
364 request->Start(timer.Pass()); | |
365 return request.Pass(); | |
366 } | 362 } |
367 | 363 |
368 void WebSocketDispatchOnFinishOpeningHandshake( | 364 void WebSocketDispatchOnFinishOpeningHandshake( |
369 WebSocketStream::ConnectDelegate* connect_delegate, | 365 WebSocketStream::ConnectDelegate* connect_delegate, |
370 const GURL& url, | 366 const GURL& url, |
371 const scoped_refptr<HttpResponseHeaders>& headers, | 367 const scoped_refptr<HttpResponseHeaders>& headers, |
372 base::Time response_time) { | 368 base::Time response_time) { |
373 DCHECK(connect_delegate); | 369 DCHECK(connect_delegate); |
374 if (headers.get()) { | 370 if (headers.get()) { |
375 connect_delegate->OnFinishOpeningHandshake(make_scoped_ptr( | 371 connect_delegate->OnFinishOpeningHandshake(make_scoped_ptr( |
376 new WebSocketHandshakeResponseInfo(url, | 372 new WebSocketHandshakeResponseInfo(url, |
377 headers->response_code(), | 373 headers->response_code(), |
378 headers->GetStatusText(), | 374 headers->GetStatusText(), |
379 headers, | 375 headers, |
380 response_time))); | 376 response_time))); |
381 } | 377 } |
382 } | 378 } |
383 | 379 |
384 } // namespace net | 380 } // namespace net |
OLD | NEW |