| Index: net/spdy/spdy_stream.h
|
| diff --git a/net/spdy/spdy_stream.h b/net/spdy/spdy_stream.h
|
| index b9ecfe992623956bb7e2d1bd5d3b79f51e0e1f1c..5f14f87c49c7a3f760d6c4f1a0f1e7380bcfd019 100644
|
| --- a/net/spdy/spdy_stream.h
|
| +++ b/net/spdy/spdy_stream.h
|
| @@ -56,12 +56,12 @@ class NET_EXPORT_PRIVATE SpdyStream {
|
| public:
|
| Delegate() {}
|
|
|
| - // Called when SYN frame has been sent.
|
| - // Returns true if no more data to be sent after SYN frame.
|
| + // Called when SYN frame has been sent. Must return whether
|
| + // there's body data to send.
|
| virtual SpdySendStatus OnSendHeadersComplete() = 0;
|
|
|
| // Called when the stream is ready to send body data. The
|
| - // delegate must call QueueStreamData() on the stream, either
|
| + // delegate must call SendStreamData() on the stream, either
|
| // immediately or asynchronously (e.g., if the data to be send has
|
| // to be read asynchronously).
|
| //
|
| @@ -69,10 +69,9 @@ class NET_EXPORT_PRIVATE SpdyStream {
|
| // OnSendBodyComplete() returns MORE_DATA_TO_SEND.
|
| virtual void OnSendBody() = 0;
|
|
|
| - // Called when body data has been sent. |bytes_sent| is the number
|
| - // of bytes that has been sent (may be zero). Must return whether
|
| + // Called when body data has been sent. Must return whether
|
| // there's more body data to send.
|
| - virtual SpdySendStatus OnSendBodyComplete(size_t bytes_sent) = 0;
|
| + virtual SpdySendStatus OnSendBodyComplete() = 0;
|
|
|
| // Called when the SYN_STREAM, SYN_REPLY, or HEADERS frames are received.
|
| // Normal streams will receive a SYN_REPLY and optional HEADERS frames.
|
| @@ -93,7 +92,7 @@ class NET_EXPORT_PRIVATE SpdyStream {
|
| virtual int OnDataReceived(scoped_ptr<SpdyBuffer> buffer) = 0;
|
|
|
| // Called when data is sent.
|
| - virtual void OnDataSent(size_t bytes_sent) = 0;
|
| + virtual void OnDataSent() = 0;
|
|
|
| // Called when SpdyStream is closed. No other delegate functions
|
| // will be called after this is called, and the delegate must not
|
| @@ -288,19 +287,28 @@ class NET_EXPORT_PRIVATE SpdyStream {
|
| // this once crbug.com/113107 is addressed.
|
| bool body_sent() const { return io_state_ > STATE_SEND_BODY_COMPLETE; }
|
|
|
| - // Interface for Spdy[Http|WebSocket]Stream to use.
|
| + // Interface for the delegate to use.
|
| + //
|
| + // TODO(akalin): Mandate that only one send can be in flight at one
|
| + // time.
|
|
|
| // Sends the request.
|
| // For non push stream, it will send SYN_STREAM frame.
|
| int SendRequest(bool has_upload_data);
|
|
|
| - // Queues a HEADERS frame to be sent.
|
| - void QueueHeaders(scoped_ptr<SpdyHeaderBlock> headers);
|
| + // Sends a HEADERS frame. The delegate will be notified via
|
| + // OnHeadersSent() when the send is complete.
|
| + void SendHeaders(scoped_ptr<SpdyHeaderBlock> headers);
|
|
|
| - // Queues a DATA frame to be sent. May not queue all the data that
|
| - // is given (or even any of it) depending on flow control.
|
| - void QueueStreamData(IOBuffer* data, int length,
|
| - SpdyDataFlags flags);
|
| + // Sends a DATA frame. The delegate will be notified via
|
| + // OnSendBodyComplete() (if the response hasn't been received yet)
|
| + // or OnDataSent() (if the response has been received) when the send
|
| + // is complete. Only one data send can be in flight at one time.
|
| + //
|
| + // |flags| must be DATA_FLAG_NONE except for the last piece of data
|
| + // for a request in a request/response stream, where it should be
|
| + // DATA_FLAG_FIN.
|
| + void SendStreamData(IOBuffer* data, int length, SpdyDataFlags flags);
|
|
|
| // Fills SSL info in |ssl_info| and returns true when SSL is in use.
|
| bool GetSSLInfo(SSLInfo* ssl_info,
|
| @@ -390,6 +398,11 @@ class NET_EXPORT_PRIVATE SpdyStream {
|
| scoped_ptr<SpdyFrame> ProduceHeaderFrame(
|
| scoped_ptr<SpdyHeaderBlock> header_block);
|
|
|
| + // Queues the send for next frame of the remaining data in
|
| + // |pending_send_data_|. Must be called only when
|
| + // |pending_send_data_| and |pending_send_flags_| are set.
|
| + void QueueNextDataFrame();
|
| +
|
| base::WeakPtrFactory<SpdyStream> weak_ptr_factory_;
|
|
|
| // Sentinel variable used to make sure we don't get destroyed by a
|
| @@ -424,6 +437,10 @@ class NET_EXPORT_PRIVATE SpdyStream {
|
| // The request to send.
|
| scoped_ptr<SpdyHeaderBlock> request_;
|
|
|
| + // The data waiting to be sent.
|
| + scoped_refptr<DrainableIOBuffer> pending_send_data_;
|
| + SpdyDataFlags pending_send_flags_;
|
| +
|
| // The time at which the request was made that resulted in this response.
|
| // For cached responses, this time could be "far" in the past.
|
| base::Time request_time_;
|
|
|