summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy
diff options
context:
space:
mode:
authormgiuca@chromium.org <mgiuca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-23 15:09:21 +0000
committermgiuca@chromium.org <mgiuca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-23 15:09:21 +0000
commitc82b014311d37cc8c4ea0c54e41d1925fd7a3df4 (patch)
treee055d0451d810f83b107b13d8c9569c7eea13ed8 /ppapi/proxy
parenteb856a5fc49d6efbf06118d43b453b1be4859540 (diff)
downloadchromium_src-c82b014311d37cc8c4ea0c54e41d1925fd7a3df4.zip
chromium_src-c82b014311d37cc8c4ea0c54e41d1925fd7a3df4.tar.gz
chromium_src-c82b014311d37cc8c4ea0c54e41d1925fd7a3df4.tar.bz2
[PPAPI] ResourceVar now reference counts its Resource in the plugin.
ResourceVar is now an abstract base class with subclasses HostResourceVar and PluginResourceVar. The PluginResourceVar has a reference counted Resource instead of a PP_Resource. VarTracker has MakeResourceVar and MakeResourcePPVar methods, to abstract over the creation of a resource var of the correct subclass. Also, the creation_message is now NULL when empty, instead of being an empty message object. BUG=290713 Review URL: https://chromiumcodereview.appspot.com/23809016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@224717 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy')
-rw-r--r--ppapi/proxy/plugin_resource_var.cc20
-rw-r--r--ppapi/proxy/plugin_resource_var.h39
-rw-r--r--ppapi/proxy/plugin_var_tracker.cc11
-rw-r--r--ppapi/proxy/plugin_var_tracker.h1
4 files changed, 71 insertions, 0 deletions
diff --git a/ppapi/proxy/plugin_resource_var.cc b/ppapi/proxy/plugin_resource_var.cc
new file mode 100644
index 0000000..0ccff74
--- /dev/null
+++ b/ppapi/proxy/plugin_resource_var.cc
@@ -0,0 +1,20 @@
+// Copyright 2013 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.
+
+#include "ppapi/proxy/plugin_resource_var.h"
+
+PluginResourceVar::PluginResourceVar() {}
+
+PluginResourceVar::PluginResourceVar(ppapi::Resource* resource)
+ : resource_(resource) {}
+
+PP_Resource PluginResourceVar::GetPPResource() const {
+ return resource_->pp_resource();
+}
+
+bool PluginResourceVar::IsPending() const {
+ return false;
+}
+
+PluginResourceVar::~PluginResourceVar() {}
diff --git a/ppapi/proxy/plugin_resource_var.h b/ppapi/proxy/plugin_resource_var.h
new file mode 100644
index 0000000..b02718b
--- /dev/null
+++ b/ppapi/proxy/plugin_resource_var.h
@@ -0,0 +1,39 @@
+// Copyright 2013 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 PPAPI_PROXY_PLUGIN_RESOURCE_VAR_H_
+#define PPAPI_PROXY_PLUGIN_RESOURCE_VAR_H_
+
+#include "ppapi/c/pp_resource.h"
+#include "ppapi/proxy/ppapi_proxy_export.h"
+#include "ppapi/shared_impl/resource.h"
+#include "ppapi/shared_impl/resource_var.h"
+#include "ppapi/shared_impl/var.h"
+
+// Represents a resource Var, usable on the plugin side.
+class PPAPI_PROXY_EXPORT PluginResourceVar : public ppapi::ResourceVar {
+ public:
+ // Makes a null resource var.
+ PluginResourceVar();
+
+ // Makes a resource var with an existing resource.
+ // Takes one reference to the given resource.
+ explicit PluginResourceVar(ppapi::Resource* resource);
+
+ // ResourceVar override.
+ virtual PP_Resource GetPPResource() const OVERRIDE;
+ virtual bool IsPending() const OVERRIDE;
+
+ scoped_refptr<ppapi::Resource> resource() const { return resource_; }
+
+ protected:
+ virtual ~PluginResourceVar();
+
+ private:
+ scoped_refptr<ppapi::Resource> resource_;
+
+ DISALLOW_COPY_AND_ASSIGN(PluginResourceVar);
+};
+
+#endif
diff --git a/ppapi/proxy/plugin_var_tracker.cc b/ppapi/proxy/plugin_var_tracker.cc
index ee29985..d2a4d74 100644
--- a/ppapi/proxy/plugin_var_tracker.cc
+++ b/ppapi/proxy/plugin_var_tracker.cc
@@ -10,10 +10,13 @@
#include "ppapi/c/ppb_var.h"
#include "ppapi/proxy/plugin_array_buffer_var.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_resource_var.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/proxy_object_var.h"
#include "ppapi/shared_impl/api_id.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/proxy_lock.h"
+#include "ppapi/shared_impl/resource_tracker.h"
#include "ppapi/shared_impl/var.h"
namespace ppapi {
@@ -151,6 +154,14 @@ void PluginVarTracker::ReleaseHostObject(PluginDispatcher* dispatcher,
ReleaseVar(found->second);
}
+ResourceVar* PluginVarTracker::MakeResourceVar(PP_Resource pp_resource) {
+ ResourceTracker* resource_tracker = PpapiGlobals::Get()->GetResourceTracker();
+ ppapi::Resource* resource = resource_tracker->GetResource(pp_resource);
+ if (!resource)
+ return NULL;
+ return new PluginResourceVar(resource);
+}
+
void PluginVarTracker::DidDeleteInstance(PP_Instance instance) {
// Calling the destructors on plugin objects may in turn release other
// objects which will mutate the map out from under us. So do a two-step
diff --git a/ppapi/proxy/plugin_var_tracker.h b/ppapi/proxy/plugin_var_tracker.h
index 670457f..126c8fc 100644
--- a/ppapi/proxy/plugin_var_tracker.h
+++ b/ppapi/proxy/plugin_var_tracker.h
@@ -59,6 +59,7 @@ class PPAPI_PROXY_EXPORT PluginVarTracker : public VarTracker {
const PP_Var& host_object);
// VarTracker public overrides.
+ virtual ResourceVar* MakeResourceVar(PP_Resource pp_resource) OVERRIDE;
virtual void DidDeleteInstance(PP_Instance instance) OVERRIDE;
virtual int TrackSharedMemoryHandle(PP_Instance instance,
base::SharedMemoryHandle file,