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

Side by Side Diff: native_client_sdk/src/doc/migration/public.html

Issue 2875303003: Add migration to WebAssembly information to PNaCl / NaCl docs. (Closed)
Patch Set: Created 3 years, 7 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
OLDNEW
(Empty)
1 <table>
2 </table>
3 <h3>PPB_Audio</h3>
4 <table>
5 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
6 <td>PPAPI Method </td>
7 <td>State </td>
8 <td>Assumes Threads </td>
9 <td>Emscripten </td>
10 <td>Web API </td>
11 <td>Limitations </td>
12 </tr>
13
14 <tr>
15 <td>Create </td>
16 <td>M14/M31 </td>
17 <td>x </td>
18 <td>SDL (partial) </td>
19 <td bgcolor="#ffeecc">GAP (partial) - AudioWorkletNode ROUGHLY equivalent</t d>
20 <td>Still being standardized. </td>
21 </tr>
22
23 <tr>
24 <td>GetCurrentConfig </td>
25 <td>M14 </td>
26 <td> </td>
27 <td>SDL </td>
28 <td>AudioContext.* (gets back settings passed in) </td>
29 <td> </td>
30 </tr>
31
32 <tr>
33 <td>StartPlayback </td>
34 <td>M14 </td>
35 <td> </td>
36 <td>SDL </td>
37 <td>AudioBufferSourceNode.start </td>
38 <td> </td>
39 </tr>
40
41 <tr>
42 <td>StopPlayback </td>
43 <td>M14 </td>
44 <td> </td>
45 <td>SDL </td>
46 <td>AudioBufferSourceNode.stop </td>
47 <td> </td>
48 </tr>
49
50 </table>
51 <h3>PPB_AudioBuffer</h3>
52 <table>
53 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
54 <td>PPAPI Method </td>
55 <td>State </td>
56 <td>Assumes Threads </td>
57 <td>Emscripten </td>
58 <td>Web API </td>
59 <td>Limitations </td>
60 </tr>
61
62 <tr>
63 <td>GetTimestamp </td>
64 <td>M35 </td>
65 <td> </td>
66 <td>SDL </td>
67 <td>AudioBufferSourceNode.start (parameter) </td>
68 <td>Passed in each time instead of attached to the buffer. </td>
69 </tr>
70
71 <tr>
72 <td>SetTimestamp </td>
73 <td>M35 </td>
74 <td> </td>
75 <td>SDL </td>
76 <td>AudioBufferSourceNode.start (parameter) </td>
77 <td> </td>
78 </tr>
79
80 <tr>
81 <td>GetSampleRate </td>
82 <td>M35 </td>
83 <td> </td>
84 <td>SDL </td>
85 <td>AudioBuffer.sampleRate </td>
86 <td> </td>
87 </tr>
88
89 <tr>
90 <td>GetSampleSize </td>
91 <td>M35 </td>
92 <td> </td>
93 <td bgcolor="#ffcccc">GAP</td>
94 <td bgcolor="#ffcccc">GAP - WebAudio only uses 32-bit float, PPAPI does 16-b it int.</td>
95 <td>PPAPI theoretically supports multiple sampling sizes. In practice, it on ly supports 16-bit samples. Unfortunately, developers like Unity have requested 16-bit sample sizes. </td>
96 </tr>
97
98 <tr>
99 <td>GetNumberOfChannels </td>
100 <td>M35 </td>
101 <td> </td>
102 <td>SDL </td>
103 <td>AudioBuffer.numberOfChannels </td>
104 <td> </td>
105 </tr>
106
107 <tr>
108 <td>GetDataBuffer </td>
109 <td>M35 </td>
110 <td> </td>
111 <td>SDL </td>
112 <td>AudioBuffer.getChannelData </td>
113 <td> </td>
114 </tr>
115
116 <tr>
117 <td>GetBufferSize </td>
118 <td>M35 </td>
119 <td> </td>
120 <td>SDL </td>
121 <td>AudioBuffer.length </td>
122 <td> </td>
123 </tr>
124
125 </table>
126 <h3>PPB_AudioConfig</h3>
127 <table>
128 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
129 <td>PPAPI Method </td>
130 <td>State </td>
131 <td>Assumes Threads </td>
132 <td>Emscripten </td>
133 <td>Web API </td>
134 <td>Limitations </td>
135 </tr>
136
137 <tr>
138 <td>CreateStereo16Bit </td>
139 <td>M14 </td>
140 <td> </td>
141 <td bgcolor="#ffcccc">GAP</td>
142 <td bgcolor="#ffcccc">GAP - Only 32-bit float samples supported</td>
143 <td> </td>
144 </tr>
145
146 <tr>
147 <td>GetSampleRate </td>
148 <td>M14 </td>
149 <td> </td>
150 <td>SDL </td>
151 <td>AudioContext.sampleRate </td>
152 <td> </td>
153 </tr>
154
155 <tr>
156 <td>GetSampleFrameCount </td>
157 <td>M14 </td>
158 <td> </td>
159 <td>SDL </td>
160 <td>AudioBuffer.length </td>
161 <td> </td>
162 </tr>
163
164 <tr>
165 <td>RecommendSampleRate </td>
166 <td>M19 </td>
167 <td> </td>
168 <td>SDL </td>
169 <td>AudioContext.sampleRate (from default construct) </td>
170 <td>An AudioContext will have the preferred sampling rate by default. </td>
171 </tr>
172
173 <tr>
174 <td>RecommendSampleFrameCount </td>
175 <td>M14(d)/M19 </td>
176 <td> </td>
177 <td bgcolor="#ffcccc">GAP</td>
178 <td bgcolor="#ffcccc">GAP - No mechanism to get a recomended buffer size.</t d>
179 <td> </td>
180 </tr>
181
182 </table>
183 <h3>PPB_Console</h3>
184 <table>
185 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
186 <td>PPAPI Method </td>
187 <td>State </td>
188 <td>Assumes Threads </td>
189 <td>Emscripten </td>
190 <td>Web API </td>
191 <td>Limitations </td>
192 </tr>
193
194 <tr>
195 <td>Log </td>
196 <td>M25 </td>
197 <td> </td>
198 <td>utime </td>
199 <td>console.log/warn/error/... </td>
200 <td> </td>
201 </tr>
202
203 <tr>
204 <td>LogWithSource </td>
205 <td>M25 </td>
206 <td> </td>
207 <td bgcolor="#ffcccc">GAP</td>
208 <td bgcolor="#ffcccc">GAP</td>
209 <td>PPAPI provides a way to override the source filename and line number in a console message.
210 (Though JS API provides way to style text). </td>
211 </tr>
212
213 </table>
214 <h3>PPB_Core</h3>
215 <table>
216 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
217 <td>PPAPI Method </td>
218 <td>State </td>
219 <td>Assumes Threads </td>
220 <td>Emscripten </td>
221 <td>Web API </td>
222 <td>Limitations </td>
223 </tr>
224
225 <tr>
226 <td>getTime </td>
227 <td>M14 </td>
228 <td> </td>
229 <td>utime </td>
230 <td>new Date().getTime() </td>
231 <td> </td>
232 </tr>
233
234 <tr>
235 <td>getTimeTicks </td>
236 <td>M14 </td>
237 <td> </td>
238 <td>utime </td>
239 <td>new Date().getTime() </td>
240 <td> </td>
241 </tr>
242
243 <tr>
244 <td>IsMainThread </td>
245 <td>M14 </td>
246 <td> </td>
247 <td bgcolor="#ffcccc">GAP</td>
248 <td>window.document !== undefined </td>
249 <td> </td>
250 </tr>
251
252 <tr>
253 <td>CallOnMainThread </td>
254 <td>M14 </td>
255 <td> </td>
256 <td bgcolor="#ffcccc">GAP</td>
257 <td>Worker.postMessage + Atomics.wait </td>
258 <td>Equivalent synchronization can be built. </td>
259 </tr>
260
261 </table>
262 <h3>PPB_FileIO</h3>
263 <table>
264 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
265 <td>PPAPI Method </td>
266 <td>State </td>
267 <td>Assumes Threads </td>
268 <td>Emscripten </td>
269 <td>Web API </td>
270 <td>Limitations </td>
271 </tr>
272
273 <tr>
274 <td>Create </td>
275 <td>M14 </td>
276 <td> </td>
277 <td>FS (partial) </td>
278 <td>FileReader / FileWrite (Entry.createReader / Entry.createWriter) </td>
279 <td>Create and open are used differently, but the pieces are of equal power. </td>
280 </tr>
281
282 <tr>
283 <td>Open </td>
284 <td>M14/M29 </td>
285 <td> </td>
286 <td>FS (partial) </td>
287 <td>FileReader / FileWrite (Entry.createReader / Entry.createWriter) </td>
288 <td> </td>
289 </tr>
290
291 <tr>
292 <td>Query </td>
293 <td>M14 </td>
294 <td> </td>
295 <td>FS (partial) </td>
296 <td>Entry.getMetadata </td>
297 <td> </td>
298 </tr>
299
300 <tr>
301 <td>Touch </td>
302 <td>M14 </td>
303 <td> </td>
304 <td>FS (partial) </td>
305 <td bgcolor="#ffeecc">GAP (partial) - No direct equivalent, but no access ti me either.</td>
306 <td>Modify time can be bumped by writing. </td>
307 </tr>
308
309 <tr>
310 <td>Read </td>
311 <td>M14 </td>
312 <td> </td>
313 <td>FS (partial) </td>
314 <td>Entry.getFile + Blob.slice + FileReader.getBinaryData </td>
315 <td>Note, this API requires an extra copy to get a read into linear memory, and may be worse than that if Blob slices are not optimizes to use mmap. </td>
316 </tr>
317
318 <tr>
319 <td>Write </td>
320 <td>M14 </td>
321 <td> </td>
322 <td>FS (partial) </td>
323 <td>FileWriter.seek + FileWriter.write 'write*' Events </td>
324 <td> </td>
325 </tr>
326
327 <tr>
328 <td>SetLength </td>
329 <td>M14 </td>
330 <td> </td>
331 <td>FS (partial) </td>
332 <td>FileWriter.truncate + 'write*' Events </td>
333 <td> </td>
334 </tr>
335
336 <tr>
337 <td>Flush </td>
338 <td>M14 </td>
339 <td> </td>
340 <td bgcolor="#ffcccc">GAP</td>
341 <td bgcolor="#ffcccc">GAP - No equivalent, no way to flush.</td>
342 <td> </td>
343 </tr>
344
345 <tr>
346 <td>Close </td>
347 <td>M14 </td>
348 <td> </td>
349 <td>FS (partial) </td>
350 <td>No equivalent, open files and directories are implicitly closed. </td>
351 <td> </td>
352 </tr>
353
354 <tr>
355 <td>ReadToArray </td>
356 <td>M25 </td>
357 <td> </td>
358 <td bgcolor="#ffcccc">GAP</td>
359 <td bgcolor="#ffcccc">GAP - No equivalent.</td>
360 <td>Allows multiple subrange reads in parallel. </td>
361 </tr>
362
363 </table>
364 <h3>PPB_FileRef</h3>
365 <table>
366 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
367 <td>PPAPI Method </td>
368 <td>State </td>
369 <td>Assumes Threads </td>
370 <td>Emscripten </td>
371 <td>Web API </td>
372 <td>Limitations </td>
373 </tr>
374
375 <tr>
376 <td>Create </td>
377 <td>M14 </td>
378 <td> </td>
379 <td>FS (partial) </td>
380 <td>Entry.getFile(..., {create:true}) </td>
381 <td> </td>
382 </tr>
383
384 <tr>
385 <td>GetFileSystemType </td>
386 <td>M14 </td>
387 <td> </td>
388 <td>FS (partial) </td>
389 <td>FileSystem.type </td>
390 <td> </td>
391 </tr>
392
393 <tr>
394 <td>GetName </td>
395 <td>M14 </td>
396 <td> </td>
397 <td>FS (partial) </td>
398 <td>Entry.name </td>
399 <td> </td>
400 </tr>
401
402 <tr>
403 <td>GetPath </td>
404 <td>M14 </td>
405 <td> </td>
406 <td>FS (partial) </td>
407 <td>Entry.fullPath </td>
408 <td> </td>
409 </tr>
410
411 <tr>
412 <td>GetParent </td>
413 <td>M14 </td>
414 <td> </td>
415 <td>FS (partial) </td>
416 <td>Entry.getParent </td>
417 <td> </td>
418 </tr>
419
420 <tr>
421 <td>MakeDirectory </td>
422 <td>M34 </td>
423 <td> </td>
424 <td>FS (partial) </td>
425 <td>Entry.getDirectory(..., {create:true}) </td>
426 <td> </td>
427 </tr>
428
429 <tr>
430 <td>Touch </td>
431 <td>M14 </td>
432 <td> </td>
433 <td>FS (partial) </td>
434 <td bgcolor="#ffeecc">GAP (partial) - No direct equivalent, but no access ti me either.</td>
435 <td>Modify time can be bumped by writing. </td>
436 </tr>
437
438 <tr>
439 <td>Delete </td>
440 <td>M14 </td>
441 <td> </td>
442 <td>FS (partial) </td>
443 <td>Entry.remove </td>
444 <td> </td>
445 </tr>
446
447 <tr>
448 <td>Rename </td>
449 <td>M14 </td>
450 <td> </td>
451 <td>FS (partial) </td>
452 <td>Entry.moveTo </td>
453 <td> </td>
454 </tr>
455
456 <tr>
457 <td>Query </td>
458 <td>M28 </td>
459 <td> </td>
460 <td bgcolor="#ffcccc">GAP</td>
461 <td>Entry.getMetadata </td>
462 <td bgcolor="#ffcccc">GAP - JS API has file size and last modified date, but doesn't have creation date and last accessed date.</td>
463 </tr>
464
465 <tr>
466 <td>ReadDirectoryEntries </td>
467 <td>M28 </td>
468 <td> </td>
469 <td>FS (partial) </td>
470 <td>Directory.readEntries </td>
471 <td> </td>
472 </tr>
473
474 </table>
475 <h3>PPB_FileSystem</h3>
476 <table>
477 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
478 <td>PPAPI Method </td>
479 <td>State </td>
480 <td>Assumes Threads </td>
481 <td>Emscripten </td>
482 <td>Web API </td>
483 <td>Limitations </td>
484 </tr>
485
486 <tr>
487 <td>Create </td>
488 <td>M14 </td>
489 <td> </td>
490 <td>FS (partial) </td>
491 <td>window.requestFileSystem </td>
492 <td>JS API does both in one step </td>
493 </tr>
494
495 <tr>
496 <td>Open </td>
497 <td>M14 </td>
498 <td> </td>
499 <td bgcolor="#ffcccc">GAP</td>
500 <td>window.requestFileSystem </td>
501 <td bgcolor="#ffcccc">GAP - Filesystems API is chrome only. IndexedDB has ad ditional performance limitations around subrange writes.</td>
502 </tr>
503
504 <tr>
505 <td>GetType </td>
506 <td>M14 </td>
507 <td> </td>
508 <td bgcolor="#ffcccc">GAP</td>
509 <td>FileSystem.type </td>
510 <td> </td>
511 </tr>
512
513 </table>
514 <h3>PPB_Fullscreen</h3>
515 <table>
516 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
517 <td>PPAPI Method </td>
518 <td>State </td>
519 <td>Assumes Threads </td>
520 <td>Emscripten </td>
521 <td>Web API </td>
522 <td>Limitations </td>
523 </tr>
524
525 <tr>
526 <td>IsFullScreen </td>
527 <td>M16 </td>
528 <td> </td>
529 <td>html5.h </td>
530 <td>Document.fullscreenEnabled </td>
531 <td> </td>
532 </tr>
533
534 <tr>
535 <td>SetFullscreen </td>
536 <td>M16 </td>
537 <td> </td>
538 <td>html5.h </td>
539 <td>Document.requestFullscreen </td>
540 <td> </td>
541 </tr>
542
543 <tr>
544 <td>GetScreenSize </td>
545 <td>M16 </td>
546 <td> </td>
547 <td>html5.h </td>
548 <td>Document.exitFullscreen </td>
549 <td> </td>
550 </tr>
551
552 </table>
553 <h3>PPB_Gamepad</h3>
554 <table>
555 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
556 <td>PPAPI Method </td>
557 <td>State </td>
558 <td>Assumes Threads </td>
559 <td>Emscripten </td>
560 <td>Web API </td>
561 <td>Limitations </td>
562 </tr>
563
564 <tr>
565 <td>Sample </td>
566 <td>M19 </td>
567 <td> </td>
568 <td>SDL </td>
569 <td>Gamepad.* </td>
570 <td bgcolor="#ffcccc">GAP - PPAPI exposes a timestamp value, but the JS API doesn't provide this (though it is speced).</td>
571 </tr>
572
573 </table>
574 <h3>PPB_Graphics2D</h3>
575 <table>
576 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
577 <td>PPAPI Method </td>
578 <td>State </td>
579 <td>Assumes Threads </td>
580 <td>Emscripten </td>
581 <td>Web API </td>
582 <td>Limitations </td>
583 </tr>
584
585 <tr>
586 <td>Create </td>
587 <td>M14 </td>
588 <td> </td>
589 <td>SDL </td>
590 <td>Canvas.getContext('2d') </td>
591 <td> </td>
592 </tr>
593
594 <tr>
595 <td>Describe </td>
596 <td>M14 </td>
597 <td> </td>
598 <td>SDL </td>
599 <td>Canvas.clientWidth + Canvas.clientHeight </td>
600 <td> </td>
601 </tr>
602
603 <tr>
604 <td>PaintImageData </td>
605 <td>M14 </td>
606 <td> </td>
607 <td>SDL </td>
608 <td>CanvasRenderingContext2d.putImageData </td>
609 <td> </td>
610 </tr>
611
612 <tr>
613 <td>Scroll </td>
614 <td>M14 </td>
615 <td> </td>
616 <td bgcolor="#ffcccc">GAP</td>
617 <td>CanvasRenderingContext2d.scrollIntoView </td>
618 <td bgcolor="#ffeecc">GAP (partial) - Not an exact match (might have to reso rt to getImageData + putImageData which will be slow). Not a cross-browser stand ard.</td>
619 </tr>
620
621 <tr>
622 <td>ReplaceContents </td>
623 <td>M14 </td>
624 <td> </td>
625 <td>SDL </td>
626 <td>CanvasRenderingContext2d.drawImage </td>
627 <td> </td>
628 </tr>
629
630 <tr>
631 <td>Flush </td>
632 <td>M14 </td>
633 <td> </td>
634 <td bgcolor="#ffcccc">GAP</td>
635 <td bgcolor="#ffcccc">GAP - Only returning to the event loop triggers the fl ush.</td>
636 <td> </td>
637 </tr>
638
639 <tr>
640 <td>SetScale </td>
641 <td>M27 </td>
642 <td> </td>
643 <td>SDL </td>
644 <td>CanvasRenderingContext2d.scale </td>
645 <td> </td>
646 </tr>
647
648 <tr>
649 <td>GetScale </td>
650 <td>M27 </td>
651 <td> </td>
652 <td>SDL </td>
653 <td>CanvasRenderingContext2d.currentTransform </td>
654 <td> </td>
655 </tr>
656
657 <tr>
658 <td>SetLayerTransform </td>
659 <td>M52 </td>
660 <td> </td>
661 <td>SDL </td>
662 <td>CanvasRenderingContext2d.setTransform
663 CanvasRenderingContext2d.scale
664 CanvasRenderingContext2d.translate </td>
665 <td> </td>
666 </tr>
667
668 </table>
669 <h3>PPB_Graphics3D</h3>
670 <table>
671 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
672 <td>PPAPI Method </td>
673 <td>State </td>
674 <td>Assumes Threads </td>
675 <td>Emscripten </td>
676 <td>Web API </td>
677 <td>Limitations </td>
678 </tr>
679
680 <tr>
681 <td>GetAttribMaxValue </td>
682 <td>M15 </td>
683 <td> </td>
684 <td bgcolor="#ffcccc">GAP</td>
685 <td bgcolor="#ffcccc">GAP - Canvas.getContext lets you set booleans requesti ng depth / stencil buffers of certain sizes, but does not have a way to query wh at's possible (or get anything other than on or off for each)</td>
686 <td> </td>
687 </tr>
688
689 <tr>
690 <td>Create </td>
691 <td>M15 </td>
692 <td> </td>
693 <td>SDL </td>
694 <td>Canvas.getContext </td>
695 <td> </td>
696 </tr>
697
698 <tr>
699 <td>GetAttribs </td>
700 <td>M15 </td>
701 <td> </td>
702 <td>SDL </td>
703 <td>WebGLRenderingContext.getContextAttributes </td>
704 <td> </td>
705 </tr>
706
707 <tr>
708 <td>SetAttribs </td>
709 <td>M15 </td>
710 <td> </td>
711 <td>SDL </td>
712 <td>Canvas.getContext(.., OPTIONS) </td>
713 <td> </td>
714 </tr>
715
716 <tr>
717 <td>GetError </td>
718 <td>M15 </td>
719 <td> </td>
720 <td>SDL </td>
721 <td>WebGLRenderingContext.getError </td>
722 <td> </td>
723 </tr>
724
725 <tr>
726 <td>ResizeBuffers </td>
727 <td>M15 </td>
728 <td> </td>
729 <td>SDL </td>
730 <td>&lt;Canvas&gt;.width = w; &lt;Canvas&gt;.height = h; </td>
731 <td> </td>
732 </tr>
733
734 <tr>
735 <td>SwapBuffers </td>
736 <td>M15 </td>
737 <td> </td>
738 <td bgcolor="#ffcccc">GAP</td>
739 <td bgcolor="#ffcccc">GAP - No way to explicitly flip a frame, must return t o the event loop.</td>
740 <td> </td>
741 </tr>
742
743 </table>
744 <h3>PPB_ImageData</h3>
745 <table>
746 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
747 <td>PPAPI Method </td>
748 <td>State </td>
749 <td>Assumes Threads </td>
750 <td>Emscripten </td>
751 <td>Web API </td>
752 <td>Limitations </td>
753 </tr>
754
755 <tr>
756 <td>GetNativeImageDataFormat </td>
757 <td>M14 </td>
758 <td> </td>
759 <td>SDL </td>
760 <td>ImageData mandates RGBA order </td>
761 <td> </td>
762 </tr>
763
764 <tr>
765 <td>IsImageDataFormatSupported </td>
766 <td>M14 </td>
767 <td> </td>
768 <td>SDL </td>
769 <td>ImageData mandates RGBA order </td>
770 <td> </td>
771 </tr>
772
773 <tr>
774 <td>Create </td>
775 <td>M14 </td>
776 <td> </td>
777 <td>SDL </td>
778 <td>CanvasRenderingContext2d.createImageData </td>
779 <td> </td>
780 </tr>
781
782 <tr>
783 <td>Describe </td>
784 <td>M14 </td>
785 <td> </td>
786 <td>SDL </td>
787 <td>ImageData never has a stride </td>
788 <td> </td>
789 </tr>
790
791 <tr>
792 <td>Map </td>
793 <td>M14 </td>
794 <td> </td>
795 <td>SDL </td>
796 <td>ImageData.data </td>
797 <td> </td>
798 </tr>
799
800 <tr>
801 <td>Unmap </td>
802 <td>M14 </td>
803 <td> </td>
804 <td>SDL </td>
805 <td>ImageData.data </td>
806 <td> </td>
807 </tr>
808
809 </table>
810 <h3>PPB_InputEvent</h3>
811 <table>
812 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
813 <td>PPAPI Method </td>
814 <td>State </td>
815 <td>Assumes Threads </td>
816 <td>Emscripten </td>
817 <td>Web API </td>
818 <td>Limitations </td>
819 </tr>
820
821 <tr>
822 <td>RequestInputEvents </td>
823 <td>M13 </td>
824 <td> </td>
825 <td>SDL </td>
826 <td>No direct equivalent </td>
827 <td>The lack of this feature is probably less relevant as JS / Wasm runs on the main thread and can more cheaply filter events without incurring a cross pro cess round-trip. </td>
828 </tr>
829
830 <tr>
831 <td>RequestFilteringInputEvents </td>
832 <td>M13 </td>
833 <td> </td>
834 <td>SDL </td>
835 <td>mouse* key* wheel* touch* composition* Events </td>
836 <td> </td>
837 </tr>
838
839 <tr>
840 <td> </td>
841 <td> </td>
842 <td> </td>
843 <td>SDL </td>
844 <td>Element.addEventListener </td>
845 <td> </td>
846 </tr>
847
848 <tr>
849 <td>ClearInputEventRequest </td>
850 <td>M13 </td>
851 <td> </td>
852 <td>SDL </td>
853 <td>Element.removeEventListener </td>
854 <td> </td>
855 </tr>
856
857 <tr>
858 <td>GetType </td>
859 <td>M13 </td>
860 <td> </td>
861 <td>SDL </td>
862 <td>Event class descendants </td>
863 <td> </td>
864 </tr>
865
866 <tr>
867 <td>GetTimeStamp </td>
868 <td>M13 </td>
869 <td> </td>
870 <td>SDL </td>
871 <td>Event.timeStamp </td>
872 <td> </td>
873 </tr>
874
875 <tr>
876 <td>GetModifiers </td>
877 <td>M13/M55 </td>
878 <td> </td>
879 <td>SDL </td>
880 <td>*Event.altKey/shiftKey/metaKey/ctrlKey </td>
881 <td> </td>
882 </tr>
883
884 </table>
885 <h3>PPB_MouseInputEvent</h3>
886 <table>
887 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
888 <td>PPAPI Method </td>
889 <td>State </td>
890 <td>Assumes Threads </td>
891 <td>Emscripten </td>
892 <td>Web API </td>
893 <td>Limitations </td>
894 </tr>
895
896 <tr>
897 <td>Create </td>
898 <td>M13/M14 </td>
899 <td> </td>
900 <td>SDL </td>
901 <td>MouseEvent </td>
902 <td> </td>
903 </tr>
904
905 <tr>
906 <td>GetButton </td>
907 <td>M13 </td>
908 <td> </td>
909 <td>SDL </td>
910 <td>MouseEvent.button </td>
911 <td> </td>
912 </tr>
913
914 <tr>
915 <td>GetPosition </td>
916 <td>M13 </td>
917 <td> </td>
918 <td>SDL </td>
919 <td>MouseEvent.client*/page*/offset* </td>
920 <td> </td>
921 </tr>
922
923 <tr>
924 <td>GetClickCount </td>
925 <td>M13 </td>
926 <td> </td>
927 <td>SDL </td>
928 <td>dblclick' vs 'mousedown' Events </td>
929 <td> </td>
930 </tr>
931
932 <tr>
933 <td>GetMovement </td>
934 <td>M14 </td>
935 <td> </td>
936 <td>SDL </td>
937 <td>MouseEvent.movement* </td>
938 <td> </td>
939 </tr>
940
941 </table>
942 <h3>PPB_WheelInputEvent</h3>
943 <table>
944 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
945 <td>PPAPI Method </td>
946 <td>State </td>
947 <td>Assumes Threads </td>
948 <td>Emscripten </td>
949 <td>Web API </td>
950 <td>Limitations </td>
951 </tr>
952
953 <tr>
954 <td>Create </td>
955 <td>M13 </td>
956 <td> </td>
957 <td>SDL </td>
958 <td>WheelEvent </td>
959 <td> </td>
960 </tr>
961
962 <tr>
963 <td>GetDelta </td>
964 <td>M13 </td>
965 <td> </td>
966 <td>SDL </td>
967 <td>WheelEvent.delta* </td>
968 <td> </td>
969 </tr>
970
971 <tr>
972 <td>GetTicks </td>
973 <td>M13 </td>
974 <td> </td>
975 <td bgcolor="#ffcccc">GAP</td>
976 <td bgcolor="#ffcccc">GAP - deltaMode kinda of contains this info, but incom pletely.</td>
977 <td> </td>
978 </tr>
979
980 <tr>
981 <td>GetScrollByPage </td>
982 <td>M13 </td>
983 <td> </td>
984 <td bgcolor="#ffcccc">GAP</td>
985 <td bgcolor="#ffcccc">GAP - deltaMode kinda of contains this info, but incom pletely.</td>
986 <td> </td>
987 </tr>
988
989 </table>
990 <h3>PPB_KeyboardInputEvent</h3>
991 <table>
992 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
993 <td>PPAPI Method </td>
994 <td>State </td>
995 <td>Assumes Threads </td>
996 <td>Emscripten </td>
997 <td>Web API </td>
998 <td>Limitations </td>
999 </tr>
1000
1001 <tr>
1002 <td>Create </td>
1003 <td>M13/M34 </td>
1004 <td> </td>
1005 <td>SDL </td>
1006 <td>KeyboardEvent </td>
1007 <td> </td>
1008 </tr>
1009
1010 <tr>
1011 <td>GetKeyCode </td>
1012 <td>M13 </td>
1013 <td> </td>
1014 <td>SDL </td>
1015 <td>KeyboardEvent.keyCode </td>
1016 <td> </td>
1017 </tr>
1018
1019 <tr>
1020 <td>GetCharacterText </td>
1021 <td>M13 </td>
1022 <td> </td>
1023 <td>SDL </td>
1024 <td>KeyboardEvent.key </td>
1025 <td> </td>
1026 </tr>
1027
1028 <tr>
1029 <td>GetCode </td>
1030 <td>M34 </td>
1031 <td> </td>
1032 <td>SDL </td>
1033 <td>KeyboardEvent.code </td>
1034 <td> </td>
1035 </tr>
1036
1037 </table>
1038 <h3>PPB_TouchInputEvent</h3>
1039 <table>
1040 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1041 <td>PPAPI Method </td>
1042 <td>State </td>
1043 <td>Assumes Threads </td>
1044 <td>Emscripten </td>
1045 <td>Web API </td>
1046 <td>Limitations </td>
1047 </tr>
1048
1049 <tr>
1050 <td>Create </td>
1051 <td>M13 </td>
1052 <td> </td>
1053 <td>SDL </td>
1054 <td>TouchEvent </td>
1055 <td> </td>
1056 </tr>
1057
1058 <tr>
1059 <td>AddTouchPoint </td>
1060 <td>M13 </td>
1061 <td> </td>
1062 <td>SDL </td>
1063 <td>TouchEvent.touches.push </td>
1064 <td> </td>
1065 </tr>
1066
1067 <tr>
1068 <td>GetTouchCount </td>
1069 <td>M13 </td>
1070 <td> </td>
1071 <td>SDL </td>
1072 <td>TouchEvent.touches.length </td>
1073 <td> </td>
1074 </tr>
1075
1076 <tr>
1077 <td>GetTouchByIndex </td>
1078 <td>M13 </td>
1079 <td> </td>
1080 <td>SDL </td>
1081 <td>TouchEvent.touches[i] </td>
1082 <td> </td>
1083 </tr>
1084
1085 <tr>
1086 <td>GetTouchById </td>
1087 <td>M13 </td>
1088 <td> </td>
1089 <td>SDL </td>
1090 <td>Touch.indentifer (to figure this out yourself) </td>
1091 <td> </td>
1092 </tr>
1093
1094 </table>
1095 <h3>PPB_IMEInputEvent</h3>
1096 <table>
1097 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1098 <td>PPAPI Method </td>
1099 <td>State </td>
1100 <td>Assumes Threads </td>
1101 <td>Emscripten </td>
1102 <td>Web API </td>
1103 <td>Limitations </td>
1104 </tr>
1105
1106 <tr>
1107 <td>Create </td>
1108 <td>M13 </td>
1109 <td> </td>
1110 <td bgcolor="#ffcccc">GAP</td>
1111 <td>CompositionEvent </td>
1112 <td> </td>
1113 </tr>
1114
1115 <tr>
1116 <td>GetText </td>
1117 <td>M13 </td>
1118 <td> </td>
1119 <td bgcolor="#ffcccc">GAP</td>
1120 <td>CompositionEvent.data </td>
1121 <td> </td>
1122 </tr>
1123
1124 <tr>
1125 <td>GetSegmentNumber </td>
1126 <td>M13 </td>
1127 <td> </td>
1128 <td bgcolor="#ffcccc">GAP</td>
1129 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
1130 <td> </td>
1131 </tr>
1132
1133 <tr>
1134 <td>GetSegmentOffset </td>
1135 <td>M13 </td>
1136 <td> </td>
1137 <td bgcolor="#ffcccc">GAP</td>
1138 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
1139 <td> </td>
1140 </tr>
1141
1142 <tr>
1143 <td>GetTargetSegment </td>
1144 <td>M13 </td>
1145 <td> </td>
1146 <td bgcolor="#ffcccc">GAP</td>
1147 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
1148 <td> </td>
1149 </tr>
1150
1151 <tr>
1152 <td>GetSelection </td>
1153 <td>M13 </td>
1154 <td> </td>
1155 <td bgcolor="#ffcccc">GAP</td>
1156 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
1157 <td> </td>
1158 </tr>
1159
1160 </table>
1161 <h3>PPB_Instance</h3>
1162 <table>
1163 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1164 <td>PPAPI Method </td>
1165 <td>State </td>
1166 <td>Assumes Threads </td>
1167 <td>Emscripten </td>
1168 <td>Web API </td>
1169 <td>Limitations </td>
1170 </tr>
1171
1172 <tr>
1173 <td>BindGraphics </td>
1174 <td>M14 </td>
1175 <td> </td>
1176 <td>SDL </td>
1177 <td>Canvas.getContext (moot as binding is automatic). </td>
1178 <td> </td>
1179 </tr>
1180
1181 <tr>
1182 <td>IsFullFrame </td>
1183 <td>M14 </td>
1184 <td> </td>
1185 <td bgcolor="#ffcccc">GAP</td>
1186 <td bgcolor="#ffcccc">GAP - No equivalent to mime type handlers.</td>
1187 <td>NaCl apps can be registered to handle a particular mime type and own the whole document. </td>
1188 </tr>
1189
1190 </table>
1191 <h3>PPB_MediaStreamAudioTrack</h3>
1192 <table>
1193 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1194 <td>PPAPI Method </td>
1195 <td>State </td>
1196 <td>Assumes Threads </td>
1197 <td>Emscripten </td>
1198 <td>Web API </td>
1199 <td>Limitations </td>
1200 </tr>
1201
1202 <tr>
1203 <td>Configure </td>
1204 <td>M35 </td>
1205 <td> </td>
1206 <td bgcolor="#ffcccc">GAP</td>
1207 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1208 <td> </td>
1209 </tr>
1210
1211 <tr>
1212 <td>GetAttrib </td>
1213 <td>M35 </td>
1214 <td> </td>
1215 <td bgcolor="#ffcccc">GAP</td>
1216 <td>MediaStreamSettings.channelCount </td>
1217 <td> </td>
1218 </tr>
1219
1220 <tr>
1221 <td> </td>
1222 <td> </td>
1223 <td> </td>
1224 <td bgcolor="#ffcccc">GAP</td>
1225 <td>MediaStreamSettings.sampleSize </td>
1226 <td> </td>
1227 </tr>
1228
1229 <tr>
1230 <td> </td>
1231 <td> </td>
1232 <td> </td>
1233 <td bgcolor="#ffcccc">GAP</td>
1234 <td>MediaStreamSettings.sampleRate </td>
1235 <td> </td>
1236 </tr>
1237
1238 <tr>
1239 <td> </td>
1240 <td> </td>
1241 <td> </td>
1242 <td bgcolor="#ffcccc">GAP</td>
1243 <td bgcolor="#ffcccc">GAP - no equivalent to PP_MEDIASTREAMAUDIOTRACK_ATTRIB _BUFFERS</td>
1244 <td> </td>
1245 </tr>
1246
1247 <tr>
1248 <td> </td>
1249 <td> </td>
1250 <td> </td>
1251 <td bgcolor="#ffcccc">GAP</td>
1252 <td bgcolor="#ffcccc">GAP - no equivalent to PP_MEDIASTREAMAUDIOTRACK_ATTRIB _DURATION</td>
1253 <td> </td>
1254 </tr>
1255
1256 <tr>
1257 <td>GetId </td>
1258 <td>M35 </td>
1259 <td> </td>
1260 <td bgcolor="#ffcccc">GAP</td>
1261 <td>MediaStream.id </td>
1262 <td> </td>
1263 </tr>
1264
1265 <tr>
1266 <td>HasEnded </td>
1267 <td>M35 </td>
1268 <td> </td>
1269 <td bgcolor="#ffcccc">GAP</td>
1270 <td>MediaStream.ended </td>
1271 <td> </td>
1272 </tr>
1273
1274 <tr>
1275 <td>GetBuffer </td>
1276 <td>M35 </td>
1277 <td> </td>
1278 <td bgcolor="#ffcccc">GAP</td>
1279 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1280 <td> </td>
1281 </tr>
1282
1283 <tr>
1284 <td>RecycleBuffer </td>
1285 <td>M35 </td>
1286 <td> </td>
1287 <td bgcolor="#ffcccc">GAP</td>
1288 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1289 <td> </td>
1290 </tr>
1291
1292 <tr>
1293 <td>Close </td>
1294 <td>M35 </td>
1295 <td> </td>
1296 <td bgcolor="#ffcccc">GAP</td>
1297 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1298 <td> </td>
1299 </tr>
1300
1301 </table>
1302 <h3>PPB_MediaStreamVideoTrack</h3>
1303 <table>
1304 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1305 <td>PPAPI Method </td>
1306 <td>State </td>
1307 <td>Assumes Threads </td>
1308 <td>Emscripten </td>
1309 <td>Web API </td>
1310 <td>Limitations </td>
1311 </tr>
1312
1313 <tr>
1314 <td>Create </td>
1315 <td>M36(dev) </td>
1316 <td> </td>
1317 <td bgcolor="#ffcccc">GAP</td>
1318 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1319 <td>Ability to create synthetic stream. </td>
1320 </tr>
1321
1322 <tr>
1323 <td>Configure </td>
1324 <td>M35 </td>
1325 <td> </td>
1326 <td bgcolor="#ffcccc">GAP</td>
1327 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1328 <td> </td>
1329 </tr>
1330
1331 <tr>
1332 <td>GetAttrib </td>
1333 <td>M35 </td>
1334 <td> </td>
1335 <td bgcolor="#ffcccc">GAP</td>
1336 <td>MediaStreamSettings.width </td>
1337 <td> </td>
1338 </tr>
1339
1340 <tr>
1341 <td> </td>
1342 <td> </td>
1343 <td> </td>
1344 <td bgcolor="#ffcccc">GAP</td>
1345 <td>MediaStreamSettings.height </td>
1346 <td> </td>
1347 </tr>
1348
1349 <tr>
1350 <td> </td>
1351 <td> </td>
1352 <td> </td>
1353 <td bgcolor="#ffcccc">GAP</td>
1354 <td bgcolor="#ffcccc">GAP - no equivalent to PP_MEDIASTREAMVIDEOTRACK_ATTRIB _BUFFERED_FRAMES</td>
1355 <td> </td>
1356 </tr>
1357
1358 <tr>
1359 <td> </td>
1360 <td> </td>
1361 <td> </td>
1362 <td bgcolor="#ffcccc">GAP</td>
1363 <td bgcolor="#ffcccc">GAP - no equivalent to PP_MEDIASTREAMVIDEOTRACK_ATTRIB _FORMAT</td>
1364 <td> </td>
1365 </tr>
1366
1367 <tr>
1368 <td>GetId </td>
1369 <td>M35 </td>
1370 <td> </td>
1371 <td bgcolor="#ffcccc">GAP</td>
1372 <td>MediaStream.id </td>
1373 <td> </td>
1374 </tr>
1375
1376 <tr>
1377 <td>HasEnded </td>
1378 <td>M35 </td>
1379 <td> </td>
1380 <td bgcolor="#ffcccc">GAP</td>
1381 <td>MediaStream.ended </td>
1382 <td> </td>
1383 </tr>
1384
1385 <tr>
1386 <td>GetFrame </td>
1387 <td>M35 </td>
1388 <td> </td>
1389 <td bgcolor="#ffcccc">GAP</td>
1390 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1391 <td> </td>
1392 </tr>
1393
1394 <tr>
1395 <td>RecycleFrame </td>
1396 <td>M35 </td>
1397 <td> </td>
1398 <td bgcolor="#ffcccc">GAP</td>
1399 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1400 <td> </td>
1401 </tr>
1402
1403 <tr>
1404 <td>Close </td>
1405 <td>M35 </td>
1406 <td> </td>
1407 <td bgcolor="#ffcccc">GAP</td>
1408 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1409 <td> </td>
1410 </tr>
1411
1412 <tr>
1413 <td>GetEmptyFrame </td>
1414 <td>M36(dev) </td>
1415 <td> </td>
1416 <td bgcolor="#ffcccc">GAP</td>
1417 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1418 <td> </td>
1419 </tr>
1420
1421 <tr>
1422 <td>PutFrame </td>
1423 <td>M36(dev) </td>
1424 <td> </td>
1425 <td bgcolor="#ffcccc">GAP</td>
1426 <td bgcolor="#ffcccc">GAP - No equivalent</td>
1427 <td> </td>
1428 </tr>
1429
1430 </table>
1431 <h3>PPB_MessageLoop</h3>
1432 <table>
1433 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1434 <td>PPAPI Method </td>
1435 <td>State </td>
1436 <td>Assumes Threads </td>
1437 <td>Emscripten </td>
1438 <td>Web API </td>
1439 <td>Limitations </td>
1440 </tr>
1441
1442 <tr>
1443 <td>Create </td>
1444 <td>M25 </td>
1445 <td> </td>
1446 <td>N/A </td>
1447 <td>Mostly moot, workers get an implicit event loop. </td>
1448 <td> </td>
1449 </tr>
1450
1451 <tr>
1452 <td>GetForMainThread </td>
1453 <td>M25 </td>
1454 <td> </td>
1455 <td>N/A </td>
1456 <td>Mostly moot, workers get an implicit event loop. </td>
1457 <td> </td>
1458 </tr>
1459
1460 <tr>
1461 <td>GetCurrent </td>
1462 <td>M25 </td>
1463 <td> </td>
1464 <td>N/A </td>
1465 <td>Mostly moot, workers get an implicit event loop. </td>
1466 <td> </td>
1467 </tr>
1468
1469 <tr>
1470 <td>AttachToCurrentThread </td>
1471 <td>M25 </td>
1472 <td> </td>
1473 <td>N/A </td>
1474 <td>Mostly moot, workers get an implicit event loop. </td>
1475 <td> </td>
1476 </tr>
1477
1478 <tr>
1479 <td>Run </td>
1480 <td>M25 </td>
1481 <td> </td>
1482 <td>N/A </td>
1483 <td>Mostly moot, workers get an implicit event loop. </td>
1484 <td> </td>
1485 </tr>
1486
1487 <tr>
1488 <td>PostWork </td>
1489 <td>M25 </td>
1490 <td> </td>
1491 <td>N/A </td>
1492 <td>Mostly moot, workers get an implicit event loop. </td>
1493 <td> </td>
1494 </tr>
1495
1496 <tr>
1497 <td>PostQuit </td>
1498 <td>M25 </td>
1499 <td> </td>
1500 <td>N/A </td>
1501 <td>Mostly moot, workers get an implicit event loop. </td>
1502 <td> </td>
1503 </tr>
1504
1505 </table>
1506 <h3>PPB_Messaging</h3>
1507 <table>
1508 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1509 <td>PPAPI Method </td>
1510 <td>State </td>
1511 <td>Assumes Threads </td>
1512 <td>Emscripten </td>
1513 <td>Web API </td>
1514 <td>Limitations </td>
1515 </tr>
1516
1517 <tr>
1518 <td>PostMessage </td>
1519 <td>M14 </td>
1520 <td> </td>
1521 <td>N/A </td>
1522 <td>Window.postMessage </td>
1523 <td> </td>
1524 </tr>
1525
1526 <tr>
1527 <td>RegisterMessageHandler </td>
1528 <td>M39 </td>
1529 <td> </td>
1530 <td>N/A </td>
1531 <td>Window.addEventListener </td>
1532 <td> </td>
1533 </tr>
1534
1535 <tr>
1536 <td>UnregisterMessageHandler </td>
1537 <td>M39 </td>
1538 <td> </td>
1539 <td>N/A </td>
1540 <td>Window.removeEventListener </td>
1541 <td> </td>
1542 </tr>
1543
1544 </table>
1545 <h3>PPB_MouseCursor</h3>
1546 <table>
1547 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1548 <td>PPAPI Method </td>
1549 <td>State </td>
1550 <td>Assumes Threads </td>
1551 <td>Emscripten </td>
1552 <td>Web API </td>
1553 <td>Limitations </td>
1554 </tr>
1555
1556 <tr>
1557 <td>SetCursor </td>
1558 <td>M19 </td>
1559 <td> </td>
1560 <td>SDL </td>
1561 <td>Element.style.cursor </td>
1562 <td>Same set of stock cursors are supported.
1563 Custom cursors can be done with url(..).
1564 Dynamic custom cursors can be done with data URIs.
1565 CSS3 supports specifying the hotspot. </td>
1566 </tr>
1567
1568 </table>
1569 <h3>PPB_MouseLock</h3>
1570 <table>
1571 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1572 <td>PPAPI Method </td>
1573 <td>State </td>
1574 <td>Assumes Threads </td>
1575 <td>Emscripten </td>
1576 <td>Web API </td>
1577 <td>Limitations </td>
1578 </tr>
1579
1580 <tr>
1581 <td>LockMouse </td>
1582 <td>M16 </td>
1583 <td> </td>
1584 <td>SDL </td>
1585 <td>Element.requestPointerLock </td>
1586 <td> </td>
1587 </tr>
1588
1589 <tr>
1590 <td>UnlockMouse </td>
1591 <td>M16 </td>
1592 <td> </td>
1593 <td>SDL </td>
1594 <td>Element.exitPointerLock </td>
1595 <td> </td>
1596 </tr>
1597
1598 </table>
1599 <h3>PPB_OpenGLES2</h3>
1600 <table>
1601 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1602 <td>PPAPI Method </td>
1603 <td>State </td>
1604 <td>Assumes Threads </td>
1605 <td>Emscripten </td>
1606 <td>Web API </td>
1607 <td>Limitations </td>
1608 </tr>
1609
1610 <tr>
1611 <td>Several Methods </td>
1612 <td>M39 </td>
1613 <td> </td>
1614 <td>OpenGLES </td>
1615 <td>Close to WebGL 1.0 in functionality. </td>
1616 <td>TODO(bradnelson): more detail </td>
1617 </tr>
1618
1619 <tr>
1620 <td> </td>
1621 <td> </td>
1622 <td>x </td>
1623 <td> </td>
1624 <td bgcolor="#ffcccc">GAP - Without offscreen canvas, rendering must be done on the main thread.</td>
1625 <td> </td>
1626 </tr>
1627
1628 </table>
1629 <h3>PPB_TextInputController</h3>
1630 <table>
1631 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1632 <td>PPAPI Method </td>
1633 <td>State </td>
1634 <td>Assumes Threads </td>
1635 <td>Emscripten </td>
1636 <td>Web API </td>
1637 <td>Limitations </td>
1638 </tr>
1639
1640 <tr>
1641 <td>SetTextInputType </td>
1642 <td>M30 </td>
1643 <td> </td>
1644 <td bgcolor="#ffcccc">GAP</td>
1645 <td bgcolor="#ffcccc">GAP - No equivalent hints to browser about canvas cont aining input.</td>
1646 <td>Unity has specifically raised a desire to either be able to hint in this fashion, or preferrably the ability to intercept and display IME events / outpu t inline inside a canvas. </td>
1647 </tr>
1648
1649 <tr>
1650 <td>UpdateCaretPosition </td>
1651 <td>M30 </td>
1652 <td> </td>
1653 <td bgcolor="#ffcccc">GAP</td>
1654 <td bgcolor="#ffcccc">GAP - No equivalent hints to browser about canvas cont aining input.</td>
1655 <td> </td>
1656 </tr>
1657
1658 <tr>
1659 <td>CancelCompositionText </td>
1660 <td>M30 </td>
1661 <td> </td>
1662 <td bgcolor="#ffcccc">GAP</td>
1663 <td bgcolor="#ffcccc">GAP - No equivalent hints to browser about canvas cont aining input.</td>
1664 <td> </td>
1665 </tr>
1666
1667 <tr>
1668 <td>UpdateSurroundingText </td>
1669 <td>M30 </td>
1670 <td> </td>
1671 <td bgcolor="#ffcccc">GAP</td>
1672 <td bgcolor="#ffcccc">GAP - No equivalent hints to browser about canvas cont aining input.</td>
1673 <td> </td>
1674 </tr>
1675
1676 </table>
1677 <h3>PPB_URLLoader</h3>
1678 <table>
1679 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1680 <td>PPAPI Method </td>
1681 <td>State </td>
1682 <td>Assumes Threads </td>
1683 <td>Emscripten </td>
1684 <td>Web API </td>
1685 <td>Limitations </td>
1686 </tr>
1687
1688 <tr>
1689 <td>Create </td>
1690 <td>M14 </td>
1691 <td> </td>
1692 <td>embind </td>
1693 <td>new XMLHttpRequest(); </td>
1694 <td> </td>
1695 </tr>
1696
1697 <tr>
1698 <td>Open </td>
1699 <td>M14 </td>
1700 <td> </td>
1701 <td>embind </td>
1702 <td>XMLHttpRequest.open </td>
1703 <td> </td>
1704 </tr>
1705
1706 <tr>
1707 <td>FollowRedirect </td>
1708 <td>M14 </td>
1709 <td> </td>
1710 <td>embind </td>
1711 <td>Request.redirect </td>
1712 <td> </td>
1713 </tr>
1714
1715 <tr>
1716 <td> </td>
1717 <td> </td>
1718 <td> </td>
1719 <td bgcolor="#ffcccc">GAP</td>
1720 <td bgcolor="#ffcccc">GAP - No XMLHTTPRequest equivalent</td>
1721 <td> </td>
1722 </tr>
1723
1724 <tr>
1725 <td>GetUploadProgress </td>
1726 <td>M14 </td>
1727 <td> </td>
1728 <td>embind </td>
1729 <td>XMLHttpRequest 'progress' Event </td>
1730 <td> </td>
1731 </tr>
1732
1733 <tr>
1734 <td> </td>
1735 <td> </td>
1736 <td> </td>
1737 <td bgcolor="#ffcccc">GAP</td>
1738 <td bgcolor="#ffcccc">GAP - No Fetch API equivalent</td>
1739 <td> </td>
1740 </tr>
1741
1742 <tr>
1743 <td>GetDownloadProgress </td>
1744 <td>M14 </td>
1745 <td> </td>
1746 <td>embind </td>
1747 <td>XMLHttpRequest 'progress' Event </td>
1748 <td> </td>
1749 </tr>
1750
1751 <tr>
1752 <td> </td>
1753 <td> </td>
1754 <td> </td>
1755 <td bgcolor="#ffcccc">GAP</td>
1756 <td bgcolor="#ffcccc">GAP - No Fetch API equivalent</td>
1757 <td> </td>
1758 </tr>
1759
1760 <tr>
1761 <td>GetResponseInfo </td>
1762 <td>M14 </td>
1763 <td> </td>
1764 <td>embind </td>
1765 <td>XMLHttpRequest.getAllResponseHeaders </td>
1766 <td> </td>
1767 </tr>
1768
1769 <tr>
1770 <td> </td>
1771 <td> </td>
1772 <td> </td>
1773 <td>embind </td>
1774 <td>Fetch Response.* </td>
1775 <td> </td>
1776 </tr>
1777
1778 <tr>
1779 <td>ReadResponseBody </td>
1780 <td>M14 </td>
1781 <td> </td>
1782 <td>embind </td>
1783 <td>XMLHttpRequest.response </td>
1784 <td> </td>
1785 </tr>
1786
1787 <tr>
1788 <td> </td>
1789 <td> </td>
1790 <td> </td>
1791 <td>embind </td>
1792 <td>Body.* (Response is a Body) </td>
1793 <td> </td>
1794 </tr>
1795
1796 <tr>
1797 <td>FinishStreamingToFile </td>
1798 <td>M14 </td>
1799 <td> </td>
1800 <td>embind </td>
1801 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
1802 <td>XMLHttpRequest and Fetch both assume streaming to memory, rather than di rectly to a storage. </td>
1803 </tr>
1804
1805 <tr>
1806 <td>Close </td>
1807 <td>M14 </td>
1808 <td> </td>
1809 <td>embind </td>
1810 <td>XMLHttpRequest.abort </td>
1811 <td> </td>
1812 </tr>
1813
1814 <tr>
1815 <td> </td>
1816 <td> </td>
1817 <td> </td>
1818 <td bgcolor="#ffcccc">GAP</td>
1819 <td bgcolor="#ffcccc">GAP - No Fetch API equivalent</td>
1820 <td> </td>
1821 </tr>
1822
1823 </table>
1824 <h3>PPB_URLRequestInfo</h3>
1825 <table>
1826 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1827 <td>PPAPI Method </td>
1828 <td>State </td>
1829 <td>Assumes Threads </td>
1830 <td>Emscripten </td>
1831 <td>Web API </td>
1832 <td>Limitations </td>
1833 </tr>
1834
1835 <tr>
1836 <td>Create </td>
1837 <td>M14 </td>
1838 <td> </td>
1839 <td>embind </td>
1840 <td>XMLHttpRequest </td>
1841 <td> </td>
1842 </tr>
1843
1844 <tr>
1845 <td> </td>
1846 <td> </td>
1847 <td> </td>
1848 <td>embind </td>
1849 <td>Fetch Request </td>
1850 <td>No way to stream to a file. </td>
1851 </tr>
1852
1853 <tr>
1854 <td>SetProperty </td>
1855 <td>M14 </td>
1856 <td> </td>
1857 <td bgcolor="#ffcccc">GAP</td>
1858 <td bgcolor="#ffcccc">GAP - No direct equivalent for XMLHttpRequest</td>
1859 <td>XMLHttpRequest doesn't provide direct ways to per-request limit followin g redirects, stream to a file, set referrer or credentials policy. </td>
1860 </tr>
1861
1862 <tr>
1863 <td> </td>
1864 <td> </td>
1865 <td> </td>
1866 <td>embind </td>
1867 <td>Request.* </td>
1868 <td> </td>
1869 </tr>
1870
1871 <tr>
1872 <td>AppendDataToBody </td>
1873 <td>M14 </td>
1874 <td> </td>
1875 <td>embind </td>
1876 <td>XMLHttpRequest.send </td>
1877 <td bgcolor="#ffcccc">GAP - Both must have the whole body, rather than a chu nk.</td>
1878 </tr>
1879
1880 <tr>
1881 <td> </td>
1882 <td> </td>
1883 <td> </td>
1884 <td>embind </td>
1885 <td>fetch(.., options:body) </td>
1886 <td> </td>
1887 </tr>
1888
1889 <tr>
1890 <td>AppendFileToBody </td>
1891 <td>M14 </td>
1892 <td> </td>
1893 <td bgcolor="#ffcccc">GAP</td>
1894 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
1895 <td> </td>
1896 </tr>
1897
1898 <tr>
1899 <td> </td>
1900 <td> </td>
1901 <td> </td>
1902 <td>N/A </td>
1903 <td>&lt;form&gt; </td>
1904 <td>You can also read with FileReader and upload, but that's more like Appen dDataToBody </td>
1905 </tr>
1906
1907 </table>
1908 <h3>PPB_URLResponseInfo</h3>
1909 <table>
1910 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1911 <td>PPAPI Method </td>
1912 <td>State </td>
1913 <td>Assumes Threads </td>
1914 <td>Emscripten </td>
1915 <td>Web API </td>
1916 <td>Limitations </td>
1917 </tr>
1918
1919 <tr>
1920 <td>GetProperty </td>
1921 <td>M14 </td>
1922 <td> </td>
1923 <td>embind </td>
1924 <td>XMLHttpRequest.getAllResponseHeaders + others </td>
1925 <td> </td>
1926 </tr>
1927
1928 <tr>
1929 <td> </td>
1930 <td> </td>
1931 <td> </td>
1932 <td>embind </td>
1933 <td>Fetch Response.* </td>
1934 <td> </td>
1935 </tr>
1936
1937 <tr>
1938 <td>GetBodyAsFileRef </td>
1939 <td>M14 </td>
1940 <td> </td>
1941 <td>embind </td>
1942 <td>Fetch Response (Body) .blob() </td>
1943 <td>Assumes storage layer optimizes transfer. </td>
1944 </tr>
1945
1946 </table>
1947 <h3>PPB_Var</h3>
1948 <table>
1949 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1950 <td>PPAPI Method </td>
1951 <td>State </td>
1952 <td>Assumes Threads </td>
1953 <td>Emscripten </td>
1954 <td>Web API </td>
1955 <td>Limitations </td>
1956 </tr>
1957
1958 <tr>
1959 <td>VarFromUtf8 </td>
1960 <td>M18 </td>
1961 <td> </td>
1962 <td>embind </td>
1963 <td>TextDecoder.decode </td>
1964 <td> </td>
1965 </tr>
1966
1967 <tr>
1968 <td>VarToUtf8 </td>
1969 <td>M14 </td>
1970 <td> </td>
1971 <td>embind </td>
1972 <td>TextEncoder.encode </td>
1973 <td> </td>
1974 </tr>
1975
1976 <tr>
1977 <td>VarFromResource </td>
1978 <td>M34 </td>
1979 <td> </td>
1980 <td>N/A </td>
1981 <td>N/A </td>
1982 <td> </td>
1983 </tr>
1984
1985 <tr>
1986 <td>VarToResource </td>
1987 <td>M34 </td>
1988 <td> </td>
1989 <td>N/A </td>
1990 <td>N/A </td>
1991 <td> </td>
1992 </tr>
1993
1994 </table>
1995 <h3>PPB_VarArray</h3>
1996 <table>
1997 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
1998 <td>PPAPI Method </td>
1999 <td>State </td>
2000 <td>Assumes Threads </td>
2001 <td>Emscripten </td>
2002 <td>Web API </td>
2003 <td>Limitations </td>
2004 </tr>
2005
2006 <tr>
2007 <td>Get </td>
2008 <td>M29 </td>
2009 <td> </td>
2010 <td>embind </td>
2011 <td>Array[i] </td>
2012 <td> </td>
2013 </tr>
2014
2015 <tr>
2016 <td>Set </td>
2017 <td>M29 </td>
2018 <td> </td>
2019 <td>embind </td>
2020 <td>Array[i] = x </td>
2021 <td> </td>
2022 </tr>
2023
2024 <tr>
2025 <td>GetLength </td>
2026 <td>M29 </td>
2027 <td> </td>
2028 <td>embind </td>
2029 <td>Array.length </td>
2030 <td> </td>
2031 </tr>
2032
2033 <tr>
2034 <td>SetLength </td>
2035 <td>M29 </td>
2036 <td> </td>
2037 <td>embind </td>
2038 <td>Array.length = n </td>
2039 <td> </td>
2040 </tr>
2041
2042 </table>
2043 <h3>PPB_VarArrayBuffer</h3>
2044 <table>
2045 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2046 <td>PPAPI Method </td>
2047 <td>State </td>
2048 <td>Assumes Threads </td>
2049 <td>Emscripten </td>
2050 <td>Web API </td>
2051 <td>Limitations </td>
2052 </tr>
2053
2054 <tr>
2055 <td>Create </td>
2056 <td>M18 </td>
2057 <td> </td>
2058 <td>embind </td>
2059 <td>new ArrayBuffer(n) </td>
2060 <td> </td>
2061 </tr>
2062
2063 <tr>
2064 <td>ByteLength </td>
2065 <td>M18 </td>
2066 <td> </td>
2067 <td>embind </td>
2068 <td>ArrayBuffer.byteLength </td>
2069 <td> </td>
2070 </tr>
2071
2072 <tr>
2073 <td>Map </td>
2074 <td>M18 </td>
2075 <td> </td>
2076 <td bgcolor="#ffcccc">GAP</td>
2077 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
2078 <td>Asm.js / Wasm modules are unable to map regions of an ArrayBuffer other than their single linear memory heap.
2079 Future multiple memories or memory mapping might improve this. </td>
2080 </tr>
2081
2082 <tr>
2083 <td>Unmap </td>
2084 <td>M18 </td>
2085 <td> </td>
2086 <td bgcolor="#ffcccc">GAP</td>
2087 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
2088 <td> </td>
2089 </tr>
2090
2091 </table>
2092 <h3>PPB_VarDictionary</h3>
2093 <table>
2094 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2095 <td>PPAPI Method </td>
2096 <td>State </td>
2097 <td>Assumes Threads </td>
2098 <td>Emscripten </td>
2099 <td>Web API </td>
2100 <td>Limitations </td>
2101 </tr>
2102
2103 <tr>
2104 <td>Create </td>
2105 <td>M29 </td>
2106 <td> </td>
2107 <td>embind </td>
2108 <td>{} </td>
2109 <td> </td>
2110 </tr>
2111
2112 <tr>
2113 <td>Get </td>
2114 <td>M29 </td>
2115 <td> </td>
2116 <td>embind </td>
2117 <td>&lt;Object&gt;[i] </td>
2118 <td> </td>
2119 </tr>
2120
2121 <tr>
2122 <td>Set </td>
2123 <td>M29 </td>
2124 <td> </td>
2125 <td>embind </td>
2126 <td>&lt;Object&gt;[i] = x </td>
2127 <td> </td>
2128 </tr>
2129
2130 <tr>
2131 <td>Delete </td>
2132 <td>M29 </td>
2133 <td> </td>
2134 <td>embind </td>
2135 <td>delete &lt;Object&gt;[i] </td>
2136 <td> </td>
2137 </tr>
2138
2139 <tr>
2140 <td>HasKey </td>
2141 <td>M29 </td>
2142 <td> </td>
2143 <td>embind </td>
2144 <td>x in &lt;Object&gt; </td>
2145 <td> </td>
2146 </tr>
2147
2148 <tr>
2149 <td>GetKeys </td>
2150 <td>M29 </td>
2151 <td> </td>
2152 <td>embind </td>
2153 <td>for (k in &lt;Object&gt;) {} </td>
2154 <td>No literal equivalent, but it can be built. </td>
2155 </tr>
2156
2157 </table>
2158 <h3>PPB_VideoDecoder</h3>
2159 <table>
2160 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2161 <td>PPAPI Method </td>
2162 <td>State </td>
2163 <td>Assumes Threads </td>
2164 <td>Emscripten </td>
2165 <td>Web API </td>
2166 <td>Limitations </td>
2167 </tr>
2168
2169 <tr>
2170 <td>Create </td>
2171 <td>M36 </td>
2172 <td> </td>
2173 <td bgcolor="#ffcccc">GAP</td>
2174 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2175 <td> </td>
2176 </tr>
2177
2178 <tr>
2179 <td>Initialize </td>
2180 <td>M39/M46 </td>
2181 <td> </td>
2182 <td bgcolor="#ffcccc">GAP</td>
2183 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2184 <td> </td>
2185 </tr>
2186
2187 <tr>
2188 <td>Decode </td>
2189 <td>M36 </td>
2190 <td> </td>
2191 <td bgcolor="#ffcccc">GAP</td>
2192 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2193 <td> </td>
2194 </tr>
2195
2196 <tr>
2197 <td>GetPicture </td>
2198 <td>M40 </td>
2199 <td> </td>
2200 <td bgcolor="#ffcccc">GAP</td>
2201 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2202 <td> </td>
2203 </tr>
2204
2205 <tr>
2206 <td>RecyclePicture </td>
2207 <td>M36 </td>
2208 <td> </td>
2209 <td bgcolor="#ffcccc">GAP</td>
2210 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2211 <td> </td>
2212 </tr>
2213
2214 <tr>
2215 <td>Flush </td>
2216 <td>M36 </td>
2217 <td> </td>
2218 <td bgcolor="#ffcccc">GAP</td>
2219 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2220 <td> </td>
2221 </tr>
2222
2223 <tr>
2224 <td>Reset </td>
2225 <td>M36 </td>
2226 <td> </td>
2227 <td bgcolor="#ffcccc">GAP</td>
2228 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2229 <td> </td>
2230 </tr>
2231
2232 </table>
2233 <h3>PPB_VideoEncoder</h3>
2234 <table>
2235 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2236 <td>PPAPI Method </td>
2237 <td>State </td>
2238 <td>Assumes Threads </td>
2239 <td>Emscripten </td>
2240 <td>Web API </td>
2241 <td>Limitations </td>
2242 </tr>
2243
2244 <tr>
2245 <td>Create </td>
2246 <td>M44 </td>
2247 <td> </td>
2248 <td bgcolor="#ffcccc">GAP</td>
2249 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2250 <td>Overlap with MediaRecorder API, but not exact. </td>
2251 </tr>
2252
2253 <tr>
2254 <td>GetSupportedProfiles </td>
2255 <td>M44 </td>
2256 <td> </td>
2257 <td bgcolor="#ffcccc">GAP</td>
2258 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2259 <td> </td>
2260 </tr>
2261
2262 <tr>
2263 <td>Initialize </td>
2264 <td>M44 </td>
2265 <td> </td>
2266 <td bgcolor="#ffcccc">GAP</td>
2267 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2268 <td> </td>
2269 </tr>
2270
2271 <tr>
2272 <td>GetFramesRequired </td>
2273 <td>M44 </td>
2274 <td> </td>
2275 <td bgcolor="#ffcccc">GAP</td>
2276 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2277 <td> </td>
2278 </tr>
2279
2280 <tr>
2281 <td>GetFrameCodedSize </td>
2282 <td>M44 </td>
2283 <td> </td>
2284 <td bgcolor="#ffcccc">GAP</td>
2285 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2286 <td> </td>
2287 </tr>
2288
2289 <tr>
2290 <td>GetVideoFrame </td>
2291 <td>M44 </td>
2292 <td> </td>
2293 <td bgcolor="#ffcccc">GAP</td>
2294 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2295 <td> </td>
2296 </tr>
2297
2298 <tr>
2299 <td>Encode </td>
2300 <td>M44 </td>
2301 <td> </td>
2302 <td bgcolor="#ffcccc">GAP</td>
2303 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2304 <td> </td>
2305 </tr>
2306
2307 <tr>
2308 <td>GetBitstreamBuffer </td>
2309 <td>M44 </td>
2310 <td> </td>
2311 <td bgcolor="#ffcccc">GAP</td>
2312 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2313 <td> </td>
2314 </tr>
2315
2316 <tr>
2317 <td>RecycleBitstreamBuffer </td>
2318 <td>M44 </td>
2319 <td> </td>
2320 <td bgcolor="#ffcccc">GAP</td>
2321 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2322 <td> </td>
2323 </tr>
2324
2325 <tr>
2326 <td>RequestEncodingParametersChange </td>
2327 <td>M44 </td>
2328 <td> </td>
2329 <td bgcolor="#ffcccc">GAP</td>
2330 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2331 <td> </td>
2332 </tr>
2333
2334 <tr>
2335 <td>Close </td>
2336 <td>M44 </td>
2337 <td> </td>
2338 <td bgcolor="#ffcccc">GAP</td>
2339 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2340 <td> </td>
2341 </tr>
2342
2343 </table>
2344 <h3>PPB_VideoFrame</h3>
2345 <table>
2346 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2347 <td>PPAPI Method </td>
2348 <td>State </td>
2349 <td>Assumes Threads </td>
2350 <td>Emscripten </td>
2351 <td>Web API </td>
2352 <td>Limitations </td>
2353 </tr>
2354
2355 <tr>
2356 <td>GetTimestamp </td>
2357 <td>M35 </td>
2358 <td> </td>
2359 <td bgcolor="#ffcccc">GAP</td>
2360 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2361 <td> </td>
2362 </tr>
2363
2364 <tr>
2365 <td>SetTimestamp </td>
2366 <td>M35 </td>
2367 <td> </td>
2368 <td bgcolor="#ffcccc">GAP</td>
2369 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2370 <td> </td>
2371 </tr>
2372
2373 <tr>
2374 <td>GetFormat </td>
2375 <td>M35 </td>
2376 <td> </td>
2377 <td bgcolor="#ffcccc">GAP</td>
2378 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2379 <td> </td>
2380 </tr>
2381
2382 <tr>
2383 <td>GetSize </td>
2384 <td>M35 </td>
2385 <td> </td>
2386 <td bgcolor="#ffcccc">GAP</td>
2387 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2388 <td> </td>
2389 </tr>
2390
2391 <tr>
2392 <td>GetDataBuffer </td>
2393 <td>M35 </td>
2394 <td> </td>
2395 <td bgcolor="#ffcccc">GAP</td>
2396 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2397 <td> </td>
2398 </tr>
2399
2400 <tr>
2401 <td>GetDataBufferSize </td>
2402 <td>M35 </td>
2403 <td> </td>
2404 <td bgcolor="#ffcccc">GAP</td>
2405 <td bgcolor="#ffcccc">GAP - No equivalent</td>
2406 <td> </td>
2407 </tr>
2408
2409 </table>
2410 <h3>PPB_View</h3>
2411 <table>
2412 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2413 <td>PPAPI Method </td>
2414 <td>State </td>
2415 <td>Assumes Threads </td>
2416 <td>Emscripten </td>
2417 <td>Web API </td>
2418 <td>Limitations </td>
2419 </tr>
2420
2421 <tr>
2422 <td>GetRect </td>
2423 <td>M18 </td>
2424 <td> </td>
2425 <td>embind </td>
2426 <td>Element.getBoundingClientRect </td>
2427 <td> </td>
2428 </tr>
2429
2430 <tr>
2431 <td>IsFullscreen </td>
2432 <td>M18 </td>
2433 <td> </td>
2434 <td>embind </td>
2435 <td>Document.fullScreenEnabled </td>
2436 <td>Pertains to document instead of just single element. </td>
2437 </tr>
2438
2439 <tr>
2440 <td>IsVisible </td>
2441 <td>M18 </td>
2442 <td> </td>
2443 <td>embind </td>
2444 <td>IntersectionObserver </td>
2445 <td> </td>
2446 </tr>
2447
2448 <tr>
2449 <td>IsPageVisible </td>
2450 <td>M18 </td>
2451 <td> </td>
2452 <td>embind </td>
2453 <td>document.visibilityState </td>
2454 <td> </td>
2455 </tr>
2456
2457 <tr>
2458 <td>GetClipRect </td>
2459 <td>M18 </td>
2460 <td> </td>
2461 <td>embind </td>
2462 <td>IntersectionObserver </td>
2463 <td> </td>
2464 </tr>
2465
2466 <tr>
2467 <td>GetDeviceScale </td>
2468 <td>M28 </td>
2469 <td> </td>
2470 <td>embind </td>
2471 <td>window.devicePixelRatio </td>
2472 <td> </td>
2473 </tr>
2474
2475 <tr>
2476 <td>GetCSSScale </td>
2477 <td>M28 </td>
2478 <td> </td>
2479 <td>embind </td>
2480 <td>&lt;Element&gt;.getBoundingClientRect().width / &lt;Element&gt;.offsetWi dth </td>
2481 <td> </td>
2482 </tr>
2483
2484 <tr>
2485 <td>GetScrollOffset </td>
2486 <td>M37 </td>
2487 <td> </td>
2488 <td>embind </td>
2489 <td>&lt;Element&gt;.scrollTop / &lt;Element&gt;.scrollLeft </td>
2490 <td> </td>
2491 </tr>
2492
2493 </table>
2494 <h3>PPB_WebSocket</h3>
2495 <table>
2496 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2497 <td>PPAPI Method </td>
2498 <td>State </td>
2499 <td>Assumes Threads </td>
2500 <td>Emscripten </td>
2501 <td>Web API </td>
2502 <td>Limitations </td>
2503 </tr>
2504
2505 <tr>
2506 <td>Create </td>
2507 <td>M18 </td>
2508 <td> </td>
2509 <td bgcolor="#ffcccc">GAP</td>
2510 <td>WebSocket.WebSocket </td>
2511 <td> </td>
2512 </tr>
2513
2514 <tr>
2515 <td>Connect </td>
2516 <td>M18 </td>
2517 <td> </td>
2518 <td bgcolor="#ffcccc">GAP</td>
2519 <td>WebSocket.WebSocket(url, ...)
2520 WebSocket 'open' Event </td>
2521 <td> </td>
2522 </tr>
2523
2524 <tr>
2525 <td>Close </td>
2526 <td>M18 </td>
2527 <td> </td>
2528 <td bgcolor="#ffcccc">GAP</td>
2529 <td>WebSocket.close </td>
2530 <td> </td>
2531 </tr>
2532
2533 <tr>
2534 <td>ReceiveMessage </td>
2535 <td>M18 </td>
2536 <td> </td>
2537 <td bgcolor="#ffcccc">GAP</td>
2538 <td>WebSocket 'message' Event
2539 WebSocket 'error' Event
2540 WebSocket 'close' Event </td>
2541 <td> </td>
2542 </tr>
2543
2544 <tr>
2545 <td>SendMessage </td>
2546 <td>M18 </td>
2547 <td> </td>
2548 <td bgcolor="#ffcccc">GAP</td>
2549 <td>WebSocket.send </td>
2550 <td> </td>
2551 </tr>
2552
2553 <tr>
2554 <td>GetBufferedAmount </td>
2555 <td>M18 </td>
2556 <td> </td>
2557 <td bgcolor="#ffcccc">GAP</td>
2558 <td>WebSocket.bufferedAmount </td>
2559 <td> </td>
2560 </tr>
2561
2562 <tr>
2563 <td>GetCloseCode </td>
2564 <td>M18 </td>
2565 <td> </td>
2566 <td bgcolor="#ffcccc">GAP</td>
2567 <td>CloseEvent.code </td>
2568 <td> </td>
2569 </tr>
2570
2571 <tr>
2572 <td>GetCloseReason </td>
2573 <td>M18 </td>
2574 <td> </td>
2575 <td bgcolor="#ffcccc">GAP</td>
2576 <td>CloseEvent.reason </td>
2577 <td> </td>
2578 </tr>
2579
2580 <tr>
2581 <td>GetCloseWasClean </td>
2582 <td>M18 </td>
2583 <td> </td>
2584 <td bgcolor="#ffcccc">GAP</td>
2585 <td>CloseEvent.wasClean </td>
2586 <td> </td>
2587 </tr>
2588
2589 <tr>
2590 <td>GetExtensions </td>
2591 <td>M18 </td>
2592 <td> </td>
2593 <td bgcolor="#ffcccc">GAP</td>
2594 <td>WebSocket.extensions </td>
2595 <td> </td>
2596 </tr>
2597
2598 <tr>
2599 <td>GetProtocol </td>
2600 <td>M18 </td>
2601 <td> </td>
2602 <td bgcolor="#ffcccc">GAP</td>
2603 <td>WebSocket.protocol </td>
2604 <td> </td>
2605 </tr>
2606
2607 <tr>
2608 <td>GetReadyState </td>
2609 <td>M18 </td>
2610 <td> </td>
2611 <td bgcolor="#ffcccc">GAP</td>
2612 <td>WebSocket.readyState </td>
2613 <td> </td>
2614 </tr>
2615
2616 <tr>
2617 <td>GetURL </td>
2618 <td>M18 </td>
2619 <td> </td>
2620 <td bgcolor="#ffcccc">GAP</td>
2621 <td>WebSocket.url </td>
2622 <td> </td>
2623 </tr>
2624
2625 </table>
2626 <h3>PPP_Graphics3D</h3>
2627 <table>
2628 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2629 <td>PPAPI Method </td>
2630 <td>State </td>
2631 <td>Assumes Threads </td>
2632 <td>Emscripten </td>
2633 <td>Web API </td>
2634 <td>Limitations </td>
2635 </tr>
2636
2637 <tr>
2638 <td>Graphics3DContextLost </td>
2639 <td>M15 </td>
2640 <td> </td>
2641 <td>SDL </td>
2642 <td>Canvas 'webglcontextlost' Event </td>
2643 <td> </td>
2644 </tr>
2645
2646 </table>
2647 <h3>PPP_InputEvent</h3>
2648 <table>
2649 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2650 <td>PPAPI Method </td>
2651 <td>State </td>
2652 <td>Assumes Threads </td>
2653 <td>Emscripten </td>
2654 <td>Web API </td>
2655 <td>Limitations </td>
2656 </tr>
2657
2658 <tr>
2659 <td>HandleInputEvent </td>
2660 <td>M14 </td>
2661 <td> </td>
2662 <td>SDL </td>
2663 <td>Element.addEventListener </td>
2664 <td> </td>
2665 </tr>
2666
2667 </table>
2668 <h3>PPP_Instance</h3>
2669 <table>
2670 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2671 <td>PPAPI Method </td>
2672 <td>State </td>
2673 <td>Assumes Threads </td>
2674 <td>Emscripten </td>
2675 <td>Web API </td>
2676 <td>Limitations </td>
2677 </tr>
2678
2679 <tr>
2680 <td>DidCreate </td>
2681 <td>M14 </td>
2682 <td> </td>
2683 <td>N/A </td>
2684 <td>&lt;Element&gt;[key] </td>
2685 <td>General DOM access lets you fish out tag attributes </td>
2686 </tr>
2687
2688 <tr>
2689 <td>DidDestroy </td>
2690 <td>M14 </td>
2691 <td> </td>
2692 <td>N/A </td>
2693 <td>N/A </td>
2694 <td>Not triggered for NaCl </td>
2695 </tr>
2696
2697 <tr>
2698 <td>DidChangeView </td>
2699 <td>M14/M17 </td>
2700 <td> </td>
2701 <td>N/A </td>
2702 <td>Element 'resize' Event </td>
2703 <td> </td>
2704 </tr>
2705
2706 <tr>
2707 <td>DidChangeFocus </td>
2708 <td>M14 </td>
2709 <td> </td>
2710 <td>N/A </td>
2711 <td>Element 'focus', 'focusin', 'focusout' Events </td>
2712 <td> </td>
2713 </tr>
2714
2715 <tr>
2716 <td>HandleDocumentLoad </td>
2717 <td>M14 </td>
2718 <td> </td>
2719 <td>N/A </td>
2720 <td bgcolor="#ffcccc">GAP - No way to register as a mime type handler</td>
2721 <td>NaCl modules via apps + a manifest entry can be set up to handle particu lar mime types. </td>
2722 </tr>
2723
2724 </table>
2725 <h3>PPP_MessageHandler</h3>
2726 <table>
2727 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2728 <td>PPAPI Method </td>
2729 <td>State </td>
2730 <td>Assumes Threads </td>
2731 <td>Emscripten </td>
2732 <td>Web API </td>
2733 <td>Limitations </td>
2734 </tr>
2735
2736 <tr>
2737 <td>HandleMessage </td>
2738 <td>M39 </td>
2739 <td> </td>
2740 <td>embind </td>
2741 <td>MessagePort 'message' Event
2742 Window 'message' Event </td>
2743 <td> </td>
2744 </tr>
2745
2746 <tr>
2747 <td>HandleBlockingMessage </td>
2748 <td>M39 </td>
2749 <td> </td>
2750 <td>N/A </td>
2751 <td bgcolor="#ffcccc">GAP - No direct equivalent</td>
2752 <td>Similar synchronization can be done off main thread with Atomics.wait. T his was added to support emulation of synchronous plugin APIs. </td>
2753 </tr>
2754
2755 </table>
2756 <h3>PPP_Messaging</h3>
2757 <table>
2758 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2759 <td>PPAPI Method </td>
2760 <td>State </td>
2761 <td>Assumes Threads </td>
2762 <td>Emscripten </td>
2763 <td>Web API </td>
2764 <td>Limitations </td>
2765 </tr>
2766
2767 <tr>
2768 <td>HandleMessage </td>
2769 <td>M14 </td>
2770 <td> </td>
2771 <td>embind </td>
2772 <td>MessagePort 'message' Event
2773 Window 'message' Event </td>
2774 <td> </td>
2775 </tr>
2776
2777 </table>
2778 <h3>PPP_MouseLock</h3>
2779 <table>
2780 <tr bgcolor="#77ccff" style="color:white; text-decoration: underline">
2781 <td>PPAPI Method </td>
2782 <td>State </td>
2783 <td>Assumes Threads </td>
2784 <td>Emscripten </td>
2785 <td>Web API </td>
2786 <td>Limitations </td>
2787 </tr>
2788
2789 <tr>
2790 <td>MouseLockLost </td>
2791 <td>M14 </td>
2792 <td> </td>
2793 <td>SDL </td>
2794 <td>Element 'pointerlockchange', 'pointerlockerror' Events </td>
2795 <td> </td>
2796 </tr>
2797
2798 </table>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698