blob: b8496d306b5c5e024b2aeed1ffa2424df999947f [file] [log] [blame] [edit]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_FILES_FILE_ANDROID_H_
#define BASE_FILES_FILE_ANDROID_H_
#include "base/android/scoped_java_ref.h"
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/types/expected.h"
namespace base::files_internal {
struct OpenAndroidFileResult {
OpenAndroidFileResult(
base::FilePath content_uri,
int fd,
base::android::ScopedJavaGlobalRef<jobject> java_parcel_file_descriptor,
bool created);
OpenAndroidFileResult(const OpenAndroidFileResult&) = delete;
OpenAndroidFileResult& operator=(const OpenAndroidFileResult&) = delete;
OpenAndroidFileResult(OpenAndroidFileResult&&);
OpenAndroidFileResult& operator=(OpenAndroidFileResult&&);
~OpenAndroidFileResult();
// The content URI of the file that was opened.
base::FilePath content_uri;
// The file descriptor. The caller gains ownership of it through the
// `java_parcel_file_descriptor` below. When it is closed (in
// `File::Close()`), the file descriptor is essentially closed.
int fd;
// The corresponding Java ParcelFileDescriptor object.
base::android::ScopedJavaGlobalRef<jobject> java_parcel_file_descriptor;
// Set to true if the file was created or truncated.
bool created;
};
// Open an android file (i.e. content URI or a virtual document path) with given
// File::Flag.
base::expected<OpenAndroidFileResult, base::File::Error> OpenAndroidFile(
const base::FilePath& path,
uint32_t flags);
} // namespace base::files_internal
#endif // BASE_FILES_FILE_ANDROID_H_