Restreindre le partage de modules Wasm à la même origine

Le partage d'un module WebAssembly entre des environnements de même site sera limité à la même origine.

Un module WebAssembly (Wasm) peut être partagé entre des environnements du même site, mais multi-origines. obsolète pour autoriser les clusters d'agents aux origines à long terme. Les développeurs qui utilisent des modules Wasm une méthode doit veiller à instancier ces modules de la même origine pour continuer vous les utiliserez après Chrome 95.

Que sont les modules Wasm et comment ils fonctionnent ?

Les programmes WebAssembly sont organisés en modules, qui constituent l'unité le déploiement, le chargement et la compilation.

Dans l'exemple de code suivant, un module Wasm importé depuis https://iframe.site.example est partagé avec https://main.site.example via postMessage() Notez que ces domaines sont du même site, mais multi-origines.

Module Wasm sur https://iframe.site.example:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

À partir de Chrome 95, l'expéditeur et le destinataire doivent être de la même origine. Dans dans le cas ci-dessus, https://iframe.site.example doit être https://main.site.example ou inversement.

Pourquoi est-ce nécessaire ?

Chrome gère en interne différents documents, onglets et cadres sur d'agents selon le site. Cela signifie que les documents du même site sont traités dans le même processus (son fonctionnement varie selon les navigateurs). Récemment, Chrome nous avons commencé à les gérer dans des unités plus précises: les origines. C'est ce que nous appelons clusters d'agents selon l'origine. Cependant, du fait que cela nécessite des ressources importantes, les clusters d'agents selon l'origine n'étaient appliqués qu'à des sites Web limités, de manière heuristique.

Nous prévoyons de rendre tous les clusters d'agents selon l'origine par défaut. Afin de nous devons limiter les fonctionnalités qui nécessitent clusters d'origine:

  • (Chrome uniquement) Vous ne pouvez plus envoyer SharedArrayBuffer ou WebAssembly.Memory vers d'autres pages multi-origines sur le même site. Cette fonctionnalité est déjà appliquée depuis Chrome 92.
  • Vous ne pouvez plus envoyer de messages WebAssembly.Module vers d'autres pages multi-origines du même site via postMessage(). Cette modification est expliquée plus en détail ci-dessous.
  • Vous ne pouvez plus définir document.domain Il s'agit d'une ancienne fonctionnalité qui permet normalement aux pages multi-origines d'un même site accèdent de manière synchrone au DOM de l'autre, mais dans les clusters d'agents selon l'origine, est désactivé.

Si vous corrigez toutes les modifications ci-dessus, Chrome utilisera un agent basé sur l'origine d'autres clusters par défaut.

Pour en savoir plus sur les clusters d'agents selon l'origine, consultez Demander l'isolation des performances avec l'en-tête Origin-Agent-Cluster.

Étapes suivantes et ressources

Pour que Chrome fonctionne avec les clusters d'agents selon l'origine par défaut, définir document.domain en lecture seule. L'équipe Chrome prévoit d'apporter ce changement courant 2022.

Photo de Markus Winkler sur Désactiver