OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "base/strings/string_util.h" | 23 #include "base/strings/string_util.h" |
24 #include "base/strings/stringprintf.h" | 24 #include "base/strings/stringprintf.h" |
25 #include "base/strings/utf_string_conversions.h" | 25 #include "base/strings/utf_string_conversions.h" |
26 #include "base/thread_task_runner_handle.h" | 26 #include "base/thread_task_runner_handle.h" |
27 #include "base/time/time.h" | 27 #include "base/time/time.h" |
28 #include "base/values.h" | 28 #include "base/values.h" |
29 #include "crypto/ec_private_key.h" | 29 #include "crypto/ec_private_key.h" |
30 #include "crypto/ec_signature_creator.h" | 30 #include "crypto/ec_signature_creator.h" |
31 #include "net/base/connection_type_histograms.h" | 31 #include "net/base/connection_type_histograms.h" |
32 #include "net/base/net_util.h" | 32 #include "net/base/net_util.h" |
| 33 #include "net/base/proxy_delegate.h" |
33 #include "net/cert/asn1_util.h" | 34 #include "net/cert/asn1_util.h" |
34 #include "net/cert/cert_verify_result.h" | 35 #include "net/cert/cert_verify_result.h" |
35 #include "net/http/http_log_util.h" | 36 #include "net/http/http_log_util.h" |
36 #include "net/http/http_network_session.h" | 37 #include "net/http/http_network_session.h" |
37 #include "net/http/http_server_properties.h" | 38 #include "net/http/http_server_properties.h" |
38 #include "net/http/http_util.h" | 39 #include "net/http/http_util.h" |
39 #include "net/http/transport_security_state.h" | 40 #include "net/http/transport_security_state.h" |
40 #include "net/log/net_log.h" | 41 #include "net/log/net_log.h" |
| 42 #include "net/proxy/proxy_server.h" |
41 #include "net/socket/ssl_client_socket.h" | 43 #include "net/socket/ssl_client_socket.h" |
42 #include "net/spdy/spdy_buffer_producer.h" | 44 #include "net/spdy/spdy_buffer_producer.h" |
43 #include "net/spdy/spdy_frame_builder.h" | 45 #include "net/spdy/spdy_frame_builder.h" |
44 #include "net/spdy/spdy_http_utils.h" | 46 #include "net/spdy/spdy_http_utils.h" |
45 #include "net/spdy/spdy_protocol.h" | 47 #include "net/spdy/spdy_protocol.h" |
46 #include "net/spdy/spdy_session_pool.h" | 48 #include "net/spdy/spdy_session_pool.h" |
47 #include "net/spdy/spdy_stream.h" | 49 #include "net/spdy/spdy_stream.h" |
48 #include "net/ssl/channel_id_service.h" | 50 #include "net/ssl/channel_id_service.h" |
49 #include "net/ssl/ssl_cipher_suite_names.h" | 51 #include "net/ssl/ssl_cipher_suite_names.h" |
50 #include "net/ssl/ssl_connection_status_flags.h" | 52 #include "net/ssl/ssl_connection_status_flags.h" |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 TransportSecurityState* transport_security_state, | 653 TransportSecurityState* transport_security_state, |
652 bool verify_domain_authentication, | 654 bool verify_domain_authentication, |
653 bool enable_sending_initial_data, | 655 bool enable_sending_initial_data, |
654 bool enable_compression, | 656 bool enable_compression, |
655 bool enable_ping_based_connection_checking, | 657 bool enable_ping_based_connection_checking, |
656 NextProto default_protocol, | 658 NextProto default_protocol, |
657 size_t session_max_recv_window_size, | 659 size_t session_max_recv_window_size, |
658 size_t stream_max_recv_window_size, | 660 size_t stream_max_recv_window_size, |
659 size_t initial_max_concurrent_streams, | 661 size_t initial_max_concurrent_streams, |
660 TimeFunc time_func, | 662 TimeFunc time_func, |
661 const HostPortPair& trusted_spdy_proxy, | 663 ProxyDelegate* proxy_delegate, |
662 NetLog* net_log) | 664 NetLog* net_log) |
663 : in_io_loop_(false), | 665 : in_io_loop_(false), |
664 spdy_session_key_(spdy_session_key), | 666 spdy_session_key_(spdy_session_key), |
665 pool_(NULL), | 667 pool_(NULL), |
666 http_server_properties_(http_server_properties), | 668 http_server_properties_(http_server_properties), |
667 transport_security_state_(transport_security_state), | 669 transport_security_state_(transport_security_state), |
668 read_buffer_(new IOBuffer(kReadBufferSize)), | 670 read_buffer_(new IOBuffer(kReadBufferSize)), |
669 stream_hi_water_mark_(kFirstStreamId), | 671 stream_hi_water_mark_(kFirstStreamId), |
670 last_accepted_push_stream_id_(0), | 672 last_accepted_push_stream_id_(0), |
671 num_pushed_streams_(0u), | 673 num_pushed_streams_(0u), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_HTTP2_SESSION)), | 708 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_HTTP2_SESSION)), |
707 verify_domain_authentication_(verify_domain_authentication), | 709 verify_domain_authentication_(verify_domain_authentication), |
708 enable_sending_initial_data_(enable_sending_initial_data), | 710 enable_sending_initial_data_(enable_sending_initial_data), |
709 enable_compression_(enable_compression), | 711 enable_compression_(enable_compression), |
710 enable_ping_based_connection_checking_( | 712 enable_ping_based_connection_checking_( |
711 enable_ping_based_connection_checking), | 713 enable_ping_based_connection_checking), |
712 protocol_(default_protocol), | 714 protocol_(default_protocol), |
713 connection_at_risk_of_loss_time_( | 715 connection_at_risk_of_loss_time_( |
714 base::TimeDelta::FromSeconds(kDefaultConnectionAtRiskOfLossSeconds)), | 716 base::TimeDelta::FromSeconds(kDefaultConnectionAtRiskOfLossSeconds)), |
715 hung_interval_(base::TimeDelta::FromSeconds(kHungIntervalSeconds)), | 717 hung_interval_(base::TimeDelta::FromSeconds(kHungIntervalSeconds)), |
716 trusted_spdy_proxy_(trusted_spdy_proxy), | 718 proxy_delegate_(proxy_delegate), |
717 time_func_(time_func), | 719 time_func_(time_func), |
718 send_priority_dependency_(priority_dependency_enabled_default), | 720 send_priority_dependency_(priority_dependency_enabled_default), |
719 weak_factory_(this) { | 721 weak_factory_(this) { |
720 DCHECK_GE(protocol_, kProtoSPDYMinimumVersion); | 722 DCHECK_GE(protocol_, kProtoSPDYMinimumVersion); |
721 DCHECK_LE(protocol_, kProtoSPDYMaximumVersion); | 723 DCHECK_LE(protocol_, kProtoSPDYMaximumVersion); |
722 DCHECK(HttpStreamFactory::spdy_enabled()); | 724 DCHECK(HttpStreamFactory::spdy_enabled()); |
723 net_log_.BeginEvent( | 725 net_log_.BeginEvent( |
724 NetLog::TYPE_HTTP2_SESSION, | 726 NetLog::TYPE_HTTP2_SESSION, |
725 base::Bind(&NetLogSpdySessionCallback, &host_port_proxy_pair())); | 727 base::Bind(&NetLogSpdySessionCallback, &host_port_proxy_pair())); |
726 next_unclaimed_push_stream_sweep_time_ = time_func_() + | 728 next_unclaimed_push_stream_sweep_time_ = time_func_() + |
(...skipping 1969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2696 RST_STREAM_INVALID_STREAM, | 2698 RST_STREAM_INVALID_STREAM, |
2697 base::StringPrintf("Received push for inactive associated stream %d", | 2699 base::StringPrintf("Received push for inactive associated stream %d", |
2698 associated_stream_id)); | 2700 associated_stream_id)); |
2699 return false; | 2701 return false; |
2700 } | 2702 } |
2701 | 2703 |
2702 DCHECK(gurl.is_valid()); | 2704 DCHECK(gurl.is_valid()); |
2703 | 2705 |
2704 // Check that the pushed stream advertises the same origin as its associated | 2706 // Check that the pushed stream advertises the same origin as its associated |
2705 // stream. Bypass this check if and only if this session is with a SPDY proxy | 2707 // stream. Bypass this check if and only if this session is with a SPDY proxy |
2706 // that is trusted explicitly via the --trusted-spdy-proxy switch or if the | 2708 // that is trusted explicitly as determined by the |proxy_delegate_| or if the |
2707 // proxy is pushing same-origin resources. | 2709 // proxy is pushing same-origin resources. |
2708 if (!HostPortPair::FromURL(gurl).Equals(host_port_pair())) { | 2710 if (!HostPortPair::FromURL(gurl).Equals(host_port_pair())) { |
2709 if (trusted_spdy_proxy_.Equals(host_port_pair())) { | 2711 if (proxy_delegate_ && |
| 2712 proxy_delegate_->IsTrustedSpdyProxy( |
| 2713 ProxyServer(ProxyServer::SCHEME_HTTPS, host_port_pair()))) { |
2710 // Disallow pushing of HTTPS content. | 2714 // Disallow pushing of HTTPS content. |
2711 if (gurl.SchemeIs("https")) { | 2715 if (gurl.SchemeIs("https")) { |
2712 EnqueueResetStreamFrame( | 2716 EnqueueResetStreamFrame( |
2713 stream_id, request_priority, RST_STREAM_REFUSED_STREAM, | 2717 stream_id, request_priority, RST_STREAM_REFUSED_STREAM, |
2714 base::StringPrintf("Rejected push of Cross Origin HTTPS content %d", | 2718 base::StringPrintf("Rejected push of Cross Origin HTTPS content %d", |
2715 associated_stream_id)); | 2719 associated_stream_id)); |
2716 return false; | 2720 return false; |
2717 } | 2721 } |
2718 } else { | 2722 } else { |
2719 GURL associated_url(associated_it->second.stream->GetUrlFromHeaders()); | 2723 GURL associated_url(associated_it->second.stream->GetUrlFromHeaders()); |
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3286 if (!queue->empty()) { | 3290 if (!queue->empty()) { |
3287 SpdyStreamId stream_id = queue->front(); | 3291 SpdyStreamId stream_id = queue->front(); |
3288 queue->pop_front(); | 3292 queue->pop_front(); |
3289 return stream_id; | 3293 return stream_id; |
3290 } | 3294 } |
3291 } | 3295 } |
3292 return 0; | 3296 return 0; |
3293 } | 3297 } |
3294 | 3298 |
3295 } // namespace net | 3299 } // namespace net |
OLD | NEW |