blob: 4ea467d14cc6c812a912d92f75db22cb3080621d [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/chromeos/file_system_provider/fileapi/buffering_file_stream_reader.h"
#include "chrome/browser/chromeos/file_system_provider/fileapi/buffering_file_stream_writer.h"
#include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h"
#include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_writer.h"
#include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
#include "content/public/browser/browser_thread.h"
#include "storage/browser/blob/file_stream_reader.h"
#include "storage/browser/fileapi/file_stream_writer.h"
#include "storage/browser/fileapi/file_system_url.h"
using content::BrowserThread;
namespace chromeos {
namespace 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) {}
BackendDelegate::~BackendDelegate() {}
storage::AsyncFileUtil* BackendDelegate::GetAsyncFileUtil(
storage::FileSystemType type) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK_EQ(storage::kFileSystemTypeProvided, type);
return async_file_util_.get();
}
scoped_ptr<storage::FileStreamReader> BackendDelegate::CreateFileStreamReader(
const storage::FileSystemURL& url,
int64 offset,
int64 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 scoped_ptr<storage::FileStreamReader>(new BufferingFileStreamReader(
scoped_ptr<storage::FileStreamReader>(new FileStreamReader(
context, url, offset, expected_modification_time)),
kReaderBufferSize,
max_bytes_to_read));
}
scoped_ptr<storage::FileStreamWriter> BackendDelegate::CreateFileStreamWriter(
const storage::FileSystemURL& url,
int64 offset,
storage::FileSystemContext* context) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK_EQ(storage::kFileSystemTypeProvided, url.type());
return scoped_ptr<storage::FileStreamWriter>(new BufferingFileStreamWriter(
scoped_ptr<storage::FileStreamWriter>(new FileStreamWriter(url, offset)),
kWriterBufferSize));
}
storage::WatcherManager* BackendDelegate::GetWatcherManager(
const storage::FileSystemURL& url) {
NOTIMPLEMENTED();
return NULL;
}
void BackendDelegate::GetRedirectURLForContents(
const storage::FileSystemURL& url,
const storage::URLCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK_EQ(storage::kFileSystemTypeProvided, url.type());
callback.Run(GURL());
}
} // namespace file_system_provider
} // namespace chromeos