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.
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.
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.
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.
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.
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 ?
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
.
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.
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.
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.
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 :
- 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 objetsFileSystemHandle
stockés dans IndexedDB, puis avoir appelé sa méthodeFileSystemHandle.requestPermission()
. Si ces conditions préalables sont remplies, la nouvelle invite à trois voies s'affiche. - L'origine doit avoir appelé la méthode
FileSystemHandle.requestPermission()
sur unFileSystemHandle
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. - 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.