diff options
author | mgiuca@chromium.org <mgiuca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-23 15:09:21 +0000 |
---|---|---|
committer | mgiuca@chromium.org <mgiuca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-23 15:09:21 +0000 |
commit | c82b014311d37cc8c4ea0c54e41d1925fd7a3df4 (patch) | |
tree | e055d0451d810f83b107b13d8c9569c7eea13ed8 /ppapi/proxy | |
parent | eb856a5fc49d6efbf06118d43b453b1be4859540 (diff) | |
download | chromium_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.cc | 20 | ||||
-rw-r--r-- | ppapi/proxy/plugin_resource_var.h | 39 | ||||
-rw-r--r-- | ppapi/proxy/plugin_var_tracker.cc | 11 | ||||
-rw-r--r-- | ppapi/proxy/plugin_var_tracker.h | 1 |
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, |