Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / pepper / pepper_udp_socket_message_filter.h
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_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_
6 #define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "content/common/content_export.h"
16 #include "content/public/common/process_type.h"
17 #include "net/base/completion_callback.h"
18 #include "net/base/ip_endpoint.h"
19 #include "ppapi/c/pp_instance.h"
20 #include "ppapi/c/pp_stdint.h"
21 #include "ppapi/c/ppb_udp_socket.h"
22 #include "ppapi/host/resource_message_filter.h"
23
24 struct PP_NetAddress_Private;
25
26 namespace net {
27 class IOBuffer;
28 class IOBufferWithSize;
29 class UDPServerSocket;
30 }
31
32 namespace ppapi {
33
34 class SocketOptionData;
35
36 namespace host {
37 struct ReplyMessageContext;
38 }
39 }
40
41 namespace content {
42
43 class BrowserPpapiHostImpl;
44 struct SocketPermissionRequest;
45
46 class CONTENT_EXPORT PepperUDPSocketMessageFilter
47     : public ppapi::host::ResourceMessageFilter {
48  public:
49   PepperUDPSocketMessageFilter(BrowserPpapiHostImpl* host,
50                                PP_Instance instance,
51                                bool private_api);
52
53   static size_t GetNumInstances();
54
55  protected:
56   virtual ~PepperUDPSocketMessageFilter();
57
58  private:
59   // ppapi::host::ResourceMessageFilter overrides.
60   virtual scoped_refptr<base::TaskRunner> OverrideTaskRunnerForMessage(
61       const IPC::Message& message) OVERRIDE;
62   virtual int32_t OnResourceMessageReceived(
63       const IPC::Message& msg,
64       ppapi::host::HostMessageContext* context) OVERRIDE;
65
66   int32_t OnMsgSetOption(const ppapi::host::HostMessageContext* context,
67                          PP_UDPSocket_Option name,
68                          const ppapi::SocketOptionData& value);
69   int32_t OnMsgBind(const ppapi::host::HostMessageContext* context,
70                     const PP_NetAddress_Private& addr);
71   int32_t OnMsgRecvFrom(const ppapi::host::HostMessageContext* context,
72                         int32_t num_bytes);
73   int32_t OnMsgSendTo(const ppapi::host::HostMessageContext* context,
74                       const std::string& data,
75                       const PP_NetAddress_Private& addr);
76   int32_t OnMsgClose(const ppapi::host::HostMessageContext* context);
77
78   void DoBind(const ppapi::host::ReplyMessageContext& context,
79               const PP_NetAddress_Private& addr);
80   void DoSendTo(const ppapi::host::ReplyMessageContext& context,
81                 const std::string& data,
82                 const PP_NetAddress_Private& addr);
83   void Close();
84
85   void OnRecvFromCompleted(const ppapi::host::ReplyMessageContext& context,
86                            int net_result);
87   void OnSendToCompleted(const ppapi::host::ReplyMessageContext& context,
88                          int net_result);
89
90   void SendBindReply(const ppapi::host::ReplyMessageContext& context,
91                      int32_t result,
92                      const PP_NetAddress_Private& addr);
93   void SendRecvFromReply(const ppapi::host::ReplyMessageContext& context,
94                          int32_t result,
95                          const std::string& data,
96                          const PP_NetAddress_Private& addr);
97   void SendSendToReply(const ppapi::host::ReplyMessageContext& context,
98                        int32_t result,
99                        int32_t bytes_written);
100
101   void SendBindError(const ppapi::host::ReplyMessageContext& context,
102                      int32_t result);
103   void SendRecvFromError(const ppapi::host::ReplyMessageContext& context,
104                          int32_t result);
105   void SendSendToError(const ppapi::host::ReplyMessageContext& context,
106                        int32_t result);
107
108   bool allow_address_reuse_;
109   bool allow_broadcast_;
110
111   scoped_ptr<net::UDPServerSocket> socket_;
112   bool closed_;
113
114   scoped_refptr<net::IOBuffer> recvfrom_buffer_;
115   scoped_refptr<net::IOBufferWithSize> sendto_buffer_;
116
117   net::IPEndPoint recvfrom_address_;
118
119   bool external_plugin_;
120   bool private_api_;
121
122   int render_process_id_;
123   int render_frame_id_;
124
125   DISALLOW_COPY_AND_ASSIGN(PepperUDPSocketMessageFilter);
126 };
127
128 }  // namespace content
129
130 #endif  // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_