Autorisations persistantes pour l'API File System Access

Il est désormais possible d'obtenir un accès en lecture et en écriture permanent aux fichiers et aux dossiers sans avoir à accorder des autorisations à plusieurs reprises. Cet article explique comment cela fonctionne. Avant d'entrer dans les détails, revenons rapidement sur l'état actuel des choses et sur le problème à résoudre.

Problèmes 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 lecture et (éventuellement) en écriture. Visual Studio Code (VS Code) est une application populaire (parmi de nombreuses autres) qui utilise cette API. Il s'agit de l'IDE de Microsoft qui s'exécute directement dans le navigateur. Lorsque vous ouvrez VS Code, un écran Welcome (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 choisissez l'un des dossiers de votre disque dur, le navigateur vous demandera si vous souhaitez que VS Code ait accès à ce dossier en lecture.

Visual Studio Code demande un 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 VS Code. Si vous modifiez l'un des fichiers, le navigateur vous demandera si vous souhaitez accorder l'accès en modification au dossier.

Visual Studio Code demande un accès en modification.

Si vous l'autorisez, l'icône du fichier dans la barre d'adresse change et une petite flèche vers le bas est ajoutée, indiquant que l'application dispose des 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 une invite d'icône de barre d'adresse.

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

Visual Studio Code affichant les derniers fichiers ouverts.

Même si vous avez déjà accordé l'autorisation d'écriture pour le dossier, vous devez à présent accorder à nouveau l'accès. Cela devient rapidement fatigant. Avant de nous pencher sur 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 un 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é par le biais d'objets FileSystemHandle : objets FileSystemFileHandle pour les fichiers et 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 vérifier, ouvrez les outils pour les développeurs Chrome, accédez à la section IndexedDB de l'onglet Application, puis sélectionnez le tableau vscode-filehandles-store correspondant dans la base de données vscode-web-db.

Outils pour les développeurs Chrome pour le débogage de Visual Studio Code, montrant la section IndexedDB avec le FileSystemHandle stocké.

La nouvelle méthode : 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 d'avoir à leur demander constamment. Le nouveau comportement est visible à partir de Chrome 122. Pour le tester plus tôt, à partir de Chrome 120, activez les deux indicateurs chrome://flags/#file-system-access-persistent-permission et chrome://flags/#one-time-permission en sélectionnant Activé.

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

Visual Studio Code avec une invite d'autorisation à trois options.

Cette nouvelle invite à trois options propose les choix suivants :

  • Autoriser cette fois : l'application peut 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 obtenu un accès persistant, les fichiers et dossiers nouvellement ouverts seront é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, à laquelle les utilisateurs peuvent accéder 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 l'utilisateur clique sur cette icône de lancement, les paramètres Confidentialité et sécurité de l'application en question s'ouvrent. L'utilisateur y voit une liste d'éléments pour tous les fichiers et dossiers auxquels l'application a accès. L'accès peut être révoqué pour chaque élément en cliquant sur l'icône en forme de corbeille. Si vous supprimez l'accès à chaque élément, l'application peut toujours se voir accorder l'accès 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.

Comment 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, il existe trois méthodes avec différentes conditions préalables à remplir :

  1. L'utilisateur doit avoir accordé l'autorisation d'accéder à un fichier ou un dossier (ou à plusieurs fichiers ou dossiers) lors de sa dernière visite sur 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 dans IndexedDB, puis avoir appelé sa méthode FileSystemHandle.requestPermission(). Si ces conditions préalables sont remplies, la nouvelle invite à trois voies s'affiche.
  2. L'origine doit avoir appelé la méthode FileSystemHandle.requestPermission() sur un FileSystemHandle auquel l'accès avait été accordé auparavant, mais dont l'accès a été automatiquement révoqué, car l'onglet a été mis 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 options 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 options ne s'affiche pas. L'application adopte 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 pas seulement celui pour lequel la méthode requestPermission() est appelée. Comme pour les autorisations ponctuelles, si l'utilisateur refuse ou ferme l'invite plus de trois fois, elle ne s'affichera plus et l'invite d'autorisation habituelle 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-y l'accès, puis fermez l'onglet et rouvrez-le. Cliquez ensuite sur Ouvrir les fichiers 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. La nouvelle invite s'affiche.

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, de nombreux développeurs l'ayant marqué comme favori. En mettant cette fonctionnalité à la disposition des développeurs et, surtout, des utilisateurs, nous comblons une lacune importante par rapport aux applications spécifiques à une plate-forme.

Remerciements

Cet article a été relu par Christine Hollingsworth, Austin Sullivan et Rachel Andrew.