Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #include "content/child/np_channel_base.h" | 5 #include "content/child/np_channel_base.h" |
| 6 | 6 |
| 7 #include <stack> | 7 #include <stack> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 iter->second->Send(new IPC::Message(*message)); | 65 iter->second->Send(new IPC::Message(*message)); |
| 66 } | 66 } |
| 67 delete message; | 67 delete message; |
| 68 } | 68 } |
| 69 | 69 |
| 70 NPChannelBase::NPChannelBase() | 70 NPChannelBase::NPChannelBase() |
| 71 : mode_(IPC::Channel::MODE_NONE), | 71 : mode_(IPC::Channel::MODE_NONE), |
| 72 non_npobject_count_(0), | 72 non_npobject_count_(0), |
| 73 peer_pid_(0), | 73 peer_pid_(0), |
| 74 in_remove_route_(false), | 74 in_remove_route_(false), |
| 75 default_owner_(NULL), | |
| 75 channel_valid_(false), | 76 channel_valid_(false), |
| 76 in_unblock_dispatch_(0), | 77 in_unblock_dispatch_(0), |
| 77 send_unblocking_only_during_unblock_dispatch_(false) { | 78 send_unblocking_only_during_unblock_dispatch_(false) { |
| 78 } | 79 } |
| 79 | 80 |
| 80 NPChannelBase::~NPChannelBase() { | 81 NPChannelBase::~NPChannelBase() { |
|
darin (slow to review)
2013/06/18 23:26:24
should we assert that these new maps are empty at
Wez
2013/06/19 05:17:54
Done.
| |
| 81 } | 82 } |
| 82 | 83 |
| 83 NPChannelBase* NPChannelBase::GetCurrentChannel() { | 84 NPChannelBase* NPChannelBase::GetCurrentChannel() { |
| 84 return g_lazy_channel_stack.Pointer()->top().get(); | 85 return g_lazy_channel_stack.Pointer()->top().get(); |
| 85 } | 86 } |
| 86 | 87 |
| 87 void NPChannelBase::CleanupChannels() { | 88 void NPChannelBase::CleanupChannels() { |
| 88 // Make a copy of the references as we can't iterate the map since items will | 89 // Make a copy of the references as we can't iterate the map since items will |
| 89 // be removed from it as we clean them up. | 90 // be removed from it as we clean them up. |
| 90 std::vector<scoped_refptr<NPChannelBase> > channels; | 91 std::vector<scoped_refptr<NPChannelBase> > channels; |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 iter != g_channels.Get().end(); ++iter) { | 265 iter != g_channels.Get().end(); ++iter) { |
| 265 if (iter->second.get() == this) { | 266 if (iter->second.get() == this) { |
| 266 // Insert new element before invalidating |iter|. | 267 // Insert new element before invalidating |iter|. |
| 267 g_channels.Get()[iter->first + "-error"] = iter->second; | 268 g_channels.Get()[iter->first + "-error"] = iter->second; |
| 268 g_channels.Get().erase(iter); | 269 g_channels.Get().erase(iter); |
| 269 break; | 270 break; |
| 270 } | 271 } |
| 271 } | 272 } |
| 272 } | 273 } |
| 273 | 274 |
| 274 NPObject* NPChannelBase::GetExistingNPObjectProxy(int route_id) { | |
| 275 ProxyMap::iterator iter = proxy_map_.find(route_id); | |
| 276 return iter != proxy_map_.end() ? iter->second : NULL; | |
| 277 } | |
| 278 | |
| 279 int NPChannelBase::GetExistingRouteForNPObjectStub(NPObject* npobject) { | |
| 280 StubMap::iterator iter = stub_map_.find(npobject); | |
| 281 return iter != stub_map_.end() ? iter->second : MSG_ROUTING_NONE; | |
| 282 } | |
| 283 | |
| 284 void NPChannelBase::AddMappingForNPObjectProxy(int route_id, | 275 void NPChannelBase::AddMappingForNPObjectProxy(int route_id, |
| 285 NPObject* object) { | 276 NPObject* object) { |
| 286 proxy_map_[route_id] = object; | 277 proxy_map_[route_id] = object; |
| 287 } | 278 } |
| 288 | 279 |
| 280 void NPChannelBase::RemoveMappingForNPObjectProxy(int route_id) { | |
| 281 proxy_map_.erase(route_id); | |
| 282 } | |
| 283 | |
| 289 void NPChannelBase::AddMappingForNPObjectStub(int route_id, | 284 void NPChannelBase::AddMappingForNPObjectStub(int route_id, |
| 290 NPObject* object) { | 285 NPObject* object) { |
| 291 DCHECK(object != NULL); | 286 DCHECK(object != NULL); |
| 292 stub_map_[object] = route_id; | 287 stub_map_[object] = route_id; |
| 293 } | 288 } |
| 294 | 289 |
| 295 void NPChannelBase::RemoveMappingForNPObjectStub(int route_id, | 290 void NPChannelBase::RemoveMappingForNPObjectStub(int route_id, |
| 296 NPObject* object) { | 291 NPObject* object) { |
| 297 DCHECK(object != NULL); | 292 DCHECK(object != NULL); |
| 298 stub_map_.erase(object); | 293 stub_map_.erase(object); |
| 299 } | 294 } |
| 300 | 295 |
| 301 void NPChannelBase::RemoveMappingForNPObjectProxy(int route_id) { | 296 void NPChannelBase::AddMappingForNPObjectOwner(int route_id, |
| 302 proxy_map_.erase(route_id); | 297 struct _NPP* owner) { |
| 298 DCHECK(owner != NULL); | |
| 299 route_to_owner_[route_id] = owner; | |
| 300 owner_to_route_[owner] = route_id; | |
| 301 } | |
| 302 | |
| 303 void NPChannelBase::AddDefaultNPObjectOwner(struct _NPP* owner) { | |
|
darin (slow to review)
2013/06/18 23:26:24
nit: Since this method only supports retaining a s
Wez
2013/06/19 05:17:54
Done.
| |
| 304 DCHECK(owner != NULL); | |
| 305 default_owner_ = owner; | |
| 306 } | |
| 307 | |
| 308 void NPChannelBase::RemoveMappingForNPObjectOwner(int route_id) { | |
| 309 DCHECK(route_to_owner_.find(route_id) != route_to_owner_.end()); | |
| 310 owner_to_route_.erase(route_to_owner_[route_id]); | |
| 311 route_to_owner_.erase(route_id); | |
| 312 } | |
| 313 | |
| 314 NPObject* NPChannelBase::GetExistingNPObjectProxy(int route_id) { | |
| 315 ProxyMap::iterator iter = proxy_map_.find(route_id); | |
| 316 return iter != proxy_map_.end() ? iter->second : NULL; | |
| 317 } | |
| 318 | |
| 319 int NPChannelBase::GetExistingRouteForNPObjectStub(NPObject* npobject) { | |
| 320 StubMap::iterator iter = stub_map_.find(npobject); | |
| 321 return iter != stub_map_.end() ? iter->second : MSG_ROUTING_NONE; | |
| 322 } | |
| 323 | |
| 324 NPP NPChannelBase::GetExistingNPObjectOwner(int route_id) { | |
| 325 RouteToOwnerMap::iterator iter = route_to_owner_.find(route_id); | |
| 326 return iter != route_to_owner_.end() ? iter->second : default_owner_; | |
| 327 } | |
| 328 | |
| 329 int NPChannelBase::GetExistingRouteForNPObjectOwner(NPP owner) { | |
| 330 OwnerToRouteMap::iterator iter = owner_to_route_.find(owner); | |
| 331 return iter != owner_to_route_.end() ? iter->second : MSG_ROUTING_NONE; | |
| 303 } | 332 } |
| 304 | 333 |
| 305 } // namespace content | 334 } // namespace content |
| OLD | NEW |