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

Unified Diff: webkit/plugins/ppapi/resource_tracker.cc

Issue 7578001: Unify var tracking between webkit and the proxy. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/plugins/ppapi/resource_tracker.h ('k') | webkit/plugins/ppapi/resource_tracker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/ppapi/resource_tracker.cc
===================================================================
--- webkit/plugins/ppapi/resource_tracker.cc (revision 96002)
+++ webkit/plugins/ppapi/resource_tracker.cc (working copy)
@@ -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 @@
};
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::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 @@
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 @@
}
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::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 @@
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 @@
::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,57 +304,10 @@
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;
+::ppapi::VarTracker* ResourceTracker::GetVarTracker() {
+ return &var_tracker_;
}
-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;
-}
-
void ResourceTracker::AddNPObjectVar(NPObjectVar* object_var) {
DCHECK(instance_map_.find(object_var->pp_instance()) != instance_map_.end());
InstanceData& data = *instance_map_[object_var->pp_instance()].get();
@@ -426,7 +356,7 @@
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 @@
}
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 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 @@
}
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 @@
}
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())
« no previous file with comments | « webkit/plugins/ppapi/resource_tracker.h ('k') | webkit/plugins/ppapi/resource_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698