// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module network.mojom;
import "mojo/public/mojom/base/file.mojom";
import "mojo/public/mojom/base/file_error.mojom";
import "mojo/public/mojom/base/file_info.mojom";
import "mojo/public/mojom/base/file_path.mojom";
import "mojo/public/mojom/base/time.mojom";
// Flags for HttpCacheBackendFileOperations.OpenFile. Flag values must be
// aligned with base::File::Flags.
enum HttpCacheBackendOpenFileFlags {
kOpenAndRead = 0x21,
kCreateAndWrite = 0x42,
kOpenReadWriteWinShareDelete = 0x8061,
kCreateReadWriteWinShareDelete = 0x8062,
kCreateAlwaysWriteWinShareDelete = 0x8048,
kOpenReadWinShareDeleteWinSequentialScan = 0x88021,
};
// An enum representing the mode for DeleteFile function.
enum HttpCacheBackendDeleteFileMode {
// The "default" mode, meaning base::DeleteFile.
kDefault,
// Ensure that new files for the same name can be created immediately after
// deletion. Note that this is the default behavior on POSIX. On Windows
// this assumes that all the file handles for the file to be deleted are
// opened with FLAG_WIN_SHARE_DELETE.
kEnsureImmediateAvailability,
};
// File information generated by FileEnumerator.
struct FileEnumerationEntry {
mojo_base.mojom.FilePath path;
int64 size;
mojo_base.mojom.Time last_accessed;
mojo_base.mojom.Time last_modified;
};
// An interface to enumerate files in a directory.
interface FileEnumerator {
// Returns next `num_entries` files. `end` is true when we reach the end,
// and `error` is true when we see an error during traversal. Indirect
// descendants are not listed, and directories are not listed.
[Sync] GetNext(uint32 num_entries) =>
(array<FileEnumerationEntry> entries, bool end, bool error);
};
// An interface to provide file operations so that the HTTP cache works in
// a sandboxed network service.
// All the paths must be absolute paths.
interface HttpCacheBackendFileOperations {
// Creates a directory with the given path and returns whether that succeeded.
[Sync] CreateDirectory(mojo_base.mojom.FilePath path) => (bool result);
// Returns true if the given path exists on the local filesystem.
[Sync] PathExists(mojo_base.mojom.FilePath path) => (bool result);
// Returns true if the given path exists on the local filesystem and it's a
// directory.
[Sync] DirectoryExists(mojo_base.mojom.FilePath path) => (bool result);
// Opens a file with the given path and flags. Returns the opened file and
// the error information.
[Sync] OpenFile(
mojo_base.mojom.FilePath path, HttpCacheBackendOpenFileFlags flags) =>
(mojo_base.mojom.File? file, mojo_base.mojom.FileError error);
// Deletes a file with the given path and returns whether that succeeded.
[Sync] DeleteFile(mojo_base.mojom.FilePath path,
HttpCacheBackendDeleteFileMode mode) => (bool result);
// Renames a file `from_path` to `to_path`. Returns the error information.
[Sync] RenameFile(mojo_base.mojom.FilePath from_path,
mojo_base.mojom.FilePath to_path) => (mojo_base.mojom.FileError error);
// Returns information about the given path.
[Sync] GetFileInfo(
mojo_base.mojom.FilePath path) => (mojo_base.mojom.FileInfo? info);
// Enumerates files in `path`.
EnumerateFiles(
mojo_base.mojom.FilePath path, pending_receiver<FileEnumerator> receiver);
// Deletes the given directory recursively, asynchronously.
// This is done by:
// 1. Renaming the directory to another directory,
// 2. Returning the result, and
// 3. Deleting the directory.
// This means the caller won't know the result of 3.
CleanupDirectory(mojo_base.mojom.FilePath path) => (bool result);
};
// A factory interface for HttpcacheBackendFileOperations.
interface HttpCacheBackendFileOperationsFactory {
// Creates a HttpCacheBackendFileOperations.
Create(pending_receiver<HttpCacheBackendFileOperations> receiver);
};