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

Side by Side Diff: ppapi/proxy/ppb_var_deprecated_proxy.cc

Issue 6286070: Remove all uses of the global Dispatcher Get function. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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 | « ppapi/proxy/ppb_var_deprecated_proxy.h ('k') | ppapi/proxy/ppp_class_proxy.h » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "ppapi/proxy/ppb_var_deprecated_proxy.h" 5 #include "ppapi/proxy/ppb_var_deprecated_proxy.h"
6 6
7 #include <stdlib.h> // For malloc 7 #include <stdlib.h> // For malloc
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "ppapi/c/dev/ppb_var_deprecated.h" 10 #include "ppapi/c/dev/ppb_var_deprecated.h"
11 #include "ppapi/c/pp_var.h" 11 #include "ppapi/c/pp_var.h"
12 #include "ppapi/c/ppb_core.h" 12 #include "ppapi/c/ppb_core.h"
13 #include "ppapi/proxy/plugin_dispatcher.h" 13 #include "ppapi/proxy/plugin_dispatcher.h"
14 #include "ppapi/proxy/plugin_var_tracker.h"
14 #include "ppapi/proxy/ppapi_messages.h" 15 #include "ppapi/proxy/ppapi_messages.h"
15 #include "ppapi/proxy/ppp_class_proxy.h" 16 #include "ppapi/proxy/ppp_class_proxy.h"
16 #include "ppapi/proxy/serialized_var.h" 17 #include "ppapi/proxy/serialized_var.h"
17 18
18 namespace pp { 19 namespace pp {
19 namespace proxy { 20 namespace proxy {
20 21
21 namespace { 22 namespace {
22 23
24 // Used to do get the set-up information for calling a var object. If the
25 // exception is set, returns NULL. Otherwise, computes the dispatcher for the
26 // given var object. If the var is not a valid object, returns NULL and sets
27 // the exception.
28 PluginDispatcher* CheckExceptionAndGetDispatcher(const PP_Var& object,
29 PP_Var* exception) {
30 // If an exception is already set, we don't need to do anything, just return
31 // an error to the caller.
32 if (exception && exception->type != PP_VARTYPE_UNDEFINED)
33 return NULL;
34
35 PluginVarTracker* tracker = PluginVarTracker::GetInstance();
36 PluginDispatcher* dispatcher = tracker->DispatcherForPluginObject(object);
37 if (dispatcher)
38 return dispatcher;
39
40 // The object is invalid. This means we can't figure out which dispatcher
41 // to use, which is OK because the call will fail anyway. Set the exception.
42 if (exception) {
43 exception->type = PP_VARTYPE_STRING;
44 exception->value.as_id =
45 tracker->MakeString("Attempting to use an invalid object");
46 }
47 return NULL;
48 }
49
23 // PPP_Var_Deprecated plugin --------------------------------------------------- 50 // PPP_Var_Deprecated plugin ---------------------------------------------------
24 51
25 void AddRefVar(PP_Var var) { 52 void AddRefVar(PP_Var var) {
26 PluginVarTracker::GetInstance()->AddRef(var); 53 PluginVarTracker::GetInstance()->AddRef(var);
27 } 54 }
28 55
29 void ReleaseVar(PP_Var var) { 56 void ReleaseVar(PP_Var var) {
30 PluginVarTracker::GetInstance()->Release(var); 57 PluginVarTracker::GetInstance()->Release(var);
31 } 58 }
32 59
(...skipping 12 matching lines...) Expand all
45 *len = static_cast<uint32_t>(str->size()); 72 *len = static_cast<uint32_t>(str->size());
46 return str->c_str(); 73 return str->c_str();
47 } 74 }
48 *len = 0; 75 *len = 0;
49 return NULL; 76 return NULL;
50 } 77 }
51 78
52 bool HasProperty(PP_Var var, 79 bool HasProperty(PP_Var var,
53 PP_Var name, 80 PP_Var name,
54 PP_Var* exception) { 81 PP_Var* exception) {
55 Dispatcher* dispatcher = PluginDispatcher::Get(); 82 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, exception);
83 if (!dispatcher)
84 return false;
85
56 ReceiveSerializedException se(dispatcher, exception); 86 ReceiveSerializedException se(dispatcher, exception);
57 PP_Bool result = PP_FALSE; 87 PP_Bool result = PP_FALSE;
58 if (!se.IsThrown()) { 88 if (!se.IsThrown()) {
59 dispatcher->Send(new PpapiHostMsg_PPBVar_HasProperty( 89 dispatcher->Send(new PpapiHostMsg_PPBVar_HasProperty(
60 INTERFACE_ID_PPB_VAR_DEPRECATED, 90 INTERFACE_ID_PPB_VAR_DEPRECATED,
61 SerializedVarSendInput(dispatcher, var), 91 SerializedVarSendInput(dispatcher, var),
62 SerializedVarSendInput(dispatcher, name), &se, &result)); 92 SerializedVarSendInput(dispatcher, name), &se, &result));
63 } 93 }
64 return PPBoolToBool(result); 94 return PPBoolToBool(result);
65 } 95 }
66 96
67 bool HasMethod(PP_Var var, 97 bool HasMethod(PP_Var var,
68 PP_Var name, 98 PP_Var name,
69 PP_Var* exception) { 99 PP_Var* exception) {
70 Dispatcher* dispatcher = PluginDispatcher::Get(); 100 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, exception);
101 if (!dispatcher)
102 return false;
103
71 ReceiveSerializedException se(dispatcher, exception); 104 ReceiveSerializedException se(dispatcher, exception);
72 PP_Bool result = PP_FALSE; 105 PP_Bool result = PP_FALSE;
73 if (!se.IsThrown()) { 106 if (!se.IsThrown()) {
74 dispatcher->Send(new PpapiHostMsg_PPBVar_HasMethodDeprecated( 107 dispatcher->Send(new PpapiHostMsg_PPBVar_HasMethodDeprecated(
75 INTERFACE_ID_PPB_VAR_DEPRECATED, 108 INTERFACE_ID_PPB_VAR_DEPRECATED,
76 SerializedVarSendInput(dispatcher, var), 109 SerializedVarSendInput(dispatcher, var),
77 SerializedVarSendInput(dispatcher, name), &se, &result)); 110 SerializedVarSendInput(dispatcher, name), &se, &result));
78 } 111 }
79 return PPBoolToBool(result); 112 return PPBoolToBool(result);
80 } 113 }
81 114
82 PP_Var GetProperty(PP_Var var, 115 PP_Var GetProperty(PP_Var var,
83 PP_Var name, 116 PP_Var name,
84 PP_Var* exception) { 117 PP_Var* exception) {
85 Dispatcher* dispatcher = PluginDispatcher::Get(); 118 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, exception);
119 if (!dispatcher)
120 return PP_MakeUndefined();
121
86 ReceiveSerializedException se(dispatcher, exception); 122 ReceiveSerializedException se(dispatcher, exception);
87 ReceiveSerializedVarReturnValue result; 123 ReceiveSerializedVarReturnValue result;
88 if (!se.IsThrown()) { 124 if (!se.IsThrown()) {
89 dispatcher->Send(new PpapiHostMsg_PPBVar_GetProperty( 125 dispatcher->Send(new PpapiHostMsg_PPBVar_GetProperty(
90 INTERFACE_ID_PPB_VAR_DEPRECATED, 126 INTERFACE_ID_PPB_VAR_DEPRECATED,
91 SerializedVarSendInput(dispatcher, var), 127 SerializedVarSendInput(dispatcher, var),
92 SerializedVarSendInput(dispatcher, name), &se, &result)); 128 SerializedVarSendInput(dispatcher, name), &se, &result));
93 } 129 }
94 return result.Return(dispatcher); 130 return result.Return(dispatcher);
95 } 131 }
96 132
97 void EnumerateProperties(PP_Var var, 133 void EnumerateProperties(PP_Var var,
98 uint32_t* property_count, 134 uint32_t* property_count,
99 PP_Var** properties, 135 PP_Var** properties,
100 PP_Var* exception) { 136 PP_Var* exception) {
101 Dispatcher* dispatcher = PluginDispatcher::Get(); 137 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, exception);
138 if (!dispatcher) {
139 *property_count = 0;
140 *properties = NULL;
141 return;
142 }
102 143
103 ReceiveSerializedVarVectorOutParam out_vector(dispatcher, 144 ReceiveSerializedVarVectorOutParam out_vector(dispatcher,
104 property_count, properties); 145 property_count, properties);
105 ReceiveSerializedException se(dispatcher, exception); 146 ReceiveSerializedException se(dispatcher, exception);
106 if (!se.IsThrown()) { 147 if (!se.IsThrown()) {
107 dispatcher->Send(new PpapiHostMsg_PPBVar_EnumerateProperties( 148 dispatcher->Send(new PpapiHostMsg_PPBVar_EnumerateProperties(
108 INTERFACE_ID_PPB_VAR_DEPRECATED, 149 INTERFACE_ID_PPB_VAR_DEPRECATED,
109 SerializedVarSendInput(dispatcher, var), 150 SerializedVarSendInput(dispatcher, var),
110 out_vector.OutParam(), &se)); 151 out_vector.OutParam(), &se));
111 } 152 }
112 } 153 }
113 154
114 void SetProperty(PP_Var var, 155 void SetProperty(PP_Var var,
115 PP_Var name, 156 PP_Var name,
116 PP_Var value, 157 PP_Var value,
117 PP_Var* exception) { 158 PP_Var* exception) {
118 Dispatcher* dispatcher = PluginDispatcher::Get(); 159 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, exception);
160 if (!dispatcher)
161 return;
162
119 ReceiveSerializedException se(dispatcher, exception); 163 ReceiveSerializedException se(dispatcher, exception);
120 if (!se.IsThrown()) { 164 if (!se.IsThrown()) {
121 dispatcher->Send(new PpapiHostMsg_PPBVar_SetPropertyDeprecated( 165 dispatcher->Send(new PpapiHostMsg_PPBVar_SetPropertyDeprecated(
122 INTERFACE_ID_PPB_VAR_DEPRECATED, 166 INTERFACE_ID_PPB_VAR_DEPRECATED,
123 SerializedVarSendInput(dispatcher, var), 167 SerializedVarSendInput(dispatcher, var),
124 SerializedVarSendInput(dispatcher, name), 168 SerializedVarSendInput(dispatcher, name),
125 SerializedVarSendInput(dispatcher, value), &se)); 169 SerializedVarSendInput(dispatcher, value), &se));
126 } 170 }
127 } 171 }
128 172
129 void RemoveProperty(PP_Var var, 173 void RemoveProperty(PP_Var var,
130 PP_Var name, 174 PP_Var name,
131 PP_Var* exception) { 175 PP_Var* exception) {
132 Dispatcher* dispatcher = PluginDispatcher::Get(); 176 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, exception);
177 if (!dispatcher)
178 return;
179
133 ReceiveSerializedException se(dispatcher, exception); 180 ReceiveSerializedException se(dispatcher, exception);
134 PP_Bool result = PP_FALSE; 181 PP_Bool result = PP_FALSE;
135 if (!se.IsThrown()) { 182 if (!se.IsThrown()) {
136 dispatcher->Send(new PpapiHostMsg_PPBVar_DeleteProperty( 183 dispatcher->Send(new PpapiHostMsg_PPBVar_DeleteProperty(
137 INTERFACE_ID_PPB_VAR_DEPRECATED, 184 INTERFACE_ID_PPB_VAR_DEPRECATED,
138 SerializedVarSendInput(dispatcher, var), 185 SerializedVarSendInput(dispatcher, var),
139 SerializedVarSendInput(dispatcher, name), &se, &result)); 186 SerializedVarSendInput(dispatcher, name), &se, &result));
140 } 187 }
141 } 188 }
142 189
143 PP_Var Call(PP_Var object, 190 PP_Var Call(PP_Var object,
144 PP_Var method_name, 191 PP_Var method_name,
145 uint32_t argc, 192 uint32_t argc,
146 PP_Var* argv, 193 PP_Var* argv,
147 PP_Var* exception) { 194 PP_Var* exception) {
148 Dispatcher* dispatcher = PluginDispatcher::Get(); 195 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(object, exception);
196 if (!dispatcher)
197 return PP_MakeUndefined();
198
149 ReceiveSerializedVarReturnValue result; 199 ReceiveSerializedVarReturnValue result;
150 ReceiveSerializedException se(dispatcher, exception); 200 ReceiveSerializedException se(dispatcher, exception);
151 if (!se.IsThrown()) { 201 if (!se.IsThrown()) {
152 std::vector<SerializedVar> argv_vect; 202 std::vector<SerializedVar> argv_vect;
153 SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); 203 SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect);
154 204
155 dispatcher->Send(new PpapiHostMsg_PPBVar_CallDeprecated( 205 dispatcher->Send(new PpapiHostMsg_PPBVar_CallDeprecated(
156 INTERFACE_ID_PPB_VAR_DEPRECATED, 206 INTERFACE_ID_PPB_VAR_DEPRECATED,
157 SerializedVarSendInput(dispatcher, object), 207 SerializedVarSendInput(dispatcher, object),
158 SerializedVarSendInput(dispatcher, method_name), argv_vect, 208 SerializedVarSendInput(dispatcher, method_name), argv_vect,
159 &se, &result)); 209 &se, &result));
160 } 210 }
161 return result.Return(dispatcher); 211 return result.Return(dispatcher);
162 } 212 }
163 213
164 PP_Var Construct(PP_Var object, 214 PP_Var Construct(PP_Var object,
165 uint32_t argc, 215 uint32_t argc,
166 PP_Var* argv, 216 PP_Var* argv,
167 PP_Var* exception) { 217 PP_Var* exception) {
168 Dispatcher* dispatcher = PluginDispatcher::Get(); 218 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(object, exception);
219 if (!dispatcher)
220 return PP_MakeUndefined();
221
169 ReceiveSerializedVarReturnValue result; 222 ReceiveSerializedVarReturnValue result;
170 ReceiveSerializedException se(dispatcher, exception); 223 ReceiveSerializedException se(dispatcher, exception);
171 if (!se.IsThrown()) { 224 if (!se.IsThrown()) {
172 std::vector<SerializedVar> argv_vect; 225 std::vector<SerializedVar> argv_vect;
173 SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect); 226 SerializedVarSendInput::ConvertVector(dispatcher, argv, argc, &argv_vect);
174 227
175 dispatcher->Send(new PpapiHostMsg_PPBVar_Construct( 228 dispatcher->Send(new PpapiHostMsg_PPBVar_Construct(
176 INTERFACE_ID_PPB_VAR_DEPRECATED, 229 INTERFACE_ID_PPB_VAR_DEPRECATED,
177 SerializedVarSendInput(dispatcher, object), 230 SerializedVarSendInput(dispatcher, object),
178 argv_vect, &se, &result)); 231 argv_vect, &se, &result));
179 } 232 }
180 return result.Return(dispatcher); 233 return result.Return(dispatcher);
181 } 234 }
182 235
183 bool IsInstanceOf(PP_Var var, 236 bool IsInstanceOf(PP_Var var,
184 const PPP_Class_Deprecated* ppp_class, 237 const PPP_Class_Deprecated* ppp_class,
185 void** ppp_class_data) { 238 void** ppp_class_data) {
239 Dispatcher* dispatcher = CheckExceptionAndGetDispatcher(var, NULL);
240 if (!dispatcher)
241 return false;
242
186 PP_Bool result = PP_FALSE; 243 PP_Bool result = PP_FALSE;
187 Dispatcher* dispatcher = PluginDispatcher::Get();
188 int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class)); 244 int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class));
189 int64 class_data_int = 0; 245 int64 class_data_int = 0;
190 dispatcher->Send(new PpapiHostMsg_PPBVar_IsInstanceOfDeprecated( 246 dispatcher->Send(new PpapiHostMsg_PPBVar_IsInstanceOfDeprecated(
191 INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var), 247 INTERFACE_ID_PPB_VAR_DEPRECATED, SerializedVarSendInput(dispatcher, var),
192 class_int, &class_data_int, &result)); 248 class_int, &class_data_int, &result));
193 *ppp_class_data = 249 *ppp_class_data =
194 reinterpret_cast<void*>(static_cast<intptr_t>(class_data_int)); 250 reinterpret_cast<void*>(static_cast<intptr_t>(class_data_int));
195 return PPBoolToBool(result); 251 return PPBoolToBool(result);
196 } 252 }
197 253
198 PP_Var CreateObject(PP_Instance instance, 254 PP_Var CreateObject(PP_Instance instance,
199 const PPP_Class_Deprecated* ppp_class, 255 const PPP_Class_Deprecated* ppp_class,
200 void* ppp_class_data) { 256 void* ppp_class_data) {
201 Dispatcher* dispatcher = PluginDispatcher::Get(); 257 Dispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
258 if (!dispatcher)
259 return PP_MakeUndefined();
260
202 ReceiveSerializedVarReturnValue result; 261 ReceiveSerializedVarReturnValue result;
203 int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class)); 262 int64 class_int = static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class));
204 int64 data_int = 263 int64 data_int =
205 static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class_data)); 264 static_cast<int64>(reinterpret_cast<intptr_t>(ppp_class_data));
206 dispatcher->Send(new PpapiHostMsg_PPBVar_CreateObjectDeprecated( 265 dispatcher->Send(new PpapiHostMsg_PPBVar_CreateObjectDeprecated(
207 INTERFACE_ID_PPB_VAR_DEPRECATED, instance, class_int, data_int, 266 INTERFACE_ID_PPB_VAR_DEPRECATED, instance, class_int, data_int,
208 &result)); 267 &result));
209 return result.Return(dispatcher); 268 return result.Return(dispatcher);
210 } 269 }
211 270
212 const PPB_Var_Deprecated var_deprecated_interface = { 271 const PPB_Var_Deprecated var_deprecated_interface = {
213 &AddRefVar, 272 &AddRefVar,
214 &ReleaseVar, 273 &ReleaseVar,
215 &VarFromUtf8, 274 &VarFromUtf8,
216 &VarToUtf8, 275 &VarToUtf8,
217 &HasProperty, 276 &HasProperty,
218 &HasMethod, 277 &HasMethod,
219 &GetProperty, 278 &GetProperty,
220 &EnumerateProperties, 279 &EnumerateProperties,
221 &SetProperty, 280 &SetProperty,
222 &RemoveProperty, 281 &RemoveProperty,
223 &Call, 282 &Call,
224 &Construct, 283 &Construct,
225 &IsInstanceOf, 284 &IsInstanceOf,
226 &CreateObject 285 &CreateObject
227 }; 286 };
228 287
288 InterfaceProxy* CreateVarDeprecatedProxy(Dispatcher* dispatcher,
289 const void* target_interface) {
290 return new PPB_Var_Deprecated_Proxy(dispatcher, target_interface);
291 }
292
229 } // namespace 293 } // namespace
230 294
231 PPB_Var_Deprecated_Proxy::PPB_Var_Deprecated_Proxy( 295 PPB_Var_Deprecated_Proxy::PPB_Var_Deprecated_Proxy(
232 Dispatcher* dispatcher, 296 Dispatcher* dispatcher,
233 const void* target_interface) 297 const void* target_interface)
234 : InterfaceProxy(dispatcher, target_interface) { 298 : InterfaceProxy(dispatcher, target_interface) {
235 } 299 }
236 300
237 PPB_Var_Deprecated_Proxy::~PPB_Var_Deprecated_Proxy() { 301 PPB_Var_Deprecated_Proxy::~PPB_Var_Deprecated_Proxy() {
238 } 302 }
239 303
240 const void* PPB_Var_Deprecated_Proxy::GetSourceInterface() const { 304 // static
241 return &var_deprecated_interface; 305 const InterfaceProxy::Info* PPB_Var_Deprecated_Proxy::GetInfo() {
242 } 306 static const Info info = {
243 307 &var_deprecated_interface,
244 InterfaceID PPB_Var_Deprecated_Proxy::GetInterfaceId() const { 308 PPB_VAR_DEPRECATED_INTERFACE,
245 return INTERFACE_ID_PPB_VAR_DEPRECATED; 309 INTERFACE_ID_PPB_VAR_DEPRECATED,
310 false,
311 &CreateVarDeprecatedProxy,
312 };
313 return &info;
246 } 314 }
247 315
248 bool PPB_Var_Deprecated_Proxy::OnMessageReceived(const IPC::Message& msg) { 316 bool PPB_Var_Deprecated_Proxy::OnMessageReceived(const IPC::Message& msg) {
249 bool handled = true; 317 bool handled = true;
250 IPC_BEGIN_MESSAGE_MAP(PPB_Var_Deprecated_Proxy, msg) 318 IPC_BEGIN_MESSAGE_MAP(PPB_Var_Deprecated_Proxy, msg)
251 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasProperty, 319 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasProperty,
252 OnMsgHasProperty) 320 OnMsgHasProperty)
253 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasMethodDeprecated, 321 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_HasMethodDeprecated,
254 OnMsgHasMethodDeprecated) 322 OnMsgHasMethodDeprecated)
255 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_GetProperty, 323 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBVar_GetProperty,
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 PP_Instance instance, 446 PP_Instance instance,
379 int64 ppp_class, 447 int64 ppp_class,
380 int64 class_data, 448 int64 class_data,
381 SerializedVarReturnValue result) { 449 SerializedVarReturnValue result) {
382 result.Return(dispatcher(), PPP_Class_Proxy::CreateProxiedObject( 450 result.Return(dispatcher(), PPP_Class_Proxy::CreateProxiedObject(
383 ppb_var_target(), dispatcher(), instance, ppp_class, class_data)); 451 ppb_var_target(), dispatcher(), instance, ppp_class, class_data));
384 } 452 }
385 453
386 } // namespace proxy 454 } // namespace proxy
387 } // namespace pp 455 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/proxy/ppb_var_deprecated_proxy.h ('k') | ppapi/proxy/ppp_class_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698