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

Side by Side Diff: src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h

Issue 5974006: Convert srpc definitions from using int64 to using PP_Instance, PP_Module, an... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 9 years, 12 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
OLDNEW
1 // Copyright (c) 2010 The Native Client Authors. All rights reserved. 1 // Copyright (c) 2010 The Native Client 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 // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 5 // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
6 // 6 //
7 // Automatically generated code. See srpcgen.py 7 // Automatically generated code. See srpcgen.py
8 // 8 //
9 // NaCl Simple Remote Procedure Call interface abstractions. 9 // NaCl Simple Remote Procedure Call interface abstractions.
10 10
11 #ifndef GEN_PPAPI_PROXY_PPB_RPC_H_ 11 #ifndef GEN_PPAPI_PROXY_PPB_RPC_H_
12 #define GEN_PPAPI_PROXY_PPB_RPC_H_ 12 #define GEN_PPAPI_PROXY_PPB_RPC_H_
13 #ifndef __native_client__ 13 #ifndef __native_client__
14 #include "native_client/src/include/portability.h" 14 #include "native_client/src/include/portability.h"
15 #endif // __native_client__ 15 #endif // __native_client__
16 #include "native_client/src/shared/srpc/nacl_srpc.h" 16 #include "native_client/src/shared/srpc/nacl_srpc.h"
17 #include "ppapi/c/pp_instance.h"
18 #include "ppapi/c/pp_module.h"
19 #include "ppapi/c/pp_resource.h"
17 class ObjectStubRpcClient { 20 class ObjectStubRpcClient {
18 public: 21 public:
19 static NaClSrpcError HasProperty( 22 static NaClSrpcError HasProperty(
20 NaClSrpcChannel* channel, 23 NaClSrpcChannel* channel,
21 nacl_abi_size_t capability_bytes, char* capability, 24 nacl_abi_size_t capability_bytes, char* capability,
22 nacl_abi_size_t name_bytes, char* name, 25 nacl_abi_size_t name_bytes, char* name,
23 nacl_abi_size_t exception_in_bytes, char* exception_in, 26 nacl_abi_size_t exception_in_bytes, char* exception_in,
24 int32_t* success, 27 int32_t* success,
25 nacl_abi_size_t* exception_bytes, char* exception); 28 nacl_abi_size_t* exception_bytes, char* exception);
26 static NaClSrpcError HasMethod( 29 static NaClSrpcError HasMethod(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 private: 97 private:
95 PpbRpcClient(); 98 PpbRpcClient();
96 PpbRpcClient(const PpbRpcClient&); 99 PpbRpcClient(const PpbRpcClient&);
97 void operator=(const PpbRpcClient); 100 void operator=(const PpbRpcClient);
98 }; // class PpbRpcClient 101 }; // class PpbRpcClient
99 102
100 class PpbAudioDevRpcClient { 103 class PpbAudioDevRpcClient {
101 public: 104 public:
102 static NaClSrpcError PPB_Audio_Dev_Create( 105 static NaClSrpcError PPB_Audio_Dev_Create(
103 NaClSrpcChannel* channel, 106 NaClSrpcChannel* channel,
104 int64_t instance, 107 PP_Instance instance,
105 int64_t config, 108 PP_Resource config,
106 int64_t* out_resource); 109 PP_Resource* out_resource);
107 static NaClSrpcError PPB_Audio_Dev_IsAudio( 110 static NaClSrpcError PPB_Audio_Dev_IsAudio(
108 NaClSrpcChannel* channel, 111 NaClSrpcChannel* channel,
109 int64_t resource, 112 PP_Resource resource,
110 int32_t* out_bool); 113 int32_t* out_bool);
111 static NaClSrpcError PPB_Audio_Dev_GetCurrentConfig( 114 static NaClSrpcError PPB_Audio_Dev_GetCurrentConfig(
112 NaClSrpcChannel* channel, 115 NaClSrpcChannel* channel,
113 int64_t resource, 116 PP_Resource resource,
114 int64_t* out_resource); 117 PP_Resource* out_resource);
115 static NaClSrpcError PPB_Audio_Dev_StopPlayback( 118 static NaClSrpcError PPB_Audio_Dev_StopPlayback(
116 NaClSrpcChannel* channel, 119 NaClSrpcChannel* channel,
117 int64_t resource, 120 PP_Resource resource,
118 int32_t* out_bool); 121 int32_t* out_bool);
119 static NaClSrpcError PPB_Audio_Dev_StartPlayback( 122 static NaClSrpcError PPB_Audio_Dev_StartPlayback(
120 NaClSrpcChannel* channel, 123 NaClSrpcChannel* channel,
121 int64_t resource, 124 PP_Resource resource,
122 int32_t* out_bool); 125 int32_t* out_bool);
123 126
124 private: 127 private:
125 PpbAudioDevRpcClient(); 128 PpbAudioDevRpcClient();
126 PpbAudioDevRpcClient(const PpbAudioDevRpcClient&); 129 PpbAudioDevRpcClient(const PpbAudioDevRpcClient&);
127 void operator=(const PpbAudioDevRpcClient); 130 void operator=(const PpbAudioDevRpcClient);
128 }; // class PpbAudioDevRpcClient 131 }; // class PpbAudioDevRpcClient
129 132
130 class PpbAudioConfigDevRpcClient { 133 class PpbAudioConfigDevRpcClient {
131 public: 134 public:
132 static NaClSrpcError PPB_AudioConfig_Dev_CreateStereo16Bit( 135 static NaClSrpcError PPB_AudioConfig_Dev_CreateStereo16Bit(
133 NaClSrpcChannel* channel, 136 NaClSrpcChannel* channel,
134 int64_t module, 137 PP_Module module,
135 int32_t sample_rate, 138 int32_t sample_rate,
136 int32_t sample_frame_count, 139 int32_t sample_frame_count,
137 int64_t* resource); 140 PP_Resource* resource);
138 static NaClSrpcError PPB_AudioConfig_Dev_IsAudioConfig( 141 static NaClSrpcError PPB_AudioConfig_Dev_IsAudioConfig(
139 NaClSrpcChannel* channel, 142 NaClSrpcChannel* channel,
140 int64_t resource, 143 PP_Resource resource,
141 int32_t* out_bool); 144 int32_t* out_bool);
142 static NaClSrpcError PPB_AudioConfig_Dev_RecommendSampleFrameCount( 145 static NaClSrpcError PPB_AudioConfig_Dev_RecommendSampleFrameCount(
143 NaClSrpcChannel* channel, 146 NaClSrpcChannel* channel,
144 int32_t request, 147 int32_t request,
145 int32_t* sample_frame_count); 148 int32_t* sample_frame_count);
146 static NaClSrpcError PPB_AudioConfig_Dev_GetSampleRate( 149 static NaClSrpcError PPB_AudioConfig_Dev_GetSampleRate(
147 NaClSrpcChannel* channel, 150 NaClSrpcChannel* channel,
148 int64_t resource, 151 PP_Resource resource,
149 int32_t* sample_rate); 152 int32_t* sample_rate);
150 static NaClSrpcError PPB_AudioConfig_Dev_GetSampleFrameCount( 153 static NaClSrpcError PPB_AudioConfig_Dev_GetSampleFrameCount(
151 NaClSrpcChannel* channel, 154 NaClSrpcChannel* channel,
152 int64_t resource, 155 PP_Resource resource,
153 int32_t* sample_frame_count); 156 int32_t* sample_frame_count);
154 157
155 private: 158 private:
156 PpbAudioConfigDevRpcClient(); 159 PpbAudioConfigDevRpcClient();
157 PpbAudioConfigDevRpcClient(const PpbAudioConfigDevRpcClient&); 160 PpbAudioConfigDevRpcClient(const PpbAudioConfigDevRpcClient&);
158 void operator=(const PpbAudioConfigDevRpcClient); 161 void operator=(const PpbAudioConfigDevRpcClient);
159 }; // class PpbAudioConfigDevRpcClient 162 }; // class PpbAudioConfigDevRpcClient
160 163
161 class PpbCoreRpcClient { 164 class PpbCoreRpcClient {
162 public: 165 public:
163 static NaClSrpcError PPB_Core_AddRefResource( 166 static NaClSrpcError PPB_Core_AddRefResource(
164 NaClSrpcChannel* channel, 167 NaClSrpcChannel* channel,
165 int64_t resource); 168 PP_Resource resource);
166 static NaClSrpcError PPB_Core_ReleaseResource( 169 static NaClSrpcError PPB_Core_ReleaseResource(
167 NaClSrpcChannel* channel, 170 NaClSrpcChannel* channel,
168 int64_t resource); 171 PP_Resource resource);
169 static NaClSrpcError ReleaseResourceMultipleTimes( 172 static NaClSrpcError ReleaseResourceMultipleTimes(
170 NaClSrpcChannel* channel, 173 NaClSrpcChannel* channel,
171 int64_t resource, 174 PP_Resource resource,
172 int32_t count); 175 int32_t count);
173 static NaClSrpcError PPB_Core_GetTime( 176 static NaClSrpcError PPB_Core_GetTime(
174 NaClSrpcChannel* channel, 177 NaClSrpcChannel* channel,
175 double* time); 178 double* time);
176 179
177 private: 180 private:
178 PpbCoreRpcClient(); 181 PpbCoreRpcClient();
179 PpbCoreRpcClient(const PpbCoreRpcClient&); 182 PpbCoreRpcClient(const PpbCoreRpcClient&);
180 void operator=(const PpbCoreRpcClient); 183 void operator=(const PpbCoreRpcClient);
181 }; // class PpbCoreRpcClient 184 }; // class PpbCoreRpcClient
182 185
183 class PpbGraphics2DRpcClient { 186 class PpbGraphics2DRpcClient {
184 public: 187 public:
185 static NaClSrpcError PPB_Graphics2D_Create( 188 static NaClSrpcError PPB_Graphics2D_Create(
186 NaClSrpcChannel* channel, 189 NaClSrpcChannel* channel,
187 int64_t module, 190 PP_Module module,
188 nacl_abi_size_t size_bytes, int32_t* size, 191 nacl_abi_size_t size_bytes, int32_t* size,
189 int32_t is_always_opaque, 192 int32_t is_always_opaque,
190 int64_t* resource); 193 PP_Resource* resource);
191 static NaClSrpcError PPB_Graphics2D_IsGraphics2D( 194 static NaClSrpcError PPB_Graphics2D_IsGraphics2D(
192 NaClSrpcChannel* channel, 195 NaClSrpcChannel* channel,
193 int64_t resource, 196 PP_Resource resource,
194 int32_t* success); 197 int32_t* success);
195 static NaClSrpcError PPB_Graphics2D_Describe( 198 static NaClSrpcError PPB_Graphics2D_Describe(
196 NaClSrpcChannel* channel, 199 NaClSrpcChannel* channel,
197 int64_t graphics_2d, 200 PP_Resource graphics_2d,
198 nacl_abi_size_t* size_bytes, int32_t* size, 201 nacl_abi_size_t* size_bytes, int32_t* size,
199 int32_t* is_always_opaque, 202 int32_t* is_always_opaque,
200 int32_t* success); 203 int32_t* success);
201 static NaClSrpcError PPB_Graphics2D_PaintImageData( 204 static NaClSrpcError PPB_Graphics2D_PaintImageData(
202 NaClSrpcChannel* channel, 205 NaClSrpcChannel* channel,
203 int64_t graphics_2d, 206 PP_Resource graphics_2d,
204 int64_t image, 207 PP_Resource image,
205 nacl_abi_size_t top_left_bytes, int32_t* top_left, 208 nacl_abi_size_t top_left_bytes, int32_t* top_left,
206 nacl_abi_size_t src_rect_bytes, int32_t* src_rect); 209 nacl_abi_size_t src_rect_bytes, int32_t* src_rect);
207 static NaClSrpcError PPB_Graphics2D_Scroll( 210 static NaClSrpcError PPB_Graphics2D_Scroll(
208 NaClSrpcChannel* channel, 211 NaClSrpcChannel* channel,
209 int64_t graphics_2d, 212 PP_Resource graphics_2d,
210 nacl_abi_size_t clip_rect_bytes, int32_t* clip_rect, 213 nacl_abi_size_t clip_rect_bytes, int32_t* clip_rect,
211 nacl_abi_size_t amount_bytes, int32_t* amount); 214 nacl_abi_size_t amount_bytes, int32_t* amount);
212 static NaClSrpcError PPB_Graphics2D_ReplaceContents( 215 static NaClSrpcError PPB_Graphics2D_ReplaceContents(
213 NaClSrpcChannel* channel, 216 NaClSrpcChannel* channel,
214 int64_t graphics_2d, 217 PP_Resource graphics_2d,
215 int64_t image); 218 PP_Resource image);
216 219
217 private: 220 private:
218 PpbGraphics2DRpcClient(); 221 PpbGraphics2DRpcClient();
219 PpbGraphics2DRpcClient(const PpbGraphics2DRpcClient&); 222 PpbGraphics2DRpcClient(const PpbGraphics2DRpcClient&);
220 void operator=(const PpbGraphics2DRpcClient); 223 void operator=(const PpbGraphics2DRpcClient);
221 }; // class PpbGraphics2DRpcClient 224 }; // class PpbGraphics2DRpcClient
222 225
223 class PpbImageDataRpcClient { 226 class PpbImageDataRpcClient {
224 public: 227 public:
225 static NaClSrpcError PPB_ImageData_GetNativeImageDataFormat( 228 static NaClSrpcError PPB_ImageData_GetNativeImageDataFormat(
226 NaClSrpcChannel* channel, 229 NaClSrpcChannel* channel,
227 int32_t* format); 230 int32_t* format);
228 static NaClSrpcError PPB_ImageData_IsImageDataFormatSupported( 231 static NaClSrpcError PPB_ImageData_IsImageDataFormatSupported(
229 NaClSrpcChannel* channel, 232 NaClSrpcChannel* channel,
230 int32_t format, 233 int32_t format,
231 int32_t* success); 234 int32_t* success);
232 static NaClSrpcError PPB_ImageData_Create( 235 static NaClSrpcError PPB_ImageData_Create(
233 NaClSrpcChannel* channel, 236 NaClSrpcChannel* channel,
234 int64_t module, 237 PP_Module module,
235 int32_t format, 238 int32_t format,
236 nacl_abi_size_t size_bytes, int32_t* size, 239 nacl_abi_size_t size_bytes, int32_t* size,
237 int32_t init_to_zero, 240 int32_t init_to_zero,
238 int64_t* resource); 241 PP_Resource* resource);
239 static NaClSrpcError PPB_ImageData_IsImageData( 242 static NaClSrpcError PPB_ImageData_IsImageData(
240 NaClSrpcChannel* channel, 243 NaClSrpcChannel* channel,
241 int64_t resource, 244 PP_Resource resource,
242 int32_t* success); 245 int32_t* success);
243 static NaClSrpcError PPB_ImageData_Describe( 246 static NaClSrpcError PPB_ImageData_Describe(
244 NaClSrpcChannel* channel, 247 NaClSrpcChannel* channel,
245 int64_t resource, 248 PP_Resource resource,
246 nacl_abi_size_t* desc_bytes, int32_t* desc, 249 nacl_abi_size_t* desc_bytes, int32_t* desc,
247 int32_t* success); 250 int32_t* success);
248 251
249 private: 252 private:
250 PpbImageDataRpcClient(); 253 PpbImageDataRpcClient();
251 PpbImageDataRpcClient(const PpbImageDataRpcClient&); 254 PpbImageDataRpcClient(const PpbImageDataRpcClient&);
252 void operator=(const PpbImageDataRpcClient); 255 void operator=(const PpbImageDataRpcClient);
253 }; // class PpbImageDataRpcClient 256 }; // class PpbImageDataRpcClient
254 257
255 class PpbInstanceRpcClient { 258 class PpbInstanceRpcClient {
256 public: 259 public:
257 static NaClSrpcError PPB_Instance_GetWindowObject( 260 static NaClSrpcError PPB_Instance_GetWindowObject(
258 NaClSrpcChannel* channel, 261 NaClSrpcChannel* channel,
259 int64_t instance, 262 PP_Instance instance,
260 nacl_abi_size_t* window_bytes, char* window); 263 nacl_abi_size_t* window_bytes, char* window);
261 static NaClSrpcError PPB_Instance_GetOwnerElementObject( 264 static NaClSrpcError PPB_Instance_GetOwnerElementObject(
262 NaClSrpcChannel* channel, 265 NaClSrpcChannel* channel,
263 int64_t instance, 266 PP_Instance instance,
264 nacl_abi_size_t* owner_bytes, char* owner); 267 nacl_abi_size_t* owner_bytes, char* owner);
265 static NaClSrpcError PPB_Instance_BindGraphics( 268 static NaClSrpcError PPB_Instance_BindGraphics(
266 NaClSrpcChannel* channel, 269 NaClSrpcChannel* channel,
267 int64_t instance, 270 PP_Instance instance,
268 int64_t graphics_device, 271 PP_Resource graphics_device,
269 int32_t* success); 272 int32_t* success);
270 static NaClSrpcError PPB_Instance_IsFullFrame( 273 static NaClSrpcError PPB_Instance_IsFullFrame(
271 NaClSrpcChannel* channel, 274 NaClSrpcChannel* channel,
272 int64_t instance, 275 PP_Instance instance,
273 int32_t* is_full_frame); 276 int32_t* is_full_frame);
274 static NaClSrpcError PPB_Instance_ExecuteScript( 277 static NaClSrpcError PPB_Instance_ExecuteScript(
275 NaClSrpcChannel* channel, 278 NaClSrpcChannel* channel,
276 int64_t instance, 279 PP_Instance instance,
277 nacl_abi_size_t script_bytes, char* script, 280 nacl_abi_size_t script_bytes, char* script,
278 nacl_abi_size_t exception_in_bytes, char* exception_in, 281 nacl_abi_size_t exception_in_bytes, char* exception_in,
279 nacl_abi_size_t* result_bytes, char* result, 282 nacl_abi_size_t* result_bytes, char* result,
280 nacl_abi_size_t* exception_bytes, char* exception); 283 nacl_abi_size_t* exception_bytes, char* exception);
281 284
282 private: 285 private:
283 PpbInstanceRpcClient(); 286 PpbInstanceRpcClient();
284 PpbInstanceRpcClient(const PpbInstanceRpcClient&); 287 PpbInstanceRpcClient(const PpbInstanceRpcClient&);
285 void operator=(const PpbInstanceRpcClient); 288 void operator=(const PpbInstanceRpcClient);
286 }; // class PpbInstanceRpcClient 289 }; // class PpbInstanceRpcClient
287 290
288 class PpbURLRequestInfoRpcClient { 291 class PpbURLRequestInfoRpcClient {
289 public: 292 public:
290 static NaClSrpcError PPB_URLRequestInfo_Create( 293 static NaClSrpcError PPB_URLRequestInfo_Create(
291 NaClSrpcChannel* channel, 294 NaClSrpcChannel* channel,
292 int64_t module, 295 PP_Module module,
293 int64_t* resource); 296 PP_Resource* resource);
294 static NaClSrpcError PPB_URLRequestInfo_IsURLRequestInfo( 297 static NaClSrpcError PPB_URLRequestInfo_IsURLRequestInfo(
295 NaClSrpcChannel* channel, 298 NaClSrpcChannel* channel,
296 int64_t resource, 299 PP_Resource resource,
297 int32_t* is_url_request_info); 300 int32_t* is_url_request_info);
298 static NaClSrpcError PPB_URLRequestInfo_SetProperty( 301 static NaClSrpcError PPB_URLRequestInfo_SetProperty(
299 NaClSrpcChannel* channel, 302 NaClSrpcChannel* channel,
300 int64_t request, 303 PP_Resource request,
301 int32_t property, 304 int32_t property,
302 nacl_abi_size_t value_bytes, char* value, 305 nacl_abi_size_t value_bytes, char* value,
303 int32_t* success); 306 int32_t* success);
304 static NaClSrpcError PPB_URLRequestInfo_AppendDataToBody( 307 static NaClSrpcError PPB_URLRequestInfo_AppendDataToBody(
305 NaClSrpcChannel* channel, 308 NaClSrpcChannel* channel,
306 int64_t request, 309 PP_Resource request,
307 nacl_abi_size_t data_bytes, char* data, 310 nacl_abi_size_t data_bytes, char* data,
308 int32_t* success); 311 int32_t* success);
309 static NaClSrpcError PPB_URLRequestInfo_AppendFileToBody( 312 static NaClSrpcError PPB_URLRequestInfo_AppendFileToBody(
310 NaClSrpcChannel* channel, 313 NaClSrpcChannel* channel,
311 int64_t request, 314 PP_Resource request,
312 int64_t file_ref, 315 PP_Resource file_ref,
313 int64_t start_offset, 316 int64_t start_offset,
314 int64_t number_of_bytes, 317 int64_t number_of_bytes,
315 double expected_last_modified_time, 318 double expected_last_modified_time,
316 int32_t* success); 319 int32_t* success);
317 320
318 private: 321 private:
319 PpbURLRequestInfoRpcClient(); 322 PpbURLRequestInfoRpcClient();
320 PpbURLRequestInfoRpcClient(const PpbURLRequestInfoRpcClient&); 323 PpbURLRequestInfoRpcClient(const PpbURLRequestInfoRpcClient&);
321 void operator=(const PpbURLRequestInfoRpcClient); 324 void operator=(const PpbURLRequestInfoRpcClient);
322 }; // class PpbURLRequestInfoRpcClient 325 }; // class PpbURLRequestInfoRpcClient
323 326
324 class PpbURLResponseInfoRpcClient { 327 class PpbURLResponseInfoRpcClient {
325 public: 328 public:
326 static NaClSrpcError PPB_URLResponseInfo_IsURLResponseInfo( 329 static NaClSrpcError PPB_URLResponseInfo_IsURLResponseInfo(
327 NaClSrpcChannel* channel, 330 NaClSrpcChannel* channel,
328 int64_t resource, 331 PP_Resource resource,
329 int32_t* is_url_response_info); 332 int32_t* is_url_response_info);
330 static NaClSrpcError PPB_URLResponseInfo_GetProperty( 333 static NaClSrpcError PPB_URLResponseInfo_GetProperty(
331 NaClSrpcChannel* channel, 334 NaClSrpcChannel* channel,
332 int64_t response, 335 PP_Resource response,
333 int32_t property, 336 int32_t property,
334 nacl_abi_size_t* value_bytes, char* value); 337 nacl_abi_size_t* value_bytes, char* value);
335 static NaClSrpcError PPB_URLResponseInfo_GetBodyAsFileRef( 338 static NaClSrpcError PPB_URLResponseInfo_GetBodyAsFileRef(
336 NaClSrpcChannel* channel, 339 NaClSrpcChannel* channel,
337 int64_t response, 340 PP_Resource response,
338 int64_t* file_ref); 341 PP_Resource* file_ref);
339 342
340 private: 343 private:
341 PpbURLResponseInfoRpcClient(); 344 PpbURLResponseInfoRpcClient();
342 PpbURLResponseInfoRpcClient(const PpbURLResponseInfoRpcClient&); 345 PpbURLResponseInfoRpcClient(const PpbURLResponseInfoRpcClient&);
343 void operator=(const PpbURLResponseInfoRpcClient); 346 void operator=(const PpbURLResponseInfoRpcClient);
344 }; // class PpbURLResponseInfoRpcClient 347 }; // class PpbURLResponseInfoRpcClient
345 348
346 349
347 350
348 #endif // GEN_PPAPI_PROXY_PPB_RPC_H_ 351 #endif // GEN_PPAPI_PROXY_PPB_RPC_H_
349 352
OLDNEW
« no previous file with comments | « src/shared/ppapi_proxy/trusted/srpcgen/upcall.h ('k') | src/shared/ppapi_proxy/untrusted/srpcgen/ppp_rpc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698