| // Copyright 2014 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/file_system_provider/fileapi/backend_delegate.h" |
| |
| #include <memory> |
| |
| #include "chrome/browser/ash/file_system_provider/fileapi/buffering_file_stream_reader.h" |
| #include "chrome/browser/ash/file_system_provider/fileapi/buffering_file_stream_writer.h" |
| #include "chrome/browser/ash/file_system_provider/fileapi/file_stream_reader.h" |
| #include "chrome/browser/ash/file_system_provider/fileapi/file_stream_writer.h" |
| #include "chrome/browser/ash/file_system_provider/fileapi/provider_async_file_util.h" |
| #include "chrome/browser/ash/file_system_provider/fileapi/watcher_manager.h" |
| #include "chrome/browser/ash/fileapi/diversion_backend_delegate.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "storage/browser/file_system/file_stream_reader.h" |
| #include "storage/browser/file_system/file_stream_writer.h" |
| #include "storage/browser/file_system/file_system_url.h" |
| |
| using content::BrowserThread; |
| |
| namespace ash::file_system_provider { |
| namespace { |
| |
| // Size of the stream reader internal buffer. At most this number of bytes will |
| // be read ahead of the requested data. |
| const int kReaderBufferSize = 512 * 1024; // 512KB. |
| |
| // Size of the stream writer internal buffer. At most this number of bytes will |
| // be postponed for writing. |
| const int kWriterBufferSize = 512 * 1024; // 512KB. |
| |
| } // namespace |
| |
| BackendDelegate::BackendDelegate() |
| : async_file_util_(new internal::ProviderAsyncFileUtil), |
| watcher_manager_(new WatcherManager) { |
| } |
| |
| BackendDelegate::~BackendDelegate() = default; |
| |
| // static |
| std::unique_ptr<FileSystemBackendDelegate> BackendDelegate::MakeUnique() { |
| std::unique_ptr<FileSystemBackendDelegate> wrappee(new BackendDelegate()); |
| return std::make_unique<ash::DiversionBackendDelegate>(std::move(wrappee)); |
| } |
| |
| storage::AsyncFileUtil* BackendDelegate::GetAsyncFileUtil( |
| storage::FileSystemType type) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK_EQ(storage::kFileSystemTypeProvided, type); |
| return async_file_util_.get(); |
| } |
| |
| std::unique_ptr<storage::FileStreamReader> |
| BackendDelegate::CreateFileStreamReader( |
| const storage::FileSystemURL& url, |
| int64_t offset, |
| int64_t max_bytes_to_read, |
| const base::Time& expected_modification_time, |
| storage::FileSystemContext* context) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK_EQ(storage::kFileSystemTypeProvided, url.type()); |
| |
| return std::unique_ptr<storage::FileStreamReader>( |
| new BufferingFileStreamReader( |
| std::unique_ptr<storage::FileStreamReader>(new FileStreamReader( |
| context, url, offset, expected_modification_time)), |
| kReaderBufferSize, max_bytes_to_read)); |
| } |
| |
| std::unique_ptr<storage::FileStreamWriter> |
| BackendDelegate::CreateFileStreamWriter(const storage::FileSystemURL& url, |
| int64_t offset, |
| storage::FileSystemContext* context) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK_EQ(storage::kFileSystemTypeProvided, url.type()); |
| |
| return std::unique_ptr<storage::FileStreamWriter>( |
| new BufferingFileStreamWriter(std::unique_ptr<storage::FileStreamWriter>( |
| new FileStreamWriter(url, offset)), |
| kWriterBufferSize)); |
| } |
| |
| storage::WatcherManager* BackendDelegate::GetWatcherManager( |
| storage::FileSystemType type) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK_EQ(storage::kFileSystemTypeProvided, type); |
| return watcher_manager_.get(); |
| } |
| |
| } // namespace ash::file_system_provider |