O compartilhamento de um módulo WebAssembly entre ambientes no mesmo site será restrito somente à mesma origem.
O compartilhamento de um módulo WebAssembly (Wasm) entre ambientes com o mesmo site, mas com origem cruzada, será descontinuada para permitir clusters de agente no escopo das origens de longo prazo. Os desenvolvedores que usam módulos Wasm em tais uma maneira de ter certeza de instanciar esses módulos na mesma origem para continuar depois do Chrome 95.
O que são módulos Wasm e como eles funcionam
Os programas WebAssembly são organizados em módulos, que são a unidade implantação, carregamento e compilação.
No código de exemplo a seguir, um módulo Wasm importado de
https://iframe.site.example
foi compartilhado com https://main.site.example
via
postMessage()
Observe que esses domínios têm o mesmo site, mas têm origem cruzada.
Módulo Wasm em https://iframe.site.example
:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
A partir do Chrome 95, o remetente e o destinatário precisam ter a mesma origem. Em
no caso acima, https://iframe.site.example
precisa ser
https://main.site.example
ou vice-versa.
Por que isso é necessário
O Chrome vem lidando internamente com diferentes documentos, guias e frames clusters de agente com site-key. Isso significa que os documentos do mesmo site são tratados dentro o mesmo processo (a maneira exata como isso funciona varia de acordo com o navegador). Recentemente, o Chrome e começamos a lidar com eles em unidades mais refinadas: origens. Nós os chamamos clusters de agente com origin-key. No entanto, como os recursos são caros, os clusters de agente com origin-key foram aplicados de forma heurística apenas em alguns sites.
O plano é tornar todos os clusters de agente com origin-key por padrão. Para para isso, precisamos restringir os recursos que exigem chaves de site clusters de origem:
- (somente no Chrome) Não é mais possível enviar
SharedArrayBuffer
ouWebAssembly.Memory
a outras páginas de origem cruzada no mesmo site. Isso já está em vigor desde o Chrome 92. - Não é mais possível enviar
WebAssembly.Module
objetos para outras páginas de origem cruzada no mesmo site viapostMessage()
. Essa mudança é explicado com mais detalhes abaixo. - Não é mais possível definir
document.domain
Esse é um recurso legado que normalmente permite que páginas de origem cruzada do mesmo site acessem de forma síncrona o DOM uns dos outros, mas, nos clusters de agente com origin-key, está desativado.
Ao resolver todas as mudanças acima, o Chrome passará a usar o agente com origin-key clusters por padrão.
Para saber mais sobre clusters de agente com origin-key, consulte Como solicitar isolamento de desempenho com o cabeçalho Origin-Agent-Cluster.
Próximas etapas e recursos
Para que o Chrome funcione com clusters de agente com origin-key por padrão, vamos
tornar document.domain
somente leitura. O objetivo da equipe do Chrome é promover essa mudança.
em algum momento em 2022.
- Explicação sobre os clusters de agente com origin-key
- Isolamento por padrão
- Descontinuando
document.domain
Foto de Markus Winkler ativado Abrir