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

Unified Diff: ppapi/shared_impl/resource_var.h

Issue 23809016: [PPAPI] ResourceVar now reference counts its PP_Resource in the plugin. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Use a ScopedPPResource instead of PP_Resource. Created 7 years, 3 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 | « no previous file | ppapi/shared_impl/resource_var.cc » ('j') | ppapi/shared_impl/unittest_utils.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/shared_impl/resource_var.h
diff --git a/ppapi/shared_impl/resource_var.h b/ppapi/shared_impl/resource_var.h
index 70eabc6cfb56ab426618ea14ba3ed1ae4595e62b..af78b0d6b6f2fac648b906efc4fc060abe295653 100644
--- a/ppapi/shared_impl/resource_var.h
+++ b/ppapi/shared_impl/resource_var.h
@@ -9,47 +9,71 @@
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_var.h"
#include "ppapi/shared_impl/ppapi_shared_export.h"
+#include "ppapi/shared_impl/scoped_pp_resource.h"
#include "ppapi/shared_impl/var.h"
namespace ppapi {
+class HostResourceVar;
+
// Represents a resource Var.
class PPAPI_SHARED_EXPORT ResourceVar : public Var {
public:
- // Makes a null resource var.
+ // Gets the resource ID associated with this var.
+ // This is 0 if a resource is still pending (only possible on the host side).
+ virtual PP_Resource pp_resource() const = 0;
+
+ // Determines whether this is a pending resource.
+ // This is true if, on the host side, the pp_resource is 0 and there is a
+ // non-empty creation_message.
+ virtual bool IsPending() const = 0;
+
+ // Safely down-cast to HostResourceVar, for access to creation_message.
+ // If this is not a HostResourceVar, returns NULL.
+ // Always succeeds if IsPending returns true.
+ virtual HostResourceVar* AsHostResourceVar();
+
+ // Var override.
+ virtual ResourceVar* AsResourceVar() OVERRIDE;
+ virtual PP_VarType GetType() const OVERRIDE;
+
+ // Helper function that converts a PP_Var to a ResourceVar. This will
+ // return NULL if the PP_Var is not of Resource type.
+ static ResourceVar* FromPPVar(PP_Var var);
+
+ protected:
ResourceVar();
dmichael (off chromium) 2013/09/13 17:29:03 you also need to define a virtual destructor.
Matt Giuca 2013/09/17 00:24:52 Done.
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ResourceVar);
+};
+
+// Represents a resource Var, usable on the host side.
raymes 2013/09/13 17:41:33 Nit: please fill the line to 80chars with comments
Matt Giuca 2013/09/17 00:24:52 Done.
+// Can either have a plugin-side resource or a pending resource host.
+class PPAPI_SHARED_EXPORT HostResourceVar : public ResourceVar {
dmichael (off chromium) 2013/09/13 17:29:03 Should this live in content/renderer/pepper instea
Matt Giuca 2013/09/17 01:26:28 Done.
+ public:
+ // Makes a null resource var.
+ HostResourceVar();
+
// Makes a resource var with an existing plugin-side resource.
- explicit ResourceVar(PP_Resource pp_resource);
+ explicit HostResourceVar(PP_Resource pp_resource);
// Makes a resource var with a pending resource host.
// The |creation_message| contains instructions on how to create the
dmichael (off chromium) 2013/09/13 17:29:03 s/"instruction on how to"/"data needed to"?
Matt Giuca 2013/09/17 00:24:52 Done.
// plugin-side resource. Its type depends on the type of resource.
- explicit ResourceVar(const IPC::Message& creation_message);
+ explicit HostResourceVar(const IPC::Message& creation_message);
- virtual ~ResourceVar();
+ virtual ~HostResourceVar();
- // Gets the resource ID associated with this var.
- // This is 0 if a resource is still pending.
- PP_Resource pp_resource() const { return pp_resource_; }
+ // ResourceVar override.
+ virtual PP_Resource pp_resource() const OVERRIDE;
+ virtual bool IsPending() const OVERRIDE;
+ virtual HostResourceVar* AsHostResourceVar() OVERRIDE;
// Gets the message for creating a plugin-side resource.
// May be an empty message.
dmichael (off chromium) 2013/09/13 17:29:03 Would it be better to own a scoped_ptr instead, an
Matt Giuca 2013/09/17 00:24:52 Done.
const IPC::Message& creation_message() const { return creation_message_; }
- // Determines whether this is a pending resource.
- // This is true if the pp_resource is 0 and there is a non-empty
- // creation_message.
- bool IsPending() const;
-
- // Var override.
- virtual ResourceVar* AsResourceVar() OVERRIDE;
- virtual PP_VarType GetType() const OVERRIDE;
-
- // Helper function that converts a PP_Var to a ResourceVar. This will
- // return NULL if the PP_Var is not of Resource type.
- static ResourceVar* FromPPVar(PP_Var var);
-
private:
// Real resource ID in the plugin. 0 if one has not yet been created
// (indicating that there is a pending host resource).
@@ -60,7 +84,30 @@ class PPAPI_SHARED_EXPORT ResourceVar : public Var {
// Otherwise, carries an empty message.
IPC::Message creation_message_;
- DISALLOW_COPY_AND_ASSIGN(ResourceVar);
+ DISALLOW_COPY_AND_ASSIGN(HostResourceVar);
+};
+
+// Represents a resource Var, usable on the plugin side.
raymes 2013/09/13 17:41:33 nit: Var -> var for consistency
Matt Giuca 2013/09/17 00:24:52 Done.
+class PPAPI_SHARED_EXPORT PluginResourceVar : public ResourceVar {
dmichael (off chromium) 2013/09/13 17:29:03 This should probably live in ppapi/proxy (Note, I
Matt Giuca 2013/09/17 01:26:28 Done.
+ public:
+ // Makes a null resource var.
+ PluginResourceVar();
+
+ // Makes a resource var with an existing resource.
+ // Takes one reference to the given resource.
+ explicit PluginResourceVar(PP_Resource pp_resource);
+
+ virtual ~PluginResourceVar();
+
+ // ResourceVar override.
+ virtual PP_Resource pp_resource() const OVERRIDE;
raymes 2013/09/13 17:41:33 nit: pp_resource() style naming is usually for sim
Matt Giuca 2013/09/17 00:24:52 Done.
+ virtual bool IsPending() const OVERRIDE;
+
+ private:
+ // Resource ID.
+ ScopedPPResource pp_resource_;
dmichael (off chromium) 2013/09/13 17:29:03 If possible, I think scoped_refptr<Resource> would
Matt Giuca 2013/09/17 00:24:52 I had a long chat with Yuzhu about this. First, we
+
+ DISALLOW_COPY_AND_ASSIGN(PluginResourceVar);
};
} // namespace ppapi
« no previous file with comments | « no previous file | ppapi/shared_impl/resource_var.cc » ('j') | ppapi/shared_impl/unittest_utils.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698