// 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 #include #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(); // The renderer process is going away. // This function is virtual for testing. virtual void GoAway(); // General message dispatch. WebSocketDispatcherHost::OnMessageReceived // delegates to this method after looking up the |routing_id|. virtual bool OnMessageReceived(const IPC::Message& message); int routing_id() const { return routing_id_; } 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& requested_protocols, const url::Origin& origin, int render_frame_id); void OnSendFrame(bool fin, WebSocketMessageType type, const std::vector& 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 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_