Skip to content

Remove entries through opaque directory grants #429

Description

@wieslawsoltes

Scope

Implement FileSystemDirectoryHandle.removeEntry(name, { recursive }) over a typed opaque native directory-mutation authority.

Required browser behavior:

  • remove a regular file or empty directory when recursive is false;
  • remove a directory tree when recursive is true;
  • reject a missing child with NotFoundError and a non-empty directory without recursion with InvalidModificationError;
  • preserve WebIDL-shaped receiver, option conversion, and invalid single-component TypeError behavior;
  • map cancellation, denial, changed/stale generation, capacity, and I/O outcomes to browser-compatible errors;
  • bind each request to the calling realm/origin/profile/partition, complete exactly once, and retire it on navigation/runtime teardown.

Product dependency

Unchanged VS Code calls this operation from htmlFileSystemProvider.delete() and uses delete while implementing browser file/folder rename as copy plus removal. This is the smallest remaining generic File System Access gap on the current main branch.

Acceptance

  • pinned File System Access spec/WPT and direct Chrome oracle for file, empty directory, recursive tree, missing, non-empty, Unicode and invalid names;
  • native ABI/export/C11 and exact AppScene adapter parity;
  • origin/profile/partition security, symlink/race behavior, cancellation, stale generation, and navigation retirement;
  • 10,000 bounded broker operations and 100 lifecycle cycles with heap/RSS/FD bounds;
  • unchanged Code OSS call-site evidence for delete and rename.

Blocked by the missing native opaque removal authority tracked in SceneTech/AppScene. This issue excludes move/rename, CSS, MessagePort #288, webviews/resources #266, packaging, consolidation PR #76, and vscode-demo.

Parent: #248.

Metadata

Metadata

Assignees

No one assigned

    Labels

    vscode-oss/plannedPlanned for the AppScene/WebScene VS Code OSS integration

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions