Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Unified Diff: ppapi/proxy/plugin_resource_tracker.h

Issue 6334016: Refactor PPAPI proxy resource handling to maintain which host they came from,... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/plugin_resource.cc ('k') | ppapi/proxy/plugin_resource_tracker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/plugin_resource_tracker.h
===================================================================
--- ppapi/proxy/plugin_resource_tracker.h (revision 72840)
+++ ppapi/proxy/plugin_resource_tracker.h (working copy)
@@ -6,12 +6,15 @@
#define PPAPI_PROXY_PLUGIN_RESOURCE_TRACKER_H_
#include <map>
+#include <utility>
#include "base/linked_ptr.h"
#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_var.h"
+#include "ppapi/proxy/host_resource.h"
template<typename T> struct DefaultSingletonTraits;
@@ -23,6 +26,11 @@
class PluginResourceTracker {
public:
+ // Called by tests that want to specify a specific ResourceTracker. This
+ // allows them to use a unique one each time and avoids singletons sticking
+ // around across tests.
+ static void SetInstanceForTest(PluginResourceTracker* tracker);
+
// Returns the global singleton resource tracker for the plugin.
static PluginResourceTracker* GetInstance();
@@ -30,38 +38,24 @@
// there isn't one.
PluginResource* GetResourceObject(PP_Resource pp_resource);
- void AddResource(PP_Resource pp_resource, linked_ptr<PluginResource> object);
+ // Adds the given resource object to the tracked list, and returns the
+ // plugin-local PP_Resource ID that identifies the resource. Note that this
+ // PP_Resource is not valid to send to the host, use
+ // PluginResource.host_resource() to get that.
+ PP_Resource AddResource(linked_ptr<PluginResource> object);
void AddRefResource(PP_Resource resource);
void ReleaseResource(PP_Resource resource);
- // Checks if the resource just returned from the renderer is already
- // tracked by the plugin side and adjusts the refcounts if so.
- //
- // When the browser returns a PP_Resource, it could be a new one, in which
- // case the proxy wants to create a corresponding object and call
- // AddResource() on it. However, if the resouce is already known, then the
- // refcount needs to be adjusted in both the plugin and the renderer side
- // and no such object needs to be created.
- //
- // Returns true if the resource was previously known. The refcount will be
- // fixed up such that it's ready to use by the plugin. A proxy can then
- // just return the resource without doing any more work.
- //
- // Typical usage:
- //
- // PP_Resource result;
- // dispatcher->Send(new MyMessage(..., &result));
- // if (PluginResourceTracker::GetInstance()->
- // PreparePreviouslyTrackedResource(result))
- // return result;
- // ... create resource object ...
- // PluginResourceTracker::GetInstance()->AddResource(result, object);
- // return result;
- bool PreparePreviouslyTrackedResource(PP_Resource resource);
+ // Given a host resource, maps it to an existing plugin resource ID if it
+ // exists, or returns 0 on failure.
+ PP_Resource PluginResourceForHostResource(
+ const HostResource& resource) const;
private:
friend struct DefaultSingletonTraits<PluginResourceTracker>;
+ friend class PluginResourceTrackerTest;
+ friend class PluginProxyTest;
PluginResourceTracker();
~PluginResourceTracker();
@@ -86,8 +80,19 @@
void SendReleaseResourceToHost(PP_Resource resource_id,
PluginResource* resource);
+ // Map of plugin resource IDs to the information tracking that resource.
typedef std::map<PP_Resource, ResourceInfo> ResourceMap;
ResourceMap resource_map_;
+
+ // Map of host instance/resource pairs to a plugin resource ID.
+ typedef std::map<HostResource, PP_Resource> HostResourceMap;
+ HostResourceMap host_resource_map_;
+
+ // Tracks the last ID we've sent out as a plugin resource so we don't send
+ // duplicates.
+ PP_Resource last_resource_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(PluginResourceTracker);
};
} // namespace proxy
« no previous file with comments | « ppapi/proxy/plugin_resource.cc ('k') | ppapi/proxy/plugin_resource_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698