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

Side by Side Diff: ppapi/proxy/ppb_flash_tcp_socket_proxy.cc

Issue 7629017: Add a unified resource tracker shared between the proxy and the impl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Assertion fixed Created 9 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ppapi/proxy/ppb_flash_tcp_socket_proxy.h" 5 #include "ppapi/proxy/ppb_flash_tcp_socket_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <map> 9 #include <map>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/scoped_ptr.h" 13 #include "base/scoped_ptr.h"
14 #include "base/task.h" 14 #include "base/task.h"
15 #include "ppapi/c/pp_errors.h" 15 #include "ppapi/c/pp_errors.h"
16 #include "ppapi/proxy/plugin_dispatcher.h" 16 #include "ppapi/proxy/plugin_dispatcher.h"
17 #include "ppapi/proxy/plugin_resource.h"
18 #include "ppapi/proxy/plugin_resource_tracker.h" 17 #include "ppapi/proxy/plugin_resource_tracker.h"
19 #include "ppapi/proxy/ppapi_messages.h" 18 #include "ppapi/proxy/ppapi_messages.h"
19 #include "ppapi/shared_impl/resource.h"
20 #include "ppapi/thunk/ppb_flash_tcp_socket_api.h" 20 #include "ppapi/thunk/ppb_flash_tcp_socket_api.h"
21 #include "ppapi/thunk/thunk.h" 21 #include "ppapi/thunk/thunk.h"
22 22
23 using ppapi::HostResource; 23 using ppapi::HostResource;
24 using ppapi::Resource;
24 using ppapi::thunk::PPB_Flash_TCPSocket_API; 25 using ppapi::thunk::PPB_Flash_TCPSocket_API;
25 26
26 namespace pp { 27 namespace pp {
27 namespace proxy { 28 namespace proxy {
28 29
29 const int32_t kFlashTCPSocketMaxReadSize = 1024 * 1024; 30 const int32_t kFlashTCPSocketMaxReadSize = 1024 * 1024;
30 const int32_t kFlashTCPSocketMaxWriteSize = 1024 * 1024; 31 const int32_t kFlashTCPSocketMaxWriteSize = 1024 * 1024;
31 32
32 class FlashTCPSocket; 33 class FlashTCPSocket;
33 34
(...skipping 17 matching lines...) Expand all
51 }; 52 };
52 53
53 InterfaceProxy* CreateFlashTCPSocketProxy(Dispatcher* dispatcher, 54 InterfaceProxy* CreateFlashTCPSocketProxy(Dispatcher* dispatcher,
54 const void* target_interface) { 55 const void* target_interface) {
55 return new PPB_Flash_TCPSocket_Proxy(dispatcher, target_interface); 56 return new PPB_Flash_TCPSocket_Proxy(dispatcher, target_interface);
56 } 57 }
57 58
58 } // namespace 59 } // namespace
59 60
60 class FlashTCPSocket : public PPB_Flash_TCPSocket_API, 61 class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
61 public PluginResource { 62 public Resource {
62 public: 63 public:
63 FlashTCPSocket(const HostResource& resource, uint32 socket_id); 64 FlashTCPSocket(const HostResource& resource, uint32 socket_id);
64 virtual ~FlashTCPSocket(); 65 virtual ~FlashTCPSocket();
65 66
66 // ResourceObjectBase overrides. 67 // Resource overrides.
67 virtual PPB_Flash_TCPSocket_API* AsPPB_Flash_TCPSocket_API() OVERRIDE; 68 virtual PPB_Flash_TCPSocket_API* AsPPB_Flash_TCPSocket_API() OVERRIDE;
68 69
69 // PPB_Flash_TCPSocket_API implementation. 70 // PPB_Flash_TCPSocket_API implementation.
70 virtual int32_t Connect(const char* host, 71 virtual int32_t Connect(const char* host,
71 uint16_t port, 72 uint16_t port,
72 PP_CompletionCallback callback) OVERRIDE; 73 PP_CompletionCallback callback) OVERRIDE;
73 virtual int32_t ConnectWithNetAddress( 74 virtual int32_t ConnectWithNetAddress(
74 const PP_Flash_NetAddress* addr, 75 const PP_Flash_NetAddress* addr,
75 PP_CompletionCallback callback) OVERRIDE; 76 PP_CompletionCallback callback) OVERRIDE;
76 virtual PP_Bool GetLocalAddress(PP_Flash_NetAddress* local_addr) OVERRIDE; 77 virtual PP_Bool GetLocalAddress(PP_Flash_NetAddress* local_addr) OVERRIDE;
(...skipping 17 matching lines...) Expand all
94 95
95 private: 96 private:
96 enum ConnectionState { 97 enum ConnectionState {
97 // Before a connection is successfully established (including a connect 98 // Before a connection is successfully established (including a connect
98 // request is pending or a previous connect request failed). 99 // request is pending or a previous connect request failed).
99 BEFORE_CONNECT, 100 BEFORE_CONNECT,
100 CONNECTED, 101 CONNECTED,
101 DISCONNECTED 102 DISCONNECTED
102 }; 103 };
103 104
105 PluginDispatcher* GetDispatcher() const {
106 return PluginDispatcher::GetForResource(this);
107 }
dmichael (off chromium) 2011/08/17 16:28:07 optional nit: You didn't do this anywhere else...
brettw 2011/08/17 17:16:25 I did this in a few places where we used GetDispat
108
104 // Backend for both Connect() and ConnectWithNetAddress(). To keep things 109 // Backend for both Connect() and ConnectWithNetAddress(). To keep things
105 // generic, the message is passed in (on error, it's deleted). 110 // generic, the message is passed in (on error, it's deleted).
106 int32_t ConnectWithMessage(IPC::Message* msg, 111 int32_t ConnectWithMessage(IPC::Message* msg,
107 PP_CompletionCallback callback); 112 PP_CompletionCallback callback);
108 113
109 void PostAbortAndClearIfNecessary(PP_CompletionCallback* callback); 114 void PostAbortAndClearIfNecessary(PP_CompletionCallback* callback);
110 115
111 uint32 socket_id_; 116 uint32 socket_id_;
112 ConnectionState connection_state_; 117 ConnectionState connection_state_;
113 118
114 PP_CompletionCallback connect_callback_; 119 PP_CompletionCallback connect_callback_;
115 PP_CompletionCallback read_callback_; 120 PP_CompletionCallback read_callback_;
116 PP_CompletionCallback write_callback_; 121 PP_CompletionCallback write_callback_;
117 122
118 char* read_buffer_; 123 char* read_buffer_;
119 int32_t bytes_to_read_; 124 int32_t bytes_to_read_;
120 125
121 PP_Flash_NetAddress local_addr_; 126 PP_Flash_NetAddress local_addr_;
122 PP_Flash_NetAddress remote_addr_; 127 PP_Flash_NetAddress remote_addr_;
123 128
124 DISALLOW_COPY_AND_ASSIGN(FlashTCPSocket); 129 DISALLOW_COPY_AND_ASSIGN(FlashTCPSocket);
125 }; 130 };
126 131
127 FlashTCPSocket::FlashTCPSocket(const HostResource& resource, uint32 socket_id) 132 FlashTCPSocket::FlashTCPSocket(const HostResource& resource, uint32 socket_id)
128 : PluginResource(resource), 133 : Resource(resource),
129 socket_id_(socket_id), 134 socket_id_(socket_id),
130 connection_state_(BEFORE_CONNECT), 135 connection_state_(BEFORE_CONNECT),
131 connect_callback_(PP_BlockUntilComplete()), 136 connect_callback_(PP_BlockUntilComplete()),
132 read_callback_(PP_BlockUntilComplete()), 137 read_callback_(PP_BlockUntilComplete()),
133 write_callback_(PP_BlockUntilComplete()), 138 write_callback_(PP_BlockUntilComplete()),
134 read_buffer_(NULL), 139 read_buffer_(NULL),
135 bytes_to_read_(-1) { 140 bytes_to_read_(-1) {
136 DCHECK(socket_id != 0); 141 DCHECK(socket_id != 0);
137 142
138 local_addr_.size = 0; 143 local_addr_.size = 0;
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); 372 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
368 if (!dispatcher) 373 if (!dispatcher)
369 return 0; 374 return 0;
370 375
371 uint32 socket_id = 0; 376 uint32 socket_id = 0;
372 dispatcher->SendToBrowser(new PpapiHostMsg_PPBFlashTCPSocket_Create( 377 dispatcher->SendToBrowser(new PpapiHostMsg_PPBFlashTCPSocket_Create(
373 INTERFACE_ID_PPB_FLASH_TCPSOCKET, dispatcher->plugin_dispatcher_id(), 378 INTERFACE_ID_PPB_FLASH_TCPSOCKET, dispatcher->plugin_dispatcher_id(),
374 &socket_id)); 379 &socket_id));
375 if (socket_id == 0) 380 if (socket_id == 0)
376 return 0; 381 return 0;
377 382 return (new FlashTCPSocket(HostResource::MakeInstanceOnly(instance),
378 return PluginResourceTracker::GetInstance()->AddResource( 383 socket_id))->GetReference();
379 new FlashTCPSocket(HostResource::MakeInstanceOnly(instance), socket_id));
380 } 384 }
381 385
382 bool PPB_Flash_TCPSocket_Proxy::OnMessageReceived(const IPC::Message& msg) { 386 bool PPB_Flash_TCPSocket_Proxy::OnMessageReceived(const IPC::Message& msg) {
383 bool handled = true; 387 bool handled = true;
384 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_TCPSocket_Proxy, msg) 388 IPC_BEGIN_MESSAGE_MAP(PPB_Flash_TCPSocket_Proxy, msg)
385 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ConnectACK, OnMsgConnectACK) 389 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ConnectACK, OnMsgConnectACK)
386 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ReadACK, OnMsgReadACK) 390 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_ReadACK, OnMsgReadACK)
387 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_WriteACK, OnMsgWriteACK) 391 IPC_MESSAGE_HANDLER(PpapiMsg_PPBFlashTCPSocket_WriteACK, OnMsgWriteACK)
388 IPC_MESSAGE_UNHANDLED(handled = false) 392 IPC_MESSAGE_UNHANDLED(handled = false)
389 IPC_END_MESSAGE_MAP() 393 IPC_END_MESSAGE_MAP()
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 return; 433 return;
430 } 434 }
431 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id); 435 IDToSocketMap::iterator iter = g_id_to_socket->find(socket_id);
432 if (iter == g_id_to_socket->end()) 436 if (iter == g_id_to_socket->end())
433 return; 437 return;
434 iter->second->OnWriteCompleted(succeeded, bytes_written); 438 iter->second->OnWriteCompleted(succeeded, bytes_written);
435 } 439 }
436 440
437 } // namespace proxy 441 } // namespace proxy
438 } // namespace pp 442 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698