Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / media_galleries / fileapi / device_media_async_file_util.h
index 82f313a..ebfd6b8 100644 (file)
 #ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_
 #define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_
 
+#include "base/files/file.h"
 #include "base/files/file_path.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/platform_file.h"
-#include "webkit/browser/fileapi/async_file_util.h"
-#include "webkit/common/blob/shareable_file_reference.h"
+#include "storage/browser/fileapi/async_file_util.h"
+#include "storage/common/blob/shareable_file_reference.h"
 
-namespace base {
-class SequencedTaskRunner;
-class Time;
-}
-
-namespace fileapi {
+namespace storage {
 class FileSystemOperationContext;
 class FileSystemURL;
 }
 
-class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil {
+namespace storage {
+class FileStreamReader;
+}
+
+enum MediaFileValidationType {
+  NO_MEDIA_FILE_VALIDATION,
+  APPLY_MEDIA_FILE_VALIDATION,
+};
+
+class DeviceMediaAsyncFileUtil : public storage::AsyncFileUtil {
  public:
-  virtual ~DeviceMediaAsyncFileUtil();
+  ~DeviceMediaAsyncFileUtil() override;
+
+  // Returns an instance of DeviceMediaAsyncFileUtil.
+  static scoped_ptr<DeviceMediaAsyncFileUtil> Create(
+      const base::FilePath& profile_path,
+      MediaFileValidationType validation_type);
 
-  // Returns an instance of DeviceMediaAsyncFileUtil. Returns NULL if
-  // asynchronous operation is not supported. Callers own the returned
-  // object.
-  static DeviceMediaAsyncFileUtil* Create(const base::FilePath& profile_path);
+  bool SupportsStreaming(const storage::FileSystemURL& url);
 
   // AsyncFileUtil overrides.
-  virtual void CreateOrOpen(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      int file_flags,
-      const CreateOrOpenCallback& callback) OVERRIDE;
-  virtual void EnsureFileExists(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const EnsureFileExistsCallback& callback) OVERRIDE;
-  virtual void CreateDirectory(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      bool exclusive,
-      bool recursive,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void GetFileInfo(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const GetFileInfoCallback& callback) OVERRIDE;
-  virtual void ReadDirectory(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const ReadDirectoryCallback& callback) OVERRIDE;
-  virtual void Touch(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const base::Time& last_access_time,
-      const base::Time& last_modified_time,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void Truncate(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      int64 length,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void CopyFileLocal(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& src_url,
-      const fileapi::FileSystemURL& dest_url,
-      CopyOrMoveOption option,
-      const CopyFileProgressCallback& progress_callback,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void MoveFileLocal(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& src_url,
-      const fileapi::FileSystemURL& dest_url,
-      CopyOrMoveOption option,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void CopyInForeignFile(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
+  void CreateOrOpen(scoped_ptr<storage::FileSystemOperationContext> context,
+                    const storage::FileSystemURL& url,
+                    int file_flags,
+                    const CreateOrOpenCallback& callback) override;
+  void EnsureFileExists(scoped_ptr<storage::FileSystemOperationContext> context,
+                        const storage::FileSystemURL& url,
+                        const EnsureFileExistsCallback& callback) override;
+  void CreateDirectory(scoped_ptr<storage::FileSystemOperationContext> context,
+                       const storage::FileSystemURL& url,
+                       bool exclusive,
+                       bool recursive,
+                       const StatusCallback& callback) override;
+  void GetFileInfo(scoped_ptr<storage::FileSystemOperationContext> context,
+                   const storage::FileSystemURL& url,
+                   const GetFileInfoCallback& callback) override;
+  void ReadDirectory(scoped_ptr<storage::FileSystemOperationContext> context,
+                     const storage::FileSystemURL& url,
+                     const ReadDirectoryCallback& callback) override;
+  void Touch(scoped_ptr<storage::FileSystemOperationContext> context,
+             const storage::FileSystemURL& url,
+             const base::Time& last_access_time,
+             const base::Time& last_modified_time,
+             const StatusCallback& callback) override;
+  void Truncate(scoped_ptr<storage::FileSystemOperationContext> context,
+                const storage::FileSystemURL& url,
+                int64 length,
+                const StatusCallback& callback) override;
+  void CopyFileLocal(scoped_ptr<storage::FileSystemOperationContext> context,
+                     const storage::FileSystemURL& src_url,
+                     const storage::FileSystemURL& dest_url,
+                     CopyOrMoveOption option,
+                     const CopyFileProgressCallback& progress_callback,
+                     const StatusCallback& callback) override;
+  void MoveFileLocal(scoped_ptr<storage::FileSystemOperationContext> context,
+                     const storage::FileSystemURL& src_url,
+                     const storage::FileSystemURL& dest_url,
+                     CopyOrMoveOption option,
+                     const StatusCallback& callback) override;
+  void CopyInForeignFile(
+      scoped_ptr<storage::FileSystemOperationContext> context,
       const base::FilePath& src_file_path,
-      const fileapi::FileSystemURL& dest_url,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void DeleteFile(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void DeleteDirectory(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void DeleteRecursively(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const StatusCallback& callback) OVERRIDE;
-  virtual void CreateSnapshotFile(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const fileapi::FileSystemURL& url,
-      const CreateSnapshotFileCallback& callback) OVERRIDE;
+      const storage::FileSystemURL& dest_url,
+      const StatusCallback& callback) override;
+  void DeleteFile(scoped_ptr<storage::FileSystemOperationContext> context,
+                  const storage::FileSystemURL& url,
+                  const StatusCallback& callback) override;
+  void DeleteDirectory(scoped_ptr<storage::FileSystemOperationContext> context,
+                       const storage::FileSystemURL& url,
+                       const StatusCallback& callback) override;
+  void DeleteRecursively(
+      scoped_ptr<storage::FileSystemOperationContext> context,
+      const storage::FileSystemURL& url,
+      const StatusCallback& callback) override;
+  void CreateSnapshotFile(
+      scoped_ptr<storage::FileSystemOperationContext> context,
+      const storage::FileSystemURL& url,
+      const CreateSnapshotFileCallback& callback) override;
+
+  // This method is called when existing Blobs are read.
+  // |expected_modification_time| indicates the expected snapshot state of the
+  // underlying storage. The returned FileStreamReader must return an error
+  // when the state of the underlying storage changes. Any errors associated
+  // with reading this file are returned by the FileStreamReader itself.
+  virtual scoped_ptr<storage::FileStreamReader> GetFileStreamReader(
+      const storage::FileSystemURL& url,
+      int64 offset,
+      const base::Time& expected_modification_time,
+      storage::FileSystemContext* context);
 
  private:
+  class MediaPathFilterWrapper;
+
   // Use Create() to get an instance of DeviceMediaAsyncFileUtil.
-  explicit DeviceMediaAsyncFileUtil(const base::FilePath& profile_path);
+  DeviceMediaAsyncFileUtil(const base::FilePath& profile_path,
+                           MediaFileValidationType validation_type);
 
   // Called when GetFileInfo method call succeeds. |file_info| contains the
   // file details of the requested url. |callback| is invoked to complete the
   // GetFileInfo request.
   void OnDidGetFileInfo(
-      const AsyncFileUtil::GetFileInfoCallback& callback,
-      const base::PlatformFileInfo& file_info);
-
-  // Called when GetFileInfo method call failed to get the details of file
-  // specified by the requested url. |callback| is invoked to notify the
-  // caller about the platform file |error|.
-  void OnGetFileInfoError(
-      const AsyncFileUtil::GetFileInfoCallback& callback,
-      base::PlatformFileError error);
+      base::SequencedTaskRunner* task_runner,
+      const base::FilePath& path,
+      const GetFileInfoCallback& callback,
+      const base::File::Info& file_info);
 
   // Called when ReadDirectory method call succeeds. |callback| is invoked to
   // complete the ReadDirectory request.
@@ -131,55 +136,18 @@ class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil {
   // in any two calls are disjoint), and |has_more| will be true, except for
   // the last chunk.
   void OnDidReadDirectory(
-      const AsyncFileUtil::ReadDirectoryCallback& callback,
-      const AsyncFileUtil::EntryList& file_list,
+      base::SequencedTaskRunner* task_runner,
+      const ReadDirectoryCallback& callback,
+      const EntryList& file_list,
       bool has_more);
 
-  // Called when ReadDirectory method call failed to enumerate the directory
-  // objects. |callback| is invoked to notify the caller about the |error|
-  // that occured while reading the directory objects.
-  void OnReadDirectoryError(
-      const AsyncFileUtil::ReadDirectoryCallback& callback,
-      base::PlatformFileError error);
-
-  // Called when the snapshot file specified by the |platform_path| is
-  // successfully created. |file_info| contains the device media file details
-  // for which the snapshot file is created.
-  void OnDidCreateSnapshotFile(
-      const AsyncFileUtil::CreateSnapshotFileCallback& callback,
-      base::SequencedTaskRunner* media_task_runner,
-      const base::PlatformFileInfo& file_info,
-      const base::FilePath& platform_path);
-
-  // Called after OnDidCreateSnapshotFile finishes media check.
-  // |callback| is invoked to complete the CreateSnapshotFile request.
-  void OnDidCheckMedia(
-      const AsyncFileUtil::CreateSnapshotFileCallback& callback,
-      const base::PlatformFileInfo& file_info,
-      scoped_refptr<webkit_blob::ShareableFileReference> platform_file,
-      base::PlatformFileError error);
-
-  // Called when CreateSnapshotFile method call fails. |callback| is invoked to
-  // notify the caller about the |error|.
-  void OnCreateSnapshotFileError(
-      const AsyncFileUtil::CreateSnapshotFileCallback& callback,
-      base::PlatformFileError error);
-
-  // Called when the snapshot file specified by the |snapshot_file_path| is
-  // created to hold the contents of the url.path(). If the snapshot
-  // file is successfully created, |snapshot_file_path| will be an non-empty
-  // file path. In case of failure, |snapshot_file_path| will be an empty file
-  // path. Forwards the CreateSnapshot request to the delegate to copy the
-  // contents of url.path() to |snapshot_file_path|.
-  void OnSnapshotFileCreatedRunTask(
-      scoped_ptr<fileapi::FileSystemOperationContext> context,
-      const AsyncFileUtil::CreateSnapshotFileCallback& callback,
-      const fileapi::FileSystemURL& url,
-      base::FilePath* snapshot_file_path);
+  bool validate_media_files() const;
 
   // Profile path.
   const base::FilePath profile_path_;
 
+  scoped_refptr<MediaPathFilterWrapper> media_path_filter_wrapper_;
+
   // For callbacks that may run after destruction.
   base::WeakPtrFactory<DeviceMediaAsyncFileUtil> weak_ptr_factory_;