1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/content_export.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/process_type.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/completion_callback.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/ip_endpoint.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_instance.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_stdint.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/ppb_udp_socket.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/host/resource_message_filter.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct PP_NetAddress_Private; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IOBuffer; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IOBufferWithSize; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class UDPServerSocket; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ppapi { 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass SocketOptionData; 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace host { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ReplyMessageContext; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserPpapiHostImpl; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct SocketPermissionRequest; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass CONTENT_EXPORT PepperUDPSocketMessageFilter 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public ppapi::host::ResourceMessageFilter { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PepperUDPSocketMessageFilter(BrowserPpapiHostImpl* host, 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_Instance instance, 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool private_api); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch static size_t GetNumInstances(); 542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~PepperUDPSocketMessageFilter(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ppapi::host::ResourceMessageFilter overrides. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<base::TaskRunner> OverrideTaskRunnerForMessage( 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const IPC::Message& message) OVERRIDE; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int32_t OnResourceMessageReceived( 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const IPC::Message& msg, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ppapi::host::HostMessageContext* context) OVERRIDE; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int32_t OnMsgSetOption(const ppapi::host::HostMessageContext* context, 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch PP_UDPSocket_Option name, 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const ppapi::SocketOptionData& value); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t OnMsgBind(const ppapi::host::HostMessageContext* context, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private& addr); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t OnMsgSendTo(const ppapi::host::HostMessageContext* context, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& data, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private& addr); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t OnMsgClose(const ppapi::host::HostMessageContext* context); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int32_t OnMsgRecvSlotAvailable( 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ppapi::host::HostMessageContext* context); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DoBind(const ppapi::host::ReplyMessageContext& context, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private& addr); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DoRecvFrom(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DoSendTo(const ppapi::host::ReplyMessageContext& context, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& data, 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private& addr); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Close(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnRecvFromCompleted(int net_result); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSendToCompleted(const ppapi::host::ReplyMessageContext& context, 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int net_result); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SendBindReply(const ppapi::host::ReplyMessageContext& context, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t result, 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_NetAddress_Private& addr); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SendRecvFromResult(int32_t result, 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& data, 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const PP_NetAddress_Private& addr); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SendSendToReply(const ppapi::host::ReplyMessageContext& context, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t result, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t bytes_written); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SendBindError(const ppapi::host::ReplyMessageContext& context, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t result); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SendRecvFromError(int32_t result); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SendSendToError(const ppapi::host::ReplyMessageContext& context, 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t result); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_address_reuse_; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_broadcast_; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<net::UDPServerSocket> socket_; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool closed_; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::IOBuffer> recvfrom_buffer_; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::IOBufferWithSize> sendto_buffer_; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::IPEndPoint recvfrom_address_; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t remaining_recv_slots_; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool external_plugin_; 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool private_api_; 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int render_process_id_; 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id_; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(PepperUDPSocketMessageFilter); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_UDP_SOCKET_MESSAGE_FILTER_H_ 131