| 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() {
|
|
|