| Index: net/websockets/websocket_frame.h
|
| diff --git a/net/websockets/websocket_frame.h b/net/websockets/websocket_frame.h
|
| index 8c04f7dce44476a8820d17fd549eaab26b9439bf..b3d3ec21a0d8e8041a8c4fd95e95e7f4e29b806d 100644
|
| --- a/net/websockets/websocket_frame.h
|
| +++ b/net/websockets/websocket_frame.h
|
| @@ -14,6 +14,7 @@
|
|
|
| namespace net {
|
|
|
| +class IOBuffer;
|
| class IOBufferWithSize;
|
|
|
| // Represents a WebSocket frame header.
|
| @@ -69,7 +70,10 @@ struct NET_EXPORT WebSocketFrameHeader {
|
| payload_length(0) {}
|
|
|
| // Create a clone of this object on the heap.
|
| - scoped_ptr<WebSocketFrameHeader> Clone();
|
| + scoped_ptr<WebSocketFrameHeader> Clone() const;
|
| +
|
| + // Overwrite this object with the fields from |source|.
|
| + void CopyFrom(const WebSocketFrameHeader& source);
|
|
|
| // Members below correspond to each item in WebSocket frame header.
|
| // See <http://tools.ietf.org/html/rfc6455#section-5.2> for details.
|
| @@ -85,16 +89,32 @@ struct NET_EXPORT WebSocketFrameHeader {
|
| DISALLOW_COPY_AND_ASSIGN(WebSocketFrameHeader);
|
| };
|
|
|
| -// Contains payload data of part of a WebSocket frame.
|
| +// Contains an entire WebSocket frame including payload. This is used by APIs
|
| +// that are not concerned about retaining the original frame boundaries (because
|
| +// frames may need to be split in order for the data to fit in memory).
|
| +struct NET_EXPORT_PRIVATE WebSocketFrame {
|
| + // A frame must always have an opcode, so this parameter is compulsory.
|
| + explicit WebSocketFrame(WebSocketFrameHeader::OpCode opcode);
|
| + ~WebSocketFrame();
|
| +
|
| + // |header| is always present.
|
| + WebSocketFrameHeader header;
|
| +
|
| + // |data| is always unmasked even if the frame is masked. The size of |data|
|
| + // |is given by |header.payload_length|.
|
| + scoped_refptr<IOBuffer> data;
|
| +};
|
| +
|
| +// Structure describing one chunk of a WebSocket frame.
|
| //
|
| -// Payload of a WebSocket frame may be divided into multiple chunks.
|
| +// The payload of a WebSocket frame may be divided into multiple chunks.
|
| // You need to look at |final_chunk| member variable to detect the end of a
|
| // series of chunk objects of a WebSocket frame.
|
| //
|
| -// Frame dissection is necessary to handle WebSocket frame stream containing
|
| -// abritrarily large frames in the browser process. Because the server may send
|
| -// a huge frame that doesn't fit in the memory, we cannot store the entire
|
| -// payload data in the memory.
|
| +// Frame dissection is necessary to handle frames that are too large to store in
|
| +// the browser memory without losing information about the frame boundaries. In
|
| +// practice, most code does not need to worry about the original frame
|
| +// boundaries and can use the WebSocketFrame type declared above.
|
| //
|
| // Users of this struct should treat WebSocket frames as a data stream; it's
|
| // important to keep the frame data flowing, especially in the browser process.
|
|
|