Index: webkit/glue/plugins/pepper_resource_tracker.h |
=================================================================== |
--- webkit/glue/plugins/pepper_resource_tracker.h (revision 69381) |
+++ webkit/glue/plugins/pepper_resource_tracker.h (working copy) |
@@ -1,147 +0,0 @@ |
-// 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. |
- |
-#ifndef WEBKIT_GLUE_PLUGINS_PEPPER_RESOURCE_TRACKER_H_ |
-#define WEBKIT_GLUE_PLUGINS_PEPPER_RESOURCE_TRACKER_H_ |
- |
-#include <map> |
-#include <utility> |
- |
-#include "base/basictypes.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/hash_tables.h" |
-#include "base/ref_counted.h" |
-#include "ppapi/c/pp_instance.h" |
-#include "ppapi/c/pp_module.h" |
-#include "ppapi/c/pp_resource.h" |
- |
-namespace base { |
-template <typename T> struct DefaultLazyInstanceTraits; |
-} |
- |
-namespace pepper { |
- |
-class PluginInstance; |
-class PluginModule; |
-class Resource; |
-class ResourceTrackerTest; |
- |
-// This class maintains a global list of all live pepper resources. It allows |
-// us to check resource ID validity and to map them to a specific module. |
-// |
-// This object is threadsafe. |
-class ResourceTracker { |
- public: |
- // Returns the pointer to the singleton object. |
- static ResourceTracker* Get(); |
- |
- // PP_Resources -------------------------------------------------------------- |
- |
- // The returned pointer will be NULL if there is no resource. Note that this |
- // return value is a scoped_refptr so that we ensure the resource is valid |
- // from the point of the lookup to the point that the calling code needs it. |
- // Otherwise, the plugin could Release() the resource on another thread and |
- // the object will get deleted out from under us. |
- scoped_refptr<Resource> GetResource(PP_Resource res) const; |
- |
- // Increment resource's plugin refcount. See ResourceAndRefCount comments |
- // below. |
- bool AddRefResource(PP_Resource res); |
- bool UnrefResource(PP_Resource res); |
- |
- // Forces the plugin refcount of the given resource to 0. This can be used to |
- // delete an object the plugin has leaked or whose lifetime is otherwise |
- // exceeded. |
- // |
- // Note that this may not necessarily delete the resource object since the |
- // regular refcount is maintained separately from the plugin refcount and |
- // random components in the Pepper implementation could still have |
- // references to it. |
- void ForceDeletePluginResourceRefs(PP_Resource res); |
- |
- // Returns the number of resources associated with this module. |
- // |
- // This is slow, use only for testing. |
- uint32 GetLiveObjectsForModule(PluginModule* module) const; |
- |
- // PP_Modules ---------------------------------------------------------------- |
- |
- // Adds a new plugin module to the list of tracked module, and returns a new |
- // module handle to identify it. |
- PP_Module AddModule(PluginModule* module); |
- |
- // Called when a plugin modulde was deleted and should no longer be tracked. |
- // The given handle should be one generated by AddModule. |
- void ModuleDeleted(PP_Module module); |
- |
- // Returns a pointer to the plugin modulde object associated with the given |
- // modulde handle. The return value will be NULL if the handle is invalid. |
- PluginModule* GetModule(PP_Module module); |
- |
- // PP_Instances -------------------------------------------------------------- |
- |
- // Adds a new plugin instance to the list of tracked instances, and returns a |
- // new instance handle to identify it. |
- PP_Instance AddInstance(PluginInstance* instance); |
- |
- // Called when a plugin instance was deleted and should no longer be tracked. |
- // The given handle should be one generated by AddInstance. |
- void InstanceDeleted(PP_Instance instance); |
- |
- // Returns a pointer to the plugin instance object associated with the given |
- // instance handle. The return value will be NULL if the handle is invalid. |
- PluginInstance* GetInstance(PP_Instance instance); |
- |
- private: |
- friend struct base::DefaultLazyInstanceTraits<ResourceTracker>; |
- friend class Resource; |
- friend class ResourceTrackerTest; |
- |
- // Prohibit creation other then by the Singleton class. |
- ResourceTracker(); |
- ~ResourceTracker(); |
- |
- // Adds the given resource to the tracker and assigns it a resource ID and |
- // refcount of 1. The assigned resource ID will be returned. Used only by the |
- // Resource class. |
- PP_Resource AddResource(Resource* resource); |
- |
- // Overrides the singleton object. This is used for tests which want to |
- // specify their own tracker (otherwise, you can get cross-talk between |
- // tests since the data will live into the subsequent tests). |
- static void SetSingletonOverride(ResourceTracker* tracker); |
- static void ClearSingletonOverride(); |
- |
- // See SetSingletonOverride above. |
- static ResourceTracker* singleton_override_; |
- |
- // Last assigned resource ID. |
- PP_Resource last_id_; |
- |
- // For each PP_Resource, keep the Resource* (as refptr) and plugin use count. |
- // This use count is different then Resource's RefCount, and is manipulated |
- // using this RefResource/UnrefResource. When it drops to zero, we just remove |
- // the resource from this resource tracker, but the resource object will be |
- // alive so long as some scoped_refptr still holds it's reference. This |
- // prevents plugins from forcing destruction of Resource objects. |
- typedef std::pair<scoped_refptr<Resource>, size_t> ResourceAndRefCount; |
- typedef base::hash_map<PP_Resource, ResourceAndRefCount> ResourceMap; |
- ResourceMap live_resources_; |
- |
- // Tracks all live instances. The pointers are non-owning, the PluginInstance |
- // destructor will notify us when the instance is deleted. |
- typedef std::map<PP_Instance, PluginInstance*> InstanceMap; |
- InstanceMap instance_map_; |
- |
- // Tracks all live modules. The pointers are non-owning, the PluginModule |
- // destructor will notify us when the module is deleted. |
- typedef std::map<PP_Module, PluginModule*> ModuleMap; |
- ModuleMap module_map_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ResourceTracker); |
-}; |
- |
-} // namespace pepper |
- |
-#endif // WEBKIT_GLUE_PLUGINS_PEPPER_RESOURCE_TRACKER_H_ |