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
17using content::BrowserThread;
18
19namespace chromeos {
20namespace file_system_provider {
21namespace {
22
23// Size of the stream reader internal buffer. At most this number of bytes will
24// be read ahead of the requested data.
25const int kReaderBufferSize = 512 * 1024;  // 512KB.
26
27}  // namespace
28
29BackendDelegate::BackendDelegate()
30    : async_file_util_(new internal::ProviderAsyncFileUtil) {}
31
32BackendDelegate::~BackendDelegate() {}
33
34storage::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
41scoped_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
57scoped_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
68storage::WatcherManager* BackendDelegate::GetWatcherManager(
69    const storage::FileSystemURL& url) {
70  NOTIMPLEMENTED();
71  return NULL;
72}
73
74void 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