blob: c3b989baa9d0b4e00d3d88c4d3fc4a22c7a5626b [file] [log] [blame]
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +01001// 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.
4
Ben Murdoch7dbb3d52013-07-17 14:55:54 +01005#ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_MEDIA_FILE_SYSTEM_BACKEND_H_
6#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_MEDIA_FILE_SYSTEM_BACKEND_H_
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +01007
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +01008#include "base/memory/ref_counted.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +01009#include "base/memory/scoped_ptr.h"
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010010#include "webkit/browser/fileapi/file_system_backend.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010011
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010012namespace base {
13class SequencedTaskRunner;
14}
15
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010016namespace fileapi {
17class AsyncFileUtilAdapter;
18}
19
20namespace chrome {
21
22class MediaPathFilter;
23
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010024class DeviceMediaAsyncFileUtil;
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010025
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010026class MediaFileSystemBackend : public fileapi::FileSystemBackend {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010027 public:
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010028 static const char kMediaTaskRunnerName[];
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010029
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010030 MediaFileSystemBackend(
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010031 const base::FilePath& profile_path,
32 base::SequencedTaskRunner* media_task_runner);
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010033 virtual ~MediaFileSystemBackend();
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010034
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010035 static bool CurrentlyOnMediaTaskRunnerThread();
Ben Murdocheb525c52013-07-10 11:40:50 +010036 static scoped_refptr<base::SequencedTaskRunner> MediaTaskRunner();
Torne (Richard Coles)7d4cd472013-06-19 11:58:07 +010037
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010038 // FileSystemBackend implementation.
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010039 virtual bool CanHandleType(fileapi::FileSystemType type) const OVERRIDE;
Ben Murdochbbcdd452013-07-25 10:06:34 +010040 virtual void Initialize(fileapi::FileSystemContext* context) OVERRIDE;
41 virtual void OpenFileSystem(
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010042 const GURL& origin_url,
43 fileapi::FileSystemType type,
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010044 fileapi::OpenFileSystemMode mode,
Ben Murdochbbcdd452013-07-25 10:06:34 +010045 const OpenFileSystemCallback& callback) OVERRIDE;
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010046 virtual fileapi::FileSystemFileUtil* GetFileUtil(
47 fileapi::FileSystemType type) OVERRIDE;
48 virtual fileapi::AsyncFileUtil* GetAsyncFileUtil(
49 fileapi::FileSystemType type) OVERRIDE;
50 virtual fileapi::CopyOrMoveFileValidatorFactory*
51 GetCopyOrMoveFileValidatorFactory(
52 fileapi::FileSystemType type,
53 base::PlatformFileError* error_code) OVERRIDE;
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010054 virtual fileapi::FileSystemOperation* CreateFileSystemOperation(
55 const fileapi::FileSystemURL& url,
56 fileapi::FileSystemContext* context,
57 base::PlatformFileError* error_code) const OVERRIDE;
58 virtual scoped_ptr<webkit_blob::FileStreamReader> CreateFileStreamReader(
59 const fileapi::FileSystemURL& url,
60 int64 offset,
61 const base::Time& expected_modification_time,
62 fileapi::FileSystemContext* context) const OVERRIDE;
63 virtual scoped_ptr<fileapi::FileStreamWriter> CreateFileStreamWriter(
64 const fileapi::FileSystemURL& url,
65 int64 offset,
66 fileapi::FileSystemContext* context) const OVERRIDE;
67 virtual fileapi::FileSystemQuotaUtil* GetQuotaUtil() OVERRIDE;
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010068
69 private:
70 // Store the profile path. We need this to create temporary snapshot files.
71 const base::FilePath profile_path_;
72
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010073 scoped_refptr<base::SequencedTaskRunner> media_task_runner_;
74
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010075 scoped_ptr<MediaPathFilter> media_path_filter_;
76 scoped_ptr<fileapi::CopyOrMoveFileValidatorFactory>
77 media_copy_or_move_file_validator_factory_;
78
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010079 scoped_ptr<fileapi::AsyncFileUtil> native_media_file_util_;
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010080 scoped_ptr<DeviceMediaAsyncFileUtil> device_media_async_file_util_;
Ben Murdocheb525c52013-07-10 11:40:50 +010081#if defined(OS_WIN) || defined(OS_MACOSX)
Torne (Richard Coles)90dce4d2013-05-29 14:40:03 +010082 scoped_ptr<fileapi::AsyncFileUtil> picasa_file_util_;
Torne (Richard Coles)b2df76e2013-05-13 16:52:09 +010083 scoped_ptr<fileapi::AsyncFileUtil> itunes_file_util_;
Ben Murdocheb525c52013-07-10 11:40:50 +010084#endif // defined(OS_WIN) || defined(OS_MACOSX)
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010085
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010086 DISALLOW_COPY_AND_ASSIGN(MediaFileSystemBackend);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010087};
88
89} // namespace chrome
90
Ben Murdoch7dbb3d52013-07-17 14:55:54 +010091#endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_MEDIA_FILE_SYSTEM_BACKEND_H_