| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "webkit/glue/plugins/pepper_resource_tracker.h" | 5 #include "webkit/glue/plugins/pepper_resource_tracker.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/rand_util.h" | 11 #include "base/rand_util.h" |
| 12 #include "ppapi/c/pp_resource.h" | 12 #include "ppapi/c/pp_resource.h" |
| 13 #include "webkit/glue/plugins/pepper_resource.h" | 13 #include "webkit/glue/plugins/pepper_resource.h" |
| 14 | 14 |
| 15 namespace pepper { | 15 namespace pepper { |
| 16 | 16 |
| 17 scoped_refptr<Resource> ResourceTracker::GetResource(PP_Resource res) const { | 17 scoped_refptr<Resource> ResourceTracker::GetResource(PP_Resource res) const { |
| 18 ResourceMap::const_iterator result = live_resources_.find(res); | 18 ResourceMap::const_iterator result = live_resources_.find(res); |
| 19 if (result == live_resources_.end()) { | 19 if (result == live_resources_.end()) { |
| 20 return scoped_refptr<Resource>(); | 20 return scoped_refptr<Resource>(); |
| 21 } | 21 } |
| 22 return result->second.first; | 22 return result->second.first; |
| 23 } | 23 } |
| 24 | 24 |
| 25 // static |
| 26 ResourceTracker* ResourceTracker::singleton_override_ = NULL; |
| 27 |
| 25 ResourceTracker::ResourceTracker() | 28 ResourceTracker::ResourceTracker() |
| 26 : last_id_(0) { | 29 : last_id_(0) { |
| 27 } | 30 } |
| 28 | 31 |
| 29 ResourceTracker::~ResourceTracker() { | 32 ResourceTracker::~ResourceTracker() { |
| 30 } | 33 } |
| 31 | 34 |
| 32 // static | 35 // static |
| 33 ResourceTracker* ResourceTracker::Get() { | 36 ResourceTracker* ResourceTracker::Get() { |
| 37 if (singleton_override_) |
| 38 return singleton_override_; |
| 34 return Singleton<ResourceTracker>::get(); | 39 return Singleton<ResourceTracker>::get(); |
| 35 } | 40 } |
| 36 | 41 |
| 37 PP_Resource ResourceTracker::AddResource(Resource* resource) { | 42 PP_Resource ResourceTracker::AddResource(Resource* resource) { |
| 38 // If the plugin manages to create 4B resources... | 43 // If the plugin manages to create 4B resources... |
| 39 if (last_id_ == std::numeric_limits<PP_Resource>::max()) { | 44 if (last_id_ == std::numeric_limits<PP_Resource>::max()) { |
| 40 return 0; | 45 return 0; |
| 41 } | 46 } |
| 42 // Add the resource with plugin use-count 1. | 47 // Add the resource with plugin use-count 1. |
| 43 ++last_id_; | 48 ++last_id_; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 66 live_resources_.erase(i); | 71 live_resources_.erase(i); |
| 67 } | 72 } |
| 68 return true; | 73 return true; |
| 69 } else { | 74 } else { |
| 70 return false; | 75 return false; |
| 71 } | 76 } |
| 72 } | 77 } |
| 73 | 78 |
| 74 void ResourceTracker::ForceDeletePluginResourceRefs(PP_Resource res) { | 79 void ResourceTracker::ForceDeletePluginResourceRefs(PP_Resource res) { |
| 75 ResourceMap::iterator i = live_resources_.find(res); | 80 ResourceMap::iterator i = live_resources_.find(res); |
| 76 if (i != live_resources_.end()) | 81 if (i == live_resources_.end()) |
| 77 return; // Nothing to do. | 82 return; // Nothing to do. |
| 78 | 83 |
| 79 i->second.second = 0; | 84 i->second.second = 0; |
| 80 i->second.first->StoppedTracking(); | 85 i->second.first->StoppedTracking(); |
| 81 live_resources_.erase(i); | 86 live_resources_.erase(i); |
| 82 } | 87 } |
| 83 | 88 |
| 84 uint32 ResourceTracker::GetLiveObjectsForModule(PluginModule* module) const { | 89 uint32 ResourceTracker::GetLiveObjectsForModule(PluginModule* module) const { |
| 85 // Since this is for testing only, we'll just go through all of them and | 90 // Since this is for testing only, we'll just go through all of them and |
| 86 // count. | 91 // count. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 module_map_.erase(found); | 167 module_map_.erase(found); |
| 163 } | 168 } |
| 164 | 169 |
| 165 PluginModule* ResourceTracker::GetModule(PP_Module module) { | 170 PluginModule* ResourceTracker::GetModule(PP_Module module) { |
| 166 ModuleMap::iterator found = module_map_.find(module); | 171 ModuleMap::iterator found = module_map_.find(module); |
| 167 if (found == module_map_.end()) | 172 if (found == module_map_.end()) |
| 168 return NULL; | 173 return NULL; |
| 169 return found->second; | 174 return found->second; |
| 170 } | 175 } |
| 171 | 176 |
| 177 // static |
| 178 void ResourceTracker::SetSingletonOverride(ResourceTracker* tracker) { |
| 179 DCHECK(!singleton_override_); |
| 180 singleton_override_ = tracker; |
| 181 } |
| 182 |
| 183 // static |
| 184 void ResourceTracker::ClearSingletonOverride() { |
| 185 DCHECK(singleton_override_); |
| 186 singleton_override_ = NULL; |
| 187 } |
| 188 |
| 172 } // namespace pepper | 189 } // namespace pepper |
| OLD | NEW |