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_basic_handshake_stream.h" | 5 #include "net/websockets/websocket_basic_handshake_stream.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <iterator> | 9 #include <iterator> |
10 #include <set> | 10 #include <set> |
11 #include <string> | 11 #include <string> |
| 12 #include <utility> |
12 #include <vector> | 13 #include <vector> |
13 | 14 |
14 #include "base/base64.h" | 15 #include "base/base64.h" |
15 #include "base/bind.h" | 16 #include "base/bind.h" |
16 #include "base/compiler_specific.h" | 17 #include "base/compiler_specific.h" |
17 #include "base/containers/hash_tables.h" | 18 #include "base/containers/hash_tables.h" |
18 #include "base/logging.h" | 19 #include "base/logging.h" |
19 #include "base/metrics/histogram_macros.h" | 20 #include "base/metrics/histogram_macros.h" |
20 #include "base/metrics/sparse_histogram.h" | 21 #include "base/metrics/sparse_histogram.h" |
21 #include "base/stl_util.h" | 22 #include "base/stl_util.h" |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 requested_sub_protocols_, | 351 requested_sub_protocols_, |
351 &enriched_headers); | 352 &enriched_headers); |
352 | 353 |
353 handshake_challenge_response_ = | 354 handshake_challenge_response_ = |
354 ComputeSecWebSocketAccept(handshake_challenge); | 355 ComputeSecWebSocketAccept(handshake_challenge); |
355 | 356 |
356 DCHECK(connect_delegate_); | 357 DCHECK(connect_delegate_); |
357 scoped_ptr<WebSocketHandshakeRequestInfo> request( | 358 scoped_ptr<WebSocketHandshakeRequestInfo> request( |
358 new WebSocketHandshakeRequestInfo(url_, base::Time::Now())); | 359 new WebSocketHandshakeRequestInfo(url_, base::Time::Now())); |
359 request->headers.CopyFrom(enriched_headers); | 360 request->headers.CopyFrom(enriched_headers); |
360 connect_delegate_->OnStartOpeningHandshake(request.Pass()); | 361 connect_delegate_->OnStartOpeningHandshake(std::move(request)); |
361 | 362 |
362 return parser()->SendRequest( | 363 return parser()->SendRequest( |
363 state_.GenerateRequestLine(), enriched_headers, response, callback); | 364 state_.GenerateRequestLine(), enriched_headers, response, callback); |
364 } | 365 } |
365 | 366 |
366 int WebSocketBasicHandshakeStream::ReadResponseHeaders( | 367 int WebSocketBasicHandshakeStream::ReadResponseHeaders( |
367 const CompletionCallback& callback) { | 368 const CompletionCallback& callback) { |
368 // HttpStreamParser uses a weak pointer when reading from the | 369 // HttpStreamParser uses a weak pointer when reading from the |
369 // socket, so it won't be called back after being destroyed. The | 370 // socket, so it won't be called back after being destroyed. The |
370 // HttpStreamParser is owned by HttpBasicState which is owned by this object, | 371 // HttpStreamParser is owned by HttpBasicState which is owned by this object, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 sub_protocol_, | 475 sub_protocol_, |
475 extensions_)); | 476 extensions_)); |
476 DCHECK(extension_params_.get()); | 477 DCHECK(extension_params_.get()); |
477 if (extension_params_->deflate_enabled) { | 478 if (extension_params_->deflate_enabled) { |
478 UMA_HISTOGRAM_ENUMERATION( | 479 UMA_HISTOGRAM_ENUMERATION( |
479 "Net.WebSocket.DeflateMode", | 480 "Net.WebSocket.DeflateMode", |
480 extension_params_->deflate_parameters.client_context_take_over_mode(), | 481 extension_params_->deflate_parameters.client_context_take_over_mode(), |
481 WebSocketDeflater::NUM_CONTEXT_TAKEOVER_MODE_TYPES); | 482 WebSocketDeflater::NUM_CONTEXT_TAKEOVER_MODE_TYPES); |
482 | 483 |
483 return scoped_ptr<WebSocketStream>(new WebSocketDeflateStream( | 484 return scoped_ptr<WebSocketStream>(new WebSocketDeflateStream( |
484 basic_stream.Pass(), extension_params_->deflate_parameters, | 485 std::move(basic_stream), extension_params_->deflate_parameters, |
485 scoped_ptr<WebSocketDeflatePredictor>( | 486 scoped_ptr<WebSocketDeflatePredictor>( |
486 new WebSocketDeflatePredictorImpl))); | 487 new WebSocketDeflatePredictorImpl))); |
487 } else { | 488 } else { |
488 return basic_stream.Pass(); | 489 return basic_stream; |
489 } | 490 } |
490 } | 491 } |
491 | 492 |
492 void WebSocketBasicHandshakeStream::SetWebSocketKeyForTesting( | 493 void WebSocketBasicHandshakeStream::SetWebSocketKeyForTesting( |
493 const std::string& key) { | 494 const std::string& key) { |
494 handshake_challenge_for_testing_.reset(new std::string(key)); | 495 handshake_challenge_for_testing_.reset(new std::string(key)); |
495 } | 496 } |
496 | 497 |
497 void WebSocketBasicHandshakeStream::ReadResponseHeadersCallback( | 498 void WebSocketBasicHandshakeStream::ReadResponseHeadersCallback( |
498 const CompletionCallback& callback, | 499 const CompletionCallback& callback, |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 set_failure_message("Error during WebSocket handshake: " + failure_message); | 590 set_failure_message("Error during WebSocket handshake: " + failure_message); |
590 return ERR_INVALID_RESPONSE; | 591 return ERR_INVALID_RESPONSE; |
591 } | 592 } |
592 | 593 |
593 void WebSocketBasicHandshakeStream::set_failure_message( | 594 void WebSocketBasicHandshakeStream::set_failure_message( |
594 const std::string& failure_message) { | 595 const std::string& failure_message) { |
595 *failure_message_ = failure_message; | 596 *failure_message_ = failure_message; |
596 } | 597 } |
597 | 598 |
598 } // namespace net | 599 } // namespace net |
OLD | NEW |