| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_HOST_H_ |
| #define CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_HOST_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "content/common/content_export.h" |
| #include "content/common/websocket.h" |
| |
| class GURL; |
| |
| namespace url { |
| class Origin; |
| } // namespace url |
| |
| namespace net { |
| class WebSocketChannel; |
| class URLRequestContext; |
| } // namespace net |
| |
| namespace IPC { |
| class Message; |
| } // namespace IPC |
| |
| namespace content { |
| |
| class WebSocketDispatcherHost; |
| |
| // Host of net::WebSocketChannel. The lifetime of an instance of this class is |
| // completely controlled by the WebSocketDispatcherHost object. |
| class CONTENT_EXPORT WebSocketHost { |
| public: |
| WebSocketHost(int routing_id, |
| WebSocketDispatcherHost* dispatcher, |
| net::URLRequestContext* url_request_context); |
| virtual ~WebSocketHost(); |
| |
| // General message dispatch. WebSocketDispatcherHost::OnMessageReceived |
| // delegates to this method after looking up the |routing_id|. |
| virtual bool OnMessageReceived(const IPC::Message& message); |
| |
| private: |
| // Handlers for each message type, dispatched by OnMessageReceived(), as |
| // defined in content/common/websocket_messages.h |
| |
| void OnAddChannelRequest(const GURL& socket_url, |
| const std::vector<std::string>& requested_protocols, |
| const url::Origin& origin, |
| int render_frame_id); |
| |
| void OnSendFrame(bool fin, |
| WebSocketMessageType type, |
| const std::vector<char>& data); |
| |
| void OnFlowControl(int64 quota); |
| |
| void OnDropChannel(bool was_clean, uint16 code, const std::string& reason); |
| |
| // The channel we use to send events to the network. |
| scoped_ptr<net::WebSocketChannel> channel_; |
| |
| // The WebSocketHostDispatcher that created this object. |
| WebSocketDispatcherHost* const dispatcher_; |
| |
| // The URL request context for the channel. |
| net::URLRequestContext* const url_request_context_; |
| |
| // The ID used to route messages. |
| const int routing_id_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WebSocketHost); |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_HOST_H_ |