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 |