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 #ifndef NET_SPDY_SPDY_SESSION_H_ | 5 #ifndef NET_SPDY_SPDY_SESSION_H_ |
6 #define NET_SPDY_SPDY_SESSION_H_ | 6 #define NET_SPDY_SPDY_SESSION_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 PROTOCOL_ERROR_RST_STREAM_FOR_NON_ACTIVE_STREAM = 23, | 105 PROTOCOL_ERROR_RST_STREAM_FOR_NON_ACTIVE_STREAM = 23, |
106 PROTOCOL_ERROR_SPDY_COMPRESSION_FAILURE = 24, | 106 PROTOCOL_ERROR_SPDY_COMPRESSION_FAILURE = 24, |
107 PROTOCOL_ERROR_REQUEST_FOR_SECURE_CONTENT_OVER_INSECURE_SESSION = 25, | 107 PROTOCOL_ERROR_REQUEST_FOR_SECURE_CONTENT_OVER_INSECURE_SESSION = 25, |
108 PROTOCOL_ERROR_SYN_REPLY_NOT_RECEIVED = 26, | 108 PROTOCOL_ERROR_SYN_REPLY_NOT_RECEIVED = 26, |
109 PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE = 27, | 109 PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE = 27, |
110 PROTOCOL_ERROR_RECEIVE_WINDOW_VIOLATION = 28, | 110 PROTOCOL_ERROR_RECEIVE_WINDOW_VIOLATION = 28, |
111 | 111 |
112 // Next free value. | 112 // Next free value. |
113 NUM_SPDY_PROTOCOL_ERROR_DETAILS = 35, | 113 NUM_SPDY_PROTOCOL_ERROR_DETAILS = 35, |
114 }; | 114 }; |
115 SpdyProtocolErrorDetails NET_EXPORT_PRIVATE MapFramerErrorToProtocolError( | 115 SpdyProtocolErrorDetails NET_EXPORT_PRIVATE |
116 SpdyFramer::SpdyError); | 116 MapFramerErrorToProtocolError(SpdyFramer::SpdyError); |
117 SpdyProtocolErrorDetails NET_EXPORT_PRIVATE MapRstStreamStatusToProtocolError( | 117 SpdyProtocolErrorDetails NET_EXPORT_PRIVATE |
118 SpdyRstStreamStatus); | 118 MapRstStreamStatusToProtocolError(SpdyRstStreamStatus); |
119 | 119 |
120 // If these compile asserts fail then SpdyProtocolErrorDetails needs | 120 // If these compile asserts fail then SpdyProtocolErrorDetails needs |
121 // to be updated with new values, as do the mapping functions above. | 121 // to be updated with new values, as do the mapping functions above. |
122 COMPILE_ASSERT(12 == SpdyFramer::LAST_ERROR, | 122 COMPILE_ASSERT(12 == SpdyFramer::LAST_ERROR, |
123 SpdyProtocolErrorDetails_SpdyErrors_mismatch); | 123 SpdyProtocolErrorDetails_SpdyErrors_mismatch); |
124 COMPILE_ASSERT(15 == RST_STREAM_NUM_STATUS_CODES, | 124 COMPILE_ASSERT(15 == RST_STREAM_NUM_STATUS_CODES, |
125 SpdyProtocolErrorDetails_RstStreamStatus_mismatch); | 125 SpdyProtocolErrorDetails_RstStreamStatus_mismatch); |
126 | 126 |
127 // A helper class used to manage a request to create a stream. | 127 // A helper class used to manage a request to create a stream. |
128 class NET_EXPORT_PRIVATE SpdyStreamRequest { | 128 class NET_EXPORT_PRIVATE SpdyStreamRequest { |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 NetLog* net_log); | 226 NetLog* net_log); |
227 | 227 |
228 virtual ~SpdySession(); | 228 virtual ~SpdySession(); |
229 | 229 |
230 const HostPortPair& host_port_pair() const { | 230 const HostPortPair& host_port_pair() const { |
231 return spdy_session_key_.host_port_proxy_pair().first; | 231 return spdy_session_key_.host_port_proxy_pair().first; |
232 } | 232 } |
233 const HostPortProxyPair& host_port_proxy_pair() const { | 233 const HostPortProxyPair& host_port_proxy_pair() const { |
234 return spdy_session_key_.host_port_proxy_pair(); | 234 return spdy_session_key_.host_port_proxy_pair(); |
235 } | 235 } |
236 const SpdySessionKey& spdy_session_key() const { | 236 const SpdySessionKey& spdy_session_key() const { return spdy_session_key_; } |
237 return spdy_session_key_; | |
238 } | |
239 // Get a pushed stream for a given |url|. If the server initiates a | 237 // Get a pushed stream for a given |url|. If the server initiates a |
240 // stream, it might already exist for a given path. The server | 238 // stream, it might already exist for a given path. The server |
241 // might also not have initiated the stream yet, but indicated it | 239 // might also not have initiated the stream yet, but indicated it |
242 // will via X-Associated-Content. Returns OK if a stream was found | 240 // will via X-Associated-Content. Returns OK if a stream was found |
243 // and put into |spdy_stream|, or if one was not found but it is | 241 // and put into |spdy_stream|, or if one was not found but it is |
244 // okay to create a new stream (in which case |spdy_stream| is | 242 // okay to create a new stream (in which case |spdy_stream| is |
245 // reset). Returns an error (not ERR_IO_PENDING) otherwise, and | 243 // reset). Returns an error (not ERR_IO_PENDING) otherwise, and |
246 // resets |spdy_stream|. | 244 // resets |spdy_stream|. |
247 int GetPushStream( | 245 int GetPushStream(const GURL& url, |
248 const GURL& url, | 246 base::WeakPtr<SpdyStream>* spdy_stream, |
249 base::WeakPtr<SpdyStream>* spdy_stream, | 247 const BoundNetLog& stream_net_log); |
250 const BoundNetLog& stream_net_log); | |
251 | 248 |
252 // Initialize the session with the given connection. |is_secure| | 249 // Initialize the session with the given connection. |is_secure| |
253 // must indicate whether |connection| uses an SSL socket or not; it | 250 // must indicate whether |connection| uses an SSL socket or not; it |
254 // is usually true, but it can be false for testing or when SPDY is | 251 // is usually true, but it can be false for testing or when SPDY is |
255 // configured to work with non-secure sockets. | 252 // configured to work with non-secure sockets. |
256 // | 253 // |
257 // |pool| is the SpdySessionPool that owns us. Its lifetime must | 254 // |pool| is the SpdySessionPool that owns us. Its lifetime must |
258 // strictly be greater than |this|. | 255 // strictly be greater than |this|. |
259 // | 256 // |
260 // |certificate_error_code| must either be OK or less than | 257 // |certificate_error_code| must either be OK or less than |
(...skipping 24 matching lines...) Expand all Loading... |
285 bool VerifyDomainAuthentication(const std::string& domain); | 282 bool VerifyDomainAuthentication(const std::string& domain); |
286 | 283 |
287 // Pushes the given producer into the write queue for | 284 // Pushes the given producer into the write queue for |
288 // |stream|. |stream| is guaranteed to be activated before the | 285 // |stream|. |stream| is guaranteed to be activated before the |
289 // producer is used to produce its frame. | 286 // producer is used to produce its frame. |
290 void EnqueueStreamWrite(const base::WeakPtr<SpdyStream>& stream, | 287 void EnqueueStreamWrite(const base::WeakPtr<SpdyStream>& stream, |
291 SpdyFrameType frame_type, | 288 SpdyFrameType frame_type, |
292 scoped_ptr<SpdyBufferProducer> producer); | 289 scoped_ptr<SpdyBufferProducer> producer); |
293 | 290 |
294 // Creates and returns a SYN frame for |stream_id|. | 291 // Creates and returns a SYN frame for |stream_id|. |
295 scoped_ptr<SpdyFrame> CreateSynStream( | 292 scoped_ptr<SpdyFrame> CreateSynStream(SpdyStreamId stream_id, |
296 SpdyStreamId stream_id, | 293 RequestPriority priority, |
297 RequestPriority priority, | 294 SpdyControlFlags flags, |
298 SpdyControlFlags flags, | 295 const SpdyHeaderBlock& headers); |
299 const SpdyHeaderBlock& headers); | |
300 | 296 |
301 // Creates and returns a SpdyBuffer holding a data frame with the | 297 // Creates and returns a SpdyBuffer holding a data frame with the |
302 // given data. May return NULL if stalled by flow control. | 298 // given data. May return NULL if stalled by flow control. |
303 scoped_ptr<SpdyBuffer> CreateDataBuffer(SpdyStreamId stream_id, | 299 scoped_ptr<SpdyBuffer> CreateDataBuffer(SpdyStreamId stream_id, |
304 IOBuffer* data, | 300 IOBuffer* data, |
305 int len, | 301 int len, |
306 SpdyDataFlags flags); | 302 SpdyDataFlags flags); |
307 | 303 |
308 // Close the stream with the given ID, which must exist and be | 304 // Close the stream with the given ID, which must exist and be |
309 // active. Note that that stream may hold the last reference to the | 305 // active. Note that that stream may hold the last reference to the |
(...skipping 23 matching lines...) Expand all Loading... |
333 bool GetSSLInfo(SSLInfo* ssl_info, | 329 bool GetSSLInfo(SSLInfo* ssl_info, |
334 bool* was_npn_negotiated, | 330 bool* was_npn_negotiated, |
335 NextProto* protocol_negotiated); | 331 NextProto* protocol_negotiated); |
336 | 332 |
337 // Fills SSL Certificate Request info |cert_request_info| and returns | 333 // Fills SSL Certificate Request info |cert_request_info| and returns |
338 // true when SSL is in use. | 334 // true when SSL is in use. |
339 bool GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info); | 335 bool GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info); |
340 | 336 |
341 // Send a WINDOW_UPDATE frame for a stream. Called by a stream | 337 // Send a WINDOW_UPDATE frame for a stream. Called by a stream |
342 // whenever receive window size is increased. | 338 // whenever receive window size is increased. |
343 void SendStreamWindowUpdate(SpdyStreamId stream_id, | 339 void SendStreamWindowUpdate(SpdyStreamId stream_id, uint32 delta_window_size); |
344 uint32 delta_window_size); | |
345 | 340 |
346 // Whether the stream is closed, i.e. it has stopped processing data | 341 // Whether the stream is closed, i.e. it has stopped processing data |
347 // and is about to be destroyed. | 342 // and is about to be destroyed. |
348 // | 343 // |
349 // TODO(akalin): This is only used in tests. Remove this function | 344 // TODO(akalin): This is only used in tests. Remove this function |
350 // and have tests test the WeakPtr instead. | 345 // and have tests test the WeakPtr instead. |
351 bool IsClosed() const { return availability_state_ == STATE_CLOSED; } | 346 bool IsClosed() const { return availability_state_ == STATE_CLOSED; } |
352 | 347 |
353 // Closes this session. This will close all active streams and mark | 348 // Closes this session. This will close all active streams and mark |
354 // the session as permanently closed. Callers must assume that the | 349 // the session as permanently closed. Callers must assume that the |
(...skipping 15 matching lines...) Expand all Loading... |
370 // Value. Caller takes possession of the returned value. | 365 // Value. Caller takes possession of the returned value. |
371 base::Value* GetInfoAsValue() const; | 366 base::Value* GetInfoAsValue() const; |
372 | 367 |
373 // Indicates whether the session is being reused after having successfully | 368 // Indicates whether the session is being reused after having successfully |
374 // used to send/receive data in the past or if the underlying socket was idle | 369 // used to send/receive data in the past or if the underlying socket was idle |
375 // before being used for a SPDY session. | 370 // before being used for a SPDY session. |
376 bool IsReused() const; | 371 bool IsReused() const; |
377 | 372 |
378 // Returns true if the underlying transport socket ever had any reads or | 373 // Returns true if the underlying transport socket ever had any reads or |
379 // writes. | 374 // writes. |
380 bool WasEverUsed() const { | 375 bool WasEverUsed() const { return connection_->socket()->WasEverUsed(); } |
381 return connection_->socket()->WasEverUsed(); | |
382 } | |
383 | 376 |
384 // Returns the load timing information from the perspective of the given | 377 // Returns the load timing information from the perspective of the given |
385 // stream. If it's not the first stream, the connection is considered reused | 378 // stream. If it's not the first stream, the connection is considered reused |
386 // for that stream. | 379 // for that stream. |
387 // | 380 // |
388 // This uses a different notion of reuse than IsReused(). This function | 381 // This uses a different notion of reuse than IsReused(). This function |
389 // sets |socket_reused| to false only if |stream_id| is the ID of the first | 382 // sets |socket_reused| to false only if |stream_id| is the ID of the first |
390 // stream using the session. IsReused(), on the other hand, indicates if the | 383 // stream using the session. IsReused(), on the other hand, indicates if the |
391 // session has been used to send/receive data at all. | 384 // session has been used to send/receive data at all. |
392 bool GetLoadTimingInfo(SpdyStreamId stream_id, | 385 bool GetLoadTimingInfo(SpdyStreamId stream_id, |
393 LoadTimingInfo* load_timing_info) const; | 386 LoadTimingInfo* load_timing_info) const; |
394 | 387 |
395 // Returns true if session is not currently active | 388 // Returns true if session is not currently active |
396 bool is_active() const { | 389 bool is_active() const { |
397 return !active_streams_.empty() || !created_streams_.empty(); | 390 return !active_streams_.empty() || !created_streams_.empty(); |
398 } | 391 } |
399 | 392 |
400 // Access to the number of active and pending streams. These are primarily | 393 // Access to the number of active and pending streams. These are primarily |
401 // available for testing and diagnostics. | 394 // available for testing and diagnostics. |
402 size_t num_active_streams() const { return active_streams_.size(); } | 395 size_t num_active_streams() const { return active_streams_.size(); } |
403 size_t num_unclaimed_pushed_streams() const { | 396 size_t num_unclaimed_pushed_streams() const { |
404 return unclaimed_pushed_streams_.size(); | 397 return unclaimed_pushed_streams_.size(); |
405 } | 398 } |
406 size_t num_created_streams() const { return created_streams_.size(); } | 399 size_t num_created_streams() const { return created_streams_.size(); } |
407 | 400 |
408 size_t pending_create_stream_queue_size(RequestPriority priority) const { | 401 size_t pending_create_stream_queue_size(RequestPriority priority) const { |
409 DCHECK_GE(priority, MINIMUM_PRIORITY); | 402 DCHECK_GE(priority, MINIMUM_PRIORITY); |
410 DCHECK_LE(priority, MAXIMUM_PRIORITY); | 403 DCHECK_LE(priority, MAXIMUM_PRIORITY); |
411 return pending_create_stream_queues_[priority].size(); | 404 return pending_create_stream_queues_[priority].size(); |
412 } | 405 } |
413 | 406 |
414 // Returns the (version-dependent) flow control state. | 407 // Returns the (version-dependent) flow control state. |
415 FlowControlState flow_control_state() const { | 408 FlowControlState flow_control_state() const { return flow_control_state_; } |
416 return flow_control_state_; | |
417 } | |
418 | 409 |
419 // Returns the current |stream_initial_send_window_size_|. | 410 // Returns the current |stream_initial_send_window_size_|. |
420 int32 stream_initial_send_window_size() const { | 411 int32 stream_initial_send_window_size() const { |
421 return stream_initial_send_window_size_; | 412 return stream_initial_send_window_size_; |
422 } | 413 } |
423 | 414 |
424 // Returns the current |stream_initial_recv_window_size_|. | 415 // Returns the current |stream_initial_recv_window_size_|. |
425 int32 stream_initial_recv_window_size() const { | 416 int32 stream_initial_recv_window_size() const { |
426 return stream_initial_recv_window_size_; | 417 return stream_initial_recv_window_size_; |
427 } | 418 } |
428 | 419 |
429 // Returns true if no stream in the session can send data due to | 420 // Returns true if no stream in the session can send data due to |
430 // session flow control. | 421 // session flow control. |
431 bool IsSendStalled() const { | 422 bool IsSendStalled() const { |
432 return | 423 return flow_control_state_ == FLOW_CONTROL_STREAM_AND_SESSION && |
433 flow_control_state_ == FLOW_CONTROL_STREAM_AND_SESSION && | 424 session_send_window_size_ == 0; |
434 session_send_window_size_ == 0; | |
435 } | 425 } |
436 | 426 |
437 const BoundNetLog& net_log() const { return net_log_; } | 427 const BoundNetLog& net_log() const { return net_log_; } |
438 | 428 |
439 int GetPeerAddress(IPEndPoint* address) const; | 429 int GetPeerAddress(IPEndPoint* address) const; |
440 int GetLocalAddress(IPEndPoint* address) const; | 430 int GetLocalAddress(IPEndPoint* address) const; |
441 | 431 |
442 // Adds |alias| to set of aliases associated with this session. | 432 // Adds |alias| to set of aliases associated with this session. |
443 void AddPooledAlias(const SpdySessionKey& alias_key); | 433 void AddPooledAlias(const SpdySessionKey& alias_key); |
444 | 434 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 // Adjust the send window size of all ActiveStreams and PendingStreamRequests. | 652 // Adjust the send window size of all ActiveStreams and PendingStreamRequests. |
663 void UpdateStreamsSendWindowSize(int32 delta_window_size); | 653 void UpdateStreamsSendWindowSize(int32 delta_window_size); |
664 | 654 |
665 // Send the PING (preface-PING) frame. | 655 // Send the PING (preface-PING) frame. |
666 void SendPrefacePingIfNoneInFlight(); | 656 void SendPrefacePingIfNoneInFlight(); |
667 | 657 |
668 // Send PING if there are no PINGs in flight and we haven't heard from server. | 658 // Send PING if there are no PINGs in flight and we haven't heard from server. |
669 void SendPrefacePing(); | 659 void SendPrefacePing(); |
670 | 660 |
671 // Send a single WINDOW_UPDATE frame. | 661 // Send a single WINDOW_UPDATE frame. |
672 void SendWindowUpdateFrame(SpdyStreamId stream_id, uint32 delta_window_size, | 662 void SendWindowUpdateFrame(SpdyStreamId stream_id, |
| 663 uint32 delta_window_size, |
673 RequestPriority priority); | 664 RequestPriority priority); |
674 | 665 |
675 // Send the PING frame. | 666 // Send the PING frame. |
676 void WritePingFrame(uint32 unique_id, bool is_ack); | 667 void WritePingFrame(uint32 unique_id, bool is_ack); |
677 | 668 |
678 // Post a CheckPingStatus call after delay. Don't post if there is already | 669 // Post a CheckPingStatus call after delay. Don't post if there is already |
679 // CheckPingStatus running. | 670 // CheckPingStatus running. |
680 void PlanToCheckPingStatus(); | 671 void PlanToCheckPingStatus(); |
681 | 672 |
682 // Check the status of the connection. It calls |CloseSessionOnError| if we | 673 // Check the status of the connection. It calls |CloseSessionOnError| if we |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 virtual void OnGoAway(SpdyStreamId last_accepted_stream_id, | 786 virtual void OnGoAway(SpdyStreamId last_accepted_stream_id, |
796 SpdyGoAwayStatus status) OVERRIDE; | 787 SpdyGoAwayStatus status) OVERRIDE; |
797 virtual void OnDataFrameHeader(SpdyStreamId stream_id, | 788 virtual void OnDataFrameHeader(SpdyStreamId stream_id, |
798 size_t length, | 789 size_t length, |
799 bool fin) OVERRIDE; | 790 bool fin) OVERRIDE; |
800 virtual void OnStreamFrameData(SpdyStreamId stream_id, | 791 virtual void OnStreamFrameData(SpdyStreamId stream_id, |
801 const char* data, | 792 const char* data, |
802 size_t len, | 793 size_t len, |
803 bool fin) OVERRIDE; | 794 bool fin) OVERRIDE; |
804 virtual void OnSettings(bool clear_persisted) OVERRIDE; | 795 virtual void OnSettings(bool clear_persisted) OVERRIDE; |
805 virtual void OnSetting( | 796 virtual void OnSetting(SpdySettingsIds id, |
806 SpdySettingsIds id, uint8 flags, uint32 value) OVERRIDE; | 797 uint8 flags, |
| 798 uint32 value) OVERRIDE; |
807 virtual void OnWindowUpdate(SpdyStreamId stream_id, | 799 virtual void OnWindowUpdate(SpdyStreamId stream_id, |
808 uint32 delta_window_size) OVERRIDE; | 800 uint32 delta_window_size) OVERRIDE; |
809 virtual void OnPushPromise(SpdyStreamId stream_id, | 801 virtual void OnPushPromise(SpdyStreamId stream_id, |
810 SpdyStreamId promised_stream_id) OVERRIDE; | 802 SpdyStreamId promised_stream_id) OVERRIDE; |
811 virtual void OnSynStream(SpdyStreamId stream_id, | 803 virtual void OnSynStream(SpdyStreamId stream_id, |
812 SpdyStreamId associated_stream_id, | 804 SpdyStreamId associated_stream_id, |
813 SpdyPriority priority, | 805 SpdyPriority priority, |
814 bool fin, | 806 bool fin, |
815 bool unidirectional, | 807 bool unidirectional, |
816 const SpdyHeaderBlock& headers) OVERRIDE; | 808 const SpdyHeaderBlock& headers) OVERRIDE; |
817 virtual void OnSynReply( | 809 virtual void OnSynReply(SpdyStreamId stream_id, |
818 SpdyStreamId stream_id, | 810 bool fin, |
819 bool fin, | 811 const SpdyHeaderBlock& headers) OVERRIDE; |
820 const SpdyHeaderBlock& headers) OVERRIDE; | 812 virtual void OnHeaders(SpdyStreamId stream_id, |
821 virtual void OnHeaders( | 813 bool fin, |
822 SpdyStreamId stream_id, | 814 const SpdyHeaderBlock& headers) OVERRIDE; |
823 bool fin, | |
824 const SpdyHeaderBlock& headers) OVERRIDE; | |
825 | 815 |
826 // SpdyFramerDebugVisitorInterface | 816 // SpdyFramerDebugVisitorInterface |
827 virtual void OnSendCompressedFrame( | 817 virtual void OnSendCompressedFrame(SpdyStreamId stream_id, |
828 SpdyStreamId stream_id, | 818 SpdyFrameType type, |
829 SpdyFrameType type, | 819 size_t payload_len, |
830 size_t payload_len, | 820 size_t frame_len) OVERRIDE; |
831 size_t frame_len) OVERRIDE; | 821 virtual void OnReceiveCompressedFrame(SpdyStreamId stream_id, |
832 virtual void OnReceiveCompressedFrame( | 822 SpdyFrameType type, |
833 SpdyStreamId stream_id, | 823 size_t frame_len) OVERRIDE; |
834 SpdyFrameType type, | |
835 size_t frame_len) OVERRIDE; | |
836 | 824 |
837 // Called when bytes are consumed from a SpdyBuffer for a DATA frame | 825 // Called when bytes are consumed from a SpdyBuffer for a DATA frame |
838 // that is to be written or is being written. Increases the send | 826 // that is to be written or is being written. Increases the send |
839 // window size accordingly if some or all of the SpdyBuffer is being | 827 // window size accordingly if some or all of the SpdyBuffer is being |
840 // discarded. | 828 // discarded. |
841 // | 829 // |
842 // If session flow control is turned off, this must not be called. | 830 // If session flow control is turned off, this must not be called. |
843 void OnWriteBufferConsumed(size_t frame_payload_size, | 831 void OnWriteBufferConsumed(size_t frame_payload_size, |
844 size_t consume_size, | 832 size_t consume_size, |
845 SpdyBuffer::ConsumeSource consume_source); | 833 SpdyBuffer::ConsumeSource consume_source); |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1124 // This SPDY proxy is allowed to push resources from origins that are | 1112 // This SPDY proxy is allowed to push resources from origins that are |
1125 // different from those of their associated streams. | 1113 // different from those of their associated streams. |
1126 HostPortPair trusted_spdy_proxy_; | 1114 HostPortPair trusted_spdy_proxy_; |
1127 | 1115 |
1128 TimeFunc time_func_; | 1116 TimeFunc time_func_; |
1129 }; | 1117 }; |
1130 | 1118 |
1131 } // namespace net | 1119 } // namespace net |
1132 | 1120 |
1133 #endif // NET_SPDY_SPDY_SESSION_H_ | 1121 #endif // NET_SPDY_SPDY_SESSION_H_ |
OLD | NEW |