Agora é possível ter acesso persistente de leitura e gravação a arquivos e pastas sem precisar conceder permissões repetidamente. Esta postagem explica como ele funciona. Antes de entrar em detalhes, vamos recapitular rapidamente o status quo e o 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 para 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 que é executado diretamente no navegador. Ao abrir o VS Code, você vai encontrar uma tela de Boas-vindas em que é possível criar um arquivo ou abrir um arquivo ou uma pasta.
Se você clicar em Abrir pasta e escolher uma das pastas no 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 do 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é que você feche a última guia da origem. Se você fechar e abrir o app de novo, o VS Code quase permite continuar de onde parou. Ao clicar em Abrir recentes, o VS Code oferece a pasta aberta anteriormente para reabertura.
Mesmo que você tenha concedido permissão de gravação à pasta antes, agora é necessário conceder acesso novamente. Isso cansa muito rápido. Antes de analisar a solução, ou seja, permissões persistentes para a API File System Access, como o VS Code consegue se lembrar das 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 conferir isso, abra o Chrome DevTools, na guia Aplicativo, navegue até a seção IndexedDB e selecione a tabela relevante vscode-filehandles-store
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 opcional
aos arquivos e pastas, evitando a necessidade de solicitar novamente o acesso 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 flags chrome://flags/#file-system-access-persistent-permission
e chrome://flags/#one-time-permission
para Ativado.
Primeiro, o novo comportamento consiste em um novo prompt de permissão triplo que permite que os usuários concedam acesso aos apps a arquivos e pastas selecionados em cada visita.
Esse novo aviso de três vias tem as seguintes opções:
- Permitir durante este período:permite que o app acesse arquivos durante a sessão atual. Isso corresponde ao comportamento atual.
- Permitir em todos os acessos:permite que o app tenha acesso indefinido, a menos que o acesso seja revogado. Depois que o app receber acesso persistente, os arquivos e pastas abertos recentemente também poderão ser acessados de forma persistente.
- Não permitir:não permite que o app acesse arquivos. Isso corresponde ao comportamento atual.
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 chave Edição de arquivos.
Ao clicar nesse ícone de inicialização, as configurações de Privacidade e segurança do app em questão são abertas. Nelas, 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 item por item clicando no ícone de lixeira. Remover o acesso por item significa que o app ainda pode ter acesso aos 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 na API File System Access para desenvolvedores. Para acionar o novo comportamento com permissões permanentes, há três maneiras com diferentes pré-condições que precisam ser atendidas:
- O usuário precisa ter concedido permissão a um arquivo ou 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 um dos objetosFileSystemHandle
armazenados do IndexedDB e chamado o métodoFileSystemHandle.requestPermission()
. Se essas pré-condições forem atendidas, o novo prompt de três vias será mostrado. - A origem precisa ter chamado o método
FileSystemHandle.requestPermission()
em umFileSystemHandle
a que o acesso foi concedido antes, mas que foi revogado automaticamente porque a guia ficou 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 pré-condições forem atendidas, o novo aviso de três opções vai aparecer. - O usuário precisa ter instalado o app. Os apps instalados mantêm as permissões automaticamente depois que o usuário concede acesso. Nesse caso, a solicitação tripla não será mostrada. Em vez disso, o app vai receber o novo comportamento por padrão.
No primeiro e no segundo caso, o aviso lista todos os objetos FileSystemHandle
que o app tinha acesso antes, não apenas aquele para o qual o método
requestPermission()
está sendo chamado. Alinhado com o
funcionamento das permissões únicas,
se o usuário negar ou dispensar a solicitação mais de três vezes, ela não será mais
acionada. Em vez disso, a solicitação de permissão comum será exibida.
Teste o novo comportamento
Se você tiver uma versão compatível do Chrome ou as flags necessárias definidas, poderá testar o novo comportamento no VS Code na Web. Abra uma pasta e conceda acesso. Em seguida, feche e reabra a guia e clique em Abrir recentes. Observação: a recarga imediata não funciona para acionar a solicitação. Todas as guias precisam ser fechadas. Escolha a pasta anterior. O novo comando vai aparecer.
Conclusões
As permissões permanentes para a API File System Access são um dos recursos mais solicitados da API, e o bug de implementação também é muito popular, com muitos desenvolvedores marcando-o com estrela. Ao colocar esse recurso nas mãos dos desenvolvedores e, principalmente, dos usuários, uma importante lacuna de recursos em comparação com apps específicos da plataforma foi fechada.
Agradecimentos
Esta postagem foi revisada por Christine Hollingsworth, Austin Sullivan e Rachel Andrew.