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 1af7b97e42865684e3aceddaf42ecf9f31ea6aaa..381735c824c62e0de584399de29d8e92440631f6 100644 |
--- a/content/browser/renderer_host/pepper/pepper_message_filter.cc |
+++ b/content/browser/renderer_host/pepper/pepper_message_filter.cc |
@@ -22,6 +22,7 @@ |
#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/pepper/pepper_utils.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" |
@@ -30,7 +31,6 @@ |
#include "content/public/browser/content_browser_client.h" |
#include "content/public/browser/font_list_async.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" |
@@ -70,17 +70,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(); |
@@ -89,10 +89,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), |
@@ -100,24 +100,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); |
} |
@@ -319,8 +319,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, |
+ PepperUtils::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)); |
@@ -422,25 +424,17 @@ void PepperMessageFilter::OnUDPSetBoolSocketFeature( |
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; |
- } |
+ iter->second->SetBoolSocketFeature(name, value); |
} |
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)); |
+ bool allowed = CanUseSocketAPIs( |
+ routing_id, |
+ PepperUtils::CreateSocketPermissionRequest( |
+ content::SocketPermissionRequest::UDP_BIND, addr)); |
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
base::Bind(&PepperMessageFilter::DoUDPBind, this, |
allowed, routing_id, socket_id, addr)); |
@@ -460,7 +454,7 @@ void PepperMessageFilter::DoUDPBind(bool allowed, |
if (routing_id == iter->second->routing_id() && allowed) |
iter->second->Bind(addr); |
else |
- iter->second->SendBindACKError(); |
+ iter->second->SendBindError(); |
} |
void PepperMessageFilter::OnUDPRecvFrom(uint32 socket_id, int32_t num_bytes) { |
@@ -478,8 +472,10 @@ void PepperMessageFilter::OnUDPSendTo(int32 routing_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)); |
+ bool allowed = CanUseSocketAPIs( |
+ routing_id, |
+ PepperUtils::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)); |
@@ -501,7 +497,7 @@ void PepperMessageFilter::DoUDPSendTo(bool allowed, |
if (routing_id == iter->second->routing_id() && allowed) |
iter->second->SendTo(data, addr); |
else |
- iter->second->SendSendToACKError(); |
+ iter->second->SendSendToError(); |
} |
void PepperMessageFilter::OnUDPClose(uint32 socket_id) { |
@@ -523,8 +519,10 @@ void PepperMessageFilter::OnTCPServerListen(int32 routing_id, |
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, |
+ PepperUtils::CreateSocketPermissionRequest( |
+ content::SocketPermissionRequest::TCP_LISTEN, addr)); |
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
base::Bind(&PepperMessageFilter::DoTCPServerListen, |
this, |
@@ -671,7 +669,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; |
@@ -684,7 +682,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; |
@@ -779,46 +777,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 PepperUtils::CanUseSocketAPIs(process_type_, |
+ params, |
+ render_view_host); |
} |
void PepperMessageFilter::GetAndSendNetworkList() { |