Index: ppapi/proxy/plugin_resource_tracker.cc |
=================================================================== |
--- ppapi/proxy/plugin_resource_tracker.cc (revision 0) |
+++ ppapi/proxy/plugin_resource_tracker.cc (revision 0) |
@@ -0,0 +1,87 @@ |
+// Copyright (c) 2010 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 "ppapi/proxy/plugin_resource_tracker.h" |
+ |
+#include "base/logging.h" |
+#include "ppapi/proxy/plugin_dispatcher.h" |
+#include "ppapi/proxy/ppapi_messages.h" |
+#include "ppapi/proxy/plugin_resource.h" |
+#include "ppapi/proxy/serialized_var.h" |
+ |
+namespace pp { |
+namespace proxy { |
+ |
+PluginResourceTracker::ResourceInfo::ResourceInfo() : ref_count(0) { |
+} |
+ |
+PluginResourceTracker::ResourceInfo::ResourceInfo(int rc, |
+ linked_ptr<PluginResource> r) |
+ : ref_count(rc), |
+ resource(r) { |
+} |
+ |
+PluginResourceTracker::ResourceInfo::ResourceInfo(const ResourceInfo& other) |
+ : ref_count(other.ref_count), |
+ resource(other.resource) { |
+} |
+ |
+PluginResourceTracker::ResourceInfo::~ResourceInfo() { |
+} |
+ |
+PluginResourceTracker::ResourceInfo& |
+PluginResourceTracker::ResourceInfo::operator=( |
+ const ResourceInfo& other) { |
+ ref_count = other.ref_count; |
+ resource = other.resource; |
+ return *this; |
+} |
+ |
+PluginResourceTracker::PluginResourceTracker(PluginDispatcher* dispatcher) |
+ : dispatcher_(dispatcher) { |
+} |
+ |
+PluginResourceTracker::~PluginResourceTracker() { |
+} |
+ |
+PluginResource* PluginResourceTracker::GetResourceObject( |
+ PP_Resource pp_resource) { |
+ ResourceMap::iterator found = resource_map_.find(pp_resource); |
+ if (found == resource_map_.end()) |
+ return NULL; |
+ return found->second.resource.get(); |
+} |
+ |
+void PluginResourceTracker::AddResource(PP_Resource pp_resource, |
+ linked_ptr<PluginResource> object) { |
+ DCHECK(resource_map_.find(pp_resource) == resource_map_.end()); |
+ resource_map_[pp_resource] = ResourceInfo(1, object); |
+} |
+ |
+void PluginResourceTracker::AddRefResource(PP_Resource resource) { |
+ resource_map_[resource].ref_count++; |
+} |
+ |
+void PluginResourceTracker::ReleaseResource(PP_Resource resource) { |
+ ReleasePluginResourceRef(resource, true); |
+} |
+ |
+void PluginResourceTracker::ReleasePluginResourceRef( |
+ const PP_Resource& resource, |
+ bool notify_browser_on_release) { |
+ ResourceMap::iterator found = resource_map_.find(resource); |
+ if (found == resource_map_.end()) |
+ return; |
+ found->second.ref_count--; |
+ if (found->second.ref_count == 0) { |
+ if (notify_browser_on_release) { |
+ dispatcher_->Send(new PpapiHostMsg_PPBCore_ReleaseResource( |
+ INTERFACE_ID_PPB_CORE, resource)); |
+ } |
+ resource_map_.erase(found); |
+ } |
+} |
+ |
+} // namespace proxy |
+} // namespace pp |
Property changes on: ppapi/proxy/plugin_resource_tracker.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |