Annunci sul ritiro di (P)NaCl
Dato l'impulso del supporto di WebAssembly tra browser, prevediamo di concentrare le nostre attività di codice nativo su WebAssembly in futuro e di rimuovere il supporto di PNaCl nel quarto trimestre del 2019 (tranne per le app di Chrome). Riteniamo che l'ecosistema dinamico di WebAssembly lo renda una scelta migliore per le app web nuove ed esistenti ad alte prestazioni e che l'utilizzo di PNaCl sia sufficientemente basso da giustificarne il ritiro.
A partire da Chrome 76, PNaCl sul web aperto è stato spostato dietro una prova dell'origine, un meccanismo che consente agli sviluppatori web di registrarsi e accedere a una funzionalità non attiva per impostazione predefinita.
In genere si tratta di una nuova funzionalità proposta, ma in questo caso è una funzionalità che verrà ritirata.
Uno sviluppatore può registrarsi nella console di prova di Origin
e ricevere un token, che può essere incorporato in una pagina e attiverà la funzionalità senza che l'utente debba utilizzare un flag.
Per ulteriori dettagli, consulta la guida collegata. La prova dovrebbe durare fino a Chrome 78, circa fino a dicembre 2019.
Questa modifica non è pensata per influire su NaCl o PNaCl nelle app o nelle estensioni di Chrome e il comando "enable-nacl"
Il flag in chrome://flags può essere utilizzato anche per attivare PNaCl localmente per i test
(questo flag mantiene anche l'attuale funzione di abilitazione del NaCl "nativo" non PNaCl in qualsiasi pagina.
Di recente abbiamo anche annunciato il ritiro nel primo trimestre del 2018 delle
app di Chrome
al di fuori di ChromeOS.
Per la maggior parte dei casi d'uso di (P)NaCl consigliamo la transizione
dall'SDK NaCl a Emscripten.
La migrazione è probabilmente ragionevolmente semplice
se la tua applicazione è portabile su Linux, utilizza
SDL o API POSIX.
Sebbene il supporto diretto per le API NaCl / pepper non sia disponibile,
abbiamo tentato di elencare gli equivalenti delle API web.
Per casi di porting più complessi, contattaci all'indirizzo
native-client-discuss@googlegroups.com
Migrazione delle API
Abbiamo descritto qui lo stato delle sostituzioni della piattaforma web per ogni
delle API esposte a (P)NaCl.
Inoltre, la tabella elenca la libreria o l'opzione in Emscripten
che offre il sostituto più simile.
Prevediamo di aggiungere a WebAssembly il supporto dei thread di memoria condivisa nel 2017,
in quanto i thread sono cruciali per far leva sull'uso più interessante di (P)NaCl
d'uso diversi. Elementi della migrazione che presuppongono il supporto dei thread successivi
sono indicati di seguito. Se il controllo del flusso dell'applicazione è fortemente basato sul blocco
API, potresti anche notare che il supporto dei thread è necessario per una comoda portabilità.
Abbiamo cercato di essere precisi in questa tabella, ma non c'è dubbio che ci siano errori o omissioni.
Se ne riscontri uno, contattaci all'indirizzo
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
x |
SDL (parziale) |
GAP (parziale) - AudioWorkletNode APPROSSIMATIVAMENTE equivalente |
AudioWorkletSpec è pronto, ma AudioDeviceClient potrebbe essere più adatto a questa API. AudioDeviceClient è ancora specificato dalla community. Il worklet potrebbe non essere l'equivalente approssimativo di questa API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (recupera le impostazioni passate) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametro) |
Passato ogni volta invece di essere collegato al buffer. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametro) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: WebAudio utilizza solo valori float a 32 bit, mentre PPAPI utilizza valori int a 16 bit. |
In teoria, PPAPI supporta più dimensioni di campionamento. In pratica, supporta solo campioni a 16 bit. Sfortunatamente, gli sviluppatori hanno richiesto dimensioni di esempio a 16 bit per risparmiare sulla memoria utilizzata. La prossima versione della specifica Web Audio implementerà il supporto per i sample a 16 bit. Potrebbe essere implementata un'ottimizzazione per AudioBuffer simile a quella di Firefox utilizzando un buffer a 16 bit per l'audio proveniente da decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
CreaStereo16Bit |
|
GAP |
GAP: sono supportati solo i campioni con valori float a 32 bit |
La versione successiva delle specifiche per l'audio web implementerà il supporto per i campioni a 16 bit. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (dal costrutto predefinito) |
Un AudioContext avrà la frequenza di campionamento preferita che corrisponde per impostazione predefinita alla frequenza di campionamento effettiva del dispositivo audio hardware. |
RecommendSampleFrameCount |
|
GAP |
GAP: verrà gestito con AudioDeviceClient pianificato |
Esiste un problema aperto per consentire una dimensione specificata dall'utente, ma che è ancora in fase di definizione. Probabilmente è meglio gestire questo problema con AudioDeviceClient, che può indicare le dimensioni appropriate per l'hardware in questione. |
PPB_Console
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
L'API Console è considerata una sostituzione sufficientemente completa, a meno che non vengano sollevati casi d'uso specifici dagli sviluppatori per la funzionalità fornita da LogWithSource. Le mappe di origine di DevTools possono essere utilizzate per eseguire il debug del codice JavaScript transcompilato nella lingua di origine originale. |
PPB_Core
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
Utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== non definito |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Si può creare una sincronizzazione equivalente. |
PPB_FileIO
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
FS (parziale) |
window.chooseFileSystemEntries() |
Creare e aprire sono usati in modo diverso, ma i pezzi hanno la stessa potenza. |
Apri |
|
FS (parziale) |
window.chooseFileSystemEntries() |
|
Query |
|
FS (parziale) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModifica |
GAP (parziale): è possibile utilizzare anche Blob.type per controllare il tipo MIME. Il tipo di file system, la data di creazione e la data dell'ultimo accesso non possono essere determinati con l'API Native File System. |
Tocco |
|
FS (parziale) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Leggi |
|
FS (parziale) |
Blob.slice().arrayBuffer() |
|
Scrittura |
|
FS (parziale) |
FileSystemWriter.write() |
|
SetLength |
|
FS (parziale) |
FileSystemWriter.truncate() |
|
Svuota |
|
GAP (parziale) |
GAP (parziale): i file vengono svuotati quando viene chiamato FileSystemWrite.close() |
Questa operazione è inteso perché i file dell'API Native File System sono esposti al sistema operativo, pertanto è necessario eseguire un controllo di Navigazione sicura prima che i dati vengano mostrati al sistema operativo. |
Chiudi |
|
FS (parziale) |
FileSystemWriter.close() |
Non annulla le operazioni in attesa, ma esegue lo svuotamento del buffer di tutti i dati scritti fino a quel momento sul disco. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() o Blob.arrayBuffer() |
Consente più letture di sottointervalli in parallelo. |
PPB_FileRef
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
FS (parziale) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (parziale) |
FileSystem.type |
|
GetName |
|
FS (parziale) |
File.name |
|
GetPath |
|
FS (parziale) |
GAP (parziale) - Con l'API file system nativa, il percorso relativo di un file può essere determinato dal riferimento a una directory che contiene il file utilizzando FileSystemHandle.resolve(FileSystemHandle) |
Non è possibile determinare il percorso assoluto di un file e l'utente deve concedere l'autorizzazione per accedere alla directory contenente il file. |
GetParent |
|
FS (parziale) |
GAP (parziale) - Con l'API file system nativa, il percorso relativo di un file può essere determinato dal riferimento a una directory che contiene il file utilizzando FileSystemHandle.resolve(FileSystemHandle) |
L'utente deve concedere l'autorizzazione per accedere alla directory contenente il file. |
MakeDirectory |
|
FS (parziale) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Tocco |
|
FS (parziale) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
L'ora di modifica può essere aumentata con la scrittura. |
Elimina |
|
FS (parziale) |
FileSystemDirectoryHandle.removeEntry() |
A differenza della API PPAPI, le directory non devono essere vuote. |
Rinomina |
|
FS (parziale) |
GAP (parziale): con l'API Native File System, il file può essere scritto con il nuovo nome utilizzando una combinazione di FileSystemFileHandle.getFile() per il nuovo nome e FileSystemFileHandle.createWriter().write() con i contenuti del vecchio file. Quindi FileSystemDirectoryHandle.removeEntry() per eliminare il file precedente. |
Non esiste un'API diretta che farà questo in un solo passaggio nell'API Native File System. |
Query |
|
GAP (parziale) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModifica |
GAP (parziale) - Blob.type può essere utilizzato anche per controllare il tipo MIME. Il tipo di file system, la data di creazione e la data dell'ultimo accesso non possono essere determinati con l'API Native File System. |
ReadDirectoryEntries |
|
FS (parziale) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
FS (parziale) |
window.requestFileSystem |
L'API JS esegue entrambe le operazioni in un solo passaggio |
Apri |
|
GAP |
window.requestFileSystem |
L'API JS esegue entrambe le operazioni in un solo passaggio |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Esempio |
|
SDL |
Gamepad.* |
L'oggetto Gamepad espone un timestamp relativo a NavigationStart. Viene aggiornato quando i dati vengono ricevuti dall'hardware https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
Canvas.getContext('2d') |
|
Descrivi |
|
SDL |
Canvas.clientLarghezza + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Scorri |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (parziale): può essere implementato disegnando il canvas su se stesso con un offset, utilizzando drawImage e poi compilando il resto. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Svuota |
|
GAP |
Nessun equivalente diretto |
GAP (parziale):
alla fine del codice di disegno è sempre presente un aggiornamento implicito; è improbabile
che questo cambi. Tuttavia, la combinazione di
OffscreenCanvas
e
ImageBitmapRenderingContext
offre funzionalità simili. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (parziale) - l'esposizione di OpenGL ES 3.0 di WebGL 2.0 ed Emscripten supporta framebuffer con multicampionamento definiti dall'utente, in cui è possibile impostare tutti i parametri configurabili tramite PPAPI. |
Crea |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Nessun equivalente diretto |
GAP (parziale) -
C'è sempre uno svuotamento implicito alla fine del codice di disegno; è improbabile
per cambiare. Tuttavia, la combinazione di
OffscreenCanvas
e
ImageBitmapRenderingContext
fornisce funzionalità simili. |
PPB_ImageData
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetNativeImageDataFormat |
|
SDL |
ImageData impone l'ordine RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData impone un ordine RGBA |
|
Crea |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Descrivi |
|
SDL |
ImageData non ha mai uno stride |
|
Mappa |
|
SDL |
ImageData.data |
|
Annullamento mappatura |
|
SDL |
ImageData.data |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
RequestInputEvents |
|
SDL |
Nessun equivalente diretto |
La mancanza di questa funzionalità è probabilmente meno rilevante perché JS/Wasm viene eseguito nel thread principale e può filtrare gli eventi in modo più economico senza dover eseguire un viaggio di andata e ritorno tra i processi. |
RequestFilteringInputEvents |
|
SDL |
mouse* tasto* rotellina* tocco* composizione* Eventi |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Discendenti delle classi evento |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
"Dblclick" rispetto a "mousedown" Eventi |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP: deltaMode contiene queste informazioni, ma in modo incompleto. |
Si discute dell'implementazione di un'API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP: deltaMode contiene queste informazioni, ma in modo incompleto. |
Si discute dell'implementazione di un'API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (per capirlo da solo) |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Nessun equivalente diretto |
Questi dati possono essere potenzialmente recuperati da ComposeEvent.data. |
GetSegmentOffset |
|
GAP |
GAP - Nessun equivalente diretto |
|
GetTargetSegment |
|
GAP |
GAP - Nessun equivalente diretto |
|
GetSelection |
|
GAP |
GAP - Nessun equivalente diretto |
|
PPB_Instance
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
BindGraphics |
|
SDL |
Canvas.getContext (moot poiché l'associazione è automatica). |
|
IsFullFrame |
|
GAP |
GAP: nessun equivalente per i gestori dei tipi MIME. |
Le app NaCl possono essere registrate per gestire un particolare tipo MIME e possedere l'intero documento. |
DidCreate |
|
N/D |
<Element>[key] |
L'accesso generale al DOM ti consente di recuperare gli attributi dei tag |
DidDestroy |
|
N/D |
N/D |
Non attivato per NaCl |
DidChangeView |
|
N/D |
Evento "resize" dell'elemento |
|
DidChangeFocus |
|
N/D |
Elemento 'focus', 'focusin', 'focusout' Eventi |
|
HandleDocumentLoad |
|
N/D |
GAP - Nessun modo per registrarsi come gestore di tipi MIME |
È possibile configurare moduli NaCl tramite app e una voce manifest per gestire particolari tipi MIME. |
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Configura |
|
GAP |
getUserMedia() |
I vincoli di getUserMedia() possono fornire i valori di configurazione da utilizzare in MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP: nessun equivalente |
|
RecycleBuffer |
|
GAP |
GAP: nessun equivalente |
|
Chiudi |
|
GAP |
MediaStreamTrack.stop() |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
Acquisizione canvas |
Canvas Capture offre la possibilità di introdurre fotogrammi video in modo programmatico. |
Configura |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (parziale): la portata delle configurazioni disponibili nell'API web può essere diversa dalla PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - non equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream non può essere precaricato, quindi non eseguirà mai il buffering: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP: nessun equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP: nessun equivalente |
|
RecycleFrame |
|
GAP |
GAP: nessun equivalente |
|
Chiudi |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - Nessun equivalente |
|
PutFrame |
|
GAP |
GAP: nessun equivalente |
|
PPB_MessageLoop
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
N/D |
Per lo più disorientanti, i worker ricevono un loop di eventi implicito. |
|
GetForMainThread |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
GetCurrent |
|
N/D |
Per lo più disorientanti, i worker ricevono un loop di eventi implicito. |
|
AttachToCurrentThread |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
Esegui |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
PostWork |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
PostQuit |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
PPB_Messaging
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
PostMessage |
|
N/D |
Window.postMessage |
|
RegisterMessageHandler |
|
N/D |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/D |
Window.removeEventListener |
|
PPB_MouseCursor
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
SetCursor |
|
SDL |
Element.style.cursor |
È supportato lo stesso insieme di cursori stock.
I cursori personalizzati possono essere creati con url(..).
I cursori personalizzati dinamici possono essere creati con URI dati.
CSS3 supporta la specifica dell'hotspot. |
PPB_MouseLock
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Diversi metodi |
|
OpenGLES |
Funzionalità simile a WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
SetTextInputType |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
Alcuni sviluppatori vorrebbero poter fornire suggerimenti in questo modo o, preferibilmente, avere la possibilità di intercettare e visualizzare gli eventi/l'output dell'IME in linea all'interno di un canvas. |
UpdateCaretPosition |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
AggiornaTestoAttorno |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
new XMLHttpRequest(); |
|
Apri |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP: nessun equivalente di XMLHttpRequest |
|
GetUploadProgress |
|
embind |
Evento "progress" di XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Non ancora specificato o implementato; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
Evento "progress" di XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Non ancora specificato o implementato; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Recupera risposta.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Testo.* (Response is a Body) |
|
FinishStreamingToFile |
|
embind |
GAP - Nessun equivalente diretto |
XMLHttpRequest e Fetch sono entrambi presupposti per lo streaming in memoria, anziché direttamente in uno spazio di archiviazione. |
Chiudi |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API Fetch: AbortSignal e AbortController |
|
PPB_URLRequestInfo
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Richiesta di recupero |
|
SetProperty |
|
GAP |
GAP - Nessun equivalente diretto per XMLHttpRequest |
XMLHttpRequest non fornisce metodi diretti per limitare le richieste dei seguenti reindirizzamenti, trasmettere in streaming a un file o impostare criteri relativi a referrer o credenziali. |
|
|
embind |
Richiesta.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP: entrambi devono avere il corpo completo, non una parte. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
Caricamento in streaming di fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/D |
<form> |
Potete leggere con FileReader e Caricamento, ma è più simile ad AppendDataToBody |
PPB_URLResponseInfo
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + altri |
|
|
|
embind |
Recupera risposta.* |
|
GetBodyAsFileRef |
|
embind |
Recupera risposta (corpo) .blob() |
Presuppone il livello di archiviazione di ottimizzare il trasferimento. |
PPB_Var
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/D |
N/D |
|
VarToResource |
|
N/D |
N/D |
|
PPB_VarArray
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Get |
|
embind |
Array[i] |
|
Partenza |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mappa |
|
GAP |
GAP - Nessun equivalente diretto |
I moduli Asm.js / Wasm non sono in grado di mappare regioni di un ArrayBuffer diverse dal loro singolo heap di memoria lineare.
In futuro, la mappatura della memoria o la presenza di più ricordi potrebbe migliorare la situazione. |
Rimuovi mappa |
|
GAP |
GAP - Nessun equivalente diretto |
|
PPB_VarDictionary
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
{} |
|
Get |
|
embind |
<Object>[i] |
|
Partenza |
|
embind |
<Oggetto>[i] = x |
|
Elimina |
|
embind |
delete <oggetto>[i] |
|
HasKey |
|
embind |
x in <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Nessun valore letterale equivalente, ma può essere creato. |
PPB_VideoDecoder
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
GAP: viene gestito con l'API WebCodecs proposta utilizzando VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Inizializza |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando i parametri di inizializzazione VideoDecoder() (VideoDecoderInitParameters) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipeThrough(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. Il design attuale ricicla automaticamente le immagini e mantiene attivo il processo di decodifica. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Svuota |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. L'API si chiamerà Flush(), ma è ancora in discussione come verrà sequenziata in relazione alle chiamate di decodifica. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Reimposta |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta distruggendo l'istanza VideoDecoder e creandone una nuova. Questo non sarà efficiente come un metodo di ripristino dedicato, ma la semantica di un'API Reset() è ancora in fase di discussione. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
GAP. Verrà gestito con l'API WebCodecs proposta utilizzando VideoEncoder() |
|
GetSupportedProfiles |
|
GAP |
GAP (parziale) - navigator.mediaCapabilities.encodingInfo() |
I profili supportati devono essere controllati uno alla volta. |
Inizializza |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando i parametri di inizializzazione VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP: nessun equivalente |
È improbabile che il pool di frame utilizzato internamente dall'API Web Codecs sia esposto. |
GetFrameCodedSize |
|
GAP |
GAP: nessun equivalente |
È improbabile che il pool di frame utilizzato internamente dall'API Web Codecs sia esposto. |
GetVideoFrame |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipeThrough(VideoEncoder). In questo modo codificherebbe direttamente i dati nel flusso Leggibile invece di acquisire un singolo frame da riempire con i dati prima della codifica. |
|
Codifica |
|
GAP |
GAP: viene gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipethrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. Il design attuale passerà automaticamente attraverso il buffer di bitstream codificato che viene trasmesso. |
L'API WebCodecs attualmente presuppone che il buffer di bitstream possa essere copiato, anziché essere messo in pool, quindi non sarà necessario riciclarlo. |
RecycleBitstreamBuffer |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. Il design attuale ricicla automaticamente il buffer per mantenere in esecuzione il processo di codifica. |
È improbabile che questa situazione cambi in futuro in quanto le implicazioni sul rendimento sono minori. |
RequestEncodingParametersChange |
|
GAP |
GAP: verrà gestito dall'API Web Codecs proposta. Alcuni parametri possono essere modificati in tempo reale, mentre altri richiedono lo smantellamento del codificatore. |
|
Chiudi |
|
GAP |
GAP. Verrà gestito con l'API WebCodecs proposta utilizzando VideoEncoder.Close() |
|
PPB_VideoFrame
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetTimestamp |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
SetTimestamp |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetFormat |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetSize |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetDataBuffer |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetDataBufferSize |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
PPB_View
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Riguarda il documento anziché un singolo elemento. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
WebSocket.WebSocket |
|
Connetti |
|
GAP |
WebSocket.WebSocket(url, ...)
Evento "open" WebSocket |
|
Chiudi |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Evento "message" WebSocket
Evento "error" WebSocket
Evento "close" WebSocket |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Grafica3DContestoperso |
|
SDL |
Evento "webglcontextlost" di Canvas |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
DidCreate |
|
N/D |
<Element>[key] |
L'accesso generale al DOM ti consente di recuperare gli attributi dei tag |
DidDestroy |
|
N/D |
N/D |
Non attivato per NaCl |
DidChangeView |
|
N/D |
Evento "resize" dell'elemento |
|
DidChangeFocus |
|
N/D |
Elemento 'focus', 'focusin', 'focusout' Eventi |
|
HandleDocumentLoad |
|
N/D |
GAP: impossibile registrarsi come gestore di tipi MIME |
È possibile configurare moduli NaCl tramite app e una voce manifest per gestire particolari tipi MIME. |
PPP_MessageHandler
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
HandleMessage |
|
embind |
MessagePort "message" Evento
Finestra "message" Evento |
|
HandleBlockingMessage |
|
N/D |
GAP - Nessun equivalente diretto |
Una sincronizzazione simile può essere eseguita al di fuori del thread principale con Atomics.wait. Questa opzione è stata aggiunta per supportare l'emulazione delle API plug-in sincrono. |
PPP_Messaging
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
HandleMessage |
|
embind |
MessagePort "message" Evento
Finestra "message" Evento |
|
PPP_MouseLock
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
MouseLockLost |
|
SDL |
Elemento "pointerlockchange", "pointerlockerror" Eventi |
|
IRT
PPB_Audio
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
x |
SDL (parziale) |
GAP (parziale) - AudioWorkletNode APPROSSIMATIVAMENTE equivalente |
AudioWorkletSpec è pronto, ma AudioDeviceClient potrebbe essere più adatto a questa API. AudioDeviceClient è ancora specificato dalla community. Il worklet potrebbe non essere l'equivalente approssimativo di questa API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (recupera le impostazioni passate) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametro) |
Passato ogni volta invece di essere collegato al buffer. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parametro) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: WebAudio utilizza solo valori float a 32 bit, mentre PPAPI utilizza valori int a 16 bit. |
In teoria, PPAPI supporta più dimensioni di campionamento. In pratica, supporta solo campioni a 16 bit. Sfortunatamente, gli sviluppatori hanno richiesto dimensioni di esempio a 16 bit per risparmiare sulla memoria utilizzata. La prossima versione della specifica Web Audio implementerà il supporto per i sample a 16 bit. Potrebbe essere implementata un'ottimizzazione per AudioBuffer simile a quella di Firefox utilizzando un buffer a 16 bit per l'audio proveniente da decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
CreaStereo16Bit |
|
GAP |
GAP: sono supportati solo i campioni con valori float a 32 bit |
La versione successiva delle specifiche per l'audio web implementerà il supporto per i campioni a 16 bit. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (dal costrutto predefinito) |
Un AudioContext avrà la frequenza di campionamento preferita che corrisponde per impostazione predefinita alla frequenza di campionamento effettiva del dispositivo audio hardware. |
RecommendSampleFrameCount |
|
GAP |
GAP: verrà gestito con AudioDeviceClient pianificato |
Esiste un problema aperto per consentire una dimensione specificata dall'utente, ma che è ancora in fase di definizione. Probabilmente è meglio gestire questo problema con AudioDeviceClient, che può indicare le dimensioni appropriate per l'hardware in questione. |
PPB_Console
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Log |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
L'API Console è considerata una sostituzione sufficientemente completa, a meno che non vengano sollevati casi d'uso specifici dagli sviluppatori per la funzionalità fornita da LogWithSource. Le mappe di origine di DevTools possono essere utilizzate per eseguire il debug del codice JavaScript transcompilato nella lingua di origine originale. |
PPB_Core
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
Utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== non definito |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
Si può creare una sincronizzazione equivalente. |
PPB_FileIO
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
FS (parziale) |
window.chooseFileSystemEntries() |
Creare e aprire sono usati in modo diverso, ma i pezzi hanno la stessa potenza. |
Apri |
|
FS (parziale) |
window.chooseFileSystemEntries() |
|
Query |
|
FS (parziale) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModifica |
GAP (parziale): è possibile utilizzare anche Blob.type per controllare il tipo MIME. Il tipo di file system, la data di creazione e la data dell'ultimo accesso non possono essere determinati con l'API Native File System. |
Tocco |
|
FS (parziale) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Leggi |
|
FS (parziale) |
Blob.slice().arrayBuffer() |
|
Scrittura |
|
FS (parziale) |
FileSystemWriter.write() |
|
SetLength |
|
FS (parziale) |
FileSystemWriter.truncate() |
|
Svuota |
|
GAP (parziale) |
GAP (parziale): i file vengono svuotati quando viene chiamato FileSystemWrite.close() |
Questa operazione è inteso perché i file dell'API Native File System sono esposti al sistema operativo, pertanto è necessario eseguire un controllo di Navigazione sicura prima che i dati vengano mostrati al sistema operativo. |
Chiudi |
|
FS (parziale) |
FileSystemWriter.close() |
Non annulla le operazioni in attesa, ma esegue lo svuotamento del buffer di tutti i dati scritti fino a quel momento sul disco. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() o Blob.arrayBuffer() |
Consente più letture di sottointervalli in parallelo. |
PPB_FileRef
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
FS (parziale) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (parziale) |
FileSystem.type |
|
GetName |
|
FS (parziale) |
File.name |
|
GetPath |
|
FS (parziale) |
GAP (parziale) - Con l'API file system nativa, il percorso relativo di un file può essere determinato dal riferimento a una directory che contiene il file utilizzando FileSystemHandle.resolve(FileSystemHandle) |
Non è possibile determinare il percorso assoluto di un file e l'utente deve concedere l'autorizzazione per accedere alla directory contenente il file. |
GetParent |
|
FS (parziale) |
GAP (parziale) - Con l'API file system nativa, il percorso relativo di un file può essere determinato dal riferimento a una directory che contiene il file utilizzando FileSystemHandle.resolve(FileSystemHandle) |
L'utente deve concedere l'autorizzazione per accedere alla directory contenente il file. |
MakeDirectory |
|
FS (parziale) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Tocco |
|
FS (parziale) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
L'ora di modifica può essere aumentata con la scrittura. |
Elimina |
|
FS (parziale) |
FileSystemDirectoryHandle.removeEntry() |
A differenza della API PPAPI, le directory non devono essere vuote. |
Rinomina |
|
FS (parziale) |
GAP (parziale): con l'API Native File System, il file può essere scritto con il nuovo nome utilizzando una combinazione di FileSystemFileHandle.getFile() per il nuovo nome e FileSystemFileHandle.createWriter().write() con i contenuti del vecchio file. Quindi FileSystemDirectoryHandle.removeEntry() per eliminare il file precedente. |
Non esiste un'API diretta che farà questo in un solo passaggio nell'API Native File System. |
Query |
|
GAP (parziale) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModifica |
GAP (parziale) - Blob.type può essere utilizzato anche per controllare il tipo MIME. Il tipo di file system, la data di creazione e la data dell'ultimo accesso non possono essere determinati con l'API Native File System. |
ReadDirectoryEntries |
|
FS (parziale) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
FS (parziale) |
window.requestFileSystem |
L'API JS esegue entrambe le operazioni in un solo passaggio |
Apri |
|
GAP |
window.requestFileSystem |
L'API JS esegue entrambe le operazioni in un solo passaggio |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Esempio |
|
SDL |
Gamepad.* |
L'oggetto Gamepad espone un timestamp relativo a NavigationStart. Viene aggiornato quando i dati vengono ricevuti dall'hardware https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
Canvas.getContext('2d') |
|
Descrivi |
|
SDL |
Canvas.clientLarghezza + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Scorri |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (parziale): può essere implementato disegnando il canvas su se stesso con un offset, utilizzando drawImage e poi compilando il resto. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Svuota |
|
GAP |
Nessun equivalente diretto |
GAP (parziale):
alla fine del codice di disegno è sempre presente un aggiornamento implicito; è improbabile
che questo cambi. Tuttavia, la combinazione
OffscreenCanvas
e
ImageBitmapRenderingContext
offrono funzionalità simili. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (parziale) - l'esposizione di OpenGL ES 3.0 di WebGL 2.0 ed Emscripten supporta framebuffer con multicampionamento definiti dall'utente, in cui è possibile impostare tutti i parametri configurabili tramite PPAPI. |
Crea |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Nessun equivalente diretto |
GAP (parziale) -
C'è sempre uno svuotamento implicito alla fine del codice di disegno; è improbabile
per cambiare. Tuttavia, la combinazione
OffscreenCanvas
e
ImageBitmapRenderingContext
offrono funzionalità simili. |
PPB_ImageData
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetNativeImageDataFormat |
|
SDL |
ImageData impone l'ordine RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData impone un ordine RGBA |
|
Crea |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Descrivi |
|
SDL |
ImageData non ha mai uno stride |
|
Mappa |
|
SDL |
ImageData.data |
|
Annullamento mappatura |
|
SDL |
ImageData.data |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
RequestInputEvents |
|
SDL |
Nessun equivalente diretto |
La mancanza di questa funzionalità è probabilmente meno rilevante perché JS/Wasm viene eseguito nel thread principale e può filtrare gli eventi in modo più economico senza dover eseguire un viaggio di andata e ritorno tra i processi. |
RequestFilteringInputEvents |
|
SDL |
mouse* tasto* rotellina* tocco* composizione* Eventi |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Discendenti delle classi evento |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
"Dblclick" rispetto a "mousedown" Eventi |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP: deltaMode contiene queste informazioni, ma in modo incompleto. |
Si discute dell'implementazione di un'API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP: deltaMode contiene queste informazioni, ma in modo incompleto. |
Si discute dell'implementazione di un'API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (per capirlo da solo) |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Nessun equivalente diretto |
Questi dati possono essere potenzialmente recuperati da ComposeEvent.data. |
GetSegmentOffset |
|
GAP |
GAP - Nessun equivalente diretto |
|
GetTargetSegment |
|
GAP |
GAP - Nessun equivalente diretto |
|
GetSelection |
|
GAP |
GAP - Nessun equivalente diretto |
|
PPB_Instance
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
BindGraphics |
|
SDL |
Canvas.getContext (moot poiché l'associazione è automatica). |
|
IsFullFrame |
|
GAP |
GAP: nessun equivalente per i gestori dei tipi MIME. |
Le app NaCl possono essere registrate per gestire un particolare tipo MIME e possedere l'intero documento. |
DidCreate |
|
N/D |
<Element>[key] |
L'accesso generale al DOM ti consente di recuperare gli attributi dei tag |
DidDestroy |
|
N/D |
N/D |
Non attivato per NaCl |
DidChangeView |
|
N/D |
Evento "resize" dell'elemento |
|
DidChangeFocus |
|
N/D |
Elemento 'focus', 'focusin', 'focusout' Eventi |
|
HandleDocumentLoad |
|
N/D |
GAP - Nessun modo per registrarsi come gestore di tipi MIME |
È possibile configurare moduli NaCl tramite app e una voce manifest per gestire particolari tipi MIME. |
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Configura |
|
GAP |
getUserMedia() |
I vincoli di getUserMedia() possono fornire i valori di configurazione da utilizzare in MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP: nessun equivalente |
|
RecycleBuffer |
|
GAP |
GAP: nessun equivalente |
|
Chiudi |
|
GAP |
MediaStreamTrack.stop() |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
Acquisizione canvas |
Canvas Capture offre la possibilità di introdurre fotogrammi video in modo programmatico. |
Configura |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (parziale): la portata delle configurazioni disponibili nell'API web può essere diversa dalla PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP - non equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream non può essere precaricato, quindi non eseguirà mai il buffering: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP: nessun equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP: nessun equivalente |
|
RecycleFrame |
|
GAP |
GAP: nessun equivalente |
|
Chiudi |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP - Nessun equivalente |
|
PutFrame |
|
GAP |
GAP: nessun equivalente |
|
PPB_MessageLoop
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
N/D |
Per lo più disorientanti, i worker ricevono un loop di eventi implicito. |
|
GetForMainThread |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
GetCurrent |
|
N/D |
Per lo più disorientanti, i worker ricevono un loop di eventi implicito. |
|
AttachToCurrentThread |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
Esegui |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
PostWork |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
PostQuit |
|
N/D |
Per lo più irrilevante, i worker ricevono un loop di eventi implicito. |
|
PPB_Messaging
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
PostMessage |
|
N/D |
Window.postMessage |
|
RegisterMessageHandler |
|
N/D |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/D |
Window.removeEventListener |
|
PPB_MouseCursor
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
SetCursor |
|
SDL |
Element.style.cursor |
È supportato lo stesso insieme di cursori stock.
I cursori personalizzati possono essere creati con url(..).
I cursori personalizzati dinamici possono essere creati con URI dati.
CSS3 supporta la specifica dell'hotspot. |
PPB_MouseLock
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Diversi metodi |
|
OpenGLES |
Funzionalità simile a WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
SetTextInputType |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
Alcuni sviluppatori vorrebbero poter fornire suggerimenti in questo modo o, preferibilmente, avere la possibilità di intercettare e visualizzare gli eventi/l'output dell'IME in linea all'interno di un canvas. |
UpdateCaretPosition |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
AggiornaTestoAttorno |
|
GAP |
GAP: potenziale riempito dall'API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
new XMLHttpRequest(); |
|
Apri |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP: nessun equivalente di XMLHttpRequest |
|
GetUploadProgress |
|
embind |
Evento "progress" di XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Non ancora specificato o implementato; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
Evento "progress" di XMLHttpRequest |
|
|
|
GAP |
FetchObserver |
Non ancora specificato o implementato; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Recupera risposta.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Testo.* (Response is a Body) |
|
FinishStreamingToFile |
|
embind |
GAP - Nessun equivalente diretto |
XMLHttpRequest e Fetch sono entrambi presupposti per lo streaming in memoria, anziché direttamente in uno spazio di archiviazione. |
Chiudi |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API Fetch: AbortSignal e AbortController |
|
PPB_URLRequestInfo
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Richiesta di recupero |
|
SetProperty |
|
GAP |
GAP - Nessun equivalente diretto per XMLHttpRequest |
XMLHttpRequest non fornisce metodi diretti per limitare le richieste dei seguenti reindirizzamenti, trasmettere in streaming a un file o impostare criteri relativi a referrer o credenziali. |
|
|
embind |
Richiesta.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP: entrambi devono avere il corpo completo, non una parte. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
Caricamento in streaming di fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/D |
<form> |
Potete leggere con FileReader e Caricamento, ma è più simile ad AppendDataToBody |
PPB_URLResponseInfo
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + altri |
|
|
|
embind |
Recupera risposta.* |
|
GetBodyAsFileRef |
|
embind |
Recupera risposta (corpo) .blob() |
Presuppone il livello di archiviazione di ottimizzare il trasferimento. |
PPB_Var
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/D |
N/D |
|
VarToResource |
|
N/D |
N/D |
|
PPB_VarArray
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Get |
|
embind |
Array[i] |
|
Partenza |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mappa |
|
GAP |
GAP - Nessun equivalente diretto |
I moduli Asm.js / Wasm non sono in grado di mappare regioni di un ArrayBuffer diverse dal loro singolo heap di memoria lineare.
In futuro, la mappatura della memoria o la presenza di più ricordi potrebbe migliorare la situazione. |
Rimuovi mappa |
|
GAP |
GAP - Nessun equivalente diretto |
|
PPB_VarDictionary
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
embind |
{} |
|
Get |
|
embind |
<Object>[i] |
|
Partenza |
|
embind |
<Oggetto>[i] = x |
|
Elimina |
|
embind |
delete <oggetto>[i] |
|
HasKey |
|
embind |
x in <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Nessun valore letterale equivalente, ma può essere creato. |
PPB_VideoDecoder
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
GAP: viene gestito con l'API WebCodecs proposta utilizzando VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Inizializza |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando i parametri di inizializzazione VideoDecoder() (VideoDecoderInitParameters) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipeThrough(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. Il design attuale ricicla automaticamente le immagini e mantiene attivo il processo di decodifica. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Svuota |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. L'API si chiamerà Flush(), ma è ancora in discussione come verrà sequenziata in relazione alle chiamate di decodifica. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Reimposta |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta distruggendo l'istanza VideoDecoder e creandone una nuova. Questo non sarà efficiente come un metodo di ripristino dedicato, ma la semantica di un'API Reset() è ancora in fase di discussione. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
GAP. Verrà gestito con l'API WebCodecs proposta utilizzando VideoEncoder() |
|
GetSupportedProfiles |
|
GAP |
GAP (parziale) - navigator.mediaCapabilities.encodingInfo() |
I profili supportati devono essere controllati uno alla volta. |
Inizializza |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando i parametri di inizializzazione VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP: nessun equivalente |
È improbabile che il pool di frame utilizzato internamente dall'API Web Codecs sia esposto. |
GetFrameCodedSize |
|
GAP |
GAP: nessun equivalente |
È improbabile che il pool di frame utilizzato internamente dall'API Web Codecs sia esposto. |
GetVideoFrame |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipeThrough(VideoEncoder). In questo modo codificherebbe direttamente i dati nel flusso Leggibile invece di acquisire un singolo frame da riempire con i dati prima della codifica. |
|
Codifica |
|
GAP |
GAP: viene gestito con l'API WebCodecs proposta utilizzando ReadableStream.pipethrough(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. Il design attuale passerà automaticamente attraverso il buffer di bitstream codificato che viene trasmesso. |
L'API WebCodecs attualmente presuppone che il buffer di bitstream possa essere copiato, anziché essere messo in pool, quindi non sarà necessario riciclarlo. |
RecycleBitstreamBuffer |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. Il design attuale ricicla automaticamente il buffer per mantenere in esecuzione il processo di codifica. |
È improbabile che questa situazione cambi in futuro in quanto le implicazioni sul rendimento sono minori. |
RequestEncodingParametersChange |
|
GAP |
GAP: verrà gestito dall'API Web Codecs proposta. Alcuni parametri possono essere modificati in tempo reale, mentre altri richiedono lo smantellamento del codificatore. |
|
Chiudi |
|
GAP |
GAP. Verrà gestito con l'API WebCodecs proposta utilizzando VideoEncoder.Close() |
|
PPB_VideoFrame
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetTimestamp |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
SetTimestamp |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetFormat |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetSize |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetDataBuffer |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
GetDataBufferSize |
|
GAP |
GAP: verrà gestito con l'API WebCodecs proposta. |
|
PPB_View
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Riguarda il documento anziché un singolo elemento. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
|
GAP |
WebSocket.WebSocket |
|
Connetti |
|
GAP |
WebSocket.WebSocket(url, ...)
Evento "open" WebSocket |
|
Chiudi |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Evento "message" WebSocket
Evento "error" WebSocket
Evento "close" WebSocket |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Grafica3DContestoperso |
|
SDL |
Evento "webglcontextlost" di Canvas |
|
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
DidCreate |
|
N/D |
<Element>[key] |
L'accesso generale al DOM ti consente di recuperare gli attributi dei tag |
DidDestroy |
|
N/D |
N/D |
Non attivato per NaCl |
DidChangeView |
|
N/D |
Evento "resize" dell'elemento |
|
DidChangeFocus |
|
N/D |
Elemento 'focus', 'focusin', 'focusout' Eventi |
|
HandleDocumentLoad |
|
N/D |
GAP: impossibile registrarsi come gestore di tipi MIME |
È possibile configurare moduli NaCl tramite app e una voce manifest per gestire particolari tipi MIME. |
PPP_MessageHandler
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
HandleMessage |
|
embind |
MessagePort "message" Evento
Finestra "message" Evento |
|
HandleBlockingMessage |
|
N/D |
GAP - Nessun equivalente diretto |
Una sincronizzazione simile può essere eseguita al di fuori del thread principale con Atomics.wait. Questa opzione è stata aggiunta per supportare l'emulazione delle API plug-in sincrono. |
PPP_Messaging
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
HandleMessage |
|
embind |
MessagePort "message" Evento
Finestra "message" Evento |
|
PPP_MouseLock
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
MouseLockLost |
|
SDL |
Elemento "pointerlockchange", "pointerlockerror" Eventi |
|
PPAPI (app)
PPB_HostResolver
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
Risolvi |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
GetCanonicalName |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
GetNetAddressCount |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
GetNetAddress |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
PPB_NetAddress
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
CreateFromIPv4Address |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
CreateFromIPv6Address |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
GetFamily |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
DescribeAsString |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (parziale) - Nessun equivalente diretto |
|
PPB_NetworkList
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetCount |
x |
GAP |
GAP - Nessun equivalente diretto |
|
GetName |
x |
GAP |
GAP - Nessun equivalente diretto |
|
GetType |
x |
GAP |
GAP: nessun equivalente diretto |
|
GetState |
x |
GAP |
GAP - Nessun equivalente diretto |
|
GetIpAddress |
x |
GAP |
GAP - Nessun equivalente diretto |
|
GetDisplayName |
x |
GAP |
GAP: nessun equivalente diretto |
|
GetMTU |
x |
GAP |
GAP - Nessun equivalente diretto |
|
PPB_NetworkMonitor
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
Crea |
x |
GAP |
GAP - Nessun equivalente diretto |
|
AggiornaNetworkList |
x |
GAP |
GAP - Nessun equivalente diretto |
|
PPB_NetworkProxy
Metodo PPAPI |
Assume thread |
Scritto |
API Web |
Limitazioni |
GetProxyForURL |
x |
GAP |
GAP - Nessun equivalente diretto |
|
PPB_TCPSocket e PPB_UDPSocket
Non esiste un mapping diretto 1:1 per la migrazione. Di seguito abbiamo invece descritto alcuni scenari utente e il percorso di migrazione consigliato.
Caso d'uso |
Consigli |
Condivisione schermo |
getDisplayMedia e
WebRTC (
demo)
|
Caricamento da un
server locale per ridurre al minimo l'utilizzo della larghezza di banda |
XHR, recupero, flussi, service worker, API cache |
Caricamento da un
istanza locale di un'app web / Connessione a un'istanza locale di un'app web |
WebRTC |
Chat |
WebSocket*
|
In tempo reale
comunicazione audio/video |
WebRTC |
Collaborazione |
WebSocket*
|
In tempo reale
giochi multiplayer |
WebTransport**
a meno che P2P, in questo caso WebRTC (o
WebTransport su RTCIceTransport)
|
Streaming
interattivo in tempo reale |
WebTransport**
|
Comunicazione con il server legacy |
Server proxy o middleware per la conversione del protocollo. Feedback per
bit.ly/network-api-gaps
|
*: o WebTransport in futuro
**: per verificare la disponibilità, visita la pagina chromestatus