Index: content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc |
diff --git a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc |
deleted file mode 100644 |
index 633816775f9278152aba2783b884f90cc17f3238..0000000000000000000000000000000000000000 |
--- a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc |
+++ /dev/null |
@@ -1,314 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.h" |
- |
-#include "base/memory/ptr_util.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/content_browser_client.h" |
-#include "content/public/browser/pepper_vpn_provider_resource_host_proxy.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "content/public/browser/site_instance.h" |
-#include "content/public/common/content_client.h" |
-#include "ppapi/host/dispatch_host_message.h" |
-#include "ppapi/proxy/ppapi_messages.h" |
- |
-namespace { |
- |
-// Shared memory buffer configuration. |
-const size_t kMaxBufferedPackets = 128; |
-const size_t kMaxPacketSize = 2048; // 2 KB |
-const size_t kBufferSize = kMaxBufferedPackets * kMaxPacketSize; // 256 KB |
- |
-class PepperVpnProviderResourceHostProxyImpl |
- : public content::PepperVpnProviderResourceHostProxy { |
- public: |
- explicit PepperVpnProviderResourceHostProxyImpl( |
- base::WeakPtr<content::PepperVpnProviderMessageFilter> |
- vpn_message_filter); |
- |
- void SendOnPacketReceived(const std::vector<char>& packet) override; |
- void SendOnUnbind() override; |
- |
- private: |
- base::WeakPtr<content::PepperVpnProviderMessageFilter> vpn_message_filter_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PepperVpnProviderResourceHostProxyImpl); |
-}; |
- |
-PepperVpnProviderResourceHostProxyImpl::PepperVpnProviderResourceHostProxyImpl( |
- base::WeakPtr<content::PepperVpnProviderMessageFilter> vpn_message_filter) |
- : vpn_message_filter_(vpn_message_filter) {} |
- |
-void PepperVpnProviderResourceHostProxyImpl::SendOnPacketReceived( |
- const std::vector<char>& packet) { |
- if (vpn_message_filter_) |
- vpn_message_filter_->SendOnPacketReceived(packet); |
-} |
- |
-void PepperVpnProviderResourceHostProxyImpl::SendOnUnbind() { |
- if (vpn_message_filter_) |
- vpn_message_filter_->SendOnUnbind(); |
-} |
- |
-} // namespace |
- |
-namespace content { |
- |
-PepperVpnProviderMessageFilter::PepperVpnProviderMessageFilter( |
- BrowserPpapiHostImpl* host, |
- PP_Instance instance) |
- : browser_context_(nullptr), bound_(false), weak_factory_(this) { |
- DCHECK(host); |
- |
- document_url_ = host->GetDocumentURLForInstance(instance); |
- |
- int render_process_id, unused; |
- bool result = |
- host->GetRenderFrameIDsForInstance(instance, &render_process_id, &unused); |
- DCHECK(result); |
- |
- RenderProcessHost* render_process_host = |
- RenderProcessHost::FromID(render_process_id); |
- DCHECK(render_process_host); |
- |
- browser_context_ = render_process_host->GetBrowserContext(); |
- |
- vpn_service_proxy_ = |
- content::GetContentClient()->browser()->GetVpnServiceProxy( |
- browser_context_); |
-} |
- |
-PepperVpnProviderMessageFilter::~PepperVpnProviderMessageFilter() { |
- if (bound_ && resource_host()) { |
- resource_host()->host()->SendUnsolicitedReply( |
- resource_host()->pp_resource(), PpapiPluginMsg_VpnProvider_OnUnbind()); |
- } |
-} |
- |
-scoped_refptr<base::TaskRunner> |
-PepperVpnProviderMessageFilter::OverrideTaskRunnerForMessage( |
- const IPC::Message& message) { |
- switch (message.type()) { |
- case PpapiHostMsg_VpnProvider_Bind::ID: |
- case PpapiHostMsg_VpnProvider_SendPacket::ID: |
- case PpapiHostMsg_VpnProvider_OnPacketReceivedReply::ID: |
- return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); |
- } |
- return nullptr; |
-} |
- |
-int32_t PepperVpnProviderMessageFilter::OnResourceMessageReceived( |
- const IPC::Message& msg, |
- ppapi::host::HostMessageContext* context) { |
- PPAPI_BEGIN_MESSAGE_MAP(PepperVpnProviderMessageFilter, msg) |
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VpnProvider_Bind, OnBind) |
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VpnProvider_SendPacket, |
- OnSendPacket) |
- PPAPI_DISPATCH_HOST_RESOURCE_CALL( |
- PpapiHostMsg_VpnProvider_OnPacketReceivedReply, OnPacketReceivedReply) |
- PPAPI_END_MESSAGE_MAP() |
- return PP_ERROR_FAILED; |
-} |
- |
-void PepperVpnProviderMessageFilter::SendOnPacketReceived( |
- const std::vector<char>& packet) { |
- if (packet.size() == 0 || packet.size() > kMaxPacketSize) |
- return; |
- |
- uint32_t id; |
- if (recv_packet_buffer_ && recv_packet_buffer_->GetAvailable(&id)) { |
- recv_packet_buffer_->SetAvailable(id, false); |
- DoPacketReceived(packet, id); |
- } else { |
- received_packets_.push(packet); |
- } |
-} |
- |
-void PepperVpnProviderMessageFilter::SendOnUnbind() { |
- configuration_name_.clear(); |
- configuration_id_.clear(); |
- bound_ = false; |
- |
- send_packet_buffer_.reset(); |
- recv_packet_buffer_.reset(); |
- |
- if (resource_host()) { |
- resource_host()->host()->SendUnsolicitedReply( |
- resource_host()->pp_resource(), PpapiPluginMsg_VpnProvider_OnUnbind()); |
- } |
-} |
- |
-int32_t PepperVpnProviderMessageFilter::OnBind( |
- ppapi::host::HostMessageContext* context, |
- const std::string& configuration_id, |
- const std::string& configuration_name) { |
- if (!vpn_service_proxy_) |
- return PP_ERROR_FAILED; |
- if (!content::GetContentClient()->browser()->IsPepperVpnProviderAPIAllowed( |
- browser_context_, document_url_)) { |
- LOG(ERROR) << "Host " << document_url_.host() |
- << " cannot use vpnProvider API"; |
- return PP_ERROR_NOACCESS; |
- } |
- |
- configuration_id_ = configuration_id; |
- configuration_name_ = configuration_name; |
- |
- return DoBind(base::Bind(&PepperVpnProviderMessageFilter::OnBindSuccess, |
- weak_factory_.GetWeakPtr(), |
- context->MakeReplyMessageContext()), |
- base::Bind(&PepperVpnProviderMessageFilter::OnBindFailure, |
- weak_factory_.GetWeakPtr(), |
- context->MakeReplyMessageContext())); |
-} |
- |
-int32_t PepperVpnProviderMessageFilter::OnSendPacket( |
- ppapi::host::HostMessageContext* context, |
- uint32_t packet_size, |
- uint32_t id) { |
- if (!vpn_service_proxy_) |
- return PP_ERROR_FAILED; |
- if (packet_size > kMaxPacketSize) |
- return PP_ERROR_MESSAGE_TOO_BIG; |
- |
- char* packet_pointer = static_cast<char*>(send_packet_buffer_->GetBuffer(id)); |
- std::vector<char> packet(packet_pointer, packet_pointer + packet_size); |
- |
- return DoSendPacket( |
- packet, base::Bind(&PepperVpnProviderMessageFilter::OnSendPacketSuccess, |
- weak_factory_.GetWeakPtr(), |
- context->MakeReplyMessageContext(), id), |
- base::Bind(&PepperVpnProviderMessageFilter::OnSendPacketFailure, |
- weak_factory_.GetWeakPtr(), context->MakeReplyMessageContext(), |
- id)); |
-} |
- |
-int32_t PepperVpnProviderMessageFilter::OnPacketReceivedReply( |
- ppapi::host::HostMessageContext* context, |
- uint32_t id) { |
- if (!received_packets_.empty()) { |
- DoPacketReceived(received_packets_.front(), id); |
- received_packets_.pop(); |
- } else { |
- recv_packet_buffer_->SetAvailable(id, true); |
- } |
- |
- return PP_OK; |
-} |
- |
-int32_t PepperVpnProviderMessageFilter::DoBind( |
- SuccessCallback success_callback, |
- FailureCallback failure_callback) { |
- // Initialize shared memory |
- if (!send_packet_buffer_ || !recv_packet_buffer_) { |
- std::unique_ptr<base::SharedMemory> send_buffer(new base::SharedMemory); |
- std::unique_ptr<base::SharedMemory> recv_buffer(new base::SharedMemory); |
- |
- if (!send_buffer->CreateAndMapAnonymous(kBufferSize) || |
- !recv_buffer->CreateAndMapAnonymous(kBufferSize)) |
- return PP_ERROR_NOMEMORY; |
- |
- send_packet_buffer_ = base::MakeUnique<ppapi::VpnProviderSharedBuffer>( |
- kMaxBufferedPackets, kMaxPacketSize, std::move(send_buffer)); |
- recv_packet_buffer_ = base::MakeUnique<ppapi::VpnProviderSharedBuffer>( |
- kMaxBufferedPackets, kMaxPacketSize, std::move(recv_buffer)); |
- } |
- |
- vpn_service_proxy_->Bind( |
- document_url_.host(), configuration_id_, configuration_name_, |
- success_callback, failure_callback, |
- base::MakeUnique<PepperVpnProviderResourceHostProxyImpl>( |
- weak_factory_.GetWeakPtr())); |
- |
- return PP_OK_COMPLETIONPENDING; |
-} |
- |
-void PepperVpnProviderMessageFilter::OnBindSuccess( |
- const ppapi::host::ReplyMessageContext& context) { |
- bound_ = true; |
- |
- context.params.AppendHandle(ppapi::proxy::SerializedHandle( |
- send_packet_buffer_->GetHandle(), kBufferSize)); |
- context.params.AppendHandle(ppapi::proxy::SerializedHandle( |
- recv_packet_buffer_->GetHandle(), kBufferSize)); |
- |
- OnBindReply(context, PP_OK); |
-} |
- |
-void PepperVpnProviderMessageFilter::OnBindFailure( |
- const ppapi::host::ReplyMessageContext& context, |
- const std::string& error_name, |
- const std::string& error_message) { |
- LOG(ERROR) << "PepperVpnProviderMessageFilter::OnBindFailure(): " |
- << "error_name: " |
- << "\"" << error_name << "\", " |
- << "error_message: " |
- << "\"" << error_message << "\""; |
- |
- // Clear buffers on error. |
- send_packet_buffer_.reset(); |
- recv_packet_buffer_.reset(); |
- |
- OnBindReply(context, PP_ERROR_FAILED); |
-} |
- |
-void PepperVpnProviderMessageFilter::OnBindReply( |
- const ppapi::host::ReplyMessageContext& context, |
- int32_t reply) { |
- SendReply(context, PpapiPluginMsg_VpnProvider_BindReply( |
- kMaxBufferedPackets, kMaxPacketSize, reply)); |
-} |
- |
-int32_t PepperVpnProviderMessageFilter::DoSendPacket( |
- const std::vector<char>& packet, |
- SuccessCallback success_callback, |
- FailureCallback failure_callback) { |
- vpn_service_proxy_->SendPacket(document_url_.host(), packet, success_callback, |
- failure_callback); |
- return PP_OK_COMPLETIONPENDING; |
-} |
- |
-void PepperVpnProviderMessageFilter::OnSendPacketSuccess( |
- const ppapi::host::ReplyMessageContext& context, |
- uint32_t id) { |
- OnSendPacketReply(context, id); |
-} |
- |
-void PepperVpnProviderMessageFilter::OnSendPacketFailure( |
- const ppapi::host::ReplyMessageContext& context, |
- uint32_t id, |
- const std::string& error_name, |
- const std::string& error_message) { |
- LOG(ERROR) << "PepperVpnProviderMessageFilter::OnSendPacketFailure(): " |
- << "error_name: " |
- << "\"" << error_name << "\", " |
- << "error_message: " |
- << "\"" << error_message << "\""; |
- OnSendPacketReply(context, id); |
-} |
- |
-void PepperVpnProviderMessageFilter::OnSendPacketReply( |
- const ppapi::host::ReplyMessageContext& context, |
- uint32_t id) { |
- SendReply(context, PpapiPluginMsg_VpnProvider_SendPacketReply(id)); |
-} |
- |
-void PepperVpnProviderMessageFilter::DoPacketReceived( |
- const std::vector<char>& packet, |
- uint32_t id) { |
- uint32_t packet_size = base::checked_cast<uint32_t>(packet.size()); |
- DCHECK_GT(packet_size, 0U); |
- |
- const void* packet_pointer = &packet.front(); |
- memcpy(recv_packet_buffer_->GetBuffer(id), packet_pointer, packet_size); |
- |
- if (resource_host()) { |
- resource_host()->host()->SendUnsolicitedReply( |
- resource_host()->pp_resource(), |
- PpapiPluginMsg_VpnProvider_OnPacketReceived(packet_size, id)); |
- } |
-} |
- |
-} // namespace content |