summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
Diffstat (limited to 'webkit')
-rw-r--r--webkit/plugins/ppapi/npapi_glue.cc11
-rw-r--r--webkit/plugins/ppapi/npobject_var.cc8
-rw-r--r--webkit/plugins/ppapi/npobject_var.h1
-rw-r--r--webkit/plugins/ppapi/plugin_object.cc6
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc6
-rw-r--r--webkit/plugins/ppapi/ppb_url_util_impl.cc34
-rw-r--r--webkit/plugins/ppapi/ppb_var_impl.cc16
-rw-r--r--webkit/plugins/ppapi/resource_tracker.cc110
-rw-r--r--webkit/plugins/ppapi/resource_tracker.h15
-rw-r--r--webkit/plugins/ppapi/resource_tracker_unittest.cc7
10 files changed, 71 insertions, 143 deletions
diff --git a/webkit/plugins/ppapi/npapi_glue.cc b/webkit/plugins/ppapi/npapi_glue.cc
index 93c57ed..7e90a1e 100644
--- a/webkit/plugins/ppapi/npapi_glue.cc
+++ b/webkit/plugins/ppapi/npapi_glue.cc
@@ -159,7 +159,7 @@ PPResultAndExceptionToNPResult::~PPResultAndExceptionToNPResult() {
// been lost.
DCHECK(checked_exception_);
- NPObjectVar::PluginReleasePPVar(exception_);
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(exception_);
}
// Call this with the return value of the PPAPI function. It will convert
@@ -184,7 +184,7 @@ bool PPResultAndExceptionToNPResult::SetResult(PP_Var result) {
// No matter what happened, we need to release the reference to the
// value passed in. On success, a reference to this value will be in
// the np_result_.
- ::ppapi::Var::PluginReleasePPVar(result);
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(result);
return success_;
}
@@ -237,8 +237,9 @@ PPVarArrayFromNPVariantArray::PPVarArrayFromNPVariantArray(
}
PPVarArrayFromNPVariantArray::~PPVarArrayFromNPVariantArray() {
+ ::ppapi::VarTracker* var_tracker = ResourceTracker::Get()->GetVarTracker();
for (size_t i = 0; i < size_; i++)
- ::ppapi::Var::PluginReleasePPVar(array_[i]);
+ var_tracker->ReleaseVar(array_[i]);
}
// PPVarFromNPObject -----------------------------------------------------------
@@ -248,7 +249,7 @@ PPVarFromNPObject::PPVarFromNPObject(PluginInstance* instance, NPObject* object)
}
PPVarFromNPObject::~PPVarFromNPObject() {
- ::ppapi::Var::PluginReleasePPVar(var_);
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(var_);
}
// NPObjectAccessorWithIdentifier ----------------------------------------------
@@ -268,7 +269,7 @@ NPObjectAccessorWithIdentifier::NPObjectAccessorWithIdentifier(
}
NPObjectAccessorWithIdentifier::~NPObjectAccessorWithIdentifier() {
- ::ppapi::Var::PluginReleasePPVar(identifier_);
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(identifier_);
}
// TryCatch --------------------------------------------------------------------
diff --git a/webkit/plugins/ppapi/npobject_var.cc b/webkit/plugins/ppapi/npobject_var.cc
index b951cde..e430dd2 100644
--- a/webkit/plugins/ppapi/npobject_var.cc
+++ b/webkit/plugins/ppapi/npobject_var.cc
@@ -46,6 +46,10 @@ PP_Var NPObjectVar::GetPPVar() {
return result;
}
+PP_VarType NPObjectVar::GetType() const {
+ return PP_VARTYPE_OBJECT;
+}
+
void NPObjectVar::InstanceDeleted() {
DCHECK(pp_instance_);
pp_instance_ = 0;
@@ -55,8 +59,8 @@ void NPObjectVar::InstanceDeleted() {
scoped_refptr<NPObjectVar> NPObjectVar::FromPPVar(PP_Var var) {
if (var.type != PP_VARTYPE_OBJECT)
return scoped_refptr<NPObjectVar>(NULL);
- scoped_refptr<Var> var_object(webkit::ppapi::ResourceTracker::Get()->GetVar(
- static_cast<int32>(var.value.as_id)));
+ scoped_refptr<Var> var_object(
+ webkit::ppapi::ResourceTracker::Get()->GetVarTracker()->GetVar(var));
if (!var_object)
return scoped_refptr<NPObjectVar>();
return scoped_refptr<NPObjectVar>(var_object->AsNPObjectVar());
diff --git a/webkit/plugins/ppapi/npobject_var.h b/webkit/plugins/ppapi/npobject_var.h
index d0ba122..f82861a 100644
--- a/webkit/plugins/ppapi/npobject_var.h
+++ b/webkit/plugins/ppapi/npobject_var.h
@@ -39,6 +39,7 @@ class NPObjectVar : public Var {
// Var overrides.
virtual NPObjectVar* AsNPObjectVar() OVERRIDE;
virtual PP_Var GetPPVar() OVERRIDE;
+ virtual PP_VarType GetType() const OVERRIDE;
// Returns the underlying NPObject corresponding to this NPObjectVar.
// Guaranteed non-NULL.
diff --git a/webkit/plugins/ppapi/plugin_object.cc b/webkit/plugins/ppapi/plugin_object.cc
index 95d8fba..5362fa4 100644
--- a/webkit/plugins/ppapi/plugin_object.cc
+++ b/webkit/plugins/ppapi/plugin_object.cc
@@ -21,6 +21,7 @@
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/resource.h"
+#include "webkit/plugins/ppapi/resource_tracker.h"
#include "webkit/plugins/ppapi/string.h"
using ppapi::StringVar;
@@ -136,7 +137,7 @@ bool WrapperClass_SetProperty(NPObject* object, NPIdentifier property_name,
accessor.object()->ppp_class()->SetProperty(
accessor.object()->ppp_class_data(), accessor.identifier(), value_var,
result_converter.exception());
- Var::PluginReleasePPVar(value_var);
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(value_var);
return result_converter.CheckExceptionForNoResult();
}
@@ -201,8 +202,9 @@ bool WrapperClass_Enumerate(NPObject* object, NPIdentifier** values,
// Release the PP_Var that the plugin allocated. On success, they will all
// be converted to NPVariants, and on failure, we want them to just go away.
+ ::ppapi::VarTracker* var_tracker = ResourceTracker::Get()->GetVarTracker();
for (uint32_t i = 0; i < property_count; ++i)
- Var::PluginReleasePPVar(properties[i]);
+ var_tracker->ReleaseVar(properties[i]);
free(properties);
return result_converter.success();
}
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index 5770ca8..242c246 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -609,7 +609,8 @@ string16 PluginInstance::GetSelectedText(bool html) {
PP_Var rv = plugin_selection_interface_->GetSelectedText(pp_instance(),
PP_FromBool(html));
scoped_refptr<StringVar> string(StringVar::FromPPVar(rv));
- Var::PluginReleasePPVar(rv); // Release the ref the plugin transfered to us.
+ // Release the ref the plugin transfered to us.
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(rv);
if (!string)
return string16();
return UTF8ToUTF16(string->value());
@@ -626,7 +627,8 @@ string16 PluginInstance::GetLinkAtPosition(const gfx::Point& point) {
p.y = point.y();
PP_Var rv = plugin_pdf_interface_->GetLinkAtPosition(pp_instance(), p);
scoped_refptr<StringVar> string(StringVar::FromPPVar(rv));
- Var::PluginReleasePPVar(rv); // Release the ref the plugin transfered to us.
+ // Release the ref the plugin transfered to us.
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(rv);
if (!string)
return string16();
return UTF8ToUTF16(string->value());
diff --git a/webkit/plugins/ppapi/ppb_url_util_impl.cc b/webkit/plugins/ppapi/ppb_url_util_impl.cc
index ebd8921..1900731 100644
--- a/webkit/plugins/ppapi/ppb_url_util_impl.cc
+++ b/webkit/plugins/ppapi/ppb_url_util_impl.cc
@@ -39,13 +39,6 @@ PP_Module GetModuleFromVar(PP_Var string_var) {
return str->pp_module();
}
-const std::string* StringFromVar(PP_Var var) {
- scoped_refptr<StringVar> string(StringVar::FromPPVar(var));
- if (!string)
- return NULL;
- return &string->value();
-}
-
// Sets |*security_origin| to be the WebKit security origin associated with the
// document containing the given plugin instance. On success, returns true. If
// the instance is invalid, returns false and |*security_origin| will be
@@ -62,20 +55,14 @@ bool SecurityOriginForInstance(PP_Instance instance_id,
}
PP_Var Canonicalize(PP_Var url, PP_URLComponents_Dev* components) {
- return URLUtilImpl::Canonicalize(&StringFromVar,
- PPB_Var_Impl::GetVarInterface()->VarFromUtf8,
- GetModuleFromVar(url),
- url, components);
+ return URLUtilImpl::Canonicalize(GetModuleFromVar(url), url, components);
}
PP_Var ResolveRelativeToURL(PP_Var base_url,
PP_Var relative,
PP_URLComponents_Dev* components) {
- return URLUtilImpl::ResolveRelativeToURL(
- &StringFromVar,
- PPB_Var_Impl::GetVarInterface()->VarFromUtf8,
- GetModuleFromVar(base_url),
- base_url, relative, components);
+ return URLUtilImpl::ResolveRelativeToURL(GetModuleFromVar(base_url),
+ base_url, relative, components);
}
PP_Var ResolveRelativeToDocument(PP_Instance instance_id,
@@ -92,14 +79,13 @@ PP_Var ResolveRelativeToDocument(PP_Instance instance_id,
WebKit::WebElement plugin_element = instance->container()->element();
GURL document_url = plugin_element.document().baseURL();
return URLUtilImpl::GenerateURLReturn(
- PPB_Var_Impl::GetVarInterface()->VarFromUtf8,
instance->module()->pp_module(),
document_url.Resolve(relative_string->value()),
components);
}
PP_Bool IsSameSecurityOrigin(PP_Var url_a, PP_Var url_b) {
- return URLUtilImpl::IsSameSecurityOrigin(&StringFromVar, url_a, url_b);
+ return URLUtilImpl::IsSameSecurityOrigin(url_a, url_b);
}
PP_Bool DocumentCanRequest(PP_Instance instance, PP_Var url) {
@@ -137,10 +123,8 @@ PP_Var GetDocumentURL(PP_Instance instance_id,
return PP_MakeNull();
WebKit::WebDocument document = instance->container()->element().document();
- return URLUtilImpl::GenerateURLReturn(
- PPB_Var_Impl::GetVarInterface()->VarFromUtf8,
- instance->module()->pp_module(),
- document.url(), components);
+ return URLUtilImpl::GenerateURLReturn(instance->module()->pp_module(),
+ document.url(), components);
}
PP_Var GetPluginInstanceURL(PP_Instance instance_id,
@@ -150,10 +134,8 @@ PP_Var GetPluginInstanceURL(PP_Instance instance_id,
return PP_MakeNull();
const GURL& url = instance->plugin_url();
- return URLUtilImpl::GenerateURLReturn(
- PPB_Var_Impl::GetVarInterface()->VarFromUtf8,
- instance->module()->pp_module(),
- url, components);
+ return URLUtilImpl::GenerateURLReturn(instance->module()->pp_module(),
+ url, components);
}
const PPB_URLUtil_Dev ppb_url_util = {
diff --git a/webkit/plugins/ppapi/ppb_var_impl.cc b/webkit/plugins/ppapi/ppb_var_impl.cc
index 49576b3..160b972 100644
--- a/webkit/plugins/ppapi/ppb_var_impl.cc
+++ b/webkit/plugins/ppapi/ppb_var_impl.cc
@@ -169,6 +169,14 @@ class ObjectAccessorWithIdentifierTryCatch : public ObjectAccessorTryCatch {
// PPB_Var methods -------------------------------------------------------------
+void AddRefVar(PP_Var var) {
+ ResourceTracker::Get()->GetVarTracker()->AddRefVar(var);
+}
+
+void ReleaseVar(PP_Var var) {
+ ResourceTracker::Get()->GetVarTracker()->ReleaseVar(var);
+}
+
PP_Var VarFromUtf8(PP_Module module, const char* data, uint32_t len) {
return StringVar::StringToPPVar(module, data, len);
}
@@ -418,8 +426,8 @@ PP_Var CreateObjectWithModuleDeprecated(PP_Module module_id,
}
const PPB_Var_Deprecated var_deprecated_interface = {
- &Var::PluginAddRefPPVar,
- &Var::PluginReleasePPVar,
+ &AddRefVar,
+ &ReleaseVar,
&VarFromUtf8,
&VarToUtf8,
&HasPropertyDeprecated,
@@ -436,8 +444,8 @@ const PPB_Var_Deprecated var_deprecated_interface = {
};
const PPB_Var var_interface = {
- &Var::PluginAddRefPPVar,
- &Var::PluginReleasePPVar,
+ &AddRefVar,
+ &ReleaseVar,
&VarFromUtf8,
&VarToUtf8
};
diff --git a/webkit/plugins/ppapi/resource_tracker.cc b/webkit/plugins/ppapi/resource_tracker.cc
index 3d050a5..5e15103 100644
--- a/webkit/plugins/ppapi/resource_tracker.cc
+++ b/webkit/plugins/ppapi/resource_tracker.cc
@@ -12,6 +12,7 @@
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_var.h"
#include "ppapi/shared_impl/function_group_base.h"
+#include "ppapi/shared_impl/id_assignment.h"
#include "ppapi/shared_impl/tracker_base.h"
#include "webkit/plugins/ppapi/npobject_var.h"
#include "webkit/plugins/ppapi/plugin_module.h"
@@ -23,36 +24,12 @@
#include "webkit/plugins/ppapi/resource.h"
#include "webkit/plugins/ppapi/resource_creation_impl.h"
+using ppapi::CheckIdType;
+using ppapi::MakeTypedId;
using ppapi::NPObjectVar;
+using ppapi::PPIdType;
using ppapi::Var;
-enum PPIdType {
- PP_ID_TYPE_MODULE,
- PP_ID_TYPE_INSTANCE,
- PP_ID_TYPE_RESOURCE,
- PP_ID_TYPE_VAR,
- PP_ID_TYPE_COUNT
-};
-
-static const unsigned int kPPIdTypeBits = 2;
-COMPILE_ASSERT(PP_ID_TYPE_COUNT <= (1<<kPPIdTypeBits),
- kPPIdTypeBits_is_too_small_for_all_id_types);
-
-static const int32 kMaxPPIdType =
- std::numeric_limits<int32>::max() >> kPPIdTypeBits;
-
-template <typename T> static inline T MakeTypedId(T value, PPIdType type) {
- return (value << kPPIdTypeBits) | static_cast<T>(type);
-}
-
-template <typename T> static inline bool CheckIdType(T id, PPIdType type) {
- // 0 is a valid resource.
- if (!id)
- return true;
- const T mask = (static_cast<T>(1) << kPPIdTypeBits) - 1;
- return (id & mask) == type;
-}
-
namespace webkit {
namespace ppapi {
@@ -89,7 +66,7 @@ struct ResourceTracker::InstanceData {
};
scoped_refptr<Resource> ResourceTracker::GetResource(PP_Resource res) const {
- DLOG_IF(ERROR, !CheckIdType(res, PP_ID_TYPE_RESOURCE))
+ DLOG_IF(ERROR, !CheckIdType(res, ::ppapi::PP_ID_TYPE_RESOURCE))
<< res << " is not a PP_Resource.";
ResourceMap::const_iterator result = live_resources_.find(res);
if (result == live_resources_.end()) {
@@ -103,8 +80,7 @@ ResourceTracker* ResourceTracker::global_tracker_ = NULL;
ResourceTracker* ResourceTracker::singleton_override_ = NULL;
ResourceTracker::ResourceTracker()
- : last_resource_id_(0),
- last_var_id_(0) {
+ : last_resource_id_(0) {
// Wire up the new shared resource tracker base to use our implementation.
::ppapi::TrackerBase::Init(&GetTrackerBase);
}
@@ -145,11 +121,12 @@ void ResourceTracker::ResourceDestroyed(Resource* resource) {
PP_Resource ResourceTracker::AddResource(Resource* resource) {
// If the plugin manages to create 1 billion resources, don't do crazy stuff.
if (last_resource_id_ ==
- (std::numeric_limits<PP_Resource>::max() >> kPPIdTypeBits))
+ (std::numeric_limits<PP_Resource>::max() >> ::ppapi::kPPIdTypeBits))
return 0;
// Add the resource with plugin use-count 1.
- PP_Resource new_id = MakeTypedId(++last_resource_id_, PP_ID_TYPE_RESOURCE);
+ PP_Resource new_id = MakeTypedId(++last_resource_id_,
+ ::ppapi::PP_ID_TYPE_RESOURCE);
live_resources_.insert(std::make_pair(new_id, std::make_pair(resource, 1)));
// Track associated with the instance.
@@ -160,7 +137,7 @@ PP_Resource ResourceTracker::AddResource(Resource* resource) {
}
bool ResourceTracker::AddRefResource(PP_Resource res) {
- DLOG_IF(ERROR, !CheckIdType(res, PP_ID_TYPE_RESOURCE))
+ DLOG_IF(ERROR, !CheckIdType(res, ::ppapi::PP_ID_TYPE_RESOURCE))
<< res << " is not a PP_Resource.";
ResourceMap::iterator i = live_resources_.find(res);
if (i != live_resources_.end()) {
@@ -175,7 +152,7 @@ bool ResourceTracker::AddRefResource(PP_Resource res) {
}
bool ResourceTracker::UnrefResource(PP_Resource res) {
- DLOG_IF(ERROR, !CheckIdType(res, PP_ID_TYPE_RESOURCE))
+ DLOG_IF(ERROR, !CheckIdType(res, ::ppapi::PP_ID_TYPE_RESOURCE))
<< res << " is not a PP_Resource.";
ResourceMap::iterator i = live_resources_.find(res);
if (i != live_resources_.end()) {
@@ -197,7 +174,7 @@ bool ResourceTracker::UnrefResource(PP_Resource res) {
void ResourceTracker::CleanupInstanceData(PP_Instance instance,
bool delete_instance) {
- DLOG_IF(ERROR, !CheckIdType(instance, PP_ID_TYPE_INSTANCE))
+ DLOG_IF(ERROR, !CheckIdType(instance, ::ppapi::PP_ID_TYPE_INSTANCE))
<< instance << " is not a PP_Instance.";
InstanceMap::iterator found = instance_map_.find(instance);
if (found == instance_map_.end()) {
@@ -270,7 +247,7 @@ uint32 ResourceTracker::GetLiveObjectsForInstance(
::ppapi::ResourceObjectBase* ResourceTracker::GetResourceAPI(
PP_Resource res) {
- DLOG_IF(ERROR, !CheckIdType(res, PP_ID_TYPE_RESOURCE))
+ DLOG_IF(ERROR, !CheckIdType(res, ::ppapi::PP_ID_TYPE_RESOURCE))
<< res << " is not a PP_Resource.";
ResourceMap::const_iterator result = live_resources_.find(res);
if (result == live_resources_.end())
@@ -327,55 +304,8 @@ PP_Instance ResourceTracker::GetInstanceForResource(PP_Resource pp_resource) {
return resource->instance()->pp_instance();
}
-int32 ResourceTracker::AddVar(Var* var) {
- // If the plugin manages to create 1B strings...
- if (last_var_id_ == kMaxPPIdType)
- return 0;
-
- // Validate the module.
- if (!GetModule(var->pp_module()))
- return 0;
-
- // Add the resource with plugin use-count 1.
- int32 new_id = MakeTypedId(++last_var_id_, PP_ID_TYPE_VAR);
- live_vars_.insert(std::make_pair(new_id, std::make_pair(var, 1)));
-
- return new_id;
-}
-
-scoped_refptr<Var> ResourceTracker::GetVar(int32 var_id) const {
- DLOG_IF(ERROR, !CheckIdType(var_id, PP_ID_TYPE_VAR))
- << var_id << " is not a PP_Var ID.";
- VarMap::const_iterator result = live_vars_.find(var_id);
- if (result == live_vars_.end())
- return scoped_refptr<Var>();
- return result->second.first;
-}
-
-bool ResourceTracker::AddRefVar(int32 var_id) {
- DLOG_IF(ERROR, !CheckIdType(var_id, PP_ID_TYPE_VAR))
- << var_id << " is not a PP_Var ID.";
- VarMap::iterator i = live_vars_.find(var_id);
- if (i != live_vars_.end()) {
- // We don't protect against overflow, since a plugin as malicious as to ref
- // once per every byte in the address space could have just as well unrefed
- // one time too many.
- ++i->second.second;
- return true;
- }
- return false;
-}
-
-bool ResourceTracker::UnrefVar(int32 var_id) {
- DLOG_IF(ERROR, !CheckIdType(var_id, PP_ID_TYPE_VAR))
- << var_id << " is not a PP_Var ID.";
- VarMap::iterator i = live_vars_.find(var_id);
- if (i != live_vars_.end()) {
- if (!--i->second.second)
- live_vars_.erase(i);
- return true;
- }
- return false;
+::ppapi::VarTracker* ResourceTracker::GetVarTracker() {
+ return &var_tracker_;
}
void ResourceTracker::AddNPObjectVar(NPObjectVar* object_var) {
@@ -426,7 +356,7 @@ PP_Instance ResourceTracker::AddInstance(PluginInstance* instance) {
PP_Instance new_instance;
do {
new_instance = MakeTypedId(static_cast<PP_Instance>(base::RandUint64()),
- PP_ID_TYPE_INSTANCE);
+ ::ppapi::PP_ID_TYPE_INSTANCE);
} while (!new_instance ||
instance_map_.find(new_instance) != instance_map_.end() ||
!instance->module()->ReserveInstanceID(new_instance));
@@ -445,7 +375,7 @@ void ResourceTracker::InstanceCrashed(PP_Instance instance) {
}
PluginInstance* ResourceTracker::GetInstance(PP_Instance instance) {
- DLOG_IF(ERROR, !CheckIdType(instance, PP_ID_TYPE_INSTANCE))
+ DLOG_IF(ERROR, !CheckIdType(instance, ::ppapi::PP_ID_TYPE_INSTANCE))
<< instance << " is not a PP_Instance.";
InstanceMap::iterator found = instance_map_.find(instance);
if (found == instance_map_.end())
@@ -465,7 +395,7 @@ PP_Module ResourceTracker::AddModule(PluginModule* module) {
PP_Module new_module;
do {
new_module = MakeTypedId(static_cast<PP_Module>(base::RandUint64()),
- PP_ID_TYPE_MODULE);
+ ::ppapi::PP_ID_TYPE_MODULE);
} while (!new_module ||
module_map_.find(new_module) != module_map_.end());
module_map_[new_module] = module;
@@ -473,7 +403,7 @@ PP_Module ResourceTracker::AddModule(PluginModule* module) {
}
void ResourceTracker::ModuleDeleted(PP_Module module) {
- DLOG_IF(ERROR, !CheckIdType(module, PP_ID_TYPE_MODULE))
+ DLOG_IF(ERROR, !CheckIdType(module, ::ppapi::PP_ID_TYPE_MODULE))
<< module << " is not a PP_Module.";
ModuleMap::iterator found = module_map_.find(module);
if (found == module_map_.end()) {
@@ -484,7 +414,7 @@ void ResourceTracker::ModuleDeleted(PP_Module module) {
}
PluginModule* ResourceTracker::GetModule(PP_Module module) {
- DLOG_IF(ERROR, !CheckIdType(module, PP_ID_TYPE_MODULE))
+ DLOG_IF(ERROR, !CheckIdType(module, ::ppapi::PP_ID_TYPE_MODULE))
<< module << " is not a PP_Module.";
ModuleMap::iterator found = module_map_.find(module);
if (found == module_map_.end())
diff --git a/webkit/plugins/ppapi/resource_tracker.h b/webkit/plugins/ppapi/resource_tracker.h
index faf5aec..7fd445b 100644
--- a/webkit/plugins/ppapi/resource_tracker.h
+++ b/webkit/plugins/ppapi/resource_tracker.h
@@ -21,6 +21,7 @@
#include "ppapi/proxy/interface_id.h"
#include "ppapi/shared_impl/function_group_base.h"
#include "ppapi/shared_impl/tracker_base.h"
+#include "ppapi/shared_impl/var_tracker.h"
typedef struct NPObject NPObject;
@@ -63,22 +64,17 @@ class ResourceTracker : public ::ppapi::TrackerBase {
// Returns the number of resources associated with this module.
uint32 GetLiveObjectsForInstance(PP_Instance instance) const;
- // ResourceTrackerBase.
+ // TrackerBase.
virtual ::ppapi::ResourceObjectBase* GetResourceAPI(
PP_Resource res) OVERRIDE;
virtual ::ppapi::FunctionGroupBase* GetFunctionAPI(
PP_Instance pp_instance,
pp::proxy::InterfaceID id) OVERRIDE;
virtual PP_Instance GetInstanceForResource(PP_Resource resource) OVERRIDE;
+ virtual ::ppapi::VarTracker* GetVarTracker() OVERRIDE;
// PP_Vars -------------------------------------------------------------------
- // TrackerBase implementation.
- virtual int32 AddVar(::ppapi::Var* var) OVERRIDE;
- virtual scoped_refptr< ::ppapi::Var > GetVar(int32 var_id) const OVERRIDE;
- virtual bool AddRefVar(int32 var_id) OVERRIDE;
- virtual bool UnrefVar(int32 var_id) OVERRIDE;
-
// Tracks all live NPObjectVar. This is so we can map between instance +
// NPObject and get the NPObjectVar corresponding to it. This Add/Remove
// function is called by the NPObjectVar when it is created and
@@ -182,9 +178,10 @@ class ResourceTracker : public ::ppapi::TrackerBase {
// See SetSingletonOverride above.
static ResourceTracker* singleton_override_;
- // Last assigned resource & var ID.
+ // Last assigned resource ID.
PP_Resource last_resource_id_;
- int32 last_var_id_;
+
+ ::ppapi::VarTracker var_tracker_;
// For each PP_Resource, keep the Resource* (as refptr) and plugin use count.
// This use count is different then Resource's RefCount, and is manipulated
diff --git a/webkit/plugins/ppapi/resource_tracker_unittest.cc b/webkit/plugins/ppapi/resource_tracker_unittest.cc
index 89590e8..1f2720c 100644
--- a/webkit/plugins/ppapi/resource_tracker_unittest.cc
+++ b/webkit/plugins/ppapi/resource_tracker_unittest.cc
@@ -216,14 +216,15 @@ TEST_F(ResourceTrackerTest, ReuseVar) {
}
// Remove both of the refs we made above.
- tracker().UnrefVar(static_cast<int32_t>(pp_object2.value.as_id));
- tracker().UnrefVar(static_cast<int32_t>(pp_object1.value.as_id));
+ ::ppapi::VarTracker* var_tracker = tracker().GetVarTracker();
+ var_tracker->ReleaseVar(static_cast<int32_t>(pp_object2.value.as_id));
+ var_tracker->ReleaseVar(static_cast<int32_t>(pp_object1.value.as_id));
// Releasing the resource should free the internal ref, and so making a new
// one now should generate a new ID.
PP_Var pp_object3 = NPObjectToPPVar(instance(), npobject.get());
EXPECT_NE(pp_object1.value.as_id, pp_object3.value.as_id);
- tracker().UnrefVar(static_cast<int32_t>(pp_object3.value.as_id));
+ var_tracker->ReleaseVar(static_cast<int32_t>(pp_object3.value.as_id));
}
} // namespace ppapi