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

Side by Side Diff: content/renderer/pepper/host_var_tracker.h

Issue 522583002: Revert of Replace NPObject usage in ppapi with gin (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/content_renderer.gypi ('k') | content/renderer/pepper/host_var_tracker.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_ 5 #ifndef CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_
6 #define CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_ 6 #define CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/containers/hash_tables.h" 12 #include "base/containers/hash_tables.h"
13 #include "base/gtest_prod_util.h" 13 #include "base/gtest_prod_util.h"
14 #include "base/memory/linked_ptr.h" 14 #include "base/memory/linked_ptr.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "content/common/content_export.h" 16 #include "content/common/content_export.h"
17 #include "ppapi/c/pp_instance.h" 17 #include "ppapi/c/pp_instance.h"
18 #include "ppapi/shared_impl/host_resource.h" 18 #include "ppapi/shared_impl/host_resource.h"
19 #include "ppapi/shared_impl/resource_tracker.h" 19 #include "ppapi/shared_impl/resource_tracker.h"
20 #include "ppapi/shared_impl/var_tracker.h" 20 #include "ppapi/shared_impl/var_tracker.h"
21 #include "v8/include/v8.h" 21 #include "v8/include/v8.h"
22 22
23 typedef struct NPObject NPObject;
24
23 namespace ppapi { 25 namespace ppapi {
24 class ArrayBufferVar; 26 class ArrayBufferVar;
27 class NPObjectVar;
25 class V8ObjectVar; 28 class V8ObjectVar;
26 class Var; 29 class Var;
27 } 30 }
28 31
29 namespace content { 32 namespace content {
30 33
34 // Adds NPObject var tracking to the standard PPAPI VarTracker for use in the
35 // renderer.
31 class HostVarTracker : public ppapi::VarTracker { 36 class HostVarTracker : public ppapi::VarTracker {
32 public: 37 public:
33 HostVarTracker(); 38 HostVarTracker();
34 virtual ~HostVarTracker(); 39 virtual ~HostVarTracker();
35 40
41 // Tracks all live NPObjectVar. This is so we can map between instance +
42 // NPObject and get the NPObjectVar corresponding to it. This Add/Remove
43 // function is called by the NPObjectVar when it is created and
44 // destroyed.
45 void AddNPObjectVar(ppapi::NPObjectVar* object_var);
46 void RemoveNPObjectVar(ppapi::NPObjectVar* object_var);
47
48 // Looks up a previously registered NPObjectVar for the given NPObject and
49 // instance. Returns NULL if there is no NPObjectVar corresponding to the
50 // given NPObject for the given instance. See AddNPObjectVar above.
51 ppapi::NPObjectVar* NPObjectVarForNPObject(PP_Instance instance,
52 NPObject* np_object);
53
54 // Returns the number of NPObjectVar's associated with the given instance.
55 // Returns 0 if the instance isn't known.
56 CONTENT_EXPORT int GetLiveNPObjectVarsForInstance(PP_Instance instance) const;
57
36 // Tracks all live V8ObjectVar. This is so we can map between instance + 58 // Tracks all live V8ObjectVar. This is so we can map between instance +
37 // V8Object and get the V8ObjectVar corresponding to it. This Add/Remove 59 // V8Object and get the V8ObjectVar corresponding to it. This Add/Remove
38 // function is called by the V8ObjectVar when it is created and destroyed. 60 // function is called by the V8ObjectVar when it is created and destroyed.
39 void AddV8ObjectVar(ppapi::V8ObjectVar* object_var); 61 void AddV8ObjectVar(ppapi::V8ObjectVar* object_var) { NOTIMPLEMENTED(); }
40 void RemoveV8ObjectVar(ppapi::V8ObjectVar* object_var); 62 void RemoveV8ObjectVar(ppapi::V8ObjectVar* object_var) { NOTIMPLEMENTED(); }
41 // Creates or retrieves a V8ObjectVar. 63 // Creates or retrieves a V8ObjectVar.
42 PP_Var V8ObjectVarForV8Object(PP_Instance instance, 64 PP_Var V8ObjectVarForV8Object(PP_Instance instance,
43 v8::Handle<v8::Object> object); 65 v8::Handle<v8::Object> object) {
44 // Returns the number of V8ObjectVars associated with the given instance. 66 NOTIMPLEMENTED();
45 // Returns 0 if the instance isn't known. 67 return PP_MakeUndefined();
46 CONTENT_EXPORT int GetLiveV8ObjectVarsForTest(PP_Instance instance); 68 }
47 69
48 // VarTracker public implementation. 70 // VarTracker public implementation.
49 virtual PP_Var MakeResourcePPVarFromMessage( 71 virtual PP_Var MakeResourcePPVarFromMessage(
50 PP_Instance instance, 72 PP_Instance instance,
51 const IPC::Message& creation_message, 73 const IPC::Message& creation_message,
52 int pending_renderer_id, 74 int pending_renderer_id,
53 int pending_browser_id) OVERRIDE; 75 int pending_browser_id) OVERRIDE;
54 virtual ppapi::ResourceVar* MakeResourceVar(PP_Resource pp_resource) OVERRIDE; 76 virtual ppapi::ResourceVar* MakeResourceVar(PP_Resource pp_resource) OVERRIDE;
55 virtual void DidDeleteInstance(PP_Instance pp_instance) OVERRIDE; 77 virtual void DidDeleteInstance(PP_Instance instance) OVERRIDE;
56 78
57 virtual int TrackSharedMemoryHandle(PP_Instance instance, 79 virtual int TrackSharedMemoryHandle(PP_Instance instance,
58 base::SharedMemoryHandle file, 80 base::SharedMemoryHandle file,
59 uint32 size_in_bytes) OVERRIDE; 81 uint32 size_in_bytes) OVERRIDE;
60 virtual bool StopTrackingSharedMemoryHandle(int id, 82 virtual bool StopTrackingSharedMemoryHandle(int id,
61 PP_Instance instance, 83 PP_Instance instance,
62 base::SharedMemoryHandle* handle, 84 base::SharedMemoryHandle* handle,
63 uint32* size_in_bytes) OVERRIDE; 85 uint32* size_in_bytes) OVERRIDE;
64 86
65 private: 87 private:
66 // VarTracker private implementation. 88 // VarTracker private implementation.
67 virtual ppapi::ArrayBufferVar* CreateArrayBuffer(uint32 size_in_bytes) 89 virtual ppapi::ArrayBufferVar* CreateArrayBuffer(uint32 size_in_bytes)
68 OVERRIDE; 90 OVERRIDE;
69 virtual ppapi::ArrayBufferVar* CreateShmArrayBuffer( 91 virtual ppapi::ArrayBufferVar* CreateShmArrayBuffer(
70 uint32 size_in_bytes, 92 uint32 size_in_bytes,
71 base::SharedMemoryHandle handle) OVERRIDE; 93 base::SharedMemoryHandle handle) OVERRIDE;
72 94
73 // Clear the reference count of the given object and remove it from 95 // Clear the reference count of the given object and remove it from
74 // live_vars_. 96 // live_vars_.
75 void ForceReleaseV8Object(ppapi::V8ObjectVar* object_var); 97 void ForceReleaseNPObject(ppapi::NPObjectVar* object_var);
76 98
77 // A non-unique, ordered key for a V8ObjectVar. Contains the hash of the v8 99 typedef std::map<NPObject*, ppapi::NPObjectVar*> NPObjectToNPObjectVarMap;
78 // and the instance it is associated with.
79 struct V8ObjectVarKey {
80 explicit V8ObjectVarKey(ppapi::V8ObjectVar* object_var);
81 V8ObjectVarKey(PP_Instance i, v8::Handle<v8::Object> object);
82 ~V8ObjectVarKey();
83 100
84 bool operator<(const V8ObjectVarKey& other) const; 101 // Lists all known NPObjects, first indexed by the corresponding instance,
85 102 // then by the NPObject*. This allows us to look up an NPObjectVar given
86 PP_Instance instance; 103 // these two pieces of information.
87 int hash; 104 //
88 }; 105 // The instance map is lazily managed, so we'll add the
89 typedef std::multimap<V8ObjectVarKey, ppapi::V8ObjectVar*> ObjectMap; 106 // NPObjectToNPObjectVarMap lazily when the first NPObject var is created,
90 107 // and delete it when it's empty.
91 // Returns an iterator into |object_map| which points to V8Object which 108 typedef std::map<PP_Instance, linked_ptr<NPObjectToNPObjectVarMap> >
92 // is associated with the given instance and object. 109 InstanceMap;
93 ObjectMap::iterator GetForV8Object(PP_Instance instance, 110 InstanceMap instance_map_;
94 v8::Handle<v8::Object> object);
95
96
97 // A multimap of V8ObjectVarKey -> ObjectMap.
98 ObjectMap object_map_;
99 111
100 // Tracks all shared memory handles used for transmitting array buffers. 112 // Tracks all shared memory handles used for transmitting array buffers.
101 struct SharedMemoryMapEntry { 113 struct SharedMemoryMapEntry {
102 PP_Instance instance; 114 PP_Instance instance;
103 base::SharedMemoryHandle handle; 115 base::SharedMemoryHandle handle;
104 uint32 size_in_bytes; 116 uint32 size_in_bytes;
105 }; 117 };
106 typedef std::map<int, SharedMemoryMapEntry> SharedMemoryMap; 118 typedef std::map<int, SharedMemoryMapEntry> SharedMemoryMap;
107 SharedMemoryMap shared_memory_map_; 119 SharedMemoryMap shared_memory_map_;
108 uint32_t last_shared_memory_map_id_; 120 uint32_t last_shared_memory_map_id_;
109 121
110 DISALLOW_COPY_AND_ASSIGN(HostVarTracker); 122 DISALLOW_COPY_AND_ASSIGN(HostVarTracker);
111 }; 123 };
112 124
113 } // namespace content 125 } // namespace content
114 126
115 #endif // CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_ 127 #endif // CONTENT_RENDERER_PEPPER_HOST_VAR_TRACKER_H_
OLDNEW
« no previous file with comments | « content/content_renderer.gypi ('k') | content/renderer/pepper/host_var_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698