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

Side by Side Diff: ppapi/ppapi_tests.gypi

Issue 921993002: Implement the rest of the PPAPI examples in the GN build. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ppapi_examples
Patch Set: Fix GYP Created 5 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
« ppapi/examples/audio/BUILD.gn ('K') | « ppapi/lib/gl/gles2/BUILD.gn ('k') | no next file » | 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 { 5 {
6 'targets': [ 6 'targets': [
7 { 7 {
8 'target_name': 'ppapi_tests', 8 'target_name': 'ppapi_tests',
9 'type': 'loadable_module', 9 'type': 'loadable_module',
10 'include_dirs': [ 10 'include_dirs': [
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 # Not to strip important symbols by -Wl,-dead_strip. 221 # Not to strip important symbols by -Wl,-dead_strip.
222 '-Wl,-exported_symbol,_PPP_GetInterface', 222 '-Wl,-exported_symbol,_PPP_GetInterface',
223 '-Wl,-exported_symbol,_PPP_InitializeModule', 223 '-Wl,-exported_symbol,_PPP_InitializeModule',
224 '-Wl,-exported_symbol,_PPP_ShutdownModule' 224 '-Wl,-exported_symbol,_PPP_ShutdownModule'
225 ]}, 225 ]},
226 }], 226 }],
227 ], 227 ],
228 }, 228 },
229 }, 229 },
230 { 230 {
231 # GN version: //ppapi/examples/mouse_cursor
231 'target_name': 'ppapi_example_mouse_cursor', 232 'target_name': 'ppapi_example_mouse_cursor',
232 'dependencies': [ 233 'dependencies': [
233 'ppapi_example_skeleton', 234 'ppapi_example_skeleton',
234 'ppapi.gyp:ppapi_cpp', 235 'ppapi.gyp:ppapi_cpp',
235 ], 236 ],
236 'sources': [ 237 'sources': [
237 'examples/mouse_cursor/mouse_cursor.cc', 238 'examples/mouse_cursor/mouse_cursor.cc',
238 ], 239 ],
239 }, 240 },
240 { 241 {
242 # GN version: //ppapi/examples/mouse_lock
241 'target_name': 'ppapi_example_mouse_lock', 243 'target_name': 'ppapi_example_mouse_lock',
242 'dependencies': [ 244 'dependencies': [
243 'ppapi_example_skeleton', 245 'ppapi_example_skeleton',
244 'ppapi.gyp:ppapi_cpp', 246 'ppapi.gyp:ppapi_cpp',
245 ], 247 ],
246 'sources': [ 248 'sources': [
247 'examples/mouse_lock/mouse_lock.cc', 249 'examples/mouse_lock/mouse_lock.cc',
248 ], 250 ],
249 }, 251 },
250 252
251 { 253 {
254 # GN version: //ppapi/examples/gamepad
252 'target_name': 'ppapi_example_gamepad', 255 'target_name': 'ppapi_example_gamepad',
253 'dependencies': [ 256 'dependencies': [
254 'ppapi_example_skeleton', 257 'ppapi_example_skeleton',
255 'ppapi.gyp:ppapi_cpp', 258 'ppapi.gyp:ppapi_cpp',
256 ], 259 ],
257 'sources': [ 260 'sources': [
258 'examples/gamepad/gamepad.cc', 261 'examples/gamepad/gamepad.cc',
259 ], 262 ],
260 }, 263 },
261 264
262 { 265 {
266 # GN version: //ppapi/examples/stub:c_stub
263 'target_name': 'ppapi_example_c_stub', 267 'target_name': 'ppapi_example_c_stub',
264 'dependencies': [ 268 'dependencies': [
265 'ppapi_example_skeleton', 269 'ppapi_example_skeleton',
266 'ppapi.gyp:ppapi_c', 270 'ppapi.gyp:ppapi_c',
267 ], 271 ],
268 'sources': [ 272 'sources': [
269 'examples/stub/stub.c', 273 'examples/stub/stub.c',
270 ], 274 ],
271 }, 275 },
272 { 276 {
277 # GN version: //ppapi/examples/stub:cc_stub
273 'target_name': 'ppapi_example_cc_stub', 278 'target_name': 'ppapi_example_cc_stub',
274 'dependencies': [ 279 'dependencies': [
275 'ppapi_example_skeleton', 280 'ppapi_example_skeleton',
276 'ppapi.gyp:ppapi_cpp', 281 'ppapi.gyp:ppapi_cpp',
277 ], 282 ],
278 'sources': [ 283 'sources': [
279 'examples/stub/stub.cc', 284 'examples/stub/stub.cc',
280 ], 285 ],
281 }, 286 },
282 { 287 {
288 # GN version: //ppapi/examples/crxfs
283 'target_name': 'ppapi_example_crxfs', 289 'target_name': 'ppapi_example_crxfs',
284 'dependencies': [ 290 'dependencies': [
285 'ppapi_example_skeleton', 291 'ppapi_example_skeleton',
286 'ppapi.gyp:ppapi_cpp', 292 'ppapi.gyp:ppapi_cpp',
287 ], 293 ],
288 'sources': [ 294 'sources': [
289 'examples/crxfs/crxfs.cc', 295 'examples/crxfs/crxfs.cc',
290 ], 296 ],
291 }, 297 },
292 { 298 {
299 # GN version: //ppapi/examples/audio
293 'target_name': 'ppapi_example_audio', 300 'target_name': 'ppapi_example_audio',
294 'dependencies': [ 301 'dependencies': [
295 'ppapi_example_skeleton', 302 'ppapi_example_skeleton',
296 'ppapi.gyp:ppapi_cpp', 303 'ppapi.gyp:ppapi_cpp',
297 ], 304 ],
298 'sources': [ 305 'sources': [
299 'examples/audio/audio.cc', 306 'examples/audio/audio.cc',
300 ], 307 ],
301 }, 308 },
302 { 309 {
310 # GN version: //ppapi/examples/audio_input
303 'target_name': 'ppapi_example_audio_input', 311 'target_name': 'ppapi_example_audio_input',
304 'dependencies': [ 312 'dependencies': [
305 'ppapi_example_skeleton', 313 'ppapi_example_skeleton',
306 'ppapi.gyp:ppapi_cpp', 314 'ppapi.gyp:ppapi_cpp',
307 ], 315 ],
308 'sources': [ 316 'sources': [
309 'examples/audio_input/audio_input.cc', 317 'examples/audio_input/audio_input.cc',
310 ], 318 ],
311 }, 319 },
312 { 320 {
321 # GN version: //ppapi/examples/file_chooser
313 'target_name': 'ppapi_example_file_chooser', 322 'target_name': 'ppapi_example_file_chooser',
314 'dependencies': [ 323 'dependencies': [
315 'ppapi_example_skeleton', 324 'ppapi_example_skeleton',
316 'ppapi.gyp:ppapi_cpp', 325 'ppapi.gyp:ppapi_cpp',
317 ], 326 ],
318 'sources': [ 327 'sources': [
319 'examples/file_chooser/file_chooser.cc', 328 'examples/file_chooser/file_chooser.cc',
320 ], 329 ],
321 }, 330 },
322 { 331 {
332 # GN version: //ppapi/examples/2d:graphics_2d
323 'target_name': 'ppapi_example_graphics_2d', 333 'target_name': 'ppapi_example_graphics_2d',
324 'dependencies': [ 334 'dependencies': [
325 'ppapi_example_skeleton', 335 'ppapi_example_skeleton',
326 'ppapi.gyp:ppapi_c', 336 'ppapi.gyp:ppapi_c',
327 ], 337 ],
328 'sources': [ 338 'sources': [
329 'examples/2d/graphics_2d_example.c', 339 'examples/2d/graphics_2d_example.c',
330 ], 340 ],
331 }, 341 },
332 { 342 {
343 # GN version: //ppapi/examples/ime
333 'target_name': 'ppapi_example_ime', 344 'target_name': 'ppapi_example_ime',
334 'dependencies': [ 345 'dependencies': [
335 'ppapi_example_skeleton', 346 'ppapi_example_skeleton',
336 'ppapi.gyp:ppapi_cpp', 347 'ppapi.gyp:ppapi_cpp',
337 ], 348 ],
338 'sources': [ 349 'sources': [
339 'examples/ime/ime.cc', 350 'examples/ime/ime.cc',
340 ], 351 ],
341 }, 352 },
342 { 353 {
354 # GN version: //ppapi/examples/2d:paint_manager
343 'target_name': 'ppapi_example_paint_manager', 355 'target_name': 'ppapi_example_paint_manager',
344 'dependencies': [ 356 'dependencies': [
345 'ppapi_example_skeleton', 357 'ppapi_example_skeleton',
346 'ppapi.gyp:ppapi_cpp', 358 'ppapi.gyp:ppapi_cpp',
347 ], 359 ],
348 'sources': [ 360 'sources': [
349 'examples/2d/paint_manager_example.cc', 361 'examples/2d/paint_manager_example.cc',
350 ], 362 ],
351 }, 363 },
352 { 364 {
365 # GN version: //ppapi/examples/input
353 'target_name': 'ppapi_example_input', 366 'target_name': 'ppapi_example_input',
354 'dependencies': [ 367 'dependencies': [
355 'ppapi_example_skeleton', 368 'ppapi_example_skeleton',
356 'ppapi.gyp:ppapi_cpp', 369 'ppapi.gyp:ppapi_cpp',
357 ], 370 ],
358 'sources': [ 371 'sources': [
359 'examples/input/pointer_event_input.cc', 372 'examples/input/pointer_event_input.cc',
360 ], 373 ],
361 }, 374 },
362 { 375 {
376 # GN version: //ppapi/examples/scripting
363 'target_name': 'ppapi_example_post_message', 377 'target_name': 'ppapi_example_post_message',
364 'dependencies': [ 378 'dependencies': [
365 'ppapi_example_skeleton', 379 'ppapi_example_skeleton',
366 'ppapi.gyp:ppapi_cpp', 380 'ppapi.gyp:ppapi_cpp',
367 ], 381 ],
368 'sources': [ 382 'sources': [
369 'examples/scripting/post_message.cc', 383 'examples/scripting/post_message.cc',
370 ], 384 ],
371 }, 385 },
372 { 386 {
387 # GN version: //ppapi/examples/scaling
373 'target_name': 'ppapi_example_scaling', 388 'target_name': 'ppapi_example_scaling',
374 'dependencies': [ 389 'dependencies': [
375 'ppapi_example_skeleton', 390 'ppapi_example_skeleton',
376 'ppapi.gyp:ppapi_cpp', 391 'ppapi.gyp:ppapi_cpp',
377 ], 392 ],
378 'sources': [ 393 'sources': [
379 'examples/scaling/scaling.cc', 394 'examples/scaling/scaling.cc',
380 ], 395 ],
381 }, 396 },
382 { 397 {
398 # GN version: //ppapi/examples/2d:scroll
383 'target_name': 'ppapi_example_scroll', 399 'target_name': 'ppapi_example_scroll',
384 'dependencies': [ 400 'dependencies': [
385 'ppapi_example_skeleton', 401 'ppapi_example_skeleton',
386 'ppapi.gyp:ppapi_cpp', 402 'ppapi.gyp:ppapi_cpp',
387 ], 403 ],
388 'sources': [ 404 'sources': [
389 'examples/2d/scroll.cc', 405 'examples/2d/scroll.cc',
390 ], 406 ],
391 }, 407 },
392 { 408 {
409 # GN version: //ppapi/examples/font
393 'target_name': 'ppapi_example_simple_font', 410 'target_name': 'ppapi_example_simple_font',
394 'dependencies': [ 411 'dependencies': [
395 'ppapi_example_skeleton', 412 'ppapi_example_skeleton',
396 'ppapi.gyp:ppapi_cpp', 413 'ppapi.gyp:ppapi_cpp',
397 ], 414 ],
398 'sources': [ 415 'sources': [
399 'examples/font/simple_font.cc', 416 'examples/font/simple_font.cc',
400 ], 417 ],
401 }, 418 },
402 { 419 {
420 # GN version: //ppapi/examples/threading
421 'target_name': 'ppapi_example_threading',
422 'dependencies': [
423 'ppapi_example_skeleton',
424 'ppapi.gyp:ppapi_cpp',
425 ],
426 'sources': [
427 'examples/threading/threading.cc',
428 ],
429 },
430 {
431 # GN version: //ppapi/examples/url_loader:streaming
403 'target_name': 'ppapi_example_url_loader', 432 'target_name': 'ppapi_example_url_loader',
404 'dependencies': [ 433 'dependencies': [
405 'ppapi_example_skeleton', 434 'ppapi_example_skeleton',
406 'ppapi.gyp:ppapi_cpp', 435 'ppapi.gyp:ppapi_cpp',
407 ], 436 ],
408 'sources': [ 437 'sources': [
409 'examples/url_loader/streaming.cc', 438 'examples/url_loader/streaming.cc',
410 ], 439 ],
411 }, 440 },
412 { 441 {
442 # GN version: //ppapi/examples/url_loader:file
413 'target_name': 'ppapi_example_url_loader_file', 443 'target_name': 'ppapi_example_url_loader_file',
414 'dependencies': [ 444 'dependencies': [
415 'ppapi_example_skeleton', 445 'ppapi_example_skeleton',
416 'ppapi.gyp:ppapi_cpp', 446 'ppapi.gyp:ppapi_cpp',
417 ], 447 ],
418 'sources': [ 448 'sources': [
419 'examples/url_loader/stream_to_file.cc', 449 'examples/url_loader/stream_to_file.cc',
420 ], 450 ],
421 }, 451 },
422 { 452 {
453 # GN version: //ppapi/examples/gles2
423 'target_name': 'ppapi_example_gles2', 454 'target_name': 'ppapi_example_gles2',
424 'dependencies': [ 455 'dependencies': [
425 'ppapi_example_skeleton', 456 'ppapi_example_skeleton',
426 'ppapi.gyp:ppapi_cpp', 457 'ppapi.gyp:ppapi_cpp',
427 'ppapi.gyp:ppapi_gles2', 458 'ppapi.gyp:ppapi_gles2',
428 ], 459 ],
429 'include_dirs': [ 460 'include_dirs': [
430 'lib/gl/include', 461 'lib/gl/include',
431 ], 462 ],
432 'sources': [ 463 'sources': [
433 'examples/gles2/gles2.cc', 464 'examples/gles2/gles2.cc',
434 ], 465 ],
435 }, 466 },
436 { 467 {
468 # GN version: //ppapi/examples/video_decode:stable
437 'target_name': 'ppapi_example_video_decode', 469 'target_name': 'ppapi_example_video_decode',
438 'dependencies': [ 470 'dependencies': [
439 'ppapi_example_skeleton', 471 'ppapi_example_skeleton',
440 'ppapi.gyp:ppapi_cpp', 472 'ppapi.gyp:ppapi_cpp',
441 'ppapi.gyp:ppapi_gles2', 473 'ppapi.gyp:ppapi_gles2',
442 ], 474 ],
443 'include_dirs': [ 475 'include_dirs': [
444 'lib/gl/include', 476 'lib/gl/include',
445 ], 477 ],
446 'sources': [ 478 'sources': [
447 'examples/video_decode/video_decode.cc', 479 'examples/video_decode/video_decode.cc',
448 'examples/video_decode/testdata.h', 480 'examples/video_decode/testdata.h',
449 ], 481 ],
450 }, 482 },
451 { 483 {
484 # GN version: //ppapi/examples/video_decode:dev
452 'target_name': 'ppapi_example_video_decode_dev', 485 'target_name': 'ppapi_example_video_decode_dev',
453 'dependencies': [ 486 'dependencies': [
454 'ppapi_example_skeleton', 487 'ppapi_example_skeleton',
455 'ppapi.gyp:ppapi_cpp', 488 'ppapi.gyp:ppapi_cpp',
456 'ppapi.gyp:ppapi_gles2', 489 'ppapi.gyp:ppapi_gles2',
457 ], 490 ],
458 'include_dirs': [ 491 'include_dirs': [
459 'lib/gl/include', 492 'lib/gl/include',
460 ], 493 ],
461 'sources': [ 494 'sources': [
462 'examples/video_decode/video_decode_dev.cc', 495 'examples/video_decode/video_decode_dev.cc',
463 'examples/video_decode/testdata.h', 496 'examples/video_decode/testdata.h',
464 ], 497 ],
465 }, 498 },
466 { 499 {
500 # GN version: //ppapi/example/video_capture
467 'target_name': 'ppapi_example_vc', 501 'target_name': 'ppapi_example_vc',
468 'dependencies': [ 502 'dependencies': [
469 'ppapi_example_skeleton', 503 'ppapi_example_skeleton',
470 'ppapi.gyp:ppapi_cpp', 504 'ppapi.gyp:ppapi_cpp',
471 'ppapi.gyp:ppapi_gles2', 505 'ppapi.gyp:ppapi_gles2',
472 ], 506 ],
473 'include_dirs': [ 507 'include_dirs': [
474 'lib/gl/include', 508 'lib/gl/include',
475 ], 509 ],
476 'sources': [ 510 'sources': [
477 'examples/video_capture/video_capture.cc', 511 'examples/video_capture/video_capture.cc',
478 ], 512 ],
479 }, 513 },
480 { 514 {
515 # GN version: //ppapi/examples/video_effects
481 'target_name': 'ppapi_example_video_effects', 516 'target_name': 'ppapi_example_video_effects',
482 'dependencies': [ 517 'dependencies': [
483 'ppapi_example_skeleton', 518 'ppapi_example_skeleton',
484 'ppapi.gyp:ppapi_cpp', 519 'ppapi.gyp:ppapi_cpp',
485 ], 520 ],
486 'sources': [ 521 'sources': [
487 'examples/video_effects/video_effects.cc', 522 'examples/video_effects/video_effects.cc',
488 ], 523 ],
489 }, 524 },
490 { 525 {
526 # GN version: //ppapi/examples/enumerate_devices
491 'target_name': 'ppapi_example_enumerate_devices', 527 'target_name': 'ppapi_example_enumerate_devices',
492 'dependencies': [ 528 'dependencies': [
493 'ppapi_example_skeleton', 529 'ppapi_example_skeleton',
494 'ppapi.gyp:ppapi_cpp', 530 'ppapi.gyp:ppapi_cpp',
495 ], 531 ],
496 'sources': [ 532 'sources': [
497 'examples/enumerate_devices/enumerate_devices.cc', 533 'examples/enumerate_devices/enumerate_devices.cc',
498 ], 534 ],
499 }, 535 },
500 { 536 {
537 # GN version: //ppapi/examples/flash_topmost
501 'target_name': 'ppapi_example_flash_topmost', 538 'target_name': 'ppapi_example_flash_topmost',
502 'dependencies': [ 539 'dependencies': [
503 'ppapi_example_skeleton', 540 'ppapi_example_skeleton',
504 'ppapi.gyp:ppapi_cpp', 541 'ppapi.gyp:ppapi_cpp',
505 ], 542 ],
506 'sources': [ 543 'sources': [
507 'examples/flash_topmost/flash_topmost.cc', 544 'examples/flash_topmost/flash_topmost.cc',
508 ], 545 ],
509 }, 546 },
510 { 547 {
548 # GN version: //ppapi/examples/printing
511 'target_name': 'ppapi_example_printing', 549 'target_name': 'ppapi_example_printing',
512 'dependencies': [ 550 'dependencies': [
513 'ppapi_example_skeleton', 551 'ppapi_example_skeleton',
514 'ppapi.gyp:ppapi_cpp', 552 'ppapi.gyp:ppapi_cpp',
515 ], 553 ],
516 'sources': [ 554 'sources': [
517 'examples/printing/printing.cc', 555 'examples/printing/printing.cc',
518 ], 556 ],
519 }, 557 },
520 { 558 {
559 # GN version: //ppapi/examples/media_stream_audio
521 'target_name': 'ppapi_example_media_stream_audio', 560 'target_name': 'ppapi_example_media_stream_audio',
522 'dependencies': [ 561 'dependencies': [
523 'ppapi_example_skeleton', 562 'ppapi_example_skeleton',
524 'ppapi.gyp:ppapi_cpp', 563 'ppapi.gyp:ppapi_cpp',
525 ], 564 ],
526 'sources': [ 565 'sources': [
527 'examples/media_stream_audio/media_stream_audio.cc', 566 'examples/media_stream_audio/media_stream_audio.cc',
528 ], 567 ],
529 }, 568 },
530 { 569 {
570 # GN version: //ppapi/examples/media_stream_video
531 'target_name': 'ppapi_example_media_stream_video', 571 'target_name': 'ppapi_example_media_stream_video',
532 'dependencies': [ 572 'dependencies': [
533 'ppapi_example_skeleton', 573 'ppapi_example_skeleton',
534 'ppapi.gyp:ppapi_cpp', 574 'ppapi.gyp:ppapi_cpp',
535 'ppapi.gyp:ppapi_gles2', 575 'ppapi.gyp:ppapi_gles2',
536 ], 576 ],
537 'include_dirs': [ 577 'include_dirs': [
538 'lib/gl/include', 578 'lib/gl/include',
539 ], 579 ],
540 'sources': [ 580 'sources': [
541 'examples/media_stream_video/media_stream_video.cc', 581 'examples/media_stream_video/media_stream_video.cc',
542 ], 582 ],
543 }, 583 },
544 { 584 {
585 # GN version: //ppapi/examples/gles2_spinning_cube
545 'target_name': 'ppapi_example_gles2_spinning_cube', 586 'target_name': 'ppapi_example_gles2_spinning_cube',
546 'dependencies': [ 587 'dependencies': [
547 'ppapi_example_skeleton', 588 'ppapi_example_skeleton',
548 'ppapi.gyp:ppapi_cpp', 589 'ppapi.gyp:ppapi_cpp',
549 'ppapi.gyp:ppapi_gles2', 590 'ppapi.gyp:ppapi_gles2',
550 ], 591 ],
551 'include_dirs': [ 592 'include_dirs': [
552 'lib/gl/include', 593 'lib/gl/include',
553 ], 594 ],
554 'sources': [ 595 'sources': [
555 'examples/gles2_spinning_cube/gles2_spinning_cube.cc', 596 'examples/gles2_spinning_cube/gles2_spinning_cube.cc',
556 'examples/gles2_spinning_cube/spinning_cube.cc', 597 'examples/gles2_spinning_cube/spinning_cube.cc',
557 'examples/gles2_spinning_cube/spinning_cube.h', 598 'examples/gles2_spinning_cube/spinning_cube.h',
558 ], 599 ],
559 }, 600 },
560 { 601 {
602 # GN version: //ppapi/examples/compositor
561 'target_name': 'ppapi_example_compositor', 603 'target_name': 'ppapi_example_compositor',
562 'dependencies': [ 604 'dependencies': [
563 'ppapi_example_skeleton', 605 'ppapi_example_skeleton',
564 'ppapi.gyp:ppapi_cpp', 606 'ppapi.gyp:ppapi_cpp',
565 'ppapi.gyp:ppapi_gles2', 607 'ppapi.gyp:ppapi_gles2',
566 ], 608 ],
567 'include_dirs': [ 609 'include_dirs': [
568 'lib/gl/include', 610 'lib/gl/include',
569 ], 611 ],
570 'sources': [ 612 'sources': [
571 'examples/compositor/compositor.cc', 613 'examples/compositor/compositor.cc',
572 'examples/compositor/spinning_cube.cc', 614 'examples/compositor/spinning_cube.cc',
573 'examples/compositor/spinning_cube.h', 615 'examples/compositor/spinning_cube.h',
574 ], 616 ],
575 }, 617 },
618 # Adding a new PPAPI example? Don't forget to update the GN build.
619 # See //ppapi/examples/BUILD.gn
576 ], 620 ],
577 } 621 }
OLDNEW
« ppapi/examples/audio/BUILD.gn ('K') | « ppapi/lib/gl/gles2/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698