1 // Copyright (c) 2013 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.
5 #ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_
6 #define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_
8 #include "base/files/file.h"
9 #include "base/files/file_path.h"
10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h"
13 #include "storage/browser/fileapi/async_file_util.h"
14 #include "storage/common/blob/shareable_file_reference.h"
17 class FileSystemOperationContext;
22 class FileStreamReader;
25 enum MediaFileValidationType {
26 NO_MEDIA_FILE_VALIDATION,
27 APPLY_MEDIA_FILE_VALIDATION,
30 class DeviceMediaAsyncFileUtil : public storage::AsyncFileUtil {
32 virtual ~DeviceMediaAsyncFileUtil();
34 // Returns an instance of DeviceMediaAsyncFileUtil.
35 static scoped_ptr<DeviceMediaAsyncFileUtil> Create(
36 const base::FilePath& profile_path,
37 MediaFileValidationType validation_type);
39 bool SupportsStreaming(const storage::FileSystemURL& url);
41 // AsyncFileUtil overrides.
42 virtual void CreateOrOpen(
43 scoped_ptr<storage::FileSystemOperationContext> context,
44 const storage::FileSystemURL& url,
46 const CreateOrOpenCallback& callback) OVERRIDE;
47 virtual void EnsureFileExists(
48 scoped_ptr<storage::FileSystemOperationContext> context,
49 const storage::FileSystemURL& url,
50 const EnsureFileExistsCallback& callback) OVERRIDE;
51 virtual void CreateDirectory(
52 scoped_ptr<storage::FileSystemOperationContext> context,
53 const storage::FileSystemURL& url,
56 const StatusCallback& callback) OVERRIDE;
57 virtual void GetFileInfo(
58 scoped_ptr<storage::FileSystemOperationContext> context,
59 const storage::FileSystemURL& url,
60 const GetFileInfoCallback& callback) OVERRIDE;
61 virtual void ReadDirectory(
62 scoped_ptr<storage::FileSystemOperationContext> context,
63 const storage::FileSystemURL& url,
64 const ReadDirectoryCallback& callback) OVERRIDE;
65 virtual void Touch(scoped_ptr<storage::FileSystemOperationContext> context,
66 const storage::FileSystemURL& url,
67 const base::Time& last_access_time,
68 const base::Time& last_modified_time,
69 const StatusCallback& callback) OVERRIDE;
70 virtual void Truncate(scoped_ptr<storage::FileSystemOperationContext> context,
71 const storage::FileSystemURL& url,
73 const StatusCallback& callback) OVERRIDE;
74 virtual void CopyFileLocal(
75 scoped_ptr<storage::FileSystemOperationContext> context,
76 const storage::FileSystemURL& src_url,
77 const storage::FileSystemURL& dest_url,
78 CopyOrMoveOption option,
79 const CopyFileProgressCallback& progress_callback,
80 const StatusCallback& callback) OVERRIDE;
81 virtual void MoveFileLocal(
82 scoped_ptr<storage::FileSystemOperationContext> context,
83 const storage::FileSystemURL& src_url,
84 const storage::FileSystemURL& dest_url,
85 CopyOrMoveOption option,
86 const StatusCallback& callback) OVERRIDE;
87 virtual void CopyInForeignFile(
88 scoped_ptr<storage::FileSystemOperationContext> context,
89 const base::FilePath& src_file_path,
90 const storage::FileSystemURL& dest_url,
91 const StatusCallback& callback) OVERRIDE;
92 virtual void DeleteFile(
93 scoped_ptr<storage::FileSystemOperationContext> context,
94 const storage::FileSystemURL& url,
95 const StatusCallback& callback) OVERRIDE;
96 virtual void DeleteDirectory(
97 scoped_ptr<storage::FileSystemOperationContext> context,
98 const storage::FileSystemURL& url,
99 const StatusCallback& callback) OVERRIDE;
100 virtual void DeleteRecursively(
101 scoped_ptr<storage::FileSystemOperationContext> context,
102 const storage::FileSystemURL& url,
103 const StatusCallback& callback) OVERRIDE;
104 virtual void CreateSnapshotFile(
105 scoped_ptr<storage::FileSystemOperationContext> context,
106 const storage::FileSystemURL& url,
107 const CreateSnapshotFileCallback& callback) OVERRIDE;
109 // This method is called when existing Blobs are read.
110 // |expected_modification_time| indicates the expected snapshot state of the
111 // underlying storage. The returned FileStreamReader must return an error
112 // when the state of the underlying storage changes. Any errors associated
113 // with reading this file are returned by the FileStreamReader itself.
114 virtual scoped_ptr<storage::FileStreamReader> GetFileStreamReader(
115 const storage::FileSystemURL& url,
117 const base::Time& expected_modification_time,
118 storage::FileSystemContext* context);
121 class MediaPathFilterWrapper;
123 // Use Create() to get an instance of DeviceMediaAsyncFileUtil.
124 DeviceMediaAsyncFileUtil(const base::FilePath& profile_path,
125 MediaFileValidationType validation_type);
127 // Called when GetFileInfo method call succeeds. |file_info| contains the
128 // file details of the requested url. |callback| is invoked to complete the
129 // GetFileInfo request.
130 void OnDidGetFileInfo(
131 base::SequencedTaskRunner* task_runner,
132 const base::FilePath& path,
133 const GetFileInfoCallback& callback,
134 const base::File::Info& file_info);
136 // Called when ReadDirectory method call succeeds. |callback| is invoked to
137 // complete the ReadDirectory request.
139 // If the contents of the given directory are reported in one batch, then
140 // |file_list| will have the list of all files/directories in the given
141 // directory and |has_more| will be false.
143 // If the contents of the given directory are reported in multiple chunks,
144 // |file_list| will have only a subset of all contents (the subsets reported
145 // in any two calls are disjoint), and |has_more| will be true, except for
147 void OnDidReadDirectory(
148 base::SequencedTaskRunner* task_runner,
149 const ReadDirectoryCallback& callback,
150 const EntryList& file_list,
153 bool validate_media_files() const;
156 const base::FilePath profile_path_;
158 scoped_refptr<MediaPathFilterWrapper> media_path_filter_wrapper_;
160 // For callbacks that may run after destruction.
161 base::WeakPtrFactory<DeviceMediaAsyncFileUtil> weak_ptr_factory_;
163 DISALLOW_COPY_AND_ASSIGN(DeviceMediaAsyncFileUtil);
166 #endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_