• Marijn Kruisselbrink's avatar
    Make the Native File System API work with special volumes on Chrome OS. · 56cd97e7
    Marijn Kruisselbrink authored
    At a high level, this enables creating handles from either local paths
    or external paths. An external path is a path that can be used as
    virtual path in a kFileSystemTypeExternal file system URL. These
    external paths are intentionally not wrapped in an isolated file system,
    as doing so would make it much harder to keep track of this virtual path,
    and we need the virtual path to be able to serialize these handles to
    IndexedDB.
    
    (local paths are still wrapped in an isolated file system, although some
    of the previous CLs that enabled not using one in this case has made
    that no longer needed either. In the future I hope to be able to
    eliminate/replace isolated file systems entirely).
    
    This adds a PathType enum/parameter to CreateFile/DirectoryEntryFromPath
    methods in NFSEntryFactory/NFSManagerImpl. This parameter makes it clear
    if the path is a local path or an external path.
    
    And changes the result FileSystemChooser returns from simply being a
    base::FilePath to being a combination of a FilePath and a PathType.
    This is then used by NFSManagerImpl to create the right type of
    FileSystemURL/entry.
    
    Currently all the permissions code still just deals with raw
    base::FilePaths without indication if a path is a virtual/external or
    local path. This shouldn't matter, since on ChromeOS (the only place
    we use external paths) these paths will never overlap anyway, but we
    might want to revisit this in the future.
    
    This could have been implemented by having FileSystemChooser return the
    appropriate FileSystemURL directly (and changing the NFSEntryFactory API
    to be in terms of FileSystemURL); that was not done because in my ideal
    end state FileSystemURL wouldn't be used anywhere in the native file
    system code. I.e. it would purely be an implementation detail, but the
    interface between the native file system code and file system backends
    wouldn't depend on it anymore. Still working out the details for that.
    
    Bug: 1093653
    Change-Id: I201703d427a5368e67b0410428f366d1dca91aa8
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354596Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
    Reviewed-by: default avatarLuciano Pacheco <lucmult@chromium.org>
    Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
    Reviewed-by: default avatarTrent Apted <tapted@chromium.org>
    Commit-Queue: Marijn Kruisselbrink <mek@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#810080}
    56cd97e7
web_launch_files_helper.cc 7.14 KB