#include "content/browser/file_system_access/file_system_access_manager_impl.h"
#include <string>
#include <utility>
#include <vector>
#include "base/containers/span.h"
#include "base/feature_list.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/run_loop.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/bind.h"
#include "base/test/gmock_callback_support.h"
#include "base/test/gmock_expected_support.h"
#include "base/test/task_environment.h"
#include "base/test/test_future.h"
#include "base/unguessable_token.h"
#include "components/services/storage/public/cpp/buckets/bucket_id.h"
#include "components/services/storage/public/cpp/buckets/bucket_locator.h"
#include "components/services/storage/public/cpp/buckets/constants.h"
#include "content/browser/file_system_access/features.h"
#include "content/browser/file_system_access/file_system_access_data_transfer_token_impl.h"
#include "content/browser/file_system_access/file_system_access_directory_handle_impl.h"
#include "content/browser/file_system_access/file_system_access_file_handle_impl.h"
#include "content/browser/file_system_access/file_system_access_transfer_token_impl.h"
#include "content/browser/file_system_access/fixed_file_system_access_permission_grant.h"
#include "content/browser/file_system_access/mock_file_system_access_permission_context.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_web_contents_factory.h"
#include "content/test/test_render_frame_host.h"
#include "content/test/test_web_contents.h"
#include "mojo/public/c/system/data_pipe.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/data_pipe_drainer.h"
#include "mojo/public/cpp/test_support/test_utils.h"
#include "mojo/public/mojom/base/file_info.mojom.h"
#include "storage/browser/blob/blob_storage_context.h"
#include "storage/browser/file_system/external_mount_points.h"
#include "storage/browser/quota/quota_manager_proxy.h"
#include "storage/browser/test/async_file_test_helper.h"
#include "storage/browser/test/mock_quota_manager.h"
#include "storage/browser/test/mock_quota_manager_proxy.h"
#include "storage/browser/test/mock_special_storage_policy.h"
#include "storage/browser/test/quota_manager_proxy_sync.h"
#include "storage/browser/test/test_file_system_context.h"
#include "storage/common/file_system/file_system_types.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/blob/blob.mojom.h"
#include "third_party/blink/public/mojom/blob/serialized_blob.mojom.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_data_transfer_token.mojom.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom-forward.h"
#include "third_party/blink/public/mojom/file_system_access/file_system_access_manager.mojom-shared.h"
#include "ui/shell_dialogs/select_file_dialog.h"
#include "url/gurl.h"
namespace content {
namespace {
class StringDataPipeReader : public mojo::DataPipeDrainer::Client { … };
std::string ReadDataPipe(mojo::ScopedDataPipeConsumerHandle pipe) { … }
std::string ReadStringFromFileRemote(
mojo::Remote<blink::mojom::FileSystemAccessFileHandle> file_remote) { … }
constexpr char kTestMountPoint[] = …;
}
RunOnceCallback;
PermissionStatus;
HandleType;
PathType;
PathInfo;
class FileSystemAccessManagerImplTest : public testing::Test { … };
TEST_F(FileSystemAccessManagerImplTest, GetSandboxedFileSystem_CreateBucket) { … }
TEST_F(FileSystemAccessManagerImplTest, GetSandboxedFileSystem_CustomBucket) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetSandboxedFileSystem_CustomBucketInvalidPath) { … }
TEST_F(FileSystemAccessManagerImplTest, GetSandboxedFileSystem_BadBucket) { … }
TEST_F(FileSystemAccessManagerImplTest, GetSandboxedFileSystem_Permissions) { … }
TEST_F(FileSystemAccessManagerImplTest, CreateFileEntryFromPath_Permissions) { … }
TEST_F(FileSystemAccessManagerImplTest,
CreateWritableFileEntryFromPath_Permissions) { … }
TEST_F(FileSystemAccessManagerImplTest,
CreateDirectoryEntryFromPath_Permissions) { … }
TEST_F(FileSystemAccessManagerImplTest,
FileWriterSwapDeletedOnConnectionClose) { … }
TEST_F(FileSystemAccessManagerImplTest, FileWriterCloseDoesNotAbortOnDestruct) { … }
TEST_F(FileSystemAccessManagerImplTest,
FileWriterNoWritesIfConnectionLostBeforeClose) { … }
TEST_F(FileSystemAccessManagerImplTest,
FileWriterAutoCloseIfConnectionLostBeforeClose) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_SandboxedFile_DefaultBucket) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_SandboxedFile_CustomBucket) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_SandboxedDirectory_DefaultBucket) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_SandboxedDirectory_CustomBucket) { … }
TEST_F(FileSystemAccessManagerImplTest, SerializeHandle_Native_SingleFile) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_Native_SingleDirectory) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_Native_FileInsideDirectory) { … }
TEST_F(FileSystemAccessManagerImplTest,
SerializeHandle_Native_DirectoryInsideDirectory) { … }
TEST_F(FileSystemAccessManagerImplTest, SerializeHandle_ExternalFile) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_File_ValidPID) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_Directory_ValidPID) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_File_ExternalPath) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_Directory_ExternalPath) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_File_InvalidPID) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_Directory_InvalidPID) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_File_NoSensitiveAccessCheck) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_Directory_SensitivePath) { … }
TEST_F(FileSystemAccessManagerImplTest,
GetEntryFromDataTransferToken_UnrecognizedToken) { … }
TEST_F(FileSystemAccessManagerImplTest, ChooseEntries_OpenFile) { … }
TEST_F(FileSystemAccessManagerImplTest,
ChooseEntries_OpenFile_EnterpriseBlock) { … }
TEST_F(FileSystemAccessManagerImplTest, ChooseEntries_SaveFile) { … }
TEST_F(FileSystemAccessManagerImplTest, ChooseEntries_OpenDirectory) { … }
TEST_F(FileSystemAccessManagerImplTest,
ChooseEntries_OpenDirectory_EnterpriseBlock) { … }
TEST_F(FileSystemAccessManagerImplTest, ChooseEntries_InvalidStartInID) { … }
TEST_F(FileSystemAccessManagerImplTest, GetUniqueId) { … }
}