Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1749)

Unified Diff: net/websockets/websocket_frame.h

Issue 23604044: Replace WebSocketFrameChunk with WebSocketFrame (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixes to debug printing. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/websockets/websocket_frame.h
diff --git a/net/websockets/websocket_frame.h b/net/websockets/websocket_frame.h
index 8c04f7dce44476a8820d17fd549eaab26b9439bf..935b35b593dd267603f9abab48ec54460051f24c 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.
+ WebSocketFrame(WebSocketFrameHeader::OpCode opcode);
yhirano 2013/09/13 10:03:17 explicit
Adam Rice 2013/09/13 14:09:53 Sorry. It looks like I forgot to run cpplint.
+ ~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.

Powered by Google App Engine
This is Rietveld 408576698