summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 09:49:18 +0000
committerdpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 09:49:18 +0000
commitef5e98e345ffb8baeb16cd2a42d5790ac46df82f (patch)
treec2fa41431793817581638c7f70e7574809839ffa /webkit
parenta19937e746badd301b03df430cb24505292bcd6e (diff)
downloadchromium_src-ef5e98e345ffb8baeb16cd2a42d5790ac46df82f.zip
chromium_src-ef5e98e345ffb8baeb16cd2a42d5790ac46df82f.tar.gz
chromium_src-ef5e98e345ffb8baeb16cd2a42d5790ac46df82f.tar.bz2
Reland 8688002: PPB_TCPSocket_Private/PPB_UDPSocket_Private are exposed to Browser
PPB_{TCP|UDP}Socket_Private interfaces are exposed to Browser process. Added shared (between NaCl and Pepper) tests for both interfaces. BUG=105859 TEST=ui_tests Review URL: http://codereview.chromium.org/8804006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113172 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/glue/webkit_glue.gypi4
-rw-r--r--webkit/plugins/ppapi/mock_plugin_delegate.cc53
-rw-r--r--webkit/plugins/ppapi/mock_plugin_delegate.h24
-rw-r--r--webkit/plugins/ppapi/plugin_delegate.h30
-rw-r--r--webkit/plugins/ppapi/ppb_tcp_socket_private_impl.cc91
-rw-r--r--webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h37
-rw-r--r--webkit/plugins/ppapi/ppb_udp_socket_private_impl.cc71
-rw-r--r--webkit/plugins/ppapi/ppb_udp_socket_private_impl.h34
-rw-r--r--webkit/plugins/ppapi/resource_creation_impl.cc8
9 files changed, 348 insertions, 4 deletions
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index b7097e0..014acc4 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -291,8 +291,12 @@
'../plugins/ppapi/ppb_proxy_impl.h',
'../plugins/ppapi/ppb_scrollbar_impl.cc',
'../plugins/ppapi/ppb_scrollbar_impl.h',
+ '../plugins/ppapi/ppb_tcp_socket_private_impl.cc',
+ '../plugins/ppapi/ppb_tcp_socket_private_impl.h',
'../plugins/ppapi/ppb_text_input_impl.cc',
'../plugins/ppapi/ppb_text_input_impl.h',
+ '../plugins/ppapi/ppb_udp_socket_private_impl.cc',
+ '../plugins/ppapi/ppb_udp_socket_private_impl.h',
'../plugins/ppapi/ppb_uma_private_impl.cc',
'../plugins/ppapi/ppb_uma_private_impl.h',
'../plugins/ppapi/ppb_url_loader_impl.cc',
diff --git a/webkit/plugins/ppapi/mock_plugin_delegate.cc b/webkit/plugins/ppapi/mock_plugin_delegate.cc
index 80594fc..92093a0 100644
--- a/webkit/plugins/ppapi/mock_plugin_delegate.cc
+++ b/webkit/plugins/ppapi/mock_plugin_delegate.cc
@@ -232,6 +232,59 @@ int32_t MockPluginDelegate::ConnectTcpAddress(
return PP_ERROR_FAILED;
}
+uint32 MockPluginDelegate::TCPSocketCreate() {
+ return 0;
+}
+
+void MockPluginDelegate::TCPSocketConnect(PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const std::string& host,
+ uint16_t port) {
+}
+
+void MockPluginDelegate::TCPSocketConnectWithNetAddress(
+ PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const PP_NetAddress_Private& addr) {
+}
+
+void MockPluginDelegate::TCPSocketSSLHandshake(uint32 socket_id,
+ const std::string& server_name,
+ uint16_t server_port) {
+}
+
+void MockPluginDelegate::TCPSocketRead(uint32 socket_id,
+ int32_t bytes_to_read) {
+}
+
+void MockPluginDelegate::TCPSocketWrite(uint32 socket_id,
+ const std::string& buffer) {
+}
+
+void MockPluginDelegate::TCPSocketDisconnect(uint32 socket_id) {
+}
+
+uint32 MockPluginDelegate::UDPSocketCreate() {
+ return 0;
+}
+
+void MockPluginDelegate::UDPSocketBind(PPB_UDPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const PP_NetAddress_Private& addr) {
+}
+
+void MockPluginDelegate::UDPSocketRecvFrom(uint32 socket_id,
+ int32_t num_bytes) {
+}
+
+void MockPluginDelegate::UDPSocketSendTo(uint32 socket_id,
+ const std::string& buffer,
+ const PP_NetAddress_Private& addr) {
+}
+
+void MockPluginDelegate::UDPSocketClose(uint32 socket_id) {
+}
+
int32_t MockPluginDelegate::ShowContextMenu(
PluginInstance* instance,
webkit::ppapi::PPB_Flash_Menu_Impl* menu,
diff --git a/webkit/plugins/ppapi/mock_plugin_delegate.h b/webkit/plugins/ppapi/mock_plugin_delegate.h
index 3670792..b1d3158 100644
--- a/webkit/plugins/ppapi/mock_plugin_delegate.h
+++ b/webkit/plugins/ppapi/mock_plugin_delegate.h
@@ -104,6 +104,30 @@ class MockPluginDelegate : public PluginDelegate {
virtual int32_t ConnectTcpAddress(
webkit::ppapi::PPB_Flash_NetConnector_Impl* connector,
const PP_NetAddress_Private* addr);
+ virtual uint32 TCPSocketCreate();
+ virtual void TCPSocketConnect(PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const std::string& host,
+ uint16_t port);
+ virtual void TCPSocketConnectWithNetAddress(
+ PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const PP_NetAddress_Private& addr);
+ virtual void TCPSocketSSLHandshake(uint32 socket_id,
+ const std::string& server_name,
+ uint16_t server_port);
+ virtual void TCPSocketRead(uint32 socket_id, int32_t bytes_to_read);
+ virtual void TCPSocketWrite(uint32 socket_id, const std::string& buffer);
+ virtual void TCPSocketDisconnect(uint32 socket_id);
+ virtual uint32 UDPSocketCreate();
+ virtual void UDPSocketBind(PPB_UDPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const PP_NetAddress_Private& addr);
+ virtual void UDPSocketRecvFrom(uint32 socket_id, int32_t num_bytes);
+ virtual void UDPSocketSendTo(uint32 socket_id,
+ const std::string& buffer,
+ const PP_NetAddress_Private& addr);
+ virtual void UDPSocketClose(uint32 socket_id);
virtual int32_t ShowContextMenu(
PluginInstance* instance,
webkit::ppapi::PPB_Flash_Menu_Impl* menu,
diff --git a/webkit/plugins/ppapi/plugin_delegate.h b/webkit/plugins/ppapi/plugin_delegate.h
index 65506e7..c45704e 100644
--- a/webkit/plugins/ppapi/plugin_delegate.h
+++ b/webkit/plugins/ppapi/plugin_delegate.h
@@ -78,6 +78,8 @@ class PluginModule;
class PPB_Broker_Impl;
class PPB_Flash_Menu_Impl;
class PPB_Flash_NetConnector_Impl;
+class PPB_TCPSocket_Private_Impl;
+class PPB_UDPSocket_Private_Impl;
// Virtual interface that the browser implements to implement features for
// PPAPI plugins.
@@ -406,6 +408,34 @@ class PluginDelegate {
webkit::ppapi::PPB_Flash_NetConnector_Impl* connector,
const PP_NetAddress_Private* addr) = 0;
+ // For PPB_TCPSocket_Private.
+ virtual uint32 TCPSocketCreate() = 0;
+ virtual void TCPSocketConnect(PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const std::string& host,
+ uint16_t port) = 0;
+ virtual void TCPSocketConnectWithNetAddress(
+ PPB_TCPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const PP_NetAddress_Private& addr) = 0;
+ virtual void TCPSocketSSLHandshake(uint32 socket_id,
+ const std::string& server_name,
+ uint16_t server_port) = 0;
+ virtual void TCPSocketRead(uint32 socket_id, int32_t bytes_to_read) = 0;
+ virtual void TCPSocketWrite(uint32 socket_id, const std::string& buffer) = 0;
+ virtual void TCPSocketDisconnect(uint32 socket_id) = 0;
+
+ // For PPB_UDPSocket_Private.
+ virtual uint32 UDPSocketCreate() = 0;
+ virtual void UDPSocketBind(PPB_UDPSocket_Private_Impl* socket,
+ uint32 socket_id,
+ const PP_NetAddress_Private& addr) = 0;
+ virtual void UDPSocketRecvFrom(uint32 socket_id, int32_t num_bytes) = 0;
+ virtual void UDPSocketSendTo(uint32 socket_id,
+ const std::string& buffer,
+ const PP_NetAddress_Private& addr) = 0;
+ virtual void UDPSocketClose(uint32 socket_id) = 0;
+
// Show the given context menu at the given position (in the plugin's
// coordinates).
virtual int32_t ShowContextMenu(
diff --git a/webkit/plugins/ppapi/ppb_tcp_socket_private_impl.cc b/webkit/plugins/ppapi/ppb_tcp_socket_private_impl.cc
new file mode 100644
index 0000000..61fc83c
--- /dev/null
+++ b/webkit/plugins/ppapi/ppb_tcp_socket_private_impl.cc
@@ -0,0 +1,91 @@
+// Copyright (c) 2011 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 "webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h"
+
+#include "webkit/plugins/ppapi/host_globals.h"
+#include "webkit/plugins/ppapi/plugin_delegate.h"
+#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
+#include "webkit/plugins/ppapi/resource_helper.h"
+
+namespace webkit {
+namespace ppapi {
+
+PPB_TCPSocket_Private_Impl::PPB_TCPSocket_Private_Impl(
+ PP_Instance instance, uint32 socket_id)
+ : ::ppapi::TCPSocketPrivateImpl(instance, socket_id) {
+}
+
+PPB_TCPSocket_Private_Impl::~PPB_TCPSocket_Private_Impl() {
+ Disconnect();
+}
+
+PP_Resource PPB_TCPSocket_Private_Impl::CreateResource(PP_Instance instance) {
+ PluginInstance* plugin_instance = HostGlobals::Get()->GetInstance(instance);
+ if (!plugin_instance)
+ return 0;
+
+ PluginDelegate* plugin_delegate = plugin_instance->delegate();
+ uint32 socket_id = plugin_delegate->TCPSocketCreate();
+ if (!socket_id)
+ return 0;
+
+ return (new PPB_TCPSocket_Private_Impl(instance, socket_id))->GetReference();
+}
+
+void PPB_TCPSocket_Private_Impl::SendConnect(const std::string& host,
+ uint16_t port) {
+ PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!plugin_delegate)
+ return;
+
+ plugin_delegate->TCPSocketConnect(this, socket_id_, host, port);
+}
+
+void PPB_TCPSocket_Private_Impl::SendConnectWithNetAddress(
+ const PP_NetAddress_Private& addr) {
+ PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!plugin_delegate)
+ return;
+
+ plugin_delegate->TCPSocketConnectWithNetAddress(this, socket_id_, addr);
+}
+
+void PPB_TCPSocket_Private_Impl::SendSSLHandshake(
+ const std::string& server_name,
+ uint16_t server_port) {
+ PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!plugin_delegate)
+ return;
+
+ plugin_delegate->TCPSocketSSLHandshake(socket_id_, server_name, server_port);
+}
+
+void PPB_TCPSocket_Private_Impl::SendRead(int32_t bytes_to_read) {
+ PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!plugin_delegate)
+ return;
+
+ plugin_delegate->TCPSocketRead(socket_id_, bytes_to_read);
+}
+
+
+void PPB_TCPSocket_Private_Impl::SendWrite(const std::string& buffer) {
+ PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!plugin_delegate)
+ return;
+
+ plugin_delegate->TCPSocketWrite(socket_id_, buffer);
+}
+
+void PPB_TCPSocket_Private_Impl::SendDisconnect() {
+ PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!plugin_delegate)
+ return;
+
+ plugin_delegate->TCPSocketDisconnect(socket_id_);
+}
+
+} // namespace ppapi
+} // namespace webkit
diff --git a/webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h b/webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h
new file mode 100644
index 0000000..ba86518
--- /dev/null
+++ b/webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h
@@ -0,0 +1,37 @@
+// Copyright (c) 2011 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.
+
+#ifndef WEBKIT_PLUGINS_PPAPI_PPB_TCP_SOCKET_PRIVATE_IMPL_H_
+#define WEBKIT_PLUGINS_PPAPI_PPB_TCP_SOCKET_PRIVATE_IMPL_H_
+
+#include "base/compiler_specific.h"
+#include "ppapi/shared_impl/private/tcp_socket_private_impl.h"
+
+namespace webkit {
+namespace ppapi {
+
+class PPB_TCPSocket_Private_Impl : public ::ppapi::TCPSocketPrivateImpl {
+ public:
+ static PP_Resource CreateResource(PP_Instance instance);
+
+ virtual void SendConnect(const std::string& host, uint16_t port) OVERRIDE;
+ virtual void SendConnectWithNetAddress(
+ const PP_NetAddress_Private& addr) OVERRIDE;
+ virtual void SendSSLHandshake(const std::string& server_name,
+ uint16_t server_port) OVERRIDE;
+ virtual void SendRead(int32_t bytes_to_read) OVERRIDE;
+ virtual void SendWrite(const std::string& buffer) OVERRIDE;
+ virtual void SendDisconnect() OVERRIDE;
+
+ private:
+ PPB_TCPSocket_Private_Impl(PP_Instance instance, uint32 socket_id);
+ virtual ~PPB_TCPSocket_Private_Impl();
+
+ DISALLOW_COPY_AND_ASSIGN(PPB_TCPSocket_Private_Impl);
+};
+
+} // namespace ppapi
+} // namespace webkit
+
+#endif // WEBKIT_PLUGINS_PPAPI_PPB_TCP_SOCKET_PRIVATE_IMPL_H_
diff --git a/webkit/plugins/ppapi/ppb_udp_socket_private_impl.cc b/webkit/plugins/ppapi/ppb_udp_socket_private_impl.cc
new file mode 100644
index 0000000..772746f
--- /dev/null
+++ b/webkit/plugins/ppapi/ppb_udp_socket_private_impl.cc
@@ -0,0 +1,71 @@
+// Copyright (c) 2011 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 "webkit/plugins/ppapi/ppb_udp_socket_private_impl.h"
+
+#include "webkit/plugins/ppapi/host_globals.h"
+#include "webkit/plugins/ppapi/plugin_delegate.h"
+#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
+#include "webkit/plugins/ppapi/resource_helper.h"
+
+namespace webkit {
+namespace ppapi {
+
+PPB_UDPSocket_Private_Impl::PPB_UDPSocket_Private_Impl(
+ PP_Instance instance, uint32 socket_id)
+ : ::ppapi::UDPSocketPrivateImpl(instance, socket_id) {
+}
+
+PPB_UDPSocket_Private_Impl::~PPB_UDPSocket_Private_Impl() {
+ Close();
+}
+
+PP_Resource PPB_UDPSocket_Private_Impl::CreateResource(PP_Instance instance) {
+ PluginInstance* plugin_instance = HostGlobals::Get()->GetInstance(instance);
+ if (!plugin_instance)
+ return 0;
+
+ PluginDelegate* pluign_delegate = plugin_instance->delegate();
+ uint32 socket_id = pluign_delegate->UDPSocketCreate();
+ if (!socket_id)
+ return 0;
+
+ return (new PPB_UDPSocket_Private_Impl(instance, socket_id))->GetReference();
+}
+
+void PPB_UDPSocket_Private_Impl::SendBind(const PP_NetAddress_Private& addr) {
+ PluginDelegate* pluign_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!pluign_delegate)
+ return;
+
+ pluign_delegate->UDPSocketBind(this, socket_id_, addr);
+}
+
+void PPB_UDPSocket_Private_Impl::SendRecvFrom(int32_t num_bytes) {
+ PluginDelegate* pluign_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!pluign_delegate)
+ return;
+
+ pluign_delegate->UDPSocketRecvFrom(socket_id_, num_bytes);
+}
+
+void PPB_UDPSocket_Private_Impl::SendSendTo(const std::string& buffer,
+ const PP_NetAddress_Private& addr) {
+ PluginDelegate* pluign_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!pluign_delegate)
+ return;
+
+ pluign_delegate->UDPSocketSendTo(socket_id_, buffer, addr);
+}
+
+void PPB_UDPSocket_Private_Impl::SendClose() {
+ PluginDelegate* pluign_delegate = ResourceHelper::GetPluginDelegate(this);
+ if (!pluign_delegate)
+ return;
+
+ pluign_delegate->UDPSocketClose(socket_id_);
+}
+
+} // namespace ppapi
+} // namespace webkit
diff --git a/webkit/plugins/ppapi/ppb_udp_socket_private_impl.h b/webkit/plugins/ppapi/ppb_udp_socket_private_impl.h
new file mode 100644
index 0000000..4dbe42d
--- /dev/null
+++ b/webkit/plugins/ppapi/ppb_udp_socket_private_impl.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2011 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.
+
+#ifndef WEBKIT_PLUGINS_PPAPI_PPB_UDP_SOCKET_PRIVATE_IMPL_H_
+#define WEBKIT_PLUGINS_PPAPI_PPB_UDP_SOCKET_PRIVATE_IMPL_H_
+
+#include "base/compiler_specific.h"
+#include "ppapi/shared_impl/private/udp_socket_private_impl.h"
+
+namespace webkit {
+namespace ppapi {
+
+class PPB_UDPSocket_Private_Impl : public ::ppapi::UDPSocketPrivateImpl {
+ public:
+ static PP_Resource CreateResource(PP_Instance instance);
+
+ virtual void SendBind(const PP_NetAddress_Private& addr) OVERRIDE;
+ virtual void SendRecvFrom(int32_t num_bytes) OVERRIDE;
+ virtual void SendSendTo(const std::string& buffer,
+ const PP_NetAddress_Private& addr) OVERRIDE;
+ virtual void SendClose() OVERRIDE;
+
+ private:
+ PPB_UDPSocket_Private_Impl(PP_Instance instance, uint32 socket_id);
+ virtual ~PPB_UDPSocket_Private_Impl();
+
+ DISALLOW_COPY_AND_ASSIGN(PPB_UDPSocket_Private_Impl);
+};
+
+} // namespace ppapi
+} // namespace webkit
+
+#endif // WEBKIT_PLUGINS_PPAPI_PPB_UDP_SOCKET_PRIVATE_IMPL_H_
diff --git a/webkit/plugins/ppapi/resource_creation_impl.cc b/webkit/plugins/ppapi/resource_creation_impl.cc
index ace20f8..d2b57f3 100644
--- a/webkit/plugins/ppapi/resource_creation_impl.cc
+++ b/webkit/plugins/ppapi/resource_creation_impl.cc
@@ -25,7 +25,9 @@
#include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h"
#include "webkit/plugins/ppapi/ppb_image_data_impl.h"
#include "webkit/plugins/ppapi/ppb_scrollbar_impl.h"
+#include "webkit/plugins/ppapi/ppb_tcp_socket_private_impl.h"
#include "webkit/plugins/ppapi/ppb_transport_impl.h"
+#include "webkit/plugins/ppapi/ppb_udp_socket_private_impl.h"
#include "webkit/plugins/ppapi/ppb_url_loader_impl.h"
#include "webkit/plugins/ppapi/ppb_url_request_info_impl.h"
#include "webkit/plugins/ppapi/ppb_video_capture_impl.h"
@@ -233,8 +235,7 @@ PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance,
}
PP_Resource ResourceCreationImpl::CreateTCPSocketPrivate(PP_Instance instance) {
- // Creating TCP socket resource at the renderer side is not supported.
- return 0;
+ return PPB_TCPSocket_Private_Impl::CreateResource(instance);
}
PP_Resource ResourceCreationImpl::CreateTransport(PP_Instance instance,
@@ -246,8 +247,7 @@ PP_Resource ResourceCreationImpl::CreateTransport(PP_Instance instance,
}
PP_Resource ResourceCreationImpl::CreateUDPSocketPrivate(PP_Instance instance) {
- // Creating UDP socket resource at the renderer side is not supported.
- return 0;
+ return PPB_UDPSocket_Private_Impl::CreateResource(instance);
}
PP_Resource ResourceCreationImpl::CreateURLLoader(PP_Instance instance) {