summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-18 15:41:01 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-18 15:41:01 +0000
commit7f8b26b5f223689de7af4803bc07e1e953ff5953 (patch)
treed6f3e574d97c6253b8b202264fe23dea1b489dc2 /ppapi/proxy
parentd8886526085a42874663be638be1421e78f6172c (diff)
downloadchromium_src-7f8b26b5f223689de7af4803bc07e1e953ff5953.zip
chromium_src-7f8b26b5f223689de7af4803bc07e1e953ff5953.tar.gz
chromium_src-7f8b26b5f223689de7af4803bc07e1e953ff5953.tar.bz2
Add a unified resource tracker shared between the proxy and the impl.
This renames the old ResourceObjectBase to Resource and removes the old PluginResource. It moves the resource tracker from the impl to the shared_impl, and makes the proxy use it. Some things become a little less neat because there's no proxy resource base class. In particular GetDispatcher() is now gone. I considered whether to add a helper base class that provides this function, but decided against it and had individual resource classes implement this when their implementation would find it useful. This is because ultimately I want more of this functionality to move into the shared_impl, and it's easier to do that if there are fewer proxy-specific things in the resources. This changes the way that plugins are added to the tracker. Previously they would only be in the tracker if the plugin had a reference to them, although they could be alive if the impl had a scoped_ptr referencing an object. This actually has the bug that if we then give the resource back to the plugin, it wouldn't be refcounted properly and everything would get confused. Now the tracker tracks all live resource objects whether or not the plugin has a ref. This works basically like the var tracker (it would be nice if the var and resource trackers shared more code, but that would further complicate this already overcomplicated patch). The resource tracker takes an extra ref whenever the plugin has one or more, and otherwise just tracks live resources. Review URL: http://codereview.chromium.org/7629017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97314 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy')
-rw-r--r--ppapi/proxy/mock_resource.cc4
-rw-r--r--ppapi/proxy/mock_resource.h4
-rw-r--r--ppapi/proxy/plugin_dispatcher.cc8
-rw-r--r--ppapi/proxy/plugin_dispatcher.h5
-rw-r--r--ppapi/proxy/plugin_resource.cc27
-rw-r--r--ppapi/proxy/plugin_resource.h45
-rw-r--r--ppapi/proxy/plugin_resource_tracker.cc138
-rw-r--r--ppapi/proxy/plugin_resource_tracker.h52
-rw-r--r--ppapi/proxy/plugin_resource_tracker_unittest.cc15
-rw-r--r--ppapi/proxy/ppapi_param_traits.cc6
-rw-r--r--ppapi/proxy/ppapi_proxy_test.cc3
-rw-r--r--ppapi/proxy/ppb_audio_config_proxy.cc12
-rw-r--r--ppapi/proxy/ppb_audio_proxy.cc17
-rw-r--r--ppapi/proxy/ppb_broker_proxy.cc17
-rw-r--r--ppapi/proxy/ppb_buffer_proxy.cc6
-rw-r--r--ppapi/proxy/ppb_buffer_proxy.h6
-rw-r--r--ppapi/proxy/ppb_context_3d_proxy.cc23
-rw-r--r--ppapi/proxy/ppb_context_3d_proxy.h7
-rw-r--r--ppapi/proxy/ppb_cursor_control_proxy.cc8
-rw-r--r--ppapi/proxy/ppb_file_chooser_proxy.cc16
-rw-r--r--ppapi/proxy/ppb_file_ref_proxy.cc35
-rw-r--r--ppapi/proxy/ppb_file_system_proxy.cc17
-rw-r--r--ppapi/proxy/ppb_flash_file_proxy.cc18
-rw-r--r--ppapi/proxy/ppb_flash_menu_proxy.cc16
-rw-r--r--ppapi/proxy/ppb_flash_menu_proxy.h5
-rw-r--r--ppapi/proxy/ppb_flash_net_connector_proxy.cc14
-rw-r--r--ppapi/proxy/ppb_flash_proxy.cc18
-rw-r--r--ppapi/proxy/ppb_flash_tcp_socket_proxy.cc18
-rw-r--r--ppapi/proxy/ppb_font_proxy.cc12
-rw-r--r--ppapi/proxy/ppb_font_proxy.h9
-rw-r--r--ppapi/proxy/ppb_graphics_2d_proxy.cc31
-rw-r--r--ppapi/proxy/ppb_graphics_2d_proxy.h1
-rw-r--r--ppapi/proxy/ppb_graphics_3d_proxy.cc10
-rw-r--r--ppapi/proxy/ppb_graphics_3d_proxy.h6
-rw-r--r--ppapi/proxy/ppb_image_data_proxy.cc4
-rw-r--r--ppapi/proxy/ppb_image_data_proxy.h11
-rw-r--r--ppapi/proxy/ppb_input_event_proxy.cc13
-rw-r--r--ppapi/proxy/ppb_instance_proxy.cc7
-rw-r--r--ppapi/proxy/ppb_pdf_proxy.cc12
-rw-r--r--ppapi/proxy/ppb_surface_3d_proxy.cc13
-rw-r--r--ppapi/proxy/ppb_surface_3d_proxy.h10
-rw-r--r--ppapi/proxy/ppb_testing_proxy.cc15
-rw-r--r--ppapi/proxy/ppb_url_loader_proxy.cc19
-rw-r--r--ppapi/proxy/ppb_url_request_info_proxy.cc18
-rw-r--r--ppapi/proxy/ppb_url_response_info_proxy.cc23
-rw-r--r--ppapi/proxy/ppb_url_response_info_proxy.h2
-rw-r--r--ppapi/proxy/ppb_video_capture_proxy.cc16
-rw-r--r--ppapi/proxy/ppb_video_decoder_proxy.cc48
-rw-r--r--ppapi/proxy/ppb_video_decoder_proxy.h1
-rw-r--r--ppapi/proxy/ppp_graphics_3d_proxy.h1
-rw-r--r--ppapi/proxy/ppp_instance_private_proxy.h1
-rw-r--r--ppapi/proxy/ppp_instance_proxy.cc2
-rw-r--r--ppapi/proxy/ppp_video_decoder_proxy.cc4
-rw-r--r--ppapi/proxy/proxy_module.h1
-rw-r--r--ppapi/proxy/resource_creation_proxy.cc8
55 files changed, 345 insertions, 513 deletions
diff --git a/ppapi/proxy/mock_resource.cc b/ppapi/proxy/mock_resource.cc
index 2f1a0b7..2173eea 100644
--- a/ppapi/proxy/mock_resource.cc
+++ b/ppapi/proxy/mock_resource.cc
@@ -5,12 +5,12 @@
#include "ppapi/proxy/mock_resource.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
-MockResource::MockResource(const HostResource& resource)
- : PluginResource(resource) {
+MockResource::MockResource(const HostResource& resource) : Resource(resource) {
}
MockResource::~MockResource() {
diff --git a/ppapi/proxy/mock_resource.h b/ppapi/proxy/mock_resource.h
index dbad2f6..a886c20 100644
--- a/ppapi/proxy/mock_resource.h
+++ b/ppapi/proxy/mock_resource.h
@@ -6,12 +6,12 @@
#define PPAPI_PROXY_MOCK_RESOURCE_H_
#include "ppapi/c/pp_instance.h"
-#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/shared_impl/resource.h"
namespace pp {
namespace proxy {
-class MockResource : public PluginResource {
+class MockResource : public ppapi::Resource {
public:
MockResource(const ppapi::HostResource& resource);
virtual ~MockResource();
diff --git a/ppapi/proxy/plugin_dispatcher.cc b/ppapi/proxy/plugin_dispatcher.cc
index 53dab26..fea4de6 100644
--- a/ppapi/proxy/plugin_dispatcher.cc
+++ b/ppapi/proxy/plugin_dispatcher.cc
@@ -24,6 +24,7 @@
#include "ppapi/proxy/ppb_instance_proxy.h"
#include "ppapi/proxy/ppp_class_proxy.h"
#include "ppapi/proxy/resource_creation_proxy.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/tracker_base.h"
#if defined(OS_POSIX)
@@ -31,6 +32,8 @@
#include "ipc/ipc_channel_posix.h"
#endif
+using ppapi::Resource;
+
namespace pp {
namespace proxy {
@@ -74,6 +77,11 @@ PluginDispatcher* PluginDispatcher::GetForInstance(PP_Instance instance) {
}
// static
+PluginDispatcher* PluginDispatcher::GetForResource(const Resource* resource) {
+ return GetForInstance(resource->pp_instance());
+}
+
+// static
const void* PluginDispatcher::GetInterfaceFromDispatcher(
const char* interface) {
// All interfaces the plugin requests of the browser are "PPB".
diff --git a/ppapi/proxy/plugin_dispatcher.h b/ppapi/proxy/plugin_dispatcher.h
index ae6da60..b2fbeec 100644
--- a/ppapi/proxy/plugin_dispatcher.h
+++ b/ppapi/proxy/plugin_dispatcher.h
@@ -26,6 +26,7 @@ class WaitableEvent;
namespace ppapi {
struct Preferences;
+class Resource;
}
namespace pp {
@@ -84,6 +85,10 @@ class PluginDispatcher : public Dispatcher {
// DidCreateInstance/DidDestroyInstance.
static PluginDispatcher* GetForInstance(PP_Instance instance);
+ // Same as GetForInstance but retrieves the instance from the given resource
+ // object as a convenience. Returns NULL on failure.
+ static PluginDispatcher* GetForResource(const ppapi::Resource* resource);
+
static const void* GetInterfaceFromDispatcher(const char* interface);
// You must call this function before anything else. Returns true on success.
diff --git a/ppapi/proxy/plugin_resource.cc b/ppapi/proxy/plugin_resource.cc
deleted file mode 100644
index e9f3b75..0000000
--- a/ppapi/proxy/plugin_resource.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2011 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.h"
-
-using ppapi::HostResource;
-
-namespace pp {
-namespace proxy {
-
-PluginResource::PluginResource(const HostResource& resource)
- : ResourceObjectBase(resource.instance()),
- host_resource_(resource) {
-}
-
-PluginResource::~PluginResource() {
-}
-
-PluginDispatcher* PluginResource::GetDispatcher() {
- PluginDispatcher* disp = PluginDispatcher::GetForInstance(instance());
- CHECK(disp);
- return disp;
-}
-
-} // namespace proxy
-} // namespace pp
diff --git a/ppapi/proxy/plugin_resource.h b/ppapi/proxy/plugin_resource.h
deleted file mode 100644
index 298b4cd..0000000
--- a/ppapi/proxy/plugin_resource.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2011 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_H_
-#define PPAPI_PROXY_PLUGIN_RESOURCE_H_
-
-#include "base/basictypes.h"
-#include "ppapi/c/pp_instance.h"
-#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
-#include "ppapi/shared_impl/host_resource.h"
-#include "ppapi/shared_impl/resource_object_base.h"
-
-namespace pp {
-namespace proxy {
-
-class PluginResource : public ::ppapi::ResourceObjectBase {
- public:
- PluginResource(const ppapi::HostResource& resource);
- virtual ~PluginResource();
-
- PP_Instance instance() const { return host_resource_.instance(); }
-
- // Returns the host resource ID for sending to the host process.
- const ppapi::HostResource& host_resource() const {
- return host_resource_;
- }
-
- PluginDispatcher* GetDispatcher();
-
- private:
- // The resource ID in the host that this object corresponds to. Inside the
- // plugin we'll remap the resource IDs so we can have many host processes
- // each independently generating resources (which may conflict) but the IDs
- // in the plugin will all be unique.
- ppapi::HostResource host_resource_;
-
- DISALLOW_COPY_AND_ASSIGN(PluginResource);
-};
-
-} // namespace proxy
-} // namespace pp
-
-#endif // PPAPI_PROXY_PLUGIN_RESOURCE_H_
diff --git a/ppapi/proxy/plugin_resource_tracker.cc b/ppapi/proxy/plugin_resource_tracker.cc
index a511fd9..ac4621e 100644
--- a/ppapi/proxy/plugin_resource_tracker.cc
+++ b/ppapi/proxy/plugin_resource_tracker.cc
@@ -8,12 +8,13 @@
#include "base/memory/singleton.h"
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/ppapi_messages.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/tracker_base.h"
#include "ppapi/shared_impl/var.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
@@ -29,37 +30,8 @@ PluginResourceTracker* g_resource_tracker_override = NULL;
} // namespace
-PluginResourceTracker::ResourceInfo::ResourceInfo() : ref_count(0) {
-}
-
-PluginResourceTracker::ResourceInfo::ResourceInfo(int rc, PluginResource* r)
- : ref_count(rc),
- resource(r) {
-}
-
-PluginResourceTracker::ResourceInfo::ResourceInfo(const ResourceInfo& other)
- : ref_count(other.ref_count),
- resource(other.resource) {
- // Wire up the new shared resource tracker base to use our implementation.
- ::ppapi::TrackerBase::Init(&GetTrackerBase);
-}
-
-PluginResourceTracker::ResourceInfo::~ResourceInfo() {
-}
-
-PluginResourceTracker::ResourceInfo&
-PluginResourceTracker::ResourceInfo::operator=(
- const ResourceInfo& other) {
- ref_count = other.ref_count;
- resource = other.resource;
- return *this;
-}
-
-// Start counting resources at a high number to avoid collisions with vars (to
-// help debugging).
PluginResourceTracker::PluginResourceTracker()
- : var_tracker_test_override_(NULL),
- last_resource_id_(0x00100000) {
+ : var_tracker_test_override_(NULL) {
}
PluginResourceTracker::~PluginResourceTracker() {
@@ -83,39 +55,6 @@ PluginResourceTracker::GetTrackerBaseInstance() {
return GetInstance();
}
-PluginResource* PluginResourceTracker::GetResourceObject(
- PP_Resource pp_resource) {
- ResourceMap::iterator found = resource_map_.find(pp_resource);
- if (found == resource_map_.end())
- return NULL;
- return found->second.resource.get();
-}
-
-PP_Resource PluginResourceTracker::AddResource(PluginResource* object) {
- PP_Resource plugin_resource = ++last_resource_id_;
- DCHECK(resource_map_.find(plugin_resource) == resource_map_.end());
- resource_map_[plugin_resource] = ResourceInfo(1, object);
- if (!object->host_resource().is_null()) {
- // The host resource ID will be 0 for resources that only exist in the
- // plugin process. Don't add those to the list.
- host_resource_map_[object->host_resource()] = plugin_resource;
- }
- return plugin_resource;
-}
-
-void PluginResourceTracker::AddRefResource(PP_Resource resource) {
- ResourceMap::iterator found = resource_map_.find(resource);
- if (found == resource_map_.end()) {
- NOTREACHED();
- return;
- }
- found->second.ref_count++;
-}
-
-void PluginResourceTracker::ReleaseResource(PP_Resource resource) {
- ReleasePluginResourceRef(resource, true);
-}
-
PP_Resource PluginResourceTracker::PluginResourceForHostResource(
const HostResource& resource) const {
HostResourceMap::const_iterator found = host_resource_map_.find(resource);
@@ -124,14 +63,6 @@ PP_Resource PluginResourceTracker::PluginResourceForHostResource(
return found->second;
}
-::ppapi::ResourceObjectBase* PluginResourceTracker::GetResourceAPI(
- PP_Resource res) {
- ResourceMap::iterator found = resource_map_.find(res);
- if (found == resource_map_.end())
- return NULL;
- return found->second.resource.get();
-}
-
::ppapi::FunctionGroupBase* PluginResourceTracker::GetFunctionAPI(
PP_Instance inst,
pp::proxy::InterfaceID id) {
@@ -141,46 +72,41 @@ PP_Resource PluginResourceTracker::PluginResourceForHostResource(
return NULL;
}
-PP_Instance PluginResourceTracker::GetInstanceForResource(
- PP_Resource resource) {
- ResourceMap::iterator found = resource_map_.find(resource);
- if (found == resource_map_.end())
- return 0;
- return found->second.resource->instance();
-}
-
ppapi::VarTracker* PluginResourceTracker::GetVarTracker() {
return &var_tracker();
}
-void PluginResourceTracker::ReleasePluginResourceRef(
- const PP_Resource& resource,
- bool notify_browser_on_release) {
- ResourceMap::iterator found = resource_map_.find(resource);
- if (found == resource_map_.end())
- return;
- found->second.ref_count--;
- if (found->second.ref_count == 0) {
- // Keep a reference while removing in case the destructor ends up
- // re-entering. That way, when the destructor is called, it's out of the
- // maps.
- scoped_refptr<PluginResource> plugin_resource = found->second.resource;
+ppapi::ResourceTracker* PluginResourceTracker::GetResourceTracker() {
+ return this;
+}
+
+PP_Resource PluginResourceTracker::AddResource(Resource* object) {
+ PP_Resource ret = ResourceTracker::AddResource(object);
+
+ // Some resources are plugin-only, so they don't have a host resource.
+ if (object->host_resource().host_resource())
+ host_resource_map_.insert(std::make_pair(object->host_resource(), ret));
+ return ret;
+}
+
+void PluginResourceTracker::RemoveResource(Resource* object) {
+ ResourceTracker::RemoveResource(object);
+
+ if (!object->host_resource().is_null()) {
+ // The host_resource will be NULL for proxy-only resources, which we
+ // obviously don't need to tell the host about.
+ DCHECK(host_resource_map_.find(object->host_resource()) !=
+ host_resource_map_.end());
+ host_resource_map_.erase(object->host_resource());
+
PluginDispatcher* dispatcher =
- PluginDispatcher::GetForInstance(plugin_resource->instance());
- HostResource host_resource = plugin_resource->host_resource();
- if (!host_resource.is_null())
- host_resource_map_.erase(host_resource);
- resource_map_.erase(found);
- plugin_resource = NULL;
-
- // dispatcher can be NULL if the plugin held on to a resource after the
- // instance was destroyed. In that case the browser-side resource has
- // already been freed correctly on the browser side. The host_resource
- // will be NULL for proxy-only resources, which we obviously don't need to
- // tell the host about.
- if (notify_browser_on_release && dispatcher && !host_resource.is_null()) {
+ PluginDispatcher::GetForInstance(object->pp_instance());
+ if (dispatcher) {
+ // The dispatcher can be NULL if the plugin held on to a resource after
+ // the instance was destroyed. In that case the browser-side resource has
+ // already been freed correctly on the browser side.
dispatcher->Send(new PpapiHostMsg_PPBCore_ReleaseResource(
- INTERFACE_ID_PPB_CORE, host_resource));
+ INTERFACE_ID_PPB_CORE, object->host_resource()));
}
}
}
diff --git a/ppapi/proxy/plugin_resource_tracker.h b/ppapi/proxy/plugin_resource_tracker.h
index f788c6c..ccc6d70 100644
--- a/ppapi/proxy/plugin_resource_tracker.h
+++ b/ppapi/proxy/plugin_resource_tracker.h
@@ -16,6 +16,7 @@
#include "ppapi/c/pp_var.h"
#include "ppapi/proxy/plugin_var_tracker.h"
#include "ppapi/shared_impl/host_resource.h"
+#include "ppapi/shared_impl/resource_tracker.h"
#include "ppapi/shared_impl/tracker_base.h"
template<typename T> struct DefaultSingletonTraits;
@@ -28,9 +29,9 @@ namespace pp {
namespace proxy {
class PluginDispatcher;
-class PluginResource;
-class PluginResourceTracker : public ::ppapi::TrackerBase {
+class PluginResourceTracker : public ppapi::TrackerBase,
+ public ppapi::ResourceTracker {
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
@@ -41,21 +42,6 @@ class PluginResourceTracker : public ::ppapi::TrackerBase {
static PluginResourceTracker* GetInstance();
static ::ppapi::TrackerBase* GetTrackerBaseInstance();
- // Returns the object associated with the given resource ID, or NULL if
- // there isn't one.
- PluginResource* GetResourceObject(PP_Resource pp_resource);
-
- // 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.
- //
- // The resource tracker will take a reference to the given object.
- PP_Resource AddResource(PluginResource* object);
-
- void AddRefResource(PP_Resource resource);
- void ReleaseResource(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(
@@ -71,13 +57,16 @@ class PluginResourceTracker : public ::ppapi::TrackerBase {
}
// TrackerBase.
- virtual ppapi::ResourceObjectBase* GetResourceAPI(
- PP_Resource res) OVERRIDE;
virtual ppapi::FunctionGroupBase* GetFunctionAPI(
PP_Instance inst,
pp::proxy::InterfaceID id) OVERRIDE;
- virtual PP_Instance GetInstanceForResource(PP_Resource resource) OVERRIDE;
virtual ppapi::VarTracker* GetVarTracker() OVERRIDE;
+ virtual ppapi::ResourceTracker* GetResourceTracker() OVERRIDE;
+
+ protected:
+ // ResourceTracker overrides.
+ virtual PP_Resource AddResource(ppapi::Resource* object) OVERRIDE;
+ virtual void RemoveResource(ppapi::Resource* object) OVERRIDE;
private:
friend struct DefaultSingletonTraits<PluginResourceTracker>;
@@ -87,21 +76,6 @@ class PluginResourceTracker : public ::ppapi::TrackerBase {
PluginResourceTracker();
virtual ~PluginResourceTracker();
- struct ResourceInfo {
- ResourceInfo();
- ResourceInfo(int ref_count, PluginResource* r);
- ResourceInfo(const ResourceInfo& other);
- ~ResourceInfo();
-
- ResourceInfo& operator=(const ResourceInfo& other);
-
- int ref_count;
- scoped_refptr<PluginResource> resource; // May be NULL.
- };
-
- void ReleasePluginResourceRef(const PP_Resource& var,
- bool notify_browser_on_release);
-
// Use the var_tracker_test_override_ instead if it's non-NULL.
//
// TODO(brettw) this should be somehow separated out from here. I'm thinking
@@ -113,18 +87,10 @@ class PluginResourceTracker : public ::ppapi::TrackerBase {
// test implementation is provided.
PluginVarTracker* var_tracker_test_override_;
- // 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<ppapi::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);
};
diff --git a/ppapi/proxy/plugin_resource_tracker_unittest.cc b/ppapi/proxy/plugin_resource_tracker_unittest.cc
index 8295302..cb26638 100644
--- a/ppapi/proxy/plugin_resource_tracker_unittest.cc
+++ b/ppapi/proxy/plugin_resource_tracker_unittest.cc
@@ -39,11 +39,6 @@ class PluginResourceTrackerTest : public PluginProxyTest {
public:
PluginResourceTrackerTest() {}
~PluginResourceTrackerTest() {}
-
- PluginResourceTracker& tracker() { return tracker_; }
-
- private:
- PluginResourceTracker tracker_;
};
TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) {
@@ -53,22 +48,22 @@ TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) {
serialized.SetHostResource(pp_instance(), host_resource);
// When we haven't added an object, the return value should be 0.
- EXPECT_EQ(0, tracker().PluginResourceForHostResource(serialized));
+ EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized));
EXPECT_EQ(0, TrackedMockResource::tracked_alive_count);
TrackedMockResource* object = new TrackedMockResource(serialized);
EXPECT_EQ(1, TrackedMockResource::tracked_alive_count);
- PP_Resource plugin_resource = tracker().AddResource(object);
+ PP_Resource plugin_resource = object->GetReference();
// Now that the object has been added, the return value should be the plugin
// resource ID we already got.
EXPECT_EQ(plugin_resource,
- tracker().PluginResourceForHostResource(serialized));
+ resource_tracker().PluginResourceForHostResource(serialized));
// Releasing the resource should have freed it.
- tracker().ReleaseResource(plugin_resource);
+ resource_tracker().ReleaseResource(plugin_resource);
EXPECT_EQ(0, TrackedMockResource::tracked_alive_count);
- EXPECT_EQ(0, tracker().PluginResourceForHostResource(serialized));
+ EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized));
}
} // namespace proxy
diff --git a/ppapi/proxy/ppapi_param_traits.cc b/ppapi/proxy/ppapi_param_traits.cc
index bca08ee..d8f6b70 100644
--- a/ppapi/proxy/ppapi_param_traits.cc
+++ b/ppapi/proxy/ppapi_param_traits.cc
@@ -375,15 +375,15 @@ void ParamTraits<pp::proxy::SerializedFontDescription>::Log(
// static
void ParamTraits<ppapi::HostResource>::Write(Message* m,
- const param_type& p) {
+ const param_type& p) {
ParamTraits<PP_Instance>::Write(m, p.instance());
ParamTraits<PP_Resource>::Write(m, p.host_resource());
}
// static
bool ParamTraits<ppapi::HostResource>::Read(const Message* m,
- void** iter,
- param_type* r) {
+ void** iter,
+ param_type* r) {
PP_Instance instance;
PP_Resource resource;
if (!ParamTraits<PP_Instance>::Read(m, iter, &instance) ||
diff --git a/ppapi/proxy/ppapi_proxy_test.cc b/ppapi/proxy/ppapi_proxy_test.cc
index eb7b440..8049330 100644
--- a/ppapi/proxy/ppapi_proxy_test.cc
+++ b/ppapi/proxy/ppapi_proxy_test.cc
@@ -147,6 +147,7 @@ Dispatcher* PluginProxyTestHarness::GetDispatcher() {
void PluginProxyTestHarness::SetUpHarness() {
// These must be first since the dispatcher set-up uses them.
+ resource_tracker_.DidCreateInstance(pp_instance());
PluginResourceTracker::SetInstanceForTest(&resource_tracker_);
resource_tracker_.set_var_tracker_test_override(&var_tracker_);
@@ -163,6 +164,7 @@ void PluginProxyTestHarness::SetUpHarnessWithChannel(
base::WaitableEvent* shutdown_event,
bool is_client) {
// These must be first since the dispatcher set-up uses them.
+ resource_tracker_.DidCreateInstance(pp_instance());
PluginResourceTracker::SetInstanceForTest(&resource_tracker_);
resource_tracker_.set_var_tracker_test_override(&var_tracker_);
plugin_delegate_mock_.Init(ipc_message_loop, shutdown_event);
@@ -180,6 +182,7 @@ void PluginProxyTestHarness::TearDownHarness() {
plugin_dispatcher_->DidDestroyInstance(pp_instance());
plugin_dispatcher_.reset();
+ resource_tracker_.DidDeleteInstance(pp_instance());
PluginResourceTracker::SetInstanceForTest(NULL);
}
diff --git a/ppapi/proxy/ppb_audio_config_proxy.cc b/ppapi/proxy/ppb_audio_config_proxy.cc
index f2eb9d8..eeb4907 100644
--- a/ppapi/proxy/ppb_audio_config_proxy.cc
+++ b/ppapi/proxy/ppb_audio_config_proxy.cc
@@ -6,33 +6,31 @@
#include "ppapi/c/ppb_audio_config.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/shared_impl/audio_config_impl.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
// The implementation is actually in AudioConfigImpl.
-class AudioConfig : public PluginResource,
- public ppapi::AudioConfigImpl {
+class AudioConfig : public Resource, public ppapi::AudioConfigImpl {
public:
// Note that you must call Init (on AudioConfigImpl) before using this class.
AudioConfig(const HostResource& resource);
virtual ~AudioConfig();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual ::ppapi::thunk::PPB_AudioConfig_API* AsPPB_AudioConfig_API() OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(AudioConfig);
};
-AudioConfig::AudioConfig(const HostResource& resource)
- : PluginResource(resource) {
+AudioConfig::AudioConfig(const HostResource& resource) : Resource(resource) {
}
AudioConfig::~AudioConfig() {
@@ -80,7 +78,7 @@ PP_Resource PPB_AudioConfig_Proxy::CreateProxyResource(
HostResource::MakeInstanceOnly(instance)));
if (!object->Init(sample_rate, sample_frame_count))
return 0;
- return PluginResourceTracker::GetInstance()->AddResource(object);
+ return object->GetReference();
}
bool PPB_AudioConfig_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_audio_proxy.cc b/ppapi/proxy/ppb_audio_proxy.cc
index c6562ec..d9f5d60 100644
--- a/ppapi/proxy/ppb_audio_proxy.cc
+++ b/ppapi/proxy/ppb_audio_proxy.cc
@@ -14,15 +14,16 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/interface_id.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/shared_impl/audio_impl.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_audio_config_api.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/resource_creation_api.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Audio_API;
using ppapi::thunk::PPB_AudioConfig_API;
@@ -30,7 +31,7 @@ using ppapi::thunk::PPB_AudioConfig_API;
namespace pp {
namespace proxy {
-class Audio : public PluginResource, public ppapi::AudioImpl {
+class Audio : public Resource, public ppapi::AudioImpl {
public:
Audio(const HostResource& audio_id,
PP_Resource config_id,
@@ -38,7 +39,7 @@ class Audio : public PluginResource, public ppapi::AudioImpl {
void* user_data);
virtual ~Audio();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_Audio_API* AsPPB_Audio_API();
// PPB_Audio_API implementation.
@@ -62,7 +63,7 @@ Audio::Audio(const HostResource& audio_id,
PP_Resource config_id,
PPB_Audio_Callback callback,
void* user_data)
- : PluginResource(audio_id),
+ : Resource(audio_id),
config_(config_id) {
SetCallback(callback, user_data);
PluginResourceTracker::GetInstance()->AddRefResource(config_);
@@ -86,7 +87,7 @@ PP_Bool Audio::StartPlayback() {
if (playing())
return PP_TRUE;
SetStartPlaybackState();
- PluginDispatcher::GetForInstance(instance())->Send(
+ PluginDispatcher::GetForResource(this)->Send(
new PpapiHostMsg_PPBAudio_StartOrStop(
INTERFACE_ID_PPB_AUDIO, host_resource(), true));
return PP_TRUE;
@@ -95,7 +96,7 @@ PP_Bool Audio::StartPlayback() {
PP_Bool Audio::StopPlayback() {
if (!playing())
return PP_TRUE;
- PluginDispatcher::GetForInstance(instance())->Send(
+ PluginDispatcher::GetForResource(this)->Send(
new PpapiHostMsg_PPBAudio_StartOrStop(
INTERFACE_ID_PPB_AUDIO, host_resource(), false));
SetStopPlaybackState();
@@ -179,8 +180,8 @@ PP_Resource PPB_Audio_Proxy::CreateProxyResource(
if (result.is_null())
return 0;
- return PluginResourceTracker::GetInstance()->AddResource(
- new Audio(result, config_id, audio_callback, user_data));
+ return (new Audio(result, config_id,
+ audio_callback, user_data))->GetReference();
}
bool PPB_Audio_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_broker_proxy.cc b/ppapi/proxy/ppb_broker_proxy.cc
index ac99699..b0ebcb5 100644
--- a/ppapi/proxy/ppb_broker_proxy.cc
+++ b/ppapi/proxy/ppb_broker_proxy.cc
@@ -8,13 +8,13 @@
#include "ppapi/c/trusted/ppb_broker_trusted.h"
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/thunk/ppb_broker_api.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::PPB_Broker_API;
namespace pp {
@@ -49,12 +49,12 @@ InterfaceProxy* CreateBrokerProxy(Dispatcher* dispatcher,
} // namespace
-class Broker : public PPB_Broker_API, public PluginResource {
+class Broker : public PPB_Broker_API, public Resource {
public:
explicit Broker(const HostResource& resource);
virtual ~Broker();
- // ResourceObjectBase overries.
+ // Resource overries.
virtual PPB_Broker_API* AsPPB_Broker_API() OVERRIDE;
// PPB_Broker_API implementation.
@@ -78,8 +78,7 @@ class Broker : public PPB_Broker_API, public PluginResource {
DISALLOW_COPY_AND_ASSIGN(Broker);
};
-Broker::Broker(const HostResource& resource)
- : PluginResource(resource),
+Broker::Broker(const HostResource& resource) : Resource(resource),
called_connect_(false),
current_connect_callback_(PP_MakeCompletionCallback(NULL, NULL)),
socket_handle_(base::kInvalidPlatformFileValue) {
@@ -116,8 +115,9 @@ int32_t Broker::Connect(PP_CompletionCallback connect_callback) {
current_connect_callback_ = connect_callback;
called_connect_ = true;
- bool success = GetDispatcher()->Send(new PpapiHostMsg_PPBBroker_Connect(
- INTERFACE_ID_PPB_BROKER, host_resource()));
+ bool success = PluginDispatcher::GetForResource(this)->Send(
+ new PpapiHostMsg_PPBBroker_Connect(
+ INTERFACE_ID_PPB_BROKER, host_resource()));
return success ? PP_OK_COMPLETIONPENDING : PP_ERROR_FAILED;
}
@@ -181,8 +181,7 @@ PP_Resource PPB_Broker_Proxy::CreateProxyResource(PP_Instance instance) {
INTERFACE_ID_PPB_BROKER, instance, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(new Broker(result));
+ return (new Broker(result))->GetReference();
}
bool PPB_Broker_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_buffer_proxy.cc b/ppapi/proxy/ppb_buffer_proxy.cc
index 558b531..9598a4f 100644
--- a/ppapi/proxy/ppb_buffer_proxy.cc
+++ b/ppapi/proxy/ppb_buffer_proxy.cc
@@ -20,6 +20,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
@@ -36,7 +37,7 @@ InterfaceProxy* CreateBufferProxy(Dispatcher* dispatcher,
Buffer::Buffer(const HostResource& resource,
const base::SharedMemoryHandle& shm_handle,
uint32_t size)
- : PluginResource(resource),
+ : Resource(resource),
shm_(shm_handle, false),
size_(size),
mapped_data_(NULL),
@@ -114,8 +115,7 @@ PP_Resource PPB_Buffer_Proxy::AddProxyResource(
const HostResource& resource,
base::SharedMemoryHandle shm_handle,
uint32_t size) {
- return PluginResourceTracker::GetInstance()->AddResource(
- new Buffer(resource, shm_handle, size));
+ return (new Buffer(resource, shm_handle, size))->GetReference();
}
bool PPB_Buffer_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_buffer_proxy.h b/ppapi/proxy/ppb_buffer_proxy.h
index 02e47f8..9d6cfbe 100644
--- a/ppapi/proxy/ppb_buffer_proxy.h
+++ b/ppapi/proxy/ppb_buffer_proxy.h
@@ -8,7 +8,7 @@
#include "base/shared_memory.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_buffer_api.h"
struct PPB_Buffer_Dev;
@@ -21,14 +21,14 @@ namespace pp {
namespace proxy {
class Buffer : public ppapi::thunk::PPB_Buffer_API,
- public PluginResource {
+ public ppapi::Resource {
public:
Buffer(const ppapi::HostResource& resource,
const base::SharedMemoryHandle& shm_handle,
uint32_t size);
virtual ~Buffer();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual ppapi::thunk::PPB_Buffer_API* AsPPB_Buffer_API() OVERRIDE;
// PPB_Buffer_API implementation.
diff --git a/ppapi/proxy/ppb_context_3d_proxy.cc b/ppapi/proxy/ppb_context_3d_proxy.cc
index b7e5066..a213635 100644
--- a/ppapi/proxy/ppb_context_3d_proxy.cc
+++ b/ppapi/proxy/ppb_context_3d_proxy.cc
@@ -13,7 +13,6 @@
#include "ppapi/c/dev/ppb_context_3d_trusted_dev.h"
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_surface_3d_proxy.h"
#include "ppapi/thunk/enter.h"
@@ -21,6 +20,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Context3D_API;
@@ -340,7 +340,7 @@ void PepperCommandBuffer::UpdateState(const gpu::CommandBuffer::State& state) {
// Context3D -------------------------------------------------------------------
Context3D::Context3D(const HostResource& resource)
- : PluginResource(resource),
+ : Resource(resource),
draw_(NULL),
read_(NULL),
transfer_buffer_id_(0) {
@@ -356,7 +356,7 @@ PPB_Context3D_API* Context3D::AsPPB_Context3D_API() {
}
bool Context3D::CreateImplementation() {
- PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance());
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(this);
if (!dispatcher)
return false;
@@ -418,9 +418,10 @@ int32_t Context3D::BindSurfaces(PP_Resource pp_draw, PP_Resource pp_read) {
read_surface ? read_surface->host_resource() : HostResource();
int32_t result;
- GetDispatcher()->Send(new PpapiHostMsg_PPBContext3D_BindSurfaces(
- INTERFACE_ID_PPB_CONTEXT_3D,
- host_resource(), host_draw, host_read, &result));
+ PluginDispatcher::GetForResource(this)->Send(
+ new PpapiHostMsg_PPBContext3D_BindSurfaces(
+ INTERFACE_ID_PPB_CONTEXT_3D,
+ host_resource(), host_draw, host_read, &result));
if (result != PP_OK)
return result;
@@ -432,7 +433,9 @@ int32_t Context3D::BindSurfaces(PP_Resource pp_draw, PP_Resource pp_read) {
// Resize the backing texture to the size of the instance when it is
// bound.
// TODO(alokp): This should be the responsibility of plugins.
- InstanceData* data = GetDispatcher()->GetInstanceData(instance());
+ InstanceData* data =
+ PluginDispatcher::GetForResource(this)->GetInstanceData(
+ pp_instance());
gles2_impl()->ResizeCHROMIUM(data->position.size.width,
data->position.size.height);
}
@@ -443,8 +446,8 @@ int32_t Context3D::BindSurfaces(PP_Resource pp_draw, PP_Resource pp_read) {
}
int32_t Context3D::GetBoundSurfaces(PP_Resource* draw, PP_Resource* read) {
- *draw = draw_ ? draw_->resource() : 0;
- *read = read_ ? read_->resource() : 0;
+ *draw = draw_ ? draw_->pp_resource() : 0;
+ *read = read_ ? read_->pp_resource() : 0;
return PP_OK;
}
@@ -583,7 +586,7 @@ PP_Resource PPB_Context3D_Proxy::Create(PP_Instance instance,
scoped_refptr<Context3D> context_3d(new Context3D(result));
if (!context_3d->CreateImplementation())
return 0;
- return PluginResourceTracker::GetInstance()->AddResource(context_3d);
+ return context_3d->GetReference();
}
bool PPB_Context3D_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_context_3d_proxy.h b/ppapi/proxy/ppb_context_3d_proxy.h
index 017c2a1..cdbdd70 100644
--- a/ppapi/proxy/ppb_context_3d_proxy.h
+++ b/ppapi/proxy/ppb_context_3d_proxy.h
@@ -7,13 +7,14 @@
#include <vector>
+#include "base/memory/scoped_ptr.h"
#include "base/shared_memory.h"
#include "gpu/command_buffer/common/command_buffer.h"
#include "ppapi/c/dev/pp_graphics_3d_dev.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_context_3d_api.h"
struct PPB_Context3D_Dev;
@@ -34,13 +35,13 @@ namespace proxy {
class Surface3D;
-class Context3D : public PluginResource,
+class Context3D : public ppapi::Resource,
public ppapi::thunk::PPB_Context3D_API {
public:
explicit Context3D(const ppapi::HostResource& resource);
virtual ~Context3D();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual ::ppapi::thunk::PPB_Context3D_API* AsPPB_Context3D_API() OVERRIDE;
gpu::gles2::GLES2Implementation* gles2_impl() const {
diff --git a/ppapi/proxy/ppb_cursor_control_proxy.cc b/ppapi/proxy/ppb_cursor_control_proxy.cc
index 19ea104..cef77f2 100644
--- a/ppapi/proxy/ppb_cursor_control_proxy.cc
+++ b/ppapi/proxy/ppb_cursor_control_proxy.cc
@@ -7,13 +7,13 @@
#include "ppapi/c/dev/pp_cursor_type_dev.h"
#include "ppapi/c/dev/ppb_cursor_control_dev.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::PPB_CursorControl_FunctionAPI;
@@ -61,9 +61,9 @@ PP_Bool PPB_CursorControl_Proxy::SetCursor(PP_Instance instance,
// It's legal for the image ID to be null if the type is not custom.
HostResource cursor_image_resource;
if (type == PP_CURSORTYPE_CUSTOM) {
- PluginResource* cursor_image = PluginResourceTracker::GetInstance()->
- GetResourceObject(custom_image_id);
- if (!cursor_image || cursor_image->instance() != instance)
+ Resource* cursor_image = PluginResourceTracker::GetInstance()->
+ GetResource(custom_image_id);
+ if (!cursor_image || cursor_image->pp_instance() != instance)
return PP_FALSE;
cursor_image_resource = cursor_image->host_resource();
} else {
diff --git a/ppapi/proxy/ppb_file_chooser_proxy.cc b/ppapi/proxy/ppb_file_chooser_proxy.cc
index 4999e18..ae0eac7 100644
--- a/ppapi/proxy/ppb_file_chooser_proxy.cc
+++ b/ppapi/proxy/ppb_file_chooser_proxy.cc
@@ -12,25 +12,25 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_file_ref_proxy.h"
#include "ppapi/proxy/serialized_var.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::PPB_FileChooser_API;
namespace pp {
namespace proxy {
-class FileChooser : public PluginResource,
+class FileChooser : public Resource,
public PPB_FileChooser_API {
public:
FileChooser(const HostResource& resource);
virtual ~FileChooser();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_FileChooser_API* AsPPB_FileChooser_API() OVERRIDE;
// PPB_FileChooser_API implementation.
@@ -55,7 +55,7 @@ class FileChooser : public PluginResource,
};
FileChooser::FileChooser(const HostResource& resource)
- : PluginResource(resource),
+ : Resource(resource),
current_show_callback_(PP_MakeCompletionCallback(NULL, NULL)) {
}
@@ -87,8 +87,9 @@ int32_t FileChooser::Show(PP_CompletionCallback callback) {
return PP_ERROR_INPROGRESS; // Can't show more than once.
current_show_callback_ = callback;
- GetDispatcher()->Send(new PpapiHostMsg_PPBFileChooser_Show(
- INTERFACE_ID_PPB_FILE_CHOOSER, host_resource()));
+ PluginDispatcher::GetForResource(this)->Send(
+ new PpapiHostMsg_PPBFileChooser_Show(
+ INTERFACE_ID_PPB_FILE_CHOOSER, host_resource()));
return PP_OK_COMPLETIONPENDING;
}
@@ -164,8 +165,7 @@ PP_Resource PPB_FileChooser_Proxy::CreateProxyResource(
if (result.is_null())
return 0;
- return PluginResourceTracker::GetInstance()->AddResource(
- new FileChooser(result));
+ return (new FileChooser(result))->GetReference();
}
bool PPB_FileChooser_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_file_ref_proxy.cc b/ppapi/proxy/ppb_file_ref_proxy.cc
index a72519d..d831bfc 100644
--- a/ppapi/proxy/ppb_file_ref_proxy.cc
+++ b/ppapi/proxy/ppb_file_ref_proxy.cc
@@ -10,7 +10,6 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
#include "ppapi/thunk/ppb_file_ref_api.h"
@@ -18,6 +17,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_FileRef_API;
@@ -35,12 +35,12 @@ InterfaceProxy* CreateFileRefProxy(Dispatcher* dispatcher,
} // namespace
-class FileRef : public PluginResource, public PPB_FileRef_API {
+class FileRef : public Resource, public PPB_FileRef_API {
public:
explicit FileRef(const PPBFileRef_CreateInfo& info);
virtual ~FileRef();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_FileRef_API* AsPPB_FileRef_API() OVERRIDE;
// PPB_FileRef_API implementation.
@@ -58,6 +58,10 @@ class FileRef : public PluginResource, public PPB_FileRef_API {
PP_CompletionCallback callback) OVERRIDE;
private:
+ PluginDispatcher* GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
+ }
+
PP_FileSystemType file_system_type_;
PP_Var path_;
PP_Var name_;
@@ -66,8 +70,8 @@ class FileRef : public PluginResource, public PPB_FileRef_API {
};
FileRef::FileRef(const PPBFileRef_CreateInfo& info)
- : PluginResource(info.resource) {
- Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance());
+ : Resource(info.resource) {
+ Dispatcher* dispatcher = PluginDispatcher::GetForResource(this);
file_system_type_ = static_cast<PP_FileSystemType>(info.file_system_type);
@@ -134,10 +138,10 @@ int32_t FileRef::Delete(PP_CompletionCallback callback) {
int32_t FileRef::Rename(PP_Resource new_file_ref,
PP_CompletionCallback callback) {
- PluginResource* new_file_ref_object =
- PluginResourceTracker::GetInstance()->GetResourceObject(new_file_ref);
+ Resource* new_file_ref_object =
+ PluginResourceTracker::GetInstance()->GetResource(new_file_ref);
if (!new_file_ref_object ||
- new_file_ref_object->host_resource().instance() != instance())
+ new_file_ref_object->host_resource().instance() != pp_instance())
return PP_ERROR_BADRESOURCE;
GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Rename(
@@ -169,15 +173,16 @@ const InterfaceProxy::Info* PPB_FileRef_Proxy::GetInfo() {
// static
PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system,
const char* path) {
- PluginResource* file_system_object =
- PluginResourceTracker::GetInstance()->GetResourceObject(file_system);
+ Resource* file_system_object =
+ PluginResourceTracker::GetInstance()->GetResource(file_system);
if (!file_system_object)
return 0;
PPBFileRef_CreateInfo create_info;
- file_system_object->GetDispatcher()->Send(new PpapiHostMsg_PPBFileRef_Create(
- INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(),
- path, &create_info));
+ PluginDispatcher::GetForResource(file_system_object)->Send(
+ new PpapiHostMsg_PPBFileRef_Create(
+ INTERFACE_ID_PPB_FILE_REF, file_system_object->host_resource(),
+ path, &create_info));
return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
}
@@ -228,9 +233,7 @@ PP_Resource PPB_FileRef_Proxy::DeserializeFileRef(
const PPBFileRef_CreateInfo& serialized) {
if (serialized.resource.is_null())
return 0; // Resource invalid.
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new FileRef(serialized));
+ return (new FileRef(serialized))->GetReference();
}
void PPB_FileRef_Proxy::OnMsgCreate(const HostResource& file_system,
diff --git a/ppapi/proxy/ppb_file_system_proxy.cc b/ppapi/proxy/ppb_file_system_proxy.cc
index 98a1a7f..b3035b9 100644
--- a/ppapi/proxy/ppb_file_system_proxy.cc
+++ b/ppapi/proxy/ppb_file_system_proxy.cc
@@ -11,7 +11,6 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
#include "ppapi/thunk/enter.h"
@@ -20,6 +19,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::PPB_FileSystem_API;
using ppapi::thunk::ResourceCreationAPI;
@@ -39,12 +39,12 @@ InterfaceProxy* CreateFileSystemProxy(Dispatcher* dispatcher,
// This object maintains most of the state of the ref in the plugin for fast
// querying. It's all set in the constructor from the "create info" sent from
// the host.
-class FileSystem : public PluginResource, public PPB_FileSystem_API {
+class FileSystem : public Resource, public PPB_FileSystem_API {
public:
FileSystem(const HostResource& host_resource, PP_FileSystemType type);
virtual ~FileSystem();
- // ResourceObjectBase override.
+ // Resource override.
virtual PPB_FileSystem_API* AsPPB_FileSystem_API() OVERRIDE;
// PPB_FileSystem_APi implementation.
@@ -65,7 +65,7 @@ class FileSystem : public PluginResource, public PPB_FileSystem_API {
FileSystem::FileSystem(const HostResource& host_resource,
PP_FileSystemType type)
- : PluginResource(host_resource),
+ : Resource(host_resource),
type_(type),
called_open_(false),
current_open_callback_(PP_MakeCompletionCallback(NULL, NULL)) {
@@ -98,8 +98,9 @@ int32_t FileSystem::Open(int64_t expected_size,
current_open_callback_ = callback;
called_open_ = true;
- GetDispatcher()->Send(new PpapiHostMsg_PPBFileSystem_Open(
- INTERFACE_ID_PPB_FILE_SYSTEM, host_resource(), expected_size));
+ PluginDispatcher::GetForResource(this)->Send(
+ new PpapiHostMsg_PPBFileSystem_Open(
+ INTERFACE_ID_PPB_FILE_SYSTEM, host_resource(), expected_size));
return PP_OK_COMPLETIONPENDING;
}
@@ -144,9 +145,7 @@ PP_Resource PPB_FileSystem_Proxy::CreateProxyResource(
INTERFACE_ID_PPB_FILE_SYSTEM, instance, type, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new FileSystem(result, type));
+ return (new FileSystem(result, type))->GetReference();
}
bool PPB_FileSystem_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_flash_file_proxy.cc b/ppapi/proxy/ppb_flash_file_proxy.cc
index 73e8a2d8..9400728 100644
--- a/ppapi/proxy/ppb_flash_file_proxy.cc
+++ b/ppapi/proxy/ppb_flash_file_proxy.cc
@@ -20,10 +20,12 @@
#include "ppapi/c/pp_file_info.h"
#include "ppapi/c/private/ppb_flash_file.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/resource.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
@@ -625,13 +627,12 @@ namespace {
int32_t OpenFileRefFile(PP_Resource file_ref_id,
int32_t mode,
PP_FileHandle* file) {
- PluginResource* file_ref =
- PluginResourceTracker::GetInstance()->GetResourceObject(file_ref_id);
+ Resource* file_ref =
+ PluginResourceTracker::GetInstance()->GetResource(file_ref_id);
if (!file_ref)
return PP_ERROR_BADRESOURCE;
- PluginDispatcher* dispatcher =
- PluginDispatcher::GetForInstance(file_ref->instance());
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(file_ref);
if (!dispatcher)
return PP_ERROR_BADARGUMENT;
@@ -646,13 +647,12 @@ int32_t OpenFileRefFile(PP_Resource file_ref_id,
int32_t QueryFileRefFile(PP_Resource file_ref_id,
PP_FileInfo* info) {
- PluginResource* file_ref =
- PluginResourceTracker::GetInstance()->GetResourceObject(file_ref_id);
+ Resource* file_ref =
+ PluginResourceTracker::GetInstance()->GetResource(file_ref_id);
if (!file_ref)
return PP_ERROR_BADRESOURCE;
- PluginDispatcher* dispatcher =
- PluginDispatcher::GetForInstance(file_ref->instance());
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(file_ref);
if (!dispatcher)
return PP_ERROR_BADARGUMENT;
diff --git a/ppapi/proxy/ppb_flash_menu_proxy.cc b/ppapi/proxy/ppb_flash_menu_proxy.cc
index c2b74a2..98ee3b6 100644
--- a/ppapi/proxy/ppb_flash_menu_proxy.cc
+++ b/ppapi/proxy/ppb_flash_menu_proxy.cc
@@ -14,6 +14,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::PPB_Flash_Menu_API;
using ppapi::thunk::ResourceCreationAPI;
@@ -21,12 +22,12 @@ using ppapi::thunk::ResourceCreationAPI;
namespace pp {
namespace proxy {
-class FlashMenu : public PPB_Flash_Menu_API, public PluginResource {
+class FlashMenu : public PPB_Flash_Menu_API, public Resource {
public:
explicit FlashMenu(const HostResource& resource);
virtual ~FlashMenu();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_Flash_Menu_API* AsPPB_Flash_Menu_API() OVERRIDE;
// PPB_Flash_Menu_API implementation.
@@ -44,7 +45,7 @@ class FlashMenu : public PPB_Flash_Menu_API, public PluginResource {
};
FlashMenu::FlashMenu(const HostResource& resource)
- : PluginResource(resource),
+ : Resource(resource),
callback_(PP_BlockUntilComplete()),
selected_id_ptr_(NULL) {
}
@@ -65,8 +66,9 @@ int32_t FlashMenu::Show(const struct PP_Point* location,
selected_id_ptr_ = selected_id;
callback_ = callback;
- GetDispatcher()->Send(new PpapiHostMsg_PPBFlashMenu_Show(
- INTERFACE_ID_PPB_FLASH_MENU, host_resource(), *location));
+ PluginDispatcher::GetForResource(this)->Send(
+ new PpapiHostMsg_PPBFlashMenu_Show(
+ INTERFACE_ID_PPB_FLASH_MENU, host_resource(), *location));
return PP_OK_COMPLETIONPENDING;
}
@@ -122,9 +124,7 @@ PP_Resource PPB_Flash_Menu_Proxy::CreateProxyResource(
INTERFACE_ID_PPB_FLASH_MENU, instance_id, serialized_menu, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new FlashMenu(result));
+ return (new FlashMenu(result))->GetReference();
}
bool PPB_Flash_Menu_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_flash_menu_proxy.h b/ppapi/proxy/ppb_flash_menu_proxy.h
index 979abee..adce7ec 100644
--- a/ppapi/proxy/ppb_flash_menu_proxy.h
+++ b/ppapi/proxy/ppb_flash_menu_proxy.h
@@ -6,13 +6,16 @@
#define PPAPI_PPB_FLASH_MENU_PROXY_H_
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
struct PP_Flash_Menu;
struct PP_Point;
struct PPB_Flash_Menu;
+namespace ppapi {
+class HostResource;
+}
+
namespace pp {
namespace proxy {
diff --git a/ppapi/proxy/ppb_flash_net_connector_proxy.cc b/ppapi/proxy/ppb_flash_net_connector_proxy.cc
index 0d93428..c222720 100644
--- a/ppapi/proxy/ppb_flash_net_connector_proxy.cc
+++ b/ppapi/proxy/ppb_flash_net_connector_proxy.cc
@@ -10,7 +10,6 @@
#include "ppapi/c/private/ppb_flash_net_connector.h"
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
#include "ppapi/thunk/enter.h"
@@ -19,6 +18,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::PPB_Flash_NetConnector_API;
using ppapi::thunk::ResourceCreationAPI;
@@ -50,12 +50,12 @@ class AbortCallbackTask : public Task {
};
class FlashNetConnector : public PPB_Flash_NetConnector_API,
- public PluginResource {
+ public Resource {
public:
explicit FlashNetConnector(const HostResource& resource);
virtual ~FlashNetConnector();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_Flash_NetConnector_API* AsPPB_Flash_NetConnector_API() OVERRIDE;
// PPB_Flash_NetConnector_API implementation.
@@ -92,7 +92,7 @@ class FlashNetConnector : public PPB_Flash_NetConnector_API,
};
FlashNetConnector::FlashNetConnector(const HostResource& resource)
- : PluginResource(resource),
+ : Resource(resource),
callback_(PP_BlockUntilComplete()),
local_addr_out_(NULL),
remote_addr_out_(NULL) {
@@ -163,7 +163,7 @@ int32_t FlashNetConnector::ConnectWithMessage(
return PP_ERROR_INPROGRESS; // Can only have one pending request.
// Send the request, it will call us back via ConnectACK.
- GetDispatcher()->Send(msg_deletor.release());
+ PluginDispatcher::GetForResource(this)->Send(msg_deletor.release());
callback_ = callback;
socket_out_ = socket_out;
@@ -230,9 +230,7 @@ PP_Resource PPB_Flash_NetConnector_Proxy::CreateProxyResource(
INTERFACE_ID_PPB_FLASH_NETCONNECTOR, instance, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new FlashNetConnector(result));
+ return (new FlashNetConnector(result))->GetReference();
}
bool PPB_Flash_NetConnector_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_flash_proxy.cc b/ppapi/proxy/ppb_flash_proxy.cc
index 289a864..bbe7018 100644
--- a/ppapi/proxy/ppb_flash_proxy.cc
+++ b/ppapi/proxy/ppb_flash_proxy.cc
@@ -14,12 +14,14 @@
#include "ppapi/c/private/ppb_flash.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/proxy_module.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/resource.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
@@ -44,17 +46,17 @@ PP_Bool DrawGlyphs(PP_Instance instance,
uint32_t glyph_count,
const uint16_t glyph_indices[],
const PP_Point glyph_advances[]) {
- PluginResource* image_data = PluginResourceTracker::GetInstance()->
- GetResourceObject(pp_image_data);
+ Resource* image_data = PluginResourceTracker::GetInstance()->GetResource(
+ pp_image_data);
if (!image_data)
return PP_FALSE;
// The instance parameter isn't strictly necessary but we check that it
// matches anyway.
- if (image_data->instance() != instance)
+ if (image_data->pp_instance() != instance)
return PP_FALSE;
PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
- image_data->instance());
+ image_data->pp_instance());
if (!dispatcher)
return PP_FALSE;
@@ -96,13 +98,13 @@ PP_Var GetProxyForURL(PP_Instance instance, const char* url) {
int32_t Navigate(PP_Resource request_id,
const char* target,
bool from_user_action) {
- PluginResource* request_object =
- PluginResourceTracker::GetInstance()->GetResourceObject(request_id);
+ Resource* request_object =
+ PluginResourceTracker::GetInstance()->GetResource(request_id);
if (!request_object)
return PP_ERROR_BADRESOURCE;
PluginDispatcher* dispatcher =
- PluginDispatcher::GetForInstance(request_object->instance());
+ PluginDispatcher::GetForInstance(request_object->pp_instance());
if (!dispatcher)
return PP_ERROR_FAILED;
diff --git a/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc b/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
index 1be870c..52dca5d 100644
--- a/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
+++ b/ppapi/proxy/ppb_flash_tcp_socket_proxy.cc
@@ -14,13 +14,14 @@
#include "base/task.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_flash_tcp_socket_api.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::PPB_Flash_TCPSocket_API;
namespace pp {
@@ -58,12 +59,12 @@ InterfaceProxy* CreateFlashTCPSocketProxy(Dispatcher* dispatcher,
} // namespace
class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
- public PluginResource {
+ public Resource {
public:
FlashTCPSocket(const HostResource& resource, uint32 socket_id);
virtual ~FlashTCPSocket();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_Flash_TCPSocket_API* AsPPB_Flash_TCPSocket_API() OVERRIDE;
// PPB_Flash_TCPSocket_API implementation.
@@ -110,6 +111,10 @@ class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
bool IsConnected() const;
+ PluginDispatcher* GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
+ }
+
// Backend for both Connect() and ConnectWithNetAddress(). To keep things
// generic, the message is passed in (on error, it's deleted).
int32_t ConnectWithMessage(IPC::Message* msg,
@@ -135,7 +140,7 @@ class FlashTCPSocket : public PPB_Flash_TCPSocket_API,
};
FlashTCPSocket::FlashTCPSocket(const HostResource& resource, uint32 socket_id)
- : PluginResource(resource),
+ : Resource(resource),
socket_id_(socket_id),
connection_state_(BEFORE_CONNECT),
connect_callback_(PP_BlockUntilComplete()),
@@ -420,9 +425,8 @@ PP_Resource PPB_Flash_TCPSocket_Proxy::CreateProxyResource(
&socket_id));
if (socket_id == 0)
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new FlashTCPSocket(HostResource::MakeInstanceOnly(instance), socket_id));
+ return (new FlashTCPSocket(HostResource::MakeInstanceOnly(instance),
+ socket_id))->GetReference();
}
bool PPB_Flash_TCPSocket_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_font_proxy.cc b/ppapi/proxy/ppb_font_proxy.cc
index 392481b..2760c0b 100644
--- a/ppapi/proxy/ppb_font_proxy.cc
+++ b/ppapi/proxy/ppb_font_proxy.cc
@@ -12,13 +12,14 @@
#include "ppapi/proxy/ppb_image_data_proxy.h"
#include "ppapi/proxy/serialized_var.h"
#include "ppapi/shared_impl/ppapi_preferences.h"
-#include "ppapi/shared_impl/resource_object_base.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_image_data_api.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::StringVar;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_ImageData_API;
@@ -95,19 +96,20 @@ bool PPB_Font_Proxy::OnMessageReceived(const IPC::Message& msg) {
Font::Font(const HostResource& resource,
const PP_FontDescription_Dev& desc)
- : PluginResource(resource),
+ : Resource(resource),
webkit_event_(false, false) {
TRACE_EVENT0("ppapi proxy", "Font::Font");
scoped_refptr<StringVar> face(StringVar::FromPPVar(desc.face));
- WebKitForwarding* forwarding = GetDispatcher()->GetWebKitForwarding();
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(this);
+ WebKitForwarding* forwarding = dispatcher->GetWebKitForwarding();
RunOnWebKitThread(true,
base::Bind(&WebKitForwarding::CreateFontForwarding,
base::Unretained(forwarding),
&webkit_event_, desc,
face.get() ? face->value() : std::string(),
- GetDispatcher()->preferences(),
+ dispatcher->preferences(),
&font_forwarding_));
}
@@ -221,7 +223,7 @@ int32_t Font::PixelOffsetForCharacter(const PP_TextRun_Dev* text,
}
void Font::RunOnWebKitThread(bool blocking, const base::Closure& task) {
- GetDispatcher()->PostToWebKitThread(FROM_HERE, task);
+ PluginDispatcher::GetForResource(this)->PostToWebKitThread(FROM_HERE, task);
if (blocking)
webkit_event_.Wait();
}
diff --git a/ppapi/proxy/ppb_font_proxy.h b/ppapi/proxy/ppb_font_proxy.h
index 8058fdf..8ea0e51 100644
--- a/ppapi/proxy/ppb_font_proxy.h
+++ b/ppapi/proxy/ppb_font_proxy.h
@@ -5,11 +5,12 @@
#ifndef PPAPI_PROXY_PPB_FONT_PROXY_H_
#define PPAPI_PROXY_PPB_FONT_PROXY_H_
-#include "base/basictypes.h"
+#include "base/callback.h"
#include "base/synchronization/waitable_event.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
+#include "ppapi/shared_impl/function_group_base.h"
#include "ppapi/shared_impl/host_resource.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/webkit_forwarding.h"
#include "ppapi/thunk/ppb_font_api.h"
@@ -42,7 +43,7 @@ class PPB_Font_Proxy : public ppapi::FunctionGroupBase,
DISALLOW_COPY_AND_ASSIGN(PPB_Font_Proxy);
};
-class Font : public PluginResource,
+class Font : public ppapi::Resource,
public ppapi::thunk::PPB_Font_API {
public:
// Note that there isn't a "real" resource in the renderer backing a font,
@@ -53,7 +54,7 @@ class Font : public PluginResource,
Font(const ppapi::HostResource& resource, const PP_FontDescription_Dev& desc);
virtual ~Font();
- // ResourceObjectBase.
+ // Resource.
virtual ppapi::thunk::PPB_Font_API* AsPPB_Font_API() OVERRIDE;
// PPB_Font_API implementation.
diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.cc b/ppapi/proxy/ppb_graphics_2d_proxy.cc
index eaa1032..f752949 100644
--- a/ppapi/proxy/ppb_graphics_2d_proxy.cc
+++ b/ppapi/proxy/ppb_graphics_2d_proxy.cc
@@ -14,13 +14,13 @@
#include "ppapi/c/ppb_graphics_2d.h"
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_graphics_2d_api.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::PPB_Graphics2D_API;
namespace pp {
@@ -35,15 +35,15 @@ InterfaceProxy* CreateGraphics2DProxy(Dispatcher* dispatcher,
} // namespace
-class Graphics2D : public PluginResource,
- public ::ppapi::thunk::PPB_Graphics2D_API {
+class Graphics2D : public ppapi::Resource,
+ public ppapi::thunk::PPB_Graphics2D_API {
public:
Graphics2D(const HostResource& host_resource,
const PP_Size& size,
PP_Bool is_always_opaque);
virtual ~Graphics2D();
- // ResourceObjectBase.
+ // Resource.
virtual PPB_Graphics2D_API* AsPPB_Graphics2D_API();
// PPB_Graphics_2D_API.
@@ -60,6 +60,10 @@ class Graphics2D : public PluginResource,
void FlushACK(int32_t result_code);
private:
+ PluginDispatcher* GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
+ }
+
PP_Size size_;
PP_Bool is_always_opaque_;
@@ -73,7 +77,7 @@ class Graphics2D : public PluginResource,
Graphics2D::Graphics2D(const HostResource& host_resource,
const PP_Size& size,
PP_Bool is_always_opaque)
- : PluginResource(host_resource),
+ : Resource(host_resource),
size_(size),
is_always_opaque_(is_always_opaque),
current_flush_callback_(PP_BlockUntilComplete()) {
@@ -95,10 +99,10 @@ PP_Bool Graphics2D::Describe(PP_Size* size, PP_Bool* is_always_opaque) {
void Graphics2D::PaintImageData(PP_Resource image_data,
const PP_Point* top_left,
const PP_Rect* src_rect) {
- PluginResource* image_object = PluginResourceTracker::GetInstance()->
- GetResourceObject(image_data);
- //if (!image_object || instance() != image_object->instance())
- // return;
+ Resource* image_object = PluginResourceTracker::GetInstance()->
+ GetResource(image_data);
+ if (!image_object || pp_instance() != image_object->pp_instance())
+ return;
PP_Rect dummy;
memset(&dummy, 0, sizeof(PP_Rect));
@@ -118,9 +122,9 @@ void Graphics2D::Scroll(const PP_Rect* clip_rect,
}
void Graphics2D::ReplaceContents(PP_Resource image_data) {
- PluginResource* image_object = PluginResourceTracker::GetInstance()->
- GetResourceObject(image_data);
- if (!image_object || instance() != image_object->instance())
+ Resource* image_object = PluginResourceTracker::GetInstance()->
+ GetResource(image_data);
+ if (!image_object || pp_instance() != image_object->pp_instance())
return;
GetDispatcher()->Send(new PpapiHostMsg_PPBGraphics2D_ReplaceContents(
@@ -183,8 +187,7 @@ PP_Resource PPB_Graphics2D_Proxy::CreateProxyResource(
&result));
if (result.is_null())
return 0;
- return PluginResourceTracker::GetInstance()->AddResource(
- new Graphics2D(result, size, is_always_opaque));
+ return (new Graphics2D(result, size, is_always_opaque))->GetReference();
}
bool PPB_Graphics2D_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.h b/ppapi/proxy/ppb_graphics_2d_proxy.h
index 77f0dd6..7834acc 100644
--- a/ppapi/proxy/ppb_graphics_2d_proxy.h
+++ b/ppapi/proxy/ppb_graphics_2d_proxy.h
@@ -14,7 +14,6 @@
#include "ppapi/c/pp_var.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
#include "ppapi/shared_impl/host_resource.h"
diff --git a/ppapi/proxy/ppb_graphics_3d_proxy.cc b/ppapi/proxy/ppb_graphics_3d_proxy.cc
index 51b567e..a8cea51 100644
--- a/ppapi/proxy/ppb_graphics_3d_proxy.cc
+++ b/ppapi/proxy/ppb_graphics_3d_proxy.cc
@@ -14,6 +14,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Graphics3D_API;
@@ -324,7 +325,7 @@ InterfaceProxy* CreateGraphics3DProxy(Dispatcher* dispatcher,
} // namespace
Graphics3D::Graphics3D(const HostResource& resource)
- : PluginResource(resource) {
+ : Resource(resource) {
}
Graphics3D::~Graphics3D() {
@@ -332,7 +333,7 @@ Graphics3D::~Graphics3D() {
}
bool Graphics3D::Init() {
- PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance());
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(this);
if (!dispatcher)
return false;
@@ -390,7 +391,7 @@ int32 Graphics3D::DoSwapBuffers() {
IPC::Message* msg = new PpapiHostMsg_PPBGraphics3D_SwapBuffers(
INTERFACE_ID_PPB_GRAPHICS_3D, host_resource());
msg->set_unblock(true);
- GetDispatcher()->Send(msg);
+ PluginDispatcher::GetForResource(this)->Send(msg);
gles2_impl()->SwapBuffers();
return PP_OK_COMPLETIONPENDING;
@@ -451,8 +452,7 @@ PP_Resource PPB_Graphics3D_Proxy::CreateProxyResource(
scoped_refptr<Graphics3D> graphics_3d(new Graphics3D(result));
if (!graphics_3d->Init())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(graphics_3d);
+ return graphics_3d->GetReference();
}
bool PPB_Graphics3D_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_graphics_3d_proxy.h b/ppapi/proxy/ppb_graphics_3d_proxy.h
index a304de3..bb6df67 100644
--- a/ppapi/proxy/ppb_graphics_3d_proxy.h
+++ b/ppapi/proxy/ppb_graphics_3d_proxy.h
@@ -13,9 +13,9 @@
#include "ppapi/c/pp_instance.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
#include "ppapi/shared_impl/graphics_3d_impl.h"
+#include "ppapi/shared_impl/resource.h"
namespace ppapi {
class HostResource;
@@ -24,7 +24,7 @@ class HostResource;
namespace pp {
namespace proxy {
-class Graphics3D : public PluginResource,
+class Graphics3D : public ppapi::Resource,
public ppapi::Graphics3DImpl {
public:
explicit Graphics3D(const ppapi::HostResource& resource);
@@ -32,7 +32,7 @@ class Graphics3D : public PluginResource,
bool Init();
- // PluginResource overrides.
+ // Resource overrides.
virtual ::ppapi::thunk::PPB_Graphics3D_API* AsPPB_Graphics3D_API() OVERRIDE {
return this;
}
diff --git a/ppapi/proxy/ppb_image_data_proxy.cc b/ppapi/proxy/ppb_image_data_proxy.cc
index dec6efc..9e090c8 100644
--- a/ppapi/proxy/ppb_image_data_proxy.cc
+++ b/ppapi/proxy/ppb_image_data_proxy.cc
@@ -17,11 +17,13 @@
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/shared_impl/host_resource.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/thunk.h"
#include "skia/ext/platform_canvas.h"
#include "ui/gfx/surface/transport_dib.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
@@ -66,7 +68,7 @@ bool PPB_ImageData_Proxy::OnMessageReceived(const IPC::Message& msg) {
ImageData::ImageData(const HostResource& resource,
const PP_ImageDataDesc& desc,
ImageHandle handle)
- : PluginResource(resource),
+ : Resource(resource),
desc_(desc) {
#if defined(OS_WIN)
transport_dib_.reset(TransportDIB::CreateWithHandle(handle));
diff --git a/ppapi/proxy/ppb_image_data_proxy.h b/ppapi/proxy/ppb_image_data_proxy.h
index 75d3faf..c861963 100644
--- a/ppapi/proxy/ppb_image_data_proxy.h
+++ b/ppapi/proxy/ppb_image_data_proxy.h
@@ -5,6 +5,7 @@
#ifndef PPAPI_PPB_IMAGE_DATA_PROXY_H_
#define PPAPI_PPB_IMAGE_DATA_PROXY_H_
+#include "base/scoped_ptr.h"
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_instance.h"
@@ -13,9 +14,9 @@
#include "ppapi/c/pp_size.h"
#include "ppapi/c/pp_var.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/serialized_structs.h"
#include "ppapi/shared_impl/image_data_impl.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_image_data_api.h"
struct PPB_ImageData;
@@ -47,8 +48,8 @@ class PPB_ImageData_Proxy : public InterfaceProxy {
virtual bool OnMessageReceived(const IPC::Message& msg);
};
-class ImageData : public PluginResource,
- public ::ppapi::thunk::PPB_ImageData_API,
+class ImageData : public ppapi::Resource,
+ public ppapi::thunk::PPB_ImageData_API,
public ppapi::ImageDataImpl {
public:
ImageData(const ppapi::HostResource& resource,
@@ -56,8 +57,8 @@ class ImageData : public PluginResource,
ImageHandle handle);
virtual ~ImageData();
- // ResourceObjectBase overrides.
- virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE;
+ // Resource overrides.
+ virtual ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE;
// PPB_ImageData API.
virtual PP_Bool Describe(PP_ImageDataDesc* desc) OVERRIDE;
diff --git a/ppapi/proxy/ppb_input_event_proxy.cc b/ppapi/proxy/ppb_input_event_proxy.cc
index 593bf1e..a9b1a4f 100644
--- a/ppapi/proxy/ppb_input_event_proxy.cc
+++ b/ppapi/proxy/ppb_input_event_proxy.cc
@@ -6,28 +6,29 @@
#include "ppapi/c/ppb_audio_config.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_var_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/shared_impl/input_event_impl.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
using ppapi::InputEventData;
using ppapi::InputEventImpl;
+using ppapi::Resource;
using ppapi::thunk::PPB_InputEvent_API;
namespace pp {
namespace proxy {
// The implementation is actually in InputEventImpl.
-class InputEvent : public PluginResource, public InputEventImpl {
+class InputEvent : public Resource, public InputEventImpl {
public:
InputEvent(const HostResource& resource, const InputEventData& data);
virtual ~InputEvent();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_InputEvent_API* AsPPB_InputEvent_API() OVERRIDE;
// InputEventImpl overrides.
@@ -38,7 +39,7 @@ class InputEvent : public PluginResource, public InputEventImpl {
};
InputEvent::InputEvent(const HostResource& resource, const InputEventData& data)
- : PluginResource(resource),
+ : Resource(resource),
InputEventImpl(data) {
}
@@ -122,8 +123,8 @@ const InterfaceProxy::Info* PPB_InputEvent_Proxy::GetWheelInputEventInfo() {
PP_Resource PPB_InputEvent_Proxy::CreateProxyResource(
PP_Instance instance,
const InputEventData& data) {
- return PluginResourceTracker::GetInstance()->AddResource(
- new InputEvent(HostResource::MakeInstanceOnly(instance), data));
+ return (new InputEvent(HostResource::MakeInstanceOnly(instance), data))->
+ GetReference();
}
bool PPB_InputEvent_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc
index 08da58c..ffa4f66 100644
--- a/ppapi/proxy/ppb_instance_proxy.cc
+++ b/ppapi/proxy/ppb_instance_proxy.cc
@@ -10,7 +10,6 @@
#include "ppapi/c/ppb_messaging.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
@@ -23,6 +22,7 @@
#endif
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Instance_FunctionAPI;
@@ -147,9 +147,8 @@ PPB_Instance_FunctionAPI* PPB_Instance_Proxy::AsPPB_Instance_FunctionAPI() {
PP_Bool PPB_Instance_Proxy::BindGraphics(PP_Instance instance,
PP_Resource device) {
- PluginResource* object =
- PluginResourceTracker::GetInstance()->GetResourceObject(device);
- if (!object || object->instance() != instance)
+ Resource* object = PluginResourceTracker::GetInstance()->GetResource(device);
+ if (!object || object->pp_instance() != instance)
return PP_FALSE;
PP_Bool result = PP_FALSE;
diff --git a/ppapi/proxy/ppb_pdf_proxy.cc b/ppapi/proxy/ppb_pdf_proxy.cc
index 5711030..b7b3704 100644
--- a/ppapi/proxy/ppb_pdf_proxy.cc
+++ b/ppapi/proxy/ppb_pdf_proxy.cc
@@ -13,23 +13,23 @@
#include "build/build_config.h"
#include "ppapi/c/private/ppb_pdf.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_pdf_api.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::PPB_PDFFont_API;
using ppapi::thunk::EnterResource;
namespace pp {
namespace proxy {
-class PrivateFontFile : public PluginResource,
+class PrivateFontFile : public Resource,
public PPB_PDFFont_API {
public:
- PrivateFontFile(const HostResource& resource) : PluginResource(resource) {
+ PrivateFontFile(const HostResource& resource) : Resource(resource) {
}
virtual ~PrivateFontFile() {}
@@ -80,9 +80,7 @@ PP_Resource GetFontFileWithFallback(
INTERFACE_ID_PPB_PDF, instance, desc, charset, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new PrivateFontFile(result));
+ return (new PrivateFontFile(result))->GetReference();
}
bool GetFontTableForPrivateFontFile(PP_Resource font_file,
@@ -95,7 +93,7 @@ bool GetFontTableForPrivateFontFile(PP_Resource font_file,
PrivateFontFile* object = static_cast<PrivateFontFile*>(enter.object());
PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
- object->instance());
+ object->pp_instance());
if (!dispatcher)
return false;
diff --git a/ppapi/proxy/ppb_surface_3d_proxy.cc b/ppapi/proxy/ppb_surface_3d_proxy.cc
index 28577d7..1ddcc42 100644
--- a/ppapi/proxy/ppb_surface_3d_proxy.cc
+++ b/ppapi/proxy/ppb_surface_3d_proxy.cc
@@ -10,7 +10,6 @@
#include "ppapi/c/dev/ppb_surface_3d_dev.h"
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_context_3d_proxy.h"
#include "ppapi/thunk/enter.h"
@@ -18,6 +17,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::PPB_Surface3D_API;
using ppapi::thunk::ResourceCreationAPI;
@@ -37,8 +37,7 @@ InterfaceProxy* CreateSurface3DProxy(Dispatcher* dispatcher,
// Surface3D -------------------------------------------------------------------
Surface3D::Surface3D(const HostResource& host_resource)
- : PluginResource(host_resource),
- resource_(0),
+ : Resource(host_resource),
context_(NULL),
current_flush_callback_(PP_BlockUntilComplete()) {
}
@@ -79,7 +78,7 @@ int32_t Surface3D::SwapBuffers(PP_CompletionCallback callback) {
IPC::Message* msg = new PpapiHostMsg_PPBSurface3D_SwapBuffers(
INTERFACE_ID_PPB_SURFACE_3D, host_resource());
msg->set_unblock(true);
- GetDispatcher()->Send(msg);
+ PluginDispatcher::GetForResource(this)->Send(msg);
context_->gles2_impl()->SwapBuffers();
return PP_OK_COMPLETIONPENDING;
@@ -137,11 +136,7 @@ PP_Resource PPB_Surface3D_Proxy::CreateProxyResource(
if (result.is_null())
return 0;
- scoped_refptr<Surface3D> surface_3d(new Surface3D(result));
- PP_Resource resource =
- PluginResourceTracker::GetInstance()->AddResource(surface_3d);
- surface_3d->set_resource(resource);
- return resource;
+ return (new Surface3D(result))->GetReference();
}
bool PPB_Surface3D_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_surface_3d_proxy.h b/ppapi/proxy/ppb_surface_3d_proxy.h
index 0fa0d4c..ae2ec8f 100644
--- a/ppapi/proxy/ppb_surface_3d_proxy.h
+++ b/ppapi/proxy/ppb_surface_3d_proxy.h
@@ -12,8 +12,8 @@
#include "ppapi/c/pp_instance.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_surface_3d_api.h"
struct PPB_Surface3D_Dev;
@@ -23,13 +23,13 @@ namespace proxy {
class Context3D;
-class Surface3D : public PluginResource,
+class Surface3D : public ppapi::Resource,
public ppapi::thunk::PPB_Surface3D_API {
public:
explicit Surface3D(const ppapi::HostResource& host_resource);
virtual ~Surface3D();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_Surface3D_API* AsPPB_Surface3D_API() OVERRIDE;
// PPB_Surface3D_API implementation.
@@ -51,11 +51,7 @@ class Surface3D : public PluginResource,
Context3D* context() const { return context_; }
- void set_resource(PP_Resource resource) { resource_ = resource; }
- PP_Resource resource() const { return resource_; }
-
private:
- PP_Resource resource_;
Context3D* context_;
// In the plugin, this is the current callback set for Flushes. When the
diff --git a/ppapi/proxy/ppb_testing_proxy.cc b/ppapi/proxy/ppb_testing_proxy.cc
index 7a1f7fd..0e6ed6d 100644
--- a/ppapi/proxy/ppb_testing_proxy.cc
+++ b/ppapi/proxy/ppb_testing_proxy.cc
@@ -7,11 +7,12 @@
#include "base/message_loop.h"
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/resource.h"
using ppapi::HostResource;
+using ppapi::Resource;
namespace pp {
namespace proxy {
@@ -21,18 +22,18 @@ namespace {
PP_Bool ReadImageData(PP_Resource graphics_2d,
PP_Resource image,
const PP_Point* top_left) {
- PluginResource* image_object = PluginResourceTracker::GetInstance()->
- GetResourceObject(image);
+ Resource* image_object = PluginResourceTracker::GetInstance()->
+ GetResource(image);
if (!image_object)
return PP_FALSE;
- PluginResource* graphics_2d_object =
- PluginResourceTracker::GetInstance()->GetResourceObject(graphics_2d);
+ Resource* graphics_2d_object =
+ PluginResourceTracker::GetInstance()->GetResource(graphics_2d);
if (!graphics_2d_object ||
- image_object->instance() != graphics_2d_object->instance())
+ image_object->pp_instance() != graphics_2d_object->pp_instance())
return PP_FALSE;
PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(
- image_object->instance());
+ image_object->pp_instance());
if (!dispatcher)
return PP_FALSE;
diff --git a/ppapi/proxy/ppb_url_loader_proxy.cc b/ppapi/proxy/ppb_url_loader_proxy.cc
index 43997ea..5528a52 100644
--- a/ppapi/proxy/ppb_url_loader_proxy.cc
+++ b/ppapi/proxy/ppb_url_loader_proxy.cc
@@ -19,7 +19,6 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_url_response_info_proxy.h"
@@ -33,6 +32,7 @@
#endif
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_URLLoader_API;
@@ -80,12 +80,12 @@ InterfaceProxy* CreateURLLoaderProxy(Dispatcher* dispatcher,
// URLLoader -------------------------------------------------------------------
-class URLLoader : public PluginResource, public PPB_URLLoader_API {
+class URLLoader : public Resource, public PPB_URLLoader_API {
public:
URLLoader(const HostResource& resource);
virtual ~URLLoader();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_URLLoader_API* AsPPB_URLLoader_API() OVERRIDE;
// PPB_URLLoader_API implementation.
@@ -121,6 +121,10 @@ class URLLoader : public PluginResource, public PPB_URLLoader_API {
// The size must be not more than the current size of the buffer.
void PopBuffer(void* output_buffer, int32_t output_size);
+ PluginDispatcher* GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
+ }
+
// Initialized to -1. Will be set to nonnegative values by the UpdateProgress
// message when the values are known.
int64_t bytes_sent_;
@@ -147,7 +151,7 @@ class URLLoader : public PluginResource, public PPB_URLLoader_API {
};
URLLoader::URLLoader(const HostResource& resource)
- : PluginResource(resource),
+ : Resource(resource),
bytes_sent_(-1),
total_bytes_to_be_sent_(-1),
bytes_received_(-1),
@@ -178,8 +182,8 @@ PPB_URLLoader_API* URLLoader::AsPPB_URLLoader_API() {
int32_t URLLoader::Open(PP_Resource request_id,
PP_CompletionCallback callback) {
- PluginResource* request_object =
- PluginResourceTracker::GetInstance()->GetResourceObject(request_id);
+ Resource* request_object =
+ PluginResourceTracker::GetInstance()->GetResource(request_id);
if (!request_object)
return PP_ERROR_BADARGUMENT;
@@ -358,8 +362,7 @@ PPB_URLLoader_Proxy::~PPB_URLLoader_Proxy() {
// static
PP_Resource PPB_URLLoader_Proxy::TrackPluginResource(
const HostResource& url_loader_resource) {
- return PluginResourceTracker::GetInstance()->AddResource(
- new URLLoader(url_loader_resource));
+ return (new URLLoader(url_loader_resource))->GetReference();
}
// static
diff --git a/ppapi/proxy/ppb_url_request_info_proxy.cc b/ppapi/proxy/ppb_url_request_info_proxy.cc
index 63a0b87..7b4152a 100644
--- a/ppapi/proxy/ppb_url_request_info_proxy.cc
+++ b/ppapi/proxy/ppb_url_request_info_proxy.cc
@@ -7,13 +7,13 @@
#include "ppapi/c/ppb_url_request_info.h"
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/thunk/ppb_url_request_info_api.h"
#include "ppapi/thunk/resource_creation_api.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterFunctionNoLock;
using ppapi::thunk::PPB_URLRequestInfo_API;
using ppapi::thunk::ResourceCreationAPI;
@@ -30,7 +30,7 @@ InterfaceProxy* CreateURLRequestInfoProxy(Dispatcher* dispatcher,
} // namespace
-class URLRequestInfo : public PluginResource,
+class URLRequestInfo : public Resource,
public PPB_URLRequestInfo_API {
public:
URLRequestInfo(const HostResource& resource);
@@ -49,11 +49,15 @@ class URLRequestInfo : public PluginResource,
PP_Time expected_last_modified_time) OVERRIDE;
private:
+ PluginDispatcher* GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
+ }
+
DISALLOW_COPY_AND_ASSIGN(URLRequestInfo);
};
URLRequestInfo::URLRequestInfo(const HostResource& resource)
- : PluginResource(resource) {
+ : Resource(resource) {
}
URLRequestInfo::~URLRequestInfo() {
@@ -89,8 +93,8 @@ PP_Bool URLRequestInfo::AppendFileToBody(PP_Resource file_ref,
int64_t start_offset,
int64_t number_of_bytes,
PP_Time expected_last_modified_time) {
- PluginResource* file_ref_object =
- PluginResourceTracker::GetInstance()->GetResourceObject(file_ref);
+ Resource* file_ref_object =
+ PluginResourceTracker::GetInstance()->GetResource(file_ref);
if (!file_ref_object)
return PP_FALSE;
@@ -139,9 +143,7 @@ PP_Resource PPB_URLRequestInfo_Proxy::CreateProxyResource(
INTERFACE_ID_PPB_URL_REQUEST_INFO, instance, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new URLRequestInfo(result));
+ return (new URLRequestInfo(result))->GetReference();
}
bool PPB_URLRequestInfo_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_url_response_info_proxy.cc b/ppapi/proxy/ppb_url_response_info_proxy.cc
index f0bfaf2..710f6b0 100644
--- a/ppapi/proxy/ppb_url_response_info_proxy.cc
+++ b/ppapi/proxy/ppb_url_response_info_proxy.cc
@@ -8,14 +8,15 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_file_ref_proxy.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_url_response_info_api.h"
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::PPB_URLResponseInfo_API;
namespace pp {
@@ -32,13 +33,12 @@ InterfaceProxy* CreateURLResponseInfoProxy(Dispatcher* dispatcher,
// URLResponseInfo -------------------------------------------------------------
-class URLResponseInfo : public PluginResource,
- public PPB_URLResponseInfo_API {
+class URLResponseInfo : public Resource, public PPB_URLResponseInfo_API {
public:
URLResponseInfo(const HostResource& resource);
virtual ~URLResponseInfo();
- // ResourceObjectBase override.
+ // Resource override.
virtual PPB_URLResponseInfo_API* AsPPB_URLResponseInfo_API() OVERRIDE;
// PPB_URLResponseInfo_API implementation.
@@ -50,7 +50,7 @@ class URLResponseInfo : public PluginResource,
};
URLResponseInfo::URLResponseInfo(const HostResource& resource)
- : PluginResource(resource) {
+ : Resource(resource) {
}
URLResponseInfo::~URLResponseInfo() {
@@ -61,10 +61,11 @@ PPB_URLResponseInfo_API* URLResponseInfo::AsPPB_URLResponseInfo_API() {
}
PP_Var URLResponseInfo::GetProperty(PP_URLResponseProperty property) {
+ PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(this);
ReceiveSerializedVarReturnValue result;
- GetDispatcher()->Send(new PpapiHostMsg_PPBURLResponseInfo_GetProperty(
+ dispatcher->Send(new PpapiHostMsg_PPBURLResponseInfo_GetProperty(
INTERFACE_ID_PPB_URL_RESPONSE_INFO, host_resource(), property, &result));
- return result.Return(GetDispatcher());
+ return result.Return(dispatcher);
}
PP_Resource URLResponseInfo::GetBodyAsFileRef() {
@@ -73,8 +74,9 @@ PP_Resource URLResponseInfo::GetBodyAsFileRef() {
// where the file is ready. This will prevent us from having to do this sync
// IPC here.
PPBFileRef_CreateInfo create_info;
- GetDispatcher()->Send(new PpapiHostMsg_PPBURLResponseInfo_GetBodyAsFileRef(
- INTERFACE_ID_PPB_URL_RESPONSE_INFO, host_resource(), &create_info));
+ PluginDispatcher::GetForResource(this)->Send(
+ new PpapiHostMsg_PPBURLResponseInfo_GetBodyAsFileRef(
+ INTERFACE_ID_PPB_URL_RESPONSE_INFO, host_resource(), &create_info));
return PPB_FileRef_Proxy::DeserializeFileRef(create_info);
}
@@ -104,8 +106,7 @@ const InterfaceProxy::Info* PPB_URLResponseInfo_Proxy::GetInfo() {
// static
PP_Resource PPB_URLResponseInfo_Proxy::CreateResponseForResource(
const HostResource& resource) {
- return PluginResourceTracker::GetInstance()->AddResource(
- new URLResponseInfo(resource));
+ return (new URLResponseInfo(resource))->GetReference();
}
bool PPB_URLResponseInfo_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_url_response_info_proxy.h b/ppapi/proxy/ppb_url_response_info_proxy.h
index f181dfd..9ef469b 100644
--- a/ppapi/proxy/ppb_url_response_info_proxy.h
+++ b/ppapi/proxy/ppb_url_response_info_proxy.h
@@ -31,7 +31,7 @@ class PPB_URLResponseInfo_Proxy : public InterfaceProxy {
// URLResponseInfo objects are actually created and returned by the
// URLLoader. This function allows the URLLoader to convert a new
// HostResource representing a response info to a properly tracked
- // URLReponseInfo PluginResource. Returns the plugin resource ID for the
+ // URLReponseInfo Resource. Returns the plugin resource ID for the
// new resource.
static PP_Resource CreateResponseForResource(
const ppapi::HostResource& resource);
diff --git a/ppapi/proxy/ppb_video_capture_proxy.cc b/ppapi/proxy/ppb_video_capture_proxy.cc
index 56a99e5..a49b6e8 100644
--- a/ppapi/proxy/ppb_video_capture_proxy.cc
+++ b/ppapi/proxy/ppb_video_capture_proxy.cc
@@ -16,7 +16,6 @@
#include "ppapi/proxy/enter_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_buffer_proxy.h"
#include "ppapi/thunk/ppb_buffer_api.h"
@@ -25,6 +24,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Buffer_API;
using ppapi::thunk::PPB_BufferTrusted_API;
@@ -145,12 +145,12 @@ PPP_VideoCapture_Dev ppp_video_capture = {
} // namespace
class VideoCapture : public ppapi::thunk::PPB_VideoCapture_API,
- public PluginResource {
+ public Resource {
public:
VideoCapture(const HostResource& resource);
virtual ~VideoCapture();
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual ppapi::thunk::PPB_VideoCapture_API* AsPPB_VideoCapture_API() OVERRIDE;
// PPB_VideoCapture_API implementation.
@@ -246,13 +246,17 @@ class VideoCapture : public ppapi::thunk::PPB_VideoCapture_API,
}
private:
+ PluginDispatcher* GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
+ }
+
uint32_t status_;
std::vector<bool> buffer_in_use_;
DISALLOW_COPY_AND_ASSIGN(VideoCapture);
};
VideoCapture::VideoCapture(const HostResource& resource)
- : PluginResource(resource),
+ : Resource(resource),
status_(PP_VIDEO_CAPTURE_STATUS_STOPPED) {
}
@@ -294,9 +298,7 @@ PP_Resource PPB_VideoCapture_Proxy::CreateProxyResource(PP_Instance instance) {
INTERFACE_ID_PPB_VIDEO_CAPTURE_DEV, instance, &result));
if (result.is_null())
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new VideoCapture(result));
+ return (new VideoCapture(result))->GetReference();
}
bool PPB_VideoCapture_Proxy::OnMessageReceived(const IPC::Message& msg) {
diff --git a/ppapi/proxy/ppb_video_decoder_proxy.cc b/ppapi/proxy/ppb_video_decoder_proxy.cc
index 85f6bff..bcc0fc94 100644
--- a/ppapi/proxy/ppb_video_decoder_proxy.cc
+++ b/ppapi/proxy/ppb_video_decoder_proxy.cc
@@ -16,6 +16,7 @@
#include "ppapi/thunk/thunk.h"
using ppapi::HostResource;
+using ppapi::Resource;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Buffer_API;
using ppapi::thunk::PPB_Context3D_API;
@@ -24,16 +25,18 @@ using ppapi::thunk::PPB_VideoDecoder_API;
namespace pp {
namespace proxy {
-class VideoDecoder : public PluginResource,
+class VideoDecoder : public Resource,
public ::ppapi::VideoDecoderImpl {
public:
+ // You must call Init() before using this class.
+ explicit VideoDecoder(const HostResource& resource);
virtual ~VideoDecoder();
static VideoDecoder* Create(const HostResource& resource,
PP_Resource context3d_id,
const PP_VideoConfigElement* config);
- // ResourceObjectBase overrides.
+ // Resource overrides.
virtual PPB_VideoDecoder_API* AsPPB_VideoDecoder_API() OVERRIDE;
// PPB_VideoDecoder_API implementation.
@@ -46,13 +49,10 @@ class VideoDecoder : public PluginResource,
virtual int32_t Reset(PP_CompletionCallback callback) OVERRIDE;
virtual void Destroy() OVERRIDE;
- protected:
- virtual void AddRefResource(PP_Resource resource) OVERRIDE;
- virtual void UnrefResource(PP_Resource resource) OVERRIDE;
-
private:
friend class PPB_VideoDecoder_Proxy;
- explicit VideoDecoder(const HostResource& resource);
+
+ PluginDispatcher* GetDispatcher() const;
// Run the callbacks that were passed into the plugin interface.
void FlushACK(int32_t result);
@@ -62,24 +62,7 @@ class VideoDecoder : public PluginResource,
DISALLOW_COPY_AND_ASSIGN(VideoDecoder);
};
-VideoDecoder::VideoDecoder(const HostResource& decoder)
- : PluginResource(decoder) {
-}
-
-VideoDecoder* VideoDecoder::Create(const HostResource& resource,
- PP_Resource context3d_id,
- const PP_VideoConfigElement* config) {
- if (!context3d_id)
- return NULL;
-
- EnterResourceNoLock<PPB_Context3D_API> enter_context(context3d_id, true);
- if (enter_context.failed())
- return NULL;
-
- scoped_refptr<VideoDecoder> decoder(new VideoDecoder(resource));
- if (decoder->Init(context3d_id, enter_context.object(), config))
- return decoder.release();
- return NULL;
+VideoDecoder::VideoDecoder(const HostResource& decoder) : Resource(decoder) {
}
VideoDecoder::~VideoDecoder() {
@@ -155,12 +138,8 @@ void VideoDecoder::Destroy() {
::ppapi::VideoDecoderImpl::Destroy();
}
-void VideoDecoder::AddRefResource(PP_Resource resource) {
- PluginResourceTracker::GetInstance()->AddRefResource(resource);
-}
-
-void VideoDecoder::UnrefResource(PP_Resource resource) {
- PluginResourceTracker::GetInstance()->ReleaseResource(resource);
+PluginDispatcher* VideoDecoder::GetDispatcher() const {
+ return PluginDispatcher::GetForResource(this);
}
void VideoDecoder::ResetACK(int32_t result) {
@@ -257,8 +236,11 @@ PP_Resource PPB_VideoDecoder_Proxy::CreateProxyResource(
if (result.is_null())
return 0;
- return PluginResourceTracker::GetInstance()->AddResource(
- VideoDecoder::Create(result, context3d_id, config));
+ // Need a scoped_refptr to keep the object alive during the Init call.
+ scoped_refptr<VideoDecoder> decoder(new VideoDecoder(result));
+ if (!decoder->Init(context3d_id, enter_context.object(), config))
+ return 0;
+ return decoder->GetReference();
}
void PPB_VideoDecoder_Proxy::OnMsgCreate(
diff --git a/ppapi/proxy/ppb_video_decoder_proxy.h b/ppapi/proxy/ppb_video_decoder_proxy.h
index e7c0457..d915d22 100644
--- a/ppapi/proxy/ppb_video_decoder_proxy.h
+++ b/ppapi/proxy/ppb_video_decoder_proxy.h
@@ -8,7 +8,6 @@
#include "ppapi/c/pp_instance.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/proxy/interface_proxy.h"
-#include "ppapi/proxy/plugin_resource.h"
#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
#include "ppapi/shared_impl/video_decoder_impl.h"
#include "ppapi/thunk/ppb_video_decoder_api.h"
diff --git a/ppapi/proxy/ppp_graphics_3d_proxy.h b/ppapi/proxy/ppp_graphics_3d_proxy.h
index b52a500..4f1af56 100644
--- a/ppapi/proxy/ppp_graphics_3d_proxy.h
+++ b/ppapi/proxy/ppp_graphics_3d_proxy.h
@@ -7,6 +7,7 @@
#include "ppapi/c/pp_instance.h"
#include "ppapi/proxy/interface_proxy.h"
+#include "ppapi/shared_impl/host_resource.h"
struct PPP_Graphics3D_Dev;
diff --git a/ppapi/proxy/ppp_instance_private_proxy.h b/ppapi/proxy/ppp_instance_private_proxy.h
index 166ee7d..f981167 100644
--- a/ppapi/proxy/ppp_instance_private_proxy.h
+++ b/ppapi/proxy/ppp_instance_private_proxy.h
@@ -9,6 +9,7 @@
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_var.h"
#include "ppapi/proxy/interface_proxy.h"
+#include "ppapi/shared_impl/host_resource.h"
struct PPP_Instance_Private;
diff --git a/ppapi/proxy/ppp_instance_proxy.cc b/ppapi/proxy/ppp_instance_proxy.cc
index 05c061b..612fb77 100644
--- a/ppapi/proxy/ppp_instance_proxy.cc
+++ b/ppapi/proxy/ppp_instance_proxy.cc
@@ -165,6 +165,7 @@ void PPP_Instance_Proxy::OnMsgDidCreate(
PluginDispatcher* plugin_dispatcher =
static_cast<PluginDispatcher*>(dispatcher());
plugin_dispatcher->DidCreateInstance(instance);
+ ppapi::TrackerBase::Get()->GetResourceTracker()->DidCreateInstance(instance);
// Make sure the arrays always have at least one element so we can take the
// address below.
@@ -185,6 +186,7 @@ void PPP_Instance_Proxy::OnMsgDidCreate(
void PPP_Instance_Proxy::OnMsgDidDestroy(PP_Instance instance) {
combined_interface_->DidDestroy(instance);
+ ppapi::TrackerBase::Get()->GetResourceTracker()->DidDeleteInstance(instance);
static_cast<PluginDispatcher*>(dispatcher())->DidDestroyInstance(instance);
}
diff --git a/ppapi/proxy/ppp_video_decoder_proxy.cc b/ppapi/proxy/ppp_video_decoder_proxy.cc
index d4eaed1..ddfc0c3 100644
--- a/ppapi/proxy/ppp_video_decoder_proxy.cc
+++ b/ppapi/proxy/ppp_video_decoder_proxy.cc
@@ -5,6 +5,7 @@
#include "ppapi/proxy/ppp_video_decoder_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
+#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_video_decoder_proxy.h"
#include "ppapi/thunk/enter.h"
@@ -153,7 +154,8 @@ void PPP_VideoDecoder_Proxy::OnMsgNotifyEndOfStream(
const HostResource& decoder) {
PP_Resource plugin_decoder = PluginResourceTracker::GetInstance()->
PluginResourceForHostResource(decoder);
- ppp_video_decoder_target()->EndOfStream(decoder.instance(), plugin_decoder);
+ ppp_video_decoder_target()->EndOfStream(decoder.instance(),
+ plugin_decoder);
}
void PPP_VideoDecoder_Proxy::OnMsgNotifyError(
diff --git a/ppapi/proxy/proxy_module.h b/ppapi/proxy/proxy_module.h
index 304f24f..5b2e540 100644
--- a/ppapi/proxy/proxy_module.h
+++ b/ppapi/proxy/proxy_module.h
@@ -15,7 +15,6 @@ namespace pp {
namespace proxy {
class PluginDispatcher;
-class PluginResource;
class ProxyModule {
public:
diff --git a/ppapi/proxy/resource_creation_proxy.cc b/ppapi/proxy/resource_creation_proxy.cc
index 201eef1..4ba7cd1 100644
--- a/ppapi/proxy/resource_creation_proxy.cc
+++ b/ppapi/proxy/resource_creation_proxy.cc
@@ -158,9 +158,8 @@ PP_Resource ResourceCreationProxy::CreateFontObject(
const PP_FontDescription_Dev* description) {
if (!ppapi::FontImpl::IsPPFontDescriptionValid(*description))
return 0;
-
- return PluginResourceTracker::GetInstance()->AddResource(
- new Font(HostResource::MakeInstanceOnly(instance), *description));
+ return (new Font(HostResource::MakeInstanceOnly(instance), *description))->
+ GetReference();
}
PP_Resource ResourceCreationProxy::CreateGraphics2D(PP_Instance instance,
@@ -192,8 +191,7 @@ PP_Resource ResourceCreationProxy::CreateImageData(PP_Instance instance,
PP_ImageDataDesc desc;
memcpy(&desc, image_data_desc.data(), sizeof(PP_ImageDataDesc));
- return PluginResourceTracker::GetInstance()->AddResource(
- new ImageData(result, desc, image_handle));
+ return (new ImageData(result, desc, image_handle))->GetReference();
}
PP_Resource ResourceCreationProxy::CreateKeyboardInputEvent(