Home | History | Annotate | Download | only in fileapi
      1 // Copyright 2014 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 
      5 #include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "chrome/browser/chromeos/file_system_provider/fileapi/buffering_file_stream_reader.h"
      9 #include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h"
     10 #include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_writer.h"
     11 #include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
     12 #include "content/public/browser/browser_thread.h"
     13 #include "storage/browser/blob/file_stream_reader.h"
     14 #include "storage/browser/fileapi/file_stream_writer.h"
     15 #include "storage/browser/fileapi/file_system_url.h"
     16 
     17 using content::BrowserThread;
     18 
     19 namespace chromeos {
     20 namespace file_system_provider {
     21 namespace {
     22 
     23 // Size of the stream reader internal buffer. At most this number of bytes will
     24 // be read ahead of the requested data.
     25 const int kReaderBufferSize = 512 * 1024;  // 512KB.
     26 
     27 }  // namespace
     28 
     29 BackendDelegate::BackendDelegate()
     30     : async_file_util_(new internal::ProviderAsyncFileUtil) {}
     31 
     32 BackendDelegate::~BackendDelegate() {}
     33 
     34 storage::AsyncFileUtil* BackendDelegate::GetAsyncFileUtil(
     35     storage::FileSystemType type) {
     36   DCHECK_CURRENTLY_ON(BrowserThread::IO);
     37   DCHECK_EQ(storage::kFileSystemTypeProvided, type);
     38   return async_file_util_.get();
     39 }
     40 
     41 scoped_ptr<storage::FileStreamReader> BackendDelegate::CreateFileStreamReader(
     42     const storage::FileSystemURL& url,
     43     int64 offset,
     44     int64 max_bytes_to_read,
     45     const base::Time& expected_modification_time,
     46     storage::FileSystemContext* context) {
     47   DCHECK_CURRENTLY_ON(BrowserThread::IO);
     48   DCHECK_EQ(storage::kFileSystemTypeProvided, url.type());
     49 
     50   return scoped_ptr<storage::FileStreamReader>(new BufferingFileStreamReader(
     51       scoped_ptr<storage::FileStreamReader>(new FileStreamReader(
     52           context, url, offset, expected_modification_time)),
     53       kReaderBufferSize,
     54       max_bytes_to_read));
     55 }
     56 
     57 scoped_ptr<storage::FileStreamWriter> BackendDelegate::CreateFileStreamWriter(
     58     const storage::FileSystemURL& url,
     59     int64 offset,
     60     storage::FileSystemContext* context) {
     61   DCHECK_CURRENTLY_ON(BrowserThread::IO);
     62   DCHECK_EQ(storage::kFileSystemTypeProvided, url.type());
     63 
     64   return scoped_ptr<storage::FileStreamWriter>(
     65       new FileStreamWriter(url, offset));
     66 }
     67 
     68 storage::WatcherManager* BackendDelegate::GetWatcherManager(
     69     const storage::FileSystemURL& url) {
     70   NOTIMPLEMENTED();
     71   return NULL;
     72 }
     73 
     74 void BackendDelegate::GetRedirectURLForContents(
     75     const storage::FileSystemURL& url,
     76     const storage::URLCallback& callback) {
     77   DCHECK_CURRENTLY_ON(BrowserThread::IO);
     78   DCHECK_EQ(storage::kFileSystemTypeProvided, url.type());
     79   callback.Run(GURL());
     80 }
     81 
     82 }  // namespace file_system_provider
     83 }  // namespace chromeos
     84