O compartilhamento de um módulo WebAssembly entre ambientes com o mesmo site será restrito à mesma origem.
O compartilhamento de um módulo WebAssembly (Wasm) entre ambientes com o mesmo site, mas de origem cruzada será descontinuado para permitir que os clusters de agente tenham escopo de origens a longo prazo. Os desenvolvedores que usam módulos Wasm dessa forma precisam instanciar esses módulos na mesma origem para continuar a usá-los após o Chrome 95.
O que são os módulos Wasm e como eles funcionam
Os programas WebAssembly são organizados em módulos, que são a unidade de implantação, carregamento e compilação.
No código de exemplo abaixo, um módulo Wasm importado de
https://iframe.site.example
é compartilhado com https://main.site.example
usando
postMessage()
. Esses domínios são do mesmo site, mas de origem cruzada.
Módulo do 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. No
caso acima, https://iframe.site.example
precisa ser
https://main.site.example
ou vice-versa.
Por que isso é necessário
O Chrome lida internamente com diferentes documentos, guias e frames em clusters de agente com site-key. Isso significa que documentos do mesmo site são tratados no mesmo processo. O funcionamento exato varia de acordo com o navegador. Recentemente, o Chrome começou a lidar com eles em unidades mais refinadas: as origens. Chamamos isso de clusters de agente com origin-key. No entanto, como isso custa muitos recursos, os clusters de agente com origin-key eram aplicados apenas a sites limitados de forma heurística.
O plano é tornar todos os clusters de agente com origin-key por padrão. Para isso, precisamos restringir os recursos que exigem clusters de origem inseridos no site:
- (Apenas no Chrome) Não é mais possível enviar objetos
SharedArrayBuffer
ouWebAssembly.Memory
para outras páginas de origem cruzada no mesmo site. Isso já está em vigor desde o Chrome 92. - Não é mais possível enviar objetos
WebAssembly.Module
para outras páginas de origem cruzada no mesmo site viapostMessage()
. Essa mudança é explicada 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 maneira síncrona o DOM umas das outras, mas, em clusters de agente com origin-key, ele é desativado.
Ao lidar com todas as alterações acima, o Chrome passará a usar clusters de agente com origin-key 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, tornaremos document.domain
somente leitura. A equipe do Chrome pretende implementar
essa mudança em 2022.
- Explicação sobre clusters de agente com origin-key
- Isolamento por padrão
- Descontinuando
document.domain
Foto de Markus Winkler no Unsplash (links em inglês)