Chromium Code Reviews| Index: net/websockets/websocket_channel.h |
| diff --git a/net/websockets/websocket_channel.h b/net/websockets/websocket_channel.h |
| index d391f0ea706ff6d129c5c68e4abe9d864df62d01..d9e1a4e6c7698e04372a7342f3320d88840b3072 100644 |
| --- a/net/websockets/websocket_channel.h |
| +++ b/net/websockets/websocket_channel.h |
| @@ -10,9 +10,11 @@ |
| #include "base/basictypes.h" |
| #include "base/callback.h" |
| +#include "base/compiler_specific.h" // for WARN_UNUSED_RESULT |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/scoped_vector.h" |
| #include "net/base/net_export.h" |
| +#include "net/websockets/websocket_event_interface.h" |
| #include "net/websockets/websocket_frame.h" |
| #include "net/websockets/websocket_stream.h" |
| #include "url/gurl.h" |
| @@ -22,7 +24,6 @@ namespace net { |
| class BoundNetLog; |
| class IOBuffer; |
| class URLRequestContext; |
| -class WebSocketEventInterface; |
| // Transport-independent implementation of WebSockets. Implements protocol |
| // semantics that do not depend on the underlying transport. Provides the |
| @@ -94,6 +95,11 @@ class NET_EXPORT WebSocketChannel { |
| const WebSocketStreamFactory& factory); |
| private: |
| + // Methods which return a value of type ChannelState may delete |this|. If the |
| + // return value is CHANNEL_DELETED, then the caller must return without making |
| + // any further access to member variables or methods. |
| + typedef WebSocketEventInterface::ChannelState ChannelState; |
| + |
| // The object passes through a linear progression of states from |
| // FRESHLY_CONSTRUCTED to CLOSED, except that the SEND_CLOSED and RECV_CLOSED |
| // states may be skipped in case of error. |
| @@ -135,55 +141,56 @@ class NET_EXPORT WebSocketChannel { |
| const WebSocketStreamFactory& factory); |
| // Success callback from WebSocketStream::CreateAndConnectStream(). Reports |
| - // success to the event interface. |
| + // success to the event interface. May delete |this|. |
| void OnConnectSuccess(scoped_ptr<WebSocketStream> stream); |
| // Failure callback from WebSocketStream::CreateAndConnectStream(). Reports |
| - // failure to the event interface. |
| + // failure to the event interface. May delete |this|. |
| void OnConnectFailure(uint16 websocket_error); |
| // Returns true if state_ is SEND_CLOSED, CLOSE_WAIT or CLOSED. |
| bool InClosingState() const; |
| // Calls WebSocketStream::WriteFrames() with the appropriate arguments |
| - void WriteFrames(); |
| + ChannelState WriteFrames() WARN_UNUSED_RESULT; |
| // Callback from WebSocketStream::WriteFrames. Sends pending data or adjusts |
| // the send quota of the renderer channel as appropriate. |result| is a net |
| // error code, usually OK. If |synchronous| is true, then OnWriteDone() is |
| // being called from within the WriteFrames() loop and does not need to call |
| // WriteFrames() itself. |
| - void OnWriteDone(bool synchronous, int result); |
| + ChannelState OnWriteDone(bool synchronous, int result) WARN_UNUSED_RESULT; |
| // Calls WebSocketStream::ReadFrames() with the appropriate arguments. |
| - void ReadFrames(); |
| + ChannelState ReadFrames() WARN_UNUSED_RESULT; |
| // Callback from WebSocketStream::ReadFrames. Handles any errors and processes |
| // the returned chunks appropriately to their type. |result| is a net error |
| // code. If |synchronous| is true, then OnReadDone() is being called from |
| // within the ReadFrames() loop and does not need to call ReadFrames() itself. |
| - void OnReadDone(bool synchronous, int result); |
| + ChannelState OnReadDone(bool synchronous, int result) WARN_UNUSED_RESULT; |
| // Processes a single frame that has been read from the stream. |
| - void ProcessFrame(scoped_ptr<WebSocketFrame> frame); |
| + ChannelState ProcessFrame( |
| + scoped_ptr<WebSocketFrame> frame) WARN_UNUSED_RESULT; |
| // Handles a frame that the object has received enough of to process. May call |
| // |event_interface_| methods, send responses to the server, and change the |
| // value of |state_|. |
| - void HandleFrame(const WebSocketFrameHeader::OpCode opcode, |
| - bool final, |
| - const scoped_refptr<IOBuffer>& data_buffer, |
| - size_t size); |
| + ChannelState HandleFrame(const WebSocketFrameHeader::OpCode opcode, |
| + bool final, |
| + const scoped_refptr<IOBuffer>& data_buffer, |
| + size_t size) WARN_UNUSED_RESULT; |
| // Low-level method to send a single frame. Used for both data and control |
| // frames. Either sends the frame immediately or buffers it to be scheduled |
| // when the current write finishes. |fin| and |op_code| are defined as for |
| // SendFrame() above, except that |op_code| may also be a control frame |
| // opcode. |
| - void SendIOBuffer(bool fin, |
| - WebSocketFrameHeader::OpCode op_code, |
| - const scoped_refptr<IOBuffer>& buffer, |
| - size_t size); |
| + ChannelState SendIOBuffer(bool fin, |
| + WebSocketFrameHeader::OpCode op_code, |
| + const scoped_refptr<IOBuffer>& buffer, |
| + size_t size) WARN_UNUSED_RESULT; |
| // Performs the "Fail the WebSocket Connection" operation as defined in |
| // RFC6455. The supplied code and reason are sent back to the renderer in an |
| @@ -191,13 +198,18 @@ class NET_EXPORT WebSocketChannel { |
| // to the remote host. If |expose| is SEND_REAL_ERROR then the remote host is |
| // given the same status code passed to the renderer; otherwise it is sent a |
| // fixed "Going Away" code. Closes the stream_ and sets state_ to CLOSED. |
| - void FailChannel(ExposeError expose, uint16 code, const std::string& reason); |
| + // FailChannel() always returns CHANNEL_DELETED. It is not valid to access any |
| + // member variables or methods after calling FailChannel(). |
| + ChannelState FailChannel(ExposeError expose, |
|
yhirano
2013/10/10 09:22:27
Why does not this method have WARN_UNUSED_RESULT?
Adam Rice
2013/10/11 11:22:42
Done.
|
| + uint16 code, |
| + const std::string& reason); |
| // Sends a Close frame to Start the WebSocket Closing Handshake, or to respond |
| // to a Close frame from the server. As a special case, setting |code| to |
| // kWebSocketErrorNoStatusReceived will create a Close frame with no payload; |
| // this is symmetric with the behaviour of ParseClose. |
| - void SendClose(uint16 code, const std::string& reason); |
| + ChannelState SendClose(uint16 code, |
| + const std::string& reason) WARN_UNUSED_RESULT; |
| // Parses a Close frame. If no status code is supplied, then |code| is set to |
| // 1005 (No status code) with empty |reason|. If the supplied code is |