1// Copyright (c) 2012 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_CHILD_SOCKET_STREAM_DISPATCHER_H_
6#define CONTENT_CHILD_SOCKET_STREAM_DISPATCHER_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "ipc/ipc_listener.h"
13
14namespace blink {
15class WebSocketStreamHandle;
16}
17
18namespace content {
19
20class WebSocketStreamHandleBridge;
21class WebSocketStreamHandleDelegate;
22
23// Dispatches socket stream related messages sent to a child process from the
24// main browser process.  There is one instance per child process.  Messages
25// are dispatched on the main child thread.  The RenderThread class
26// creates an instance of SocketStreamDispatcher and delegates calls to it.
27class SocketStreamDispatcher : public IPC::Listener {
28 public:
29  SocketStreamDispatcher();
30  virtual ~SocketStreamDispatcher() {}
31
32  static WebSocketStreamHandleBridge* CreateBridge(
33      blink::WebSocketStreamHandle* handle,
34      WebSocketStreamHandleDelegate* delegate);
35
36  // IPC::Listener implementation.
37  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
38
39 private:
40  void OnConnected(int socket_id, int max_amount_send_allowed);
41  void OnSentData(int socket_id, int amount_sent);
42  void OnReceivedData(int socket_id, const std::vector<char>& data);
43  void OnClosed(int socket_id);
44  void OnFailed(int socket_id, int error_code);
45
46  DISALLOW_COPY_AND_ASSIGN(SocketStreamDispatcher);
47};
48
49}  // namespace content
50
51#endif  // CONTENT_CHILD_SOCKET_STREAM_DISPATCHER_H_
52