Agora há uma maneira de ter acesso persistente de leitura e gravação a arquivos e pastas sem precisar conceder permissões repetidamente. Veja nesta postagem como esse recurso funciona. Antes de mergulhar nos detalhes, uma rápida recapitulação do status quo e do problema que está sendo resolvido.
Desafios com o método atual
A API File System Access permite que os desenvolvedores acessem arquivos no disco rígido local do usuário como leitura e (opcionalmente) gravação. Um app conhecido (entre muitos outros) que usa essa API é o Visual Studio Code (VS Code), o ambiente de desenvolvimento integrado da Microsoft executado diretamente no navegador. Ao abrir o VS Code, você recebe uma tela de boas-vindas, em que é possível criar um novo arquivo ou abrir um arquivo ou uma pasta existente.
Se você clicar em Open Folder e escolher uma das pastas no seu disco rígido, o navegador vai perguntar se você quer que o VS Code tenha acesso de visualização a essa pasta.
Depois de conceder acesso, você pode navegar pela hierarquia de pastas e abrir arquivos no editor do VS Code. Se você fizer uma modificação em qualquer um dos arquivos, o navegador vai perguntar se você quer conceder acesso de edição à pasta.
Se você permitir isso, o ícone de arquivo na barra de endereço vai mudar e uma pequena seta para baixo será adicionada, indicando que o app tem permissões de leitura e gravação. Para mudar as permissões, clique no ícone e em Remover acesso. Assim, o app não poderá mais editar arquivos.
O acesso dura até você fechar a última guia da origem. Se você fechar o app e abri-lo novamente, o tipo do VS Code permitirá continuar de onde você parou. Ao clicar em Abrir Recentes, o VS Code oferece a pasta aberta anteriormente para reabertura.
No entanto, mesmo que você já tenha concedido permissão de gravação à pasta anteriormente, agora é necessário conceder acesso novamente. Isso fica cansativo rápido demais. Antes de mergulhar na solução, ou seja, em permissões persistentes para a API File System Access, como o VS Code consegue lembrar as pastas recentes?
Na API File System Access, o acesso a arquivos e pastas é gerenciado por objetos
FileSystemHandle
:
objetos FileSystemFileHandle
para arquivos e
objetos FileSystemDirectoryHandle
para pastas (diretórios). Ambos podem ser
armazenados no IndexedDB,
e é exatamente isso que o VS Code faz. Para isso, abra o Chrome DevTools. Na guia Aplicativo, navegue até a seção "IndexedDB" e selecione a tabela vscode-filehandles-store
relevante no banco de dados vscode-web-db
.
A nova maneira: o que vai mudar e quando
O Chrome está lançando um novo comportamento para permitir que os usuários concedam acesso permanente
aos arquivos e pastas, evitando a necessidade de perguntar novamente ao usuário constantemente.
O novo comportamento pode ser observado a partir do Chrome 122. Para testar antes, a partir
do Chrome 120, alterne as duas sinalizações
chrome://flags/#file-system-access-persistent-permission
e
chrome://flags/#one-time-permission
para Ativada.
Primeiro, o novo comportamento consiste em uma nova solicitação de permissão de três vias que permite que os usuários concedam aos apps acesso a arquivos e pastas selecionados em cada visita.
Esse novo comando de três vias tem as seguintes opções:
- Permitir este tempo:permite que o app tenha acesso aos arquivos da sessão atual. Isso corresponde ao comportamento existente.
- Permitir em todos os acessos:permite que o app tenha acesso indefinido, a menos que o acesso seja revogado. Depois que o app recebe acesso persistente, os arquivos e as pastas recém-abertos também podem ser acessados de maneira permanente.
- Não permitir:não permite que o app tenha acesso aos arquivos. Isso corresponde ao comportamento existente.
Em segundo lugar, o novo comportamento envolve uma nova seção nas configurações do site, que os usuários podem acessar usando um ícone de inicialização ao lado da opção Edição de arquivos.
Esse ícone de inicialização abre as configurações de Privacidade e segurança do app em questão. Nessa página, o usuário vê uma lista de itens de todos os arquivos e pastas a que o app tem acesso. O acesso pode ser revogado por item, clicando no ícone de lixeira. Remover o acesso por item significa que o app ainda pode receber acesso a arquivos em geral. Para revogar o acesso em geral, o usuário pode clicar no ícone na barra de endereço, conforme descrito anteriormente.
Como acionar o novo comportamento
Não há mudanças para os desenvolvedores na API File System Access. Para acionar o novo comportamento com permissões persistentes, há três maneiras com diferentes condições prévias que precisam ser atendidas:
- O usuário precisa ter concedido permissão a um arquivo ou uma pasta (ou vários
arquivos ou pastas) durante a última visita a uma origem, e o app precisa ter
armazenado os objetos
FileSystemHandle
correspondentes no IndexedDB. Na próxima visita à origem, o app precisa ter recuperado qualquer um dos objetosFileSystemHandle
armazenados do IndexedDB e ter chamado o métodoFileSystemHandle.requestPermission()
. Se essas condições prévias forem atendidas, a nova solicitação de três vias será exibida. - A origem precisa ter chamado o método
FileSystemHandle.requestPermission()
em umaFileSystemHandle
para a qual o acesso foi concedido antes, mas o acesso foi revogado automaticamente porque a guia está em segundo plano por um tempo. A revogação automática de permissões funciona com base na mesma lógica descrita no artigo Permissões únicas no Chrome. Se essas condições prévias forem atendidas, a nova solicitação de três vias será exibida. - O usuário precisa ter instalado o app. Os apps instalados vão manter as permissões automaticamente assim que o usuário conceder acesso. Nesse caso, o comando de três vias não será exibido. Em vez disso, o app receberá o novo comportamento por padrão.
No primeiro e no segundo casos, o prompt lista todos os objetos FileSystemHandle
a que o app tinha acesso anteriormente, não apenas aquele a que o
método requestPermission()
está sendo chamado. De acordo com a
forma como isso funciona nas permissões únicas,
se o usuário negar ou dispensar a solicitação mais de três vezes, ela não
mais será acionada, e a solicitação de permissão normal será exibida.
Testar o novo comportamento
Se você tiver uma versão com suporte do Chrome ou as sinalizações necessárias definidas, poderá testar o novo comportamento no VS Code na Web. Abra uma pasta e conceda acesso. Em seguida, feche a guia e a reabra e clique em Abrir recente. O recarregamento imediato não funciona para acionar o prompt. Todas as guias precisam ser fechadas. Escolha a pasta anterior para exibir o novo comando. Para um caso de teste mais reduzido, confira a demonstração do Acesso ao sistema de arquivos permanente e confira o código-fonte.
Conclusões
As permissões persistentes para a API File System Access são um dos recursos mais solicitados da API, e o bug de implementação também é altamente conhecido, e muitos desenvolvedores o marcam. Ao levar esse recurso às mãos dos desenvolvedores e principalmente dos usuários, uma lacuna de recursos importante em comparação com apps específicos da plataforma agora está resolvida.
Agradecimentos
Esta postagem foi revisada por Christine Hollingsworth, Austin Sullivan e Rachel Andrew.