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

Side by Side Diff: net/websockets/websocket_channel.h

Issue 2267233002: Change WebSocketChannel to pass data via IOBuffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_WEBSOCKETS_WEBSOCKET_CHANNEL_H_ 5 #ifndef NET_WEBSOCKETS_WEBSOCKET_CHANNEL_H_
6 #define NET_WEBSOCKETS_WEBSOCKET_CHANNEL_H_ 6 #define NET_WEBSOCKETS_WEBSOCKET_CHANNEL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 const GURL& socket_url, 75 const GURL& socket_url,
76 const std::vector<std::string>& requested_protocols, 76 const std::vector<std::string>& requested_protocols,
77 const url::Origin& origin, 77 const url::Origin& origin,
78 const GURL& first_party_for_cookies, 78 const GURL& first_party_for_cookies,
79 const std::string& additional_headers); 79 const std::string& additional_headers);
80 80
81 // Sends a data frame to the remote side. It is the responsibility of the 81 // Sends a data frame to the remote side. It is the responsibility of the
82 // caller to ensure that they have sufficient send quota to send this data, 82 // caller to ensure that they have sufficient send quota to send this data,
83 // otherwise the connection will be closed without sending. |fin| indicates 83 // otherwise the connection will be closed without sending. |fin| indicates
84 // the last frame in a message, equivalent to "FIN" as specified in section 84 // the last frame in a message, equivalent to "FIN" as specified in section
85 // 5.2 of RFC6455. |data| is the "Payload Data". If |op_code| is kOpCodeText, 85 // 5.2 of RFC6455. |buffer->data()| is the "Payload Data". If |op_code| is
86 // or it is kOpCodeContinuation and the type the message is Text, then |data| 86 // kOpCodeText, or it is kOpCodeContinuation and the type the message is
87 // must be a chunk of a valid UTF-8 message, however there is no requirement 87 // Text, then |buffer->data()| must be a chunk of a valid UTF-8 message,
88 // for |data| to be split on character boundaries. Calling SendFrame may 88 // however there is no requirement for |buffer->data()| to be split on
89 // result in synchronous calls to |event_interface_| which may result in this 89 // character boundaries. Calling SendFrame may result in synchronous calls to
90 // object being deleted. In that case, the return value will be 90 // |event_interface_| which may result in this object being deleted. In that
91 // CHANNEL_DELETED. 91 // case, the return value will be CHANNEL_DELETED.
92 ChannelState SendFrame(bool fin, 92 ChannelState SendFrame(bool fin,
93 WebSocketFrameHeader::OpCode op_code, 93 WebSocketFrameHeader::OpCode op_code,
94 const std::vector<char>& data); 94 scoped_refptr<IOBuffer> buffer,
95 size_t buffer_size);
95 96
96 // Sends |quota| units of flow control to the remote side. If the underlying 97 // Sends |quota| units of flow control to the remote side. If the underlying
97 // transport has a concept of |quota|, then it permits the remote server to 98 // transport has a concept of |quota|, then it permits the remote server to
98 // send up to |quota| units of data. 99 // send up to |quota| units of data.
99 // 100 //
100 // Calling this function may result in synchronous calls to |event_interface_| 101 // Calling this function may result in synchronous calls to |event_interface_|
101 // which may result in this object being deleted. In that case, the return 102 // which may result in this object being deleted. In that case, the return
102 // value will be CHANNEL_DELETED. 103 // value will be CHANNEL_DELETED.
103 ChannelState SendFlowControl(int64_t quota) WARN_UNUSED_RESULT; 104 ChannelState SendFlowControl(int64_t quota) WARN_UNUSED_RESULT;
104 105
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 // This method performs sanity checks on the frame that are needed regardless 280 // This method performs sanity checks on the frame that are needed regardless
280 // of the current state. Then, calls the HandleFrameByState() method below 281 // of the current state. Then, calls the HandleFrameByState() method below
281 // which performs the appropriate action(s) depending on the current state. 282 // which performs the appropriate action(s) depending on the current state.
282 ChannelState HandleFrame(std::unique_ptr<WebSocketFrame> frame) 283 ChannelState HandleFrame(std::unique_ptr<WebSocketFrame> frame)
283 WARN_UNUSED_RESULT; 284 WARN_UNUSED_RESULT;
284 285
285 // Handles a single frame depending on the current state. It's used by the 286 // Handles a single frame depending on the current state. It's used by the
286 // HandleFrame() method. 287 // HandleFrame() method.
287 ChannelState HandleFrameByState(const WebSocketFrameHeader::OpCode opcode, 288 ChannelState HandleFrameByState(const WebSocketFrameHeader::OpCode opcode,
288 bool final, 289 bool final,
289 const scoped_refptr<IOBuffer>& data_buffer, 290 scoped_refptr<IOBuffer> data_buffer,
290 uint64_t size) WARN_UNUSED_RESULT; 291 uint64_t size) WARN_UNUSED_RESULT;
291 292
292 // Forwards a received data frame to the renderer, if connected. If 293 // Forwards a received data frame to the renderer, if connected. If
293 // |expecting_continuation| is not equal to |expecting_to_read_continuation_|, 294 // |expecting_continuation| is not equal to |expecting_to_read_continuation_|,
294 // will fail the channel. Also checks the UTF-8 validity of text frames. 295 // will fail the channel. Also checks the UTF-8 validity of text frames.
295 ChannelState HandleDataFrame(WebSocketFrameHeader::OpCode opcode, 296 ChannelState HandleDataFrame(WebSocketFrameHeader::OpCode opcode,
296 bool final, 297 bool final,
297 const scoped_refptr<IOBuffer>& data_buffer, 298 scoped_refptr<IOBuffer> data_buffer,
298 uint64_t size) WARN_UNUSED_RESULT; 299 uint64_t size) WARN_UNUSED_RESULT;
299 300
300 // Handles an incoming close frame with |code| and |reason|. 301 // Handles an incoming close frame with |code| and |reason|.
301 ChannelState HandleCloseFrame(uint16_t code, 302 ChannelState HandleCloseFrame(uint16_t code,
302 const std::string& reason) WARN_UNUSED_RESULT; 303 const std::string& reason) WARN_UNUSED_RESULT;
303 304
304 // Responds to a closing handshake initiated by the server. 305 // Responds to a closing handshake initiated by the server.
305 ChannelState RespondToClosingHandshake() WARN_UNUSED_RESULT; 306 ChannelState RespondToClosingHandshake() WARN_UNUSED_RESULT;
306 307
307 // Low-level method to send a single frame. Used for both data and control 308 // Low-level method to send a single frame. Used for both data and control
308 // frames. Either sends the frame immediately or buffers it to be scheduled 309 // frames. Either sends the frame immediately or buffers it to be scheduled
309 // when the current write finishes. |fin| and |op_code| are defined as for 310 // when the current write finishes. |fin| and |op_code| are defined as for
310 // SendFrame() above, except that |op_code| may also be a control frame 311 // SendFrame() above, except that |op_code| may also be a control frame
311 // opcode. 312 // opcode.
312 ChannelState SendFrameFromIOBuffer(bool fin, 313 ChannelState SendFrameFromIOBuffer(bool fin,
313 WebSocketFrameHeader::OpCode op_code, 314 WebSocketFrameHeader::OpCode op_code,
314 const scoped_refptr<IOBuffer>& buffer, 315 scoped_refptr<IOBuffer> buffer,
315 uint64_t size) WARN_UNUSED_RESULT; 316 uint64_t buffer_size) WARN_UNUSED_RESULT;
316 317
317 // Performs the "Fail the WebSocket Connection" operation as defined in 318 // Performs the "Fail the WebSocket Connection" operation as defined in
318 // RFC6455. A NotifyFailure message is sent to the renderer with |message|. 319 // RFC6455. A NotifyFailure message is sent to the renderer with |message|.
319 // The renderer will log the message to the console but not expose it to 320 // The renderer will log the message to the console but not expose it to
320 // Javascript. Javascript will see a Close code of AbnormalClosure (1006) with 321 // Javascript. Javascript will see a Close code of AbnormalClosure (1006) with
321 // an empty reason string. If state_ is CONNECTED then a Close message is sent 322 // an empty reason string. If state_ is CONNECTED then a Close message is sent
322 // to the remote host containing the supplied |code| and |reason|. If the 323 // to the remote host containing the supplied |code| and |reason|. If the
323 // stream is open, closes it and sets state_ to CLOSED. FailChannel() always 324 // stream is open, closes it and sets state_ to CLOSED. FailChannel() always
324 // returns CHANNEL_DELETED. It is not valid to access any member variables or 325 // returns CHANNEL_DELETED. It is not valid to access any member variables or
325 // methods after calling FailChannel(). 326 // methods after calling FailChannel().
326 ChannelState FailChannel(const std::string& message, 327 ChannelState FailChannel(const std::string& message,
327 uint16_t code, 328 uint16_t code,
328 const std::string& reason) WARN_UNUSED_RESULT; 329 const std::string& reason) WARN_UNUSED_RESULT;
329 330
330 // Sends a Close frame to Start the WebSocket Closing Handshake, or to respond 331 // Sends a Close frame to Start the WebSocket Closing Handshake, or to respond
331 // to a Close frame from the server. As a special case, setting |code| to 332 // to a Close frame from the server. As a special case, setting |code| to
332 // kWebSocketErrorNoStatusReceived will create a Close frame with no payload; 333 // kWebSocketErrorNoStatusReceived will create a Close frame with no payload;
333 // this is symmetric with the behaviour of ParseClose. 334 // this is symmetric with the behaviour of ParseClose.
334 ChannelState SendClose(uint16_t code, 335 ChannelState SendClose(uint16_t code,
335 const std::string& reason) WARN_UNUSED_RESULT; 336 const std::string& reason) WARN_UNUSED_RESULT;
336 337
337 // Parses a Close frame payload. If no status code is supplied, then |code| is 338 // Parses a Close frame payload. If no status code is supplied, then |code| is
338 // set to 1005 (No status code) with empty |reason|. If the reason text is not 339 // set to 1005 (No status code) with empty |reason|. If the reason text is not
339 // valid UTF-8, then |reason| is set to an empty string. If the payload size 340 // valid UTF-8, then |reason| is set to an empty string. If the payload size
340 // is 1, or the supplied code is not permitted to be sent over the network, 341 // is 1, or the supplied code is not permitted to be sent over the network,
341 // then false is returned and |message| is set to an appropriate console 342 // then false is returned and |message| is set to an appropriate console
342 // message. 343 // message.
343 bool ParseClose(const scoped_refptr<IOBuffer>& buffer, 344 bool ParseClose(scoped_refptr<IOBuffer> buffer,
344 uint64_t size, 345 uint64_t size,
345 uint16_t* code, 346 uint16_t* code,
346 std::string* reason, 347 std::string* reason,
347 std::string* message); 348 std::string* message);
348 349
349 // Drop this channel. 350 // Drop this channel.
350 // If there are pending opening handshake notifications, notify them 351 // If there are pending opening handshake notifications, notify them
351 // before dropping. 352 // before dropping.
352 // 353 //
353 // Always returns CHANNEL_DELETED. 354 // Always returns CHANNEL_DELETED.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 // For UMA. The time when OnConnectSuccess() method was called and |stream_| 448 // For UMA. The time when OnConnectSuccess() method was called and |stream_|
448 // was set. 449 // was set.
449 base::TimeTicks established_on_; 450 base::TimeTicks established_on_;
450 451
451 DISALLOW_COPY_AND_ASSIGN(WebSocketChannel); 452 DISALLOW_COPY_AND_ASSIGN(WebSocketChannel);
452 }; 453 };
453 454
454 } // namespace net 455 } // namespace net
455 456
456 #endif // NET_WEBSOCKETS_WEBSOCKET_CHANNEL_H_ 457 #endif // NET_WEBSOCKETS_WEBSOCKET_CHANNEL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698