Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Unified Diff: content/browser/renderer_host/pepper/pepper_message_filter.cc

Issue 11441012: PPB_UDPSocket_Private is switched to the new Pepper proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/pepper/pepper_message_filter.cc
diff --git a/content/browser/renderer_host/pepper/pepper_message_filter.cc b/content/browser/renderer_host/pepper/pepper_message_filter.cc
index 648b3a31470c76bb5e802dcff7b92efacd7829fb..c58eb4aafc1db245e203578f5c1beb213b1fd671 100644
--- a/content/browser/renderer_host/pepper/pepper_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_message_filter.cc
@@ -18,9 +18,9 @@
#include "base/threading/worker_pool.h"
#include "build/build_config.h"
#include "content/browser/renderer_host/pepper/pepper_lookup_request.h"
+#include "content/browser/renderer_host/pepper/pepper_socket_utils.h"
#include "content/browser/renderer_host/pepper/pepper_tcp_server_socket.h"
#include "content/browser/renderer_host/pepper/pepper_tcp_socket.h"
-#include "content/browser/renderer_host/pepper/pepper_udp_socket.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/common/pepper_messages.h"
@@ -28,7 +28,6 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/resource_context.h"
-#include "content/public/browser/site_instance.h"
#include "content/public/common/content_client.h"
#include "net/base/address_family.h"
#include "net/base/address_list.h"
@@ -68,17 +67,17 @@ void CreateNetAddressListFromAddressList(
} // namespace
-PepperMessageFilter::PepperMessageFilter(ProcessType type,
+PepperMessageFilter::PepperMessageFilter(ProcessType process_type,
int process_id,
BrowserContext* browser_context)
- : process_type_(type),
+ : process_type_(process_type),
permissions_(),
process_id_(process_id),
nacl_render_view_id_(0),
resource_context_(browser_context->GetResourceContext()),
host_resolver_(NULL),
next_socket_id_(1) {
- DCHECK(type == RENDERER);
+ DCHECK(process_type == PROCESS_TYPE_RENDERER);
DCHECK(browser_context);
// Keep BrowserContext data in FILE-thread friendly storage.
browser_path_ = browser_context->GetPath();
@@ -87,10 +86,10 @@ PepperMessageFilter::PepperMessageFilter(ProcessType type,
}
PepperMessageFilter::PepperMessageFilter(
- ProcessType type,
+ ProcessType process_type,
const ppapi::PpapiPermissions& permissions,
net::HostResolver* host_resolver)
- : process_type_(type),
+ : process_type_(process_type),
permissions_(permissions),
process_id_(0),
nacl_render_view_id_(0),
@@ -98,24 +97,24 @@ PepperMessageFilter::PepperMessageFilter(
host_resolver_(host_resolver),
next_socket_id_(1),
incognito_(false) {
- DCHECK(type == PLUGIN);
+ DCHECK(process_type == PROCESS_TYPE_PPAPI_PLUGIN);
DCHECK(host_resolver);
}
PepperMessageFilter::PepperMessageFilter(
- ProcessType type,
+ ProcessType process_type,
const ppapi::PpapiPermissions& permissions,
net::HostResolver* host_resolver,
int process_id,
int render_view_id)
- : process_type_(type),
+ : process_type_(process_type),
permissions_(permissions),
process_id_(process_id),
nacl_render_view_id_(render_view_id),
resource_context_(NULL),
host_resolver_(host_resolver),
next_socket_id_(1) {
- DCHECK(type == NACL);
+ DCHECK(process_type == PROCESS_TYPE_NACL_LOADER);
DCHECK(host_resolver);
}
@@ -125,8 +124,6 @@ void PepperMessageFilter::OverrideThreadForMessage(
if (message.type() == PpapiHostMsg_PPBTCPServerSocket_Listen::ID ||
message.type() == PpapiHostMsg_PPBTCPSocket_Connect::ID ||
message.type() == PpapiHostMsg_PPBTCPSocket_ConnectWithNetAddress::ID ||
- message.type() == PpapiHostMsg_PPBUDPSocket_Bind::ID ||
- message.type() == PpapiHostMsg_PPBUDPSocket_SendTo::ID ||
message.type() == PpapiHostMsg_PPBHostResolver_Resolve::ID) {
*thread = BrowserThread::UI;
}
@@ -147,15 +144,6 @@ bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg,
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTCPSocket_Write, OnTCPWrite)
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTCPSocket_Disconnect, OnTCPDisconnect)
- // UDP messages.
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBUDPSocket_Create, OnUDPCreate)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBUDPSocket_SetBoolSocketFeature,
- OnUDPSetBoolSocketFeature)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBUDPSocket_Bind, OnUDPBind)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBUDPSocket_RecvFrom, OnUDPRecvFrom)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBUDPSocket_SendTo, OnUDPSendTo)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBUDPSocket_Close, OnUDPClose)
-
// TCP Server messages.
IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBTCPServerSocket_Listen,
OnTCPServerListen)
@@ -282,8 +270,10 @@ void PepperMessageFilter::OnTCPConnectWithNetAddress(
uint32 socket_id,
const PP_NetAddress_Private& net_addr) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionRequest(
- content::SocketPermissionRequest::TCP_CONNECT, net_addr));
+ bool allowed = CanUseSocketAPIs(
+ routing_id,
+ pepper_socket_utils::CreateSocketPermissionRequest(
+ content::SocketPermissionRequest::TCP_CONNECT, net_addr));
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&PepperMessageFilter::DoTCPConnectWithNetAddress, this,
allowed, routing_id, socket_id, net_addr));
@@ -357,137 +347,16 @@ void PepperMessageFilter::OnTCPDisconnect(uint32 socket_id) {
tcp_sockets_.erase(iter);
}
-void PepperMessageFilter::OnUDPCreate(int32 routing_id,
- uint32 plugin_dispatcher_id,
- uint32* socket_id) {
- *socket_id = GenerateSocketID();
- if (*socket_id == kInvalidSocketID)
- return;
-
- udp_sockets_[*socket_id] = linked_ptr<PepperUDPSocket>(
- new PepperUDPSocket(this, routing_id, plugin_dispatcher_id, *socket_id));
-}
-
-void PepperMessageFilter::OnUDPSetBoolSocketFeature(
- int32 routing_id,
- uint32 socket_id,
- int32_t name,
- bool value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
- if (iter == udp_sockets_.end()) {
- NOTREACHED();
- return;
- }
-
- if (routing_id != iter->second->routing_id()) {
- NOTREACHED();
- return;
- }
-
- switch(static_cast<PP_UDPSocketFeature_Private>(name)) {
- case PP_UDPSOCKETFEATURE_ADDRESS_REUSE:
- iter->second->AllowAddressReuse(value);
- break;
- case PP_UDPSOCKETFEATURE_BROADCAST:
- iter->second->AllowBroadcast(value);
- break;
- default:
- NOTREACHED();
- break;
- }
-}
-
-void PepperMessageFilter::OnUDPBind(int32 routing_id,
- uint32 socket_id,
- const PP_NetAddress_Private& addr) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionRequest(
- content::SocketPermissionRequest::UDP_BIND, addr));
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&PepperMessageFilter::DoUDPBind, this,
- allowed, routing_id, socket_id, addr));
-}
-
-void PepperMessageFilter::DoUDPBind(bool allowed,
- int32 routing_id,
- uint32 socket_id,
- const PP_NetAddress_Private& addr) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
- if (iter == udp_sockets_.end()) {
- NOTREACHED();
- return;
- }
-
- if (routing_id == iter->second->routing_id() && allowed)
- iter->second->Bind(addr);
- else
- iter->second->SendBindACKError();
-}
-
-void PepperMessageFilter::OnUDPRecvFrom(uint32 socket_id, int32_t num_bytes) {
- UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
- if (iter == udp_sockets_.end()) {
- NOTREACHED();
- return;
- }
-
- iter->second->RecvFrom(num_bytes);
-}
-
-void PepperMessageFilter::OnUDPSendTo(int32 routing_id,
- uint32 socket_id,
- const std::string& data,
- const PP_NetAddress_Private& addr) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionRequest(
- content::SocketPermissionRequest::UDP_SEND_TO, addr));
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&PepperMessageFilter::DoUDPSendTo, this,
- allowed, routing_id, socket_id, data, addr));
-
-}
-
-void PepperMessageFilter::DoUDPSendTo(bool allowed,
- int32 routing_id,
- uint32 socket_id,
- const std::string& data,
- const PP_NetAddress_Private& addr) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
- if (iter == udp_sockets_.end()) {
- NOTREACHED();
- return;
- }
-
- if (routing_id == iter->second->routing_id() && allowed)
- iter->second->SendTo(data, addr);
- else
- iter->second->SendSendToACKError();
-}
-
-void PepperMessageFilter::OnUDPClose(uint32 socket_id) {
- UDPSocketMap::iterator iter = udp_sockets_.find(socket_id);
- if (iter == udp_sockets_.end()) {
- NOTREACHED();
- return;
- }
-
- // Destroy the UDPSocket instance will cancel any pending completion
- // callback. From this point on, there won't be any messages associated with
- // this socket sent to the plugin side.
- udp_sockets_.erase(iter);
-}
-
void PepperMessageFilter::OnTCPServerListen(int32 routing_id,
uint32 plugin_dispatcher_id,
PP_Resource socket_resource,
const PP_NetAddress_Private& addr,
int32_t backlog) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- bool allowed = CanUseSocketAPIs(routing_id, CreateSocketPermissionRequest(
- content::SocketPermissionRequest::TCP_LISTEN, addr));
+ bool allowed = CanUseSocketAPIs(
+ routing_id,
+ pepper_socket_utils::CreateSocketPermissionRequest(
+ content::SocketPermissionRequest::TCP_LISTEN, addr));
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&PepperMessageFilter::DoTCPServerListen,
this,
@@ -552,8 +421,10 @@ void PepperMessageFilter::OnHostResolverResolve(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
content::SocketPermissionRequest request(
content::SocketPermissionRequest::NONE, "", 0);
- if (process_type_ == NACL && !CanUseSocketAPIs(routing_id, request))
+ if (process_type_ == PROCESS_TYPE_NACL_LOADER &&
+ !CanUseSocketAPIs(routing_id, request)) {
return;
+ }
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
@@ -656,7 +527,7 @@ bool PepperMessageFilter::SendHostResolverResolveACKError(
void PepperMessageFilter::OnNetworkMonitorStart(uint32 plugin_dispatcher_id) {
// Support all in-process plugins, and ones with "private" permissions.
- if (process_type_ != RENDERER &&
+ if (process_type_ != PROCESS_TYPE_RENDERER &&
!permissions_.HasPermission(ppapi::PERMISSION_PRIVATE))
return;
@@ -669,7 +540,7 @@ void PepperMessageFilter::OnNetworkMonitorStart(uint32 plugin_dispatcher_id) {
void PepperMessageFilter::OnNetworkMonitorStop(uint32 plugin_dispatcher_id) {
// Support all in-process plugins, and ones with "private" permissions.
- if (process_type_ != RENDERER &&
+ if (process_type_ != PROCESS_TYPE_RENDERER &&
!permissions_.HasPermission(ppapi::PERMISSION_PRIVATE))
return;
@@ -698,10 +569,8 @@ uint32 PepperMessageFilter::GenerateSocketID() {
// PepperSocketMessageHandler object, because for each plugin or renderer
// process, there is at most one PepperMessageFilter (in other words, at most
// one PepperSocketMessageHandler) talking to it.
- if (tcp_sockets_.size() + udp_sockets_.size() + tcp_server_sockets_.size() >=
- kMaxSocketsAllowed) {
+ if (tcp_sockets_.size() + tcp_server_sockets_.size() >= kMaxSocketsAllowed)
return kInvalidSocketID;
- }
uint32 socket_id = kInvalidSocketID;
do {
@@ -710,7 +579,6 @@ uint32 PepperMessageFilter::GenerateSocketID() {
socket_id = next_socket_id_++;
} while (socket_id == kInvalidSocketID ||
tcp_sockets_.find(socket_id) != tcp_sockets_.end() ||
- udp_sockets_.find(socket_id) != udp_sockets_.end() ||
tcp_server_sockets_.find(socket_id) != tcp_server_sockets_.end());
return socket_id;
@@ -719,46 +587,19 @@ uint32 PepperMessageFilter::GenerateSocketID() {
bool PepperMessageFilter::CanUseSocketAPIs(int32 render_id,
const content::SocketPermissionRequest& params) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (process_type_ == PLUGIN) {
- // Always allow socket APIs for out-process plugins (except NACL).
- return true;
- }
+
// NACL plugins always get their own PepperMessageFilter, initialized with
// a render view id. Use this instead of the one that came with the message,
// which is actually an API ID.
- if (process_type_ == NACL)
+ if (process_type_ == PROCESS_TYPE_NACL_LOADER)
render_id = nacl_render_view_id_;
RenderViewHostImpl* render_view_host =
RenderViewHostImpl::FromID(process_id_, render_id);
- if (!render_view_host)
- return false;
-
- SiteInstance* site_instance = render_view_host->GetSiteInstance();
- if (!site_instance)
- return false;
-
- if (!GetContentClient()->browser()->AllowPepperSocketAPI(
- site_instance->GetBrowserContext(),
- site_instance->GetSiteURL(),
- params)) {
- LOG(ERROR) << "Host " << site_instance->GetSiteURL().host()
- << " cannot use socket API or destination is not allowed";
- return false;
- }
-
- return true;
-}
-content::SocketPermissionRequest
-PepperMessageFilter::CreateSocketPermissionRequest(
- content::SocketPermissionRequest::OperationType type,
- const PP_NetAddress_Private& net_addr) {
- std::string host = NetAddressPrivateImpl::DescribeNetAddress(net_addr, false);
- int port = 0;
- std::vector<unsigned char> address;
- NetAddressPrivateImpl::NetAddressToIPEndPoint(net_addr, &address, &port);
- return content::SocketPermissionRequest(type, host, port);
+ return pepper_socket_utils::CanUseSocketAPIs(process_type_,
+ params,
+ render_view_host);
}
void PepperMessageFilter::GetAndSendNetworkList() {

Powered by Google App Engine
This is Rietveld 408576698