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/local_discovery/storage/privet_filesystem_backend.h"
6
7 #include <string>
8
9 #include "chrome/browser/local_discovery/storage/privet_filesystem_async_util.h"
10 #include "chrome/browser/local_discovery/storage/privet_filesystem_constants.h"
11 #include "webkit/browser/fileapi/file_system_operation.h"
12 #include "webkit/browser/fileapi/file_system_url.h"
13
14 namespace local_discovery {
15
PrivetFileSystemBackend(fileapi::ExternalMountPoints * mount_points,content::BrowserContext * browser_context)16 PrivetFileSystemBackend::PrivetFileSystemBackend(
17 fileapi::ExternalMountPoints* mount_points,
18 content::BrowserContext* browser_context)
19 : mount_points_(mount_points),
20 async_util_(new PrivetFileSystemAsyncUtil(browser_context)) {
21 }
22
~PrivetFileSystemBackend()23 PrivetFileSystemBackend::~PrivetFileSystemBackend() {
24 }
25
CanHandleType(fileapi::FileSystemType type) const26 bool PrivetFileSystemBackend::CanHandleType(
27 fileapi::FileSystemType type) const {
28 return (type == fileapi::kFileSystemTypeCloudDevice);
29 }
30
Initialize(fileapi::FileSystemContext * context)31 void PrivetFileSystemBackend::Initialize(fileapi::FileSystemContext* context) {
32 mount_points_->RegisterFileSystem(
33 "privet",
34 fileapi::kFileSystemTypeCloudDevice,
35 fileapi::FileSystemMountOption(),
36 base::FilePath(kPrivetFilePath));
37 }
38
ResolveURL(const fileapi::FileSystemURL & url,fileapi::OpenFileSystemMode mode,const OpenFileSystemCallback & callback)39 void PrivetFileSystemBackend::ResolveURL(
40 const fileapi::FileSystemURL& url,
41 fileapi::OpenFileSystemMode mode,
42 const OpenFileSystemCallback& callback) {
43 // TODO(noamsml): Provide a proper root url and a proper name.
44 GURL root_url = GURL(
45 fileapi::GetExternalFileSystemRootURIString(url.origin(), std::string()));
46 callback.Run(root_url, std::string(), base::File::FILE_OK);
47 }
48
GetQuotaUtil()49 fileapi::FileSystemQuotaUtil* PrivetFileSystemBackend::GetQuotaUtil() {
50 // No quota support.
51 return NULL;
52 }
53
GetAsyncFileUtil(fileapi::FileSystemType type)54 fileapi::AsyncFileUtil* PrivetFileSystemBackend::GetAsyncFileUtil(
55 fileapi::FileSystemType type) {
56 return async_util_.get();
57 }
58
59 fileapi::CopyOrMoveFileValidatorFactory*
GetCopyOrMoveFileValidatorFactory(fileapi::FileSystemType type,base::File::Error * error_code)60 PrivetFileSystemBackend::GetCopyOrMoveFileValidatorFactory(
61 fileapi::FileSystemType type, base::File::Error* error_code) {
62 DCHECK(error_code);
63 *error_code = base::File::FILE_OK;
64 return NULL;
65 }
66
67 fileapi::FileSystemOperation*
CreateFileSystemOperation(const fileapi::FileSystemURL & url,fileapi::FileSystemContext * context,base::File::Error * error_code) const68 PrivetFileSystemBackend::CreateFileSystemOperation(
69 const fileapi::FileSystemURL& url,
70 fileapi::FileSystemContext* context,
71 base::File::Error* error_code) const {
72 return fileapi::FileSystemOperation::Create(
73 url, context,
74 make_scoped_ptr(new fileapi::FileSystemOperationContext(context)));
75 }
76
SupportsStreaming(const fileapi::FileSystemURL & url) const77 bool PrivetFileSystemBackend::SupportsStreaming(
78 const fileapi::FileSystemURL& url) const {
79 return false;
80 }
81
82 scoped_ptr<webkit_blob::FileStreamReader>
CreateFileStreamReader(const fileapi::FileSystemURL & url,int64 offset,const base::Time & expected_modification_time,fileapi::FileSystemContext * context) const83 PrivetFileSystemBackend::CreateFileStreamReader(
84 const fileapi::FileSystemURL& url,
85 int64 offset,
86 const base::Time& expected_modification_time,
87 fileapi::FileSystemContext* context) const {
88 return scoped_ptr<webkit_blob::FileStreamReader>();
89 }
90
91 scoped_ptr<fileapi::FileStreamWriter>
CreateFileStreamWriter(const fileapi::FileSystemURL & url,int64 offset,fileapi::FileSystemContext * context) const92 PrivetFileSystemBackend::CreateFileStreamWriter(
93 const fileapi::FileSystemURL& url,
94 int64 offset,
95 fileapi::FileSystemContext* context) const {
96 return scoped_ptr<fileapi::FileStreamWriter>();
97 }
98
99 } // namespace local_discovery
100