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

Unified Diff: content/renderer/pepper_plugin_delegate_impl.cc

Issue 9283022: Exposed Listen and Accept methods to plugin. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Added comment, fixed StopListening. Created 8 years, 10 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/renderer/pepper_plugin_delegate_impl.cc
diff --git a/content/renderer/pepper_plugin_delegate_impl.cc b/content/renderer/pepper_plugin_delegate_impl.cc
index ae2b6df9be61c8f50aa4fb794be48eae8a9c1a58..9fced127becaff942e6f7f91d7550bb9811bb56d 100644
--- a/content/renderer/pepper_plugin_delegate_impl.cc
+++ b/content/renderer/pepper_plugin_delegate_impl.cc
@@ -5,7 +5,6 @@
#include "content/renderer/pepper_plugin_delegate_impl.h"
#include <cmath>
-#include <queue>
#include "base/bind.h"
#include "base/callback.h"
@@ -76,6 +75,7 @@
#include "webkit/plugins/ppapi/ppb_broker_impl.h"
#include "webkit/plugins/ppapi/ppb_flash_impl.h"
#include "webkit/plugins/ppapi/ppb_flash_net_connector_impl.h"
+#include "webkit/plugins/ppapi/ppb_tcp_server_socket_private_impl.h"
#include "webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h"
#include "webkit/plugins/ppapi/ppb_udp_socket_private_impl.h"
#include "webkit/plugins/ppapi/resource_helper.h"
@@ -1663,7 +1663,7 @@ void PepperPluginDelegateImpl::TCPSocketConnect(
uint32 socket_id,
const std::string& host,
uint16_t port) {
- tcp_sockets_.AddWithID(socket, socket_id);
+ RegisterTCPSocket(socket, socket_id);
render_view_->Send(
new PpapiHostMsg_PPBTCPSocket_Connect(socket_id, host, port));
}
@@ -1672,7 +1672,7 @@ void PepperPluginDelegateImpl::TCPSocketConnectWithNetAddress(
webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
uint32 socket_id,
const PP_NetAddress_Private& addr) {
- tcp_sockets_.AddWithID(socket, socket_id);
+ RegisterTCPSocket(socket, socket_id);
render_view_->Send(
new PpapiHostMsg_PPBTCPSocket_ConnectWithNetAddress(socket_id, addr));
}
@@ -1707,6 +1707,12 @@ void PepperPluginDelegateImpl::TCPSocketDisconnect(uint32 socket_id) {
tcp_sockets_.Remove(socket_id);
}
+void PepperPluginDelegateImpl::RegisterTCPSocket(
+ webkit::ppapi::PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id) {
+ tcp_sockets_.AddWithID(socket, socket_id);
+}
+
uint32 PepperPluginDelegateImpl::UDPSocketCreate() {
if (!CanUseSocketAPIs())
return 0;
@@ -1748,6 +1754,38 @@ void PepperPluginDelegateImpl::UDPSocketClose(uint32 socket_id) {
udp_sockets_.Remove(socket_id);
}
+void PepperPluginDelegateImpl::TCPServerSocketListen(
+ webkit::ppapi::PPB_TCPServerSocket_Private_Impl* socket,
+ uint32 temp_socket_id,
+ const PP_NetAddress_Private& addr,
+ int32_t backlog) {
+ uninitialized_tcp_server_sockets_.AddWithID(socket, temp_socket_id);
+ render_view_->Send(
+ new PpapiHostMsg_PPBTCPServerSocket_Listen(
+ render_view_->routing_id(), 0, temp_socket_id, addr, backlog));
+}
+
+void PepperPluginDelegateImpl::TCPServerSocketAccept(uint32 real_socket_id) {
+ DCHECK(tcp_server_sockets_.Lookup(real_socket_id));
+ render_view_->Send(new PpapiHostMsg_PPBTCPServerSocket_Accept(
+ real_socket_id));
+}
+
+void PepperPluginDelegateImpl::TCPServerSocketStopListening(
+ uint32 real_socket_id,
+ uint32 temp_socket_id) {
+ if (real_socket_id == 0) {
+ if (uninitialized_tcp_server_sockets_.Lookup(temp_socket_id)) {
+ // Pending Listen request.
+ uninitialized_tcp_server_sockets_.Remove(temp_socket_id);
+ }
+ } else {
+ render_view_->Send(
+ new PpapiHostMsg_PPBTCPServerSocket_Destroy(real_socket_id));
+ tcp_server_sockets_.Remove(real_socket_id);
+ }
+}
+
int32_t PepperPluginDelegateImpl::ShowContextMenu(
webkit::ppapi::PluginInstance* instance,
webkit::ppapi::PPB_Flash_Menu_Impl* menu,
@@ -1978,6 +2016,10 @@ bool PepperPluginDelegateImpl::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_RecvFromACK,
OnUDPSocketRecvFromACK)
IPC_MESSAGE_HANDLER(PpapiMsg_PPBUDPSocket_SendToACK, OnUDPSocketSendToACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPServerSocket_ListenACK,
+ OnTCPServerSocketListenACK)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPServerSocket_AcceptACK,
+ OnTCPServerSocketAcceptACK)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -1999,6 +2041,8 @@ void PepperPluginDelegateImpl::OnTCPSocketConnectACK(
tcp_sockets_.Lookup(socket_id);
if (socket)
socket->OnConnectCompleted(succeeded, local_addr, remote_addr);
+ if (!succeeded)
+ tcp_sockets_.Remove(socket_id);
}
void PepperPluginDelegateImpl::OnTCPSocketSSLHandshakeACK(
@@ -2038,6 +2082,8 @@ void PepperPluginDelegateImpl::OnUDPSocketBindACK(uint32 plugin_dispatcher_id,
udp_sockets_.Lookup(socket_id);
if (socket)
socket->OnBindCompleted(succeeded);
+ if (!succeeded)
+ udp_sockets_.Remove(socket_id);
}
void PepperPluginDelegateImpl::OnUDPSocketRecvFromACK(
@@ -2062,6 +2108,43 @@ void PepperPluginDelegateImpl::OnUDPSocketSendToACK(uint32 plugin_dispatcher_id,
socket->OnSendToCompleted(succeeded, bytes_written);
}
+void PepperPluginDelegateImpl::OnTCPServerSocketListenACK(
+ uint32 plugin_dispatcher_id,
+ uint32 real_socket_id,
+ uint32 temp_socket_id,
+ int32_t status) {
+ webkit::ppapi::PPB_TCPServerSocket_Private_Impl* socket =
+ uninitialized_tcp_server_sockets_.Lookup(temp_socket_id);
+ if (socket == NULL) {
+ // StopListening was called before completion of Listen.
+ render_view_->Send(
+ new PpapiHostMsg_PPBTCPServerSocket_Destroy(real_socket_id));
+ } else {
+ uninitialized_tcp_server_sockets_.Remove(temp_socket_id);
+
+ if (status == PP_OK)
+ tcp_server_sockets_.AddWithID(socket, real_socket_id);
+ socket->OnListenCompleted(real_socket_id, status);
+ }
+}
+
+void PepperPluginDelegateImpl::OnTCPServerSocketAcceptACK(
+ uint32 plugin_dispatcher_id,
+ uint32 real_server_socket_id,
+ uint32 accepted_socket_id,
+ const PP_NetAddress_Private& local_addr,
+ const PP_NetAddress_Private& remote_addr) {
+ webkit::ppapi::PPB_TCPServerSocket_Private_Impl* socket =
+ tcp_server_sockets_.Lookup(real_server_socket_id);
+ if (socket) {
+ bool succeeded = accepted_socket_id != 0;
+ socket->OnAcceptCompleted(succeeded,
+ accepted_socket_id,
+ local_addr,
+ remote_addr);
+ }
+}
+
int PepperPluginDelegateImpl::GetRoutingId() const {
return render_view_->routing_id();
}

Powered by Google App Engine
This is Rietveld 408576698