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 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_HOST_H_ 6 #define CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_HOST_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/memory/scoped_ptr.h" 12 #include "content/common/content_export.h" 13 #include "content/common/websocket.h" 14 15 class GURL; 16 17 namespace net { 18 class WebSocketChannel; 19 class URLRequestContext; 20 } // namespace net 21 22 namespace IPC { 23 class Message; 24 } // namespace IPC 25 26 namespace content { 27 28 class WebSocketDispatcherHost; 29 30 // Host of net::WebSocketChannel. The lifetime of an instance of this class is 31 // completely controlled by the WebSocketDispatcherHost object. 32 class CONTENT_EXPORT WebSocketHost { 33 public: 34 WebSocketHost(int routing_id, 35 WebSocketDispatcherHost* dispatcher, 36 net::URLRequestContext* url_request_context); 37 virtual ~WebSocketHost(); 38 39 // General message dispatch. WebSocketDispatcherHost::OnMessageReceived 40 // delegates to this method after looking up the |routing_id|. 41 virtual bool OnMessageReceived(const IPC::Message& message, 42 bool* message_was_ok); 43 44 private: 45 // Handlers for each message type, dispatched by OnMessageReceived(), as 46 // defined in content/common/websocket_messages.h 47 48 void OnAddChannelRequest(const GURL& socket_url, 49 const std::vector<std::string>& requested_protocols, 50 const GURL& origin); 51 52 void OnSendFrame(bool fin, 53 WebSocketMessageType type, 54 const std::vector<char>& data); 55 56 void OnFlowControl(int64 quota); 57 58 void OnDropChannel(bool was_clean, uint16 code, const std::string& reason); 59 60 // The channel we use to send events to the network. 61 scoped_ptr<net::WebSocketChannel> channel_; 62 63 // The ID used to route messages. 64 int routing_id_; 65 66 DISALLOW_COPY_AND_ASSIGN(WebSocketHost); 67 }; 68 69 } // namespace content 70 71 #endif // CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_HOST_H_ 72