Autorisations persistantes pour l'API File System Access

Il est désormais possible d'obtenir un accès en lecture et en écriture persistant aux fichiers et aux dossiers sans avoir à accorder des autorisations à plusieurs reprises. Cet article explique son fonctionnement. Avant d'entrer dans les détails, récapitulons rapidement la situation actuelle et le problème à résoudre.

Défis liés à la méthode actuelle

L'API File System Access permet aux développeurs d'accéder aux fichiers sur le disque dur local de l'utilisateur en mode lecture et (facultatif) en mode écriture. Visual Studio Code (VS Code), l'IDE de Microsoft qui s'exécute directement dans le navigateur, est une application populaire (parmi de nombreuses autres) qui utilise cette API. Lorsque vous ouvrez VS Code, l'écran Bienvenue s'affiche. Vous pouvez y créer un fichier, ou ouvrir un fichier ou un dossier existant.

Écran d'accueil de Visual Studio Code

Si vous cliquez sur Ouvrir un dossier et que vous sélectionnez l'un des dossiers de votre disque dur, le navigateur vous demande si vous souhaitez que VS Code ait un accès en lecture à ce dossier.

Visual Studio Code demande l'accès en lecture.

Une fois l'accès accordé, vous pouvez parcourir la hiérarchie des dossiers et ouvrir des fichiers dans l'éditeur de VS Code. Si vous modifiez l'un des fichiers, le navigateur vous demande si vous souhaitez accorder un accès en modification au dossier.

Visual Studio Code demande l'accès en modification.

Si vous l'autorisez, l'icône de fichier dans la barre d'adresse change et une petite flèche vers le bas est ajoutée, indiquant que l'application dispose d'autorisations de lecture et d'écriture. Pour modifier les autorisations, cliquez sur l'icône, puis sur Supprimer l'accès afin que l'application ne puisse plus modifier les fichiers.

Visual Studio Code avec l'invite de l'icône de la barre d'adresse.

L'accès dure jusqu'à ce que vous fermiez le dernier onglet de l'origine. Si vous fermez ensuite l'application et l'ouvrez à nouveau, VS Code vous permet en quelque sorte de reprendre là où vous en étiez. Lorsque vous cliquez sur Open Recent (Ouvrir les fichiers récents), VS Code propose de rouvrir le dossier précédemment ouvert.

Visual Studio Code proposant les derniers fichiers ouverts.

Toutefois, même si vous avez déjà accordé l'autorisation d'écriture au dossier, vous devez à présent accorder à nouveau l'accès. Cela devient très vite fatigant. Avant de vous plonger dans la solution, à savoir les autorisations persistantes pour l'API File System Access, comment VS Code parvient-il à se souvenir des dossiers récents ?

Visual Studio Code demande l'accès en modification après le rechargement.

Dans l'API File System Access, l'accès aux fichiers et aux dossiers est géré via des objets FileSystemHandle : des objets FileSystemFileHandle pour les fichiers et des objets FileSystemDirectoryHandle pour les dossiers (répertoires). Les deux peuvent être stockés dans IndexedDB, et c'est exactement ce que fait VS Code. Pour le voir, ouvrez les outils pour les développeurs Chrome. Dans l'onglet Application, accédez à la section IndexedDB, puis sélectionnez la table vscode-filehandles-store appropriée dans la base de données vscode-web-db.

Outils pour les développeurs Chrome débogeant Visual Studio Code, affichant la section IndexedDB avec le FileSystemHandle stocké.

Nouveau processus: ce qui change et quand

Chrome lance un nouveau comportement qui permet aux utilisateurs d'accorder un accès permanent à leurs fichiers et dossiers, ce qui évite de les inviter à le faire constamment. Le nouveau comportement peut être observé à partir de Chrome 122. Pour le tester plus tôt, à partir de Chrome 120, définissez les deux indicateurs chrome://flags/#file-system-access-persistent-permission et chrome://flags/#one-time-permission sur Enabled (Activé).

Tout d'abord, le nouveau comportement consiste en une nouvelle invite d'autorisation à trois voies qui permet aux utilisateurs d'accorder aux applications l'accès à des fichiers et dossiers sélectionnés à chaque visite.

Visual Studio Code avec invite d'autorisation à trois voies.

Cette nouvelle invite à trois options propose les options suivantes:

  • Autoriser cette fois:permet à l'application d'accéder aux fichiers pour la session en cours. (Cela correspond au comportement existant.)
  • Autoriser à chaque visite:permet à l'application d'avoir un accès illimité, sauf si l'accès est révoqué. Une fois que l'application a reçu un accès persistant, les fichiers et dossiers nouvellement ouverts sont également accessibles de manière persistante.
  • Ne pas autoriser:l'application n'a pas accès aux fichiers. (Cela correspond au comportement existant.)

Deuxièmement, le nouveau comportement implique une nouvelle section dans les paramètres du site, accessible via une icône de lancement à côté du bouton bascule Modification de fichiers.

Paramètres du site Visual Studio Code avec l'icône de modification de fichier.

Lorsque vous cliquez sur cette icône de lancement, les paramètres Confidentialité et sécurité de l'application en question s'ouvrent. L'utilisateur voit alors une liste d'éléments pour tous les fichiers et dossiers auxquels l'application a accès. Vous pouvez révoquer l'accès par article en cliquant sur l'icône en forme de corbeille. Supprimer l'accès par élément signifie que l'application peut toujours être autorisée à accéder aux fichiers en général. Pour révoquer l'accès en général, l'utilisateur peut cliquer sur l'icône dans la barre d'adresse, comme décrit précédemment.

Paramètres de confidentialité et de sécurité de Chrome pour le site vscode.dev.

Déclencher le nouveau comportement

Aucune modification n'a été apportée à l'API File System Access pour les développeurs. Pour déclencher le nouveau comportement avec des autorisations persistantes, trois méthodes sont disponibles, avec différentes conditions préalables à respecter:

  1. L'utilisateur doit avoir accordé une autorisation à un fichier ou un dossier (ou à plusieurs fichiers ou dossiers) lors de la dernière visite d'une origine, et l'application doit avoir stocké les objets FileSystemHandle correspondants dans IndexedDB. Lors de la prochaine visite de l'origine, l'application doit avoir récupéré l'un des objets FileSystemHandle stockés à partir d'IndexedDB, puis avoir appelé sa méthode FileSystemHandle.requestPermission(). Si ces conditions préalables sont remplies, la nouvelle invite à trois personnes s'affiche.
  2. L'origine doit avoir appelé la méthode FileSystemHandle.requestPermission() sur un FileSystemHandle auquel l'accès a été accordé précédemment, mais dont l'accès a été automatiquement révoqué en raison de l'exécution de l'onglet en arrière-plan pendant un certain temps. (La révocation automatique des autorisations fonctionne selon la même logique que celle décrite dans l'article Autorisations ponctuelles dans Chrome.) Si ces conditions préalables sont remplies, la nouvelle invite à trois voies s'affiche.
  3. L'utilisateur doit avoir installé l'application. Les autorisations des applications installées sont automatiquement conservées une fois que l'utilisateur a accordé l'accès. Dans ce cas, l'invite à trois voies ne s'affiche pas. L'application reçoit le nouveau comportement par défaut.

Dans le premier et le deuxième cas, l'invite liste tous les objets FileSystemHandle auxquels l'application avait précédemment accès, et non seulement celui pour lequel la méthode requestPermission() est appelée. Comme pour les autorisations ponctuelles, si l'utilisateur refuse ou ignore l'invite plus de trois fois, elle ne se déclenchera plus et l'invite d'autorisation standard s'affichera à la place.

Essayer le nouveau comportement

Si vous disposez d'une version compatible de Chrome ou si les indicateurs requis sont définis, vous pouvez tester le nouveau comportement dans VS Code sur le Web. Ouvrez un dossier et accordez l'accès, puis fermez l'onglet, rouvrez-le et cliquez sur Ouvrir les récents (notez que le rechargement immédiat ne fonctionne pas pour déclencher l'invite. Tous les onglets doivent être fermés). Sélectionnez le dossier précédent, puis la nouvelle invite s'affiche. Pour un cas de test plus réduit, consultez la démo sur l'accès au système de fichiers persistant et son code source.

Conclusions

Les autorisations persistantes pour l'API File System Access sont l'une des fonctionnalités les plus demandées de l'API. Le bug d'implémentation est également très populaire, et de nombreux développeurs l'ont ajouté à leur liste de favoris. En mettant cette fonctionnalité entre les mains des développeurs et, surtout, des utilisateurs, un écart important de fonctionnalités par rapport aux applications spécifiques à la plate-forme est désormais comblé.

Remerciements

Ce post a été examiné par Christine Hollingsworth, Austin Sullivan et Rachel Andrew.