isolated_file_system_backend.cc 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "storage/browser/file_system/isolated_file_system_backend.h"
  5. #include <stdint.h>
  6. #include <memory>
  7. #include <string>
  8. #include <utility>
  9. #include "base/bind.h"
  10. #include "base/check.h"
  11. #include "base/files/file_path.h"
  12. #include "base/notreached.h"
  13. #include "base/task/sequenced_task_runner.h"
  14. #include "base/threading/thread_task_runner_handle.h"
  15. #include "storage/browser/file_system/async_file_util_adapter.h"
  16. #include "storage/browser/file_system/copy_or_move_file_validator.h"
  17. #include "storage/browser/file_system/dragged_file_util.h"
  18. #include "storage/browser/file_system/file_stream_reader.h"
  19. #include "storage/browser/file_system/file_stream_writer.h"
  20. #include "storage/browser/file_system/file_system_context.h"
  21. #include "storage/browser/file_system/file_system_operation.h"
  22. #include "storage/browser/file_system/file_system_operation_context.h"
  23. #include "storage/browser/file_system/isolated_context.h"
  24. #include "storage/browser/file_system/native_file_util.h"
  25. #include "storage/browser/file_system/transient_file_util.h"
  26. #include "storage/browser/file_system/watcher_manager.h"
  27. #include "storage/common/file_system/file_system_types.h"
  28. #include "storage/common/file_system/file_system_util.h"
  29. namespace storage {
  30. IsolatedFileSystemBackend::IsolatedFileSystemBackend(
  31. bool use_for_type_native_local,
  32. bool use_for_type_platform_app)
  33. : use_for_type_native_local_(use_for_type_native_local),
  34. use_for_type_platform_app_(use_for_type_platform_app),
  35. isolated_file_util_(std::make_unique<AsyncFileUtilAdapter>(
  36. std::make_unique<LocalFileUtil>())),
  37. dragged_file_util_(std::make_unique<AsyncFileUtilAdapter>(
  38. std::make_unique<DraggedFileUtil>())),
  39. transient_file_util_(std::make_unique<AsyncFileUtilAdapter>(
  40. std::make_unique<TransientFileUtil>())) {}
  41. IsolatedFileSystemBackend::~IsolatedFileSystemBackend() = default;
  42. bool IsolatedFileSystemBackend::CanHandleType(FileSystemType type) const {
  43. switch (type) {
  44. case kFileSystemTypeIsolated:
  45. case kFileSystemTypeDragged:
  46. case kFileSystemTypeForTransientFile:
  47. return true;
  48. case kFileSystemTypeLocal:
  49. return use_for_type_native_local_;
  50. case kFileSystemTypeLocalForPlatformApp:
  51. return use_for_type_platform_app_;
  52. default:
  53. return false;
  54. }
  55. }
  56. void IsolatedFileSystemBackend::Initialize(FileSystemContext* context) {}
  57. void IsolatedFileSystemBackend::ResolveURL(const FileSystemURL& url,
  58. OpenFileSystemMode mode,
  59. ResolveURLCallback callback) {
  60. // We never allow opening a new isolated FileSystem via usual ResolveURL.
  61. base::ThreadTaskRunnerHandle::Get()->PostTask(
  62. FROM_HERE, base::BindOnce(std::move(callback), GURL(), std::string(),
  63. base::File::FILE_ERROR_SECURITY));
  64. }
  65. AsyncFileUtil* IsolatedFileSystemBackend::GetAsyncFileUtil(
  66. FileSystemType type) {
  67. switch (type) {
  68. case kFileSystemTypeLocal:
  69. return isolated_file_util_.get();
  70. case kFileSystemTypeDragged:
  71. return dragged_file_util_.get();
  72. case kFileSystemTypeForTransientFile:
  73. return transient_file_util_.get();
  74. default:
  75. NOTREACHED();
  76. }
  77. return nullptr;
  78. }
  79. WatcherManager* IsolatedFileSystemBackend::GetWatcherManager(
  80. FileSystemType type) {
  81. return nullptr;
  82. }
  83. CopyOrMoveFileValidatorFactory*
  84. IsolatedFileSystemBackend::GetCopyOrMoveFileValidatorFactory(
  85. FileSystemType type,
  86. base::File::Error* error_code) {
  87. DCHECK(error_code);
  88. *error_code = base::File::FILE_OK;
  89. return nullptr;
  90. }
  91. std::unique_ptr<FileSystemOperation>
  92. IsolatedFileSystemBackend::CreateFileSystemOperation(
  93. const FileSystemURL& url,
  94. FileSystemContext* context,
  95. base::File::Error* error_code) const {
  96. return FileSystemOperation::Create(
  97. url, context, std::make_unique<FileSystemOperationContext>(context));
  98. }
  99. bool IsolatedFileSystemBackend::SupportsStreaming(
  100. const FileSystemURL& url) const {
  101. return false;
  102. }
  103. bool IsolatedFileSystemBackend::HasInplaceCopyImplementation(
  104. FileSystemType type) const {
  105. DCHECK(type == kFileSystemTypeLocal || type == kFileSystemTypeDragged ||
  106. type == kFileSystemTypeForTransientFile);
  107. return false;
  108. }
  109. std::unique_ptr<FileStreamReader>
  110. IsolatedFileSystemBackend::CreateFileStreamReader(
  111. const FileSystemURL& url,
  112. int64_t offset,
  113. int64_t max_bytes_to_read,
  114. const base::Time& expected_modification_time,
  115. FileSystemContext* context) const {
  116. return FileStreamReader::CreateForLocalFile(
  117. context->default_file_task_runner(), url.path(), offset,
  118. expected_modification_time);
  119. }
  120. std::unique_ptr<FileStreamWriter>
  121. IsolatedFileSystemBackend::CreateFileStreamWriter(
  122. const FileSystemURL& url,
  123. int64_t offset,
  124. FileSystemContext* context) const {
  125. return FileStreamWriter::CreateForLocalFile(
  126. context->default_file_task_runner(), url.path(), offset,
  127. FileStreamWriter::OPEN_EXISTING_FILE);
  128. }
  129. FileSystemQuotaUtil* IsolatedFileSystemBackend::GetQuotaUtil() {
  130. // No quota support.
  131. return nullptr;
  132. }
  133. const UpdateObserverList* IsolatedFileSystemBackend::GetUpdateObservers(
  134. FileSystemType type) const {
  135. return nullptr;
  136. }
  137. const ChangeObserverList* IsolatedFileSystemBackend::GetChangeObservers(
  138. FileSystemType type) const {
  139. return nullptr;
  140. }
  141. const AccessObserverList* IsolatedFileSystemBackend::GetAccessObservers(
  142. FileSystemType type) const {
  143. return nullptr;
  144. }
  145. } // namespace storage