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

Side by Side Diff: content/child/np_channel_base.h

Issue 17208003: Track NPObject ownership by the originating plugins' NPP identifier. [4/6] (Chrome) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove DCHECKs on proxy and stub maps. Created 7 years, 6 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
« no previous file with comments | « no previous file | content/child/np_channel_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef CONTENT_CHILD_NP_CHANNEL_BASE_H_ 5 #ifndef CONTENT_CHILD_NP_CHANNEL_BASE_H_
6 #define CONTENT_CHILD_NP_CHANNEL_BASE_H_ 6 #define CONTENT_CHILD_NP_CHANNEL_BASE_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 13 matching lines...) Expand all
24 #if defined(COMPILER_GCC) 24 #if defined(COMPILER_GCC)
25 namespace BASE_HASH_NAMESPACE { 25 namespace BASE_HASH_NAMESPACE {
26 26
27 template<> 27 template<>
28 struct hash<NPObject*> { 28 struct hash<NPObject*> {
29 std::size_t operator()(NPObject* const& ptr) const { 29 std::size_t operator()(NPObject* const& ptr) const {
30 return hash<size_t>()(reinterpret_cast<size_t>(ptr)); 30 return hash<size_t>()(reinterpret_cast<size_t>(ptr));
31 } 31 }
32 }; 32 };
33 33
34 template<>
35 struct hash<struct _NPP*> {
36 std::size_t operator()(struct _NPP* const& ptr) const {
37 return hash<size_t>()(reinterpret_cast<size_t>(ptr));
38 }
39 };
40
34 } // namespace __gnu_cxx 41 } // namespace __gnu_cxx
35 #elif defined(COMPILER_MSVC) 42 #elif defined(COMPILER_MSVC)
36 namespace stdext { 43 namespace stdext {
37 44
38 template<> 45 template<>
39 inline size_t hash_value(NPObject* const& ptr) { 46 inline size_t hash_value(NPObject* const& ptr) {
40 return hash_value(reinterpret_cast<size_t>(ptr)); 47 return hash_value(reinterpret_cast<size_t>(ptr));
41 } 48 }
42 49
43 } // namespace stdext 50 } // namespace stdext
(...skipping 10 matching lines...) Expand all
54 61
55 // WebPlugin[Delegate] call these on construction and destruction to setup 62 // WebPlugin[Delegate] call these on construction and destruction to setup
56 // the routing and manage lifetime of this object (they pass NULL for 63 // the routing and manage lifetime of this object (they pass NULL for
57 // npobject). These are also called by NPObjectProxy and NPObjectStub (which 64 // npobject). These are also called by NPObjectProxy and NPObjectStub (which
58 // pass themselves for npobject). However the latter don't control the 65 // pass themselves for npobject). However the latter don't control the
59 // lifetime of this object because we don't want a leak of an NPObject to 66 // lifetime of this object because we don't want a leak of an NPObject to
60 // keep the channel around longer than necessary. 67 // keep the channel around longer than necessary.
61 void AddRoute(int route_id, IPC::Listener* listener, NPObjectBase* npobject); 68 void AddRoute(int route_id, IPC::Listener* listener, NPObjectBase* npobject);
62 void RemoveRoute(int route_id); 69 void RemoveRoute(int route_id);
63 70
64
65 void AddMappingForNPObjectProxy(int route_id, NPObject* object); 71 void AddMappingForNPObjectProxy(int route_id, NPObject* object);
66 void RemoveMappingForNPObjectProxy(int route_id); 72 void RemoveMappingForNPObjectProxy(int route_id);
67 73
68 void AddMappingForNPObjectStub(int route_id, NPObject* object); 74 void AddMappingForNPObjectStub(int route_id, NPObject* object);
69 void RemoveMappingForNPObjectStub(int route_id, NPObject* object); 75 void RemoveMappingForNPObjectStub(int route_id, NPObject* object);
70 76
77 void AddMappingForNPObjectOwner(int route_id, struct _NPP* owner);
78 void SetDefaultNPObjectOwner(struct _NPP* owner);
79 void RemoveMappingForNPObjectOwner(int route_id);
80
71 NPObject* GetExistingNPObjectProxy(int route_id); 81 NPObject* GetExistingNPObjectProxy(int route_id);
72 int GetExistingRouteForNPObjectStub(NPObject* npobject); 82 int GetExistingRouteForNPObjectStub(NPObject* npobject);
73 83 struct _NPP* GetExistingNPObjectOwner(int route_id);
84 int GetExistingRouteForNPObjectOwner(struct _NPP* owner);
74 85
75 // IPC::Sender implementation: 86 // IPC::Sender implementation:
76 virtual bool Send(IPC::Message* msg) OVERRIDE; 87 virtual bool Send(IPC::Message* msg) OVERRIDE;
77 88
78 base::ProcessId peer_pid() { return channel_->peer_pid(); } 89 base::ProcessId peer_pid() { return channel_->peer_pid(); }
79 IPC::ChannelHandle channel_handle() const { return channel_handle_; } 90 IPC::ChannelHandle channel_handle() const { return channel_handle_; }
80 91
81 // Returns the number of open NPObject channels in this process. 92 // Returns the number of open NPObject channels in this process.
82 static int Count(); 93 static int Count();
83 94
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 // channel is closed we can inform them. 175 // channel is closed we can inform them.
165 typedef base::hash_map<int, NPObjectBase*> ListenerMap; 176 typedef base::hash_map<int, NPObjectBase*> ListenerMap;
166 ListenerMap npobject_listeners_; 177 ListenerMap npobject_listeners_;
167 178
168 typedef base::hash_map<int, NPObject*> ProxyMap; 179 typedef base::hash_map<int, NPObject*> ProxyMap;
169 ProxyMap proxy_map_; 180 ProxyMap proxy_map_;
170 181
171 typedef base::hash_map<NPObject*, int> StubMap; 182 typedef base::hash_map<NPObject*, int> StubMap;
172 StubMap stub_map_; 183 StubMap stub_map_;
173 184
185 typedef base::hash_map<struct _NPP*, int> OwnerToRouteMap;
186 OwnerToRouteMap owner_to_route_;
187
188 typedef base::hash_map<int, struct _NPP*> RouteToOwnerMap;
189 RouteToOwnerMap route_to_owner_;
190
191 // Used on the plugin side to represent any object received that does
192 // not belong to a plugin instance.
193 struct _NPP* default_owner_;
194
174 // Used to implement message routing functionality to WebPlugin[Delegate] 195 // Used to implement message routing functionality to WebPlugin[Delegate]
175 // objects 196 // objects
176 MessageRouter router_; 197 MessageRouter router_;
177 198
178 // A channel is invalid if it is disconnected as a result of a channel 199 // A channel is invalid if it is disconnected as a result of a channel
179 // error. This flag is used to indicate the same. 200 // error. This flag is used to indicate the same.
180 bool channel_valid_; 201 bool channel_valid_;
181 202
182 // Track whether we're dispatching a message with the unblock flag; works like 203 // Track whether we're dispatching a message with the unblock flag; works like
183 // a refcount, 0 when we're not. 204 // a refcount, 0 when we're not.
(...skipping 10 matching lines...) Expand all
194 // have the unblock flag set, since they could be followed by a sync message 215 // have the unblock flag set, since they could be followed by a sync message
195 // that won't get dispatched until the call to the renderer is complete. 216 // that won't get dispatched until the call to the renderer is complete.
196 bool send_unblocking_only_during_unblock_dispatch_; 217 bool send_unblocking_only_during_unblock_dispatch_;
197 218
198 DISALLOW_COPY_AND_ASSIGN(NPChannelBase); 219 DISALLOW_COPY_AND_ASSIGN(NPChannelBase);
199 }; 220 };
200 221
201 } // namespace content 222 } // namespace content
202 223
203 #endif // CONTENT_CHILD_NP_CHANNEL_BASE_H_ 224 #endif // CONTENT_CHILD_NP_CHANNEL_BASE_H_
OLDNEW
« no previous file with comments | « no previous file | content/child/np_channel_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698