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

Side by Side Diff: content/renderer/pepper/ppb_tcp_server_socket_private_impl.cc

Issue 20777009: A few more cleanups to the pepper code. Dispatch IPCs in the sockets implementations directly by ha… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/pepper/ppb_tcp_server_socket_private_impl.h" 5 #include "content/renderer/pepper/ppb_tcp_server_socket_private_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/renderer/pepper/host_globals.h" 8 #include "content/renderer/pepper/host_globals.h"
9 #include "content/renderer/pepper/pepper_helper_impl.h" 9 #include "content/renderer/pepper/pepper_helper_impl.h"
10 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
10 #include "content/renderer/pepper/ppb_tcp_socket_private_impl.h" 11 #include "content/renderer/pepper/ppb_tcp_socket_private_impl.h"
11 #include "content/renderer/pepper/resource_helper.h" 12 #include "content/renderer/render_thread_impl.h"
13 #include "content/renderer/render_view_impl.h"
12 #include "ppapi/proxy/ppapi_messages.h" 14 #include "ppapi/proxy/ppapi_messages.h"
15 #include "ppapi/thunk/enter.h"
13 16
14 namespace content { 17 namespace content {
15 18
16 PPB_TCPServerSocket_Private_Impl::PPB_TCPServerSocket_Private_Impl( 19 PPB_TCPServerSocket_Private_Impl::PPB_TCPServerSocket_Private_Impl(
17 PP_Instance instance) 20 PP_Instance instance, RenderView* render_view)
18 : ::ppapi::PPB_TCPServerSocket_Shared(instance) { 21 : ::ppapi::PPB_TCPServerSocket_Shared(instance),
22 RenderViewObserver(render_view),
23 routing_id_(RenderThreadImpl::current()->GenerateRoutingID()) {
19 } 24 }
20 25
21 PPB_TCPServerSocket_Private_Impl::~PPB_TCPServerSocket_Private_Impl() { 26 PPB_TCPServerSocket_Private_Impl::~PPB_TCPServerSocket_Private_Impl() {
22 StopListening(); 27 StopListening();
23 } 28 }
24 29
25 PP_Resource PPB_TCPServerSocket_Private_Impl::CreateResource( 30 PP_Resource PPB_TCPServerSocket_Private_Impl::CreateResource(
26 PP_Instance instance) { 31 PP_Instance instance) {
32 RenderView* render_view =
33 PepperPluginInstance::Get(instance)->GetRenderView();
27 PPB_TCPServerSocket_Private_Impl* socket = 34 PPB_TCPServerSocket_Private_Impl* socket =
28 new PPB_TCPServerSocket_Private_Impl(instance); 35 new PPB_TCPServerSocket_Private_Impl(instance, render_view);
29 return socket->GetReference(); 36 return socket->GetReference();
30 } 37 }
31 38
32 void PPB_TCPServerSocket_Private_Impl::OnAcceptCompleted( 39 void PPB_TCPServerSocket_Private_Impl::OnAcceptCompleted(
33 bool succeeded, 40 bool succeeded,
34 uint32 accepted_socket_id, 41 uint32 accepted_socket_id,
35 const PP_NetAddress_Private& local_addr, 42 const PP_NetAddress_Private& local_addr,
36 const PP_NetAddress_Private& remote_addr) { 43 const PP_NetAddress_Private& remote_addr) {
37 if (!::ppapi::TrackedCallback::IsPending(accept_callback_) || 44 if (!::ppapi::TrackedCallback::IsPending(accept_callback_) ||
38 !tcp_socket_buffer_) { 45 !tcp_socket_buffer_) {
39 NOTREACHED(); 46 NOTREACHED();
40 return; 47 return;
41 } 48 }
42 49
43 if (succeeded) { 50 if (succeeded) {
44 *tcp_socket_buffer_ = 51 *tcp_socket_buffer_ =
45 PPB_TCPSocket_Private_Impl::CreateConnectedSocket(pp_instance(), 52 PPB_TCPSocket_Private_Impl::CreateConnectedSocket(pp_instance(),
46 accepted_socket_id, 53 accepted_socket_id,
47 local_addr, 54 local_addr,
48 remote_addr); 55 remote_addr);
49 } 56 }
50 tcp_socket_buffer_ = NULL; 57 tcp_socket_buffer_ = NULL;
51 58
52 accept_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED); 59 accept_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED);
53 } 60 }
54 61
55 void PPB_TCPServerSocket_Private_Impl::SendListen( 62 void PPB_TCPServerSocket_Private_Impl::SendListen(
56 const PP_NetAddress_Private& addr, 63 const PP_NetAddress_Private& addr,
57 int32_t backlog) { 64 int32_t backlog) {
58 PepperHelperImpl* helper = GetHelper(); 65 Send(new PpapiHostMsg_PPBTCPServerSocket_Listen(
59 if (!helper) 66 routing_id(), 0, pp_resource(), addr, backlog));
60 return;
61
62 helper->Send(new PpapiHostMsg_PPBTCPServerSocket_Listen(
63 helper->routing_id(), 0, pp_resource(), addr, backlog));
64 } 67 }
65 68
66 void PPB_TCPServerSocket_Private_Impl::SendAccept() { 69 void PPB_TCPServerSocket_Private_Impl::SendAccept() {
67 PepperHelperImpl* helper = GetHelper(); 70 Send(new PpapiHostMsg_PPBTCPServerSocket_Accept(routing_id(), socket_id_));
68 if (!helper)
69 return;
70
71 helper->Send(new PpapiHostMsg_PPBTCPServerSocket_Accept(
72 helper->routing_id(), socket_id_));
73 } 71 }
74 72
75 void PPB_TCPServerSocket_Private_Impl::SendStopListening() { 73 void PPB_TCPServerSocket_Private_Impl::SendStopListening() {
76 PepperHelperImpl* helper = GetHelper();
77 if (!helper)
78 return;
79
80 if (socket_id_ != 0) { 74 if (socket_id_ != 0) {
81 helper->Send(new PpapiHostMsg_PPBTCPServerSocket_Destroy( 75 Send(new PpapiHostMsg_PPBTCPServerSocket_Destroy(socket_id_));
82 socket_id_));
83 helper->TCPServerSocketStopListening(socket_id_);
84 } 76 }
85 } 77 }
86 78
87 PepperHelperImpl* PPB_TCPServerSocket_Private_Impl::GetHelper() { 79 bool PPB_TCPServerSocket_Private_Impl::OnMessageReceived(
88 return ResourceHelper::GetHelper(this); 80 const IPC::Message& message) {
81 bool handled = true;
82 IPC_BEGIN_MESSAGE_MAP(PPB_TCPServerSocket_Private_Impl, message)
83 IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPServerSocket_ListenACK,
84 OnTCPServerSocketListenACK)
85 IPC_MESSAGE_HANDLER(PpapiMsg_PPBTCPServerSocket_AcceptACK,
86 OnTCPServerSocketAcceptACK)
87 IPC_MESSAGE_UNHANDLED(handled = false)
88 IPC_END_MESSAGE_MAP()
89 return handled;
90 }
91
92 void PPB_TCPServerSocket_Private_Impl::OnTCPServerSocketListenACK(
93 uint32 plugin_dispatcher_id,
94 PP_Resource socket_resource,
95 uint32 socket_id,
96 const PP_NetAddress_Private& local_addr,
97 int32_t status) {
98 ppapi::thunk::EnterResource<ppapi::thunk::PPB_TCPServerSocket_Private_API>
99 enter(socket_resource, true);
100 if (enter.succeeded()) {
101 ppapi::PPB_TCPServerSocket_Shared* socket =
102 static_cast<ppapi::PPB_TCPServerSocket_Shared*>(enter.object());
103 OnListenCompleted(socket_id, local_addr, status);
104 } else if (socket_id != 0 && status == PP_OK) {
105 // StopListening was called before completion of Listen.
106 Send(new PpapiHostMsg_PPBTCPServerSocket_Destroy(socket_id));
107 }
108 }
109
110 void PPB_TCPServerSocket_Private_Impl::OnTCPServerSocketAcceptACK(
111 uint32 plugin_dispatcher_id,
112 uint32 server_socket_id,
113 uint32 accepted_socket_id,
114 const PP_NetAddress_Private& local_addr,
115 const PP_NetAddress_Private& remote_addr) {
116 bool succeeded = (accepted_socket_id != 0);
117 OnAcceptCompleted(succeeded,
118 accepted_socket_id,
119 local_addr,
120 remote_addr);
89 } 121 }
90 122
91 } // namespace content 123 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698