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. 4 5#ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_MEDIA_FILE_SYSTEM_BACKEND_H_ 6#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_MEDIA_FILE_SYSTEM_BACKEND_H_ 7 8#include <string> 9 10#include "base/callback.h" 11#include "base/files/file_path.h" 12#include "base/memory/ref_counted.h" 13#include "base/memory/scoped_ptr.h" 14#include "chrome/browser/media_galleries/media_galleries_preferences.h" 15#include "storage/browser/fileapi/file_system_backend.h" 16#include "storage/browser/fileapi/task_runner_bound_observer_list.h" 17 18namespace base { 19class SequencedTaskRunner; 20} 21 22namespace storage { 23class FileSystemURL; 24} 25 26namespace net { 27class URLRequest; 28} 29 30class MediaPathFilter; 31class DeviceMediaAsyncFileUtil; 32 33class MediaFileSystemBackend : public storage::FileSystemBackend { 34 public: 35 static const char kMediaTaskRunnerName[]; 36 37 MediaFileSystemBackend( 38 const base::FilePath& profile_path, 39 base::SequencedTaskRunner* media_task_runner); 40 virtual ~MediaFileSystemBackend(); 41 42 static bool CurrentlyOnMediaTaskRunnerThread(); 43 static scoped_refptr<base::SequencedTaskRunner> MediaTaskRunner(); 44 45 // Construct the mount point for the gallery specified by |pref_id| in 46 // the profile located in |profile_path|. 47 static std::string ConstructMountName(const base::FilePath& profile_path, 48 const std::string& extension_id, 49 MediaGalleryPrefId pref_id); 50 51 static bool AttemptAutoMountForURLRequest( 52 const net::URLRequest* url_request, 53 const storage::FileSystemURL& filesystem_url, 54 const std::string& storage_domain, 55 const base::Callback<void(base::File::Error result)>& callback); 56 57 // FileSystemBackend implementation. 58 virtual bool CanHandleType(storage::FileSystemType type) const OVERRIDE; 59 virtual void Initialize(storage::FileSystemContext* context) OVERRIDE; 60 virtual void ResolveURL(const storage::FileSystemURL& url, 61 storage::OpenFileSystemMode mode, 62 const OpenFileSystemCallback& callback) OVERRIDE; 63 virtual storage::AsyncFileUtil* GetAsyncFileUtil( 64 storage::FileSystemType type) OVERRIDE; 65 virtual storage::WatcherManager* GetWatcherManager( 66 storage::FileSystemType type) OVERRIDE; 67 virtual storage::CopyOrMoveFileValidatorFactory* 68 GetCopyOrMoveFileValidatorFactory(storage::FileSystemType type, 69 base::File::Error* error_code) OVERRIDE; 70 virtual storage::FileSystemOperation* CreateFileSystemOperation( 71 const storage::FileSystemURL& url, 72 storage::FileSystemContext* context, 73 base::File::Error* error_code) const OVERRIDE; 74 virtual bool SupportsStreaming( 75 const storage::FileSystemURL& url) const OVERRIDE; 76 virtual bool HasInplaceCopyImplementation( 77 storage::FileSystemType type) const OVERRIDE; 78 virtual scoped_ptr<storage::FileStreamReader> CreateFileStreamReader( 79 const storage::FileSystemURL& url, 80 int64 offset, 81 int64 max_bytes_to_read, 82 const base::Time& expected_modification_time, 83 storage::FileSystemContext* context) const OVERRIDE; 84 virtual scoped_ptr<storage::FileStreamWriter> CreateFileStreamWriter( 85 const storage::FileSystemURL& url, 86 int64 offset, 87 storage::FileSystemContext* context) const OVERRIDE; 88 virtual storage::FileSystemQuotaUtil* GetQuotaUtil() OVERRIDE; 89 virtual const storage::UpdateObserverList* GetUpdateObservers( 90 storage::FileSystemType type) const OVERRIDE; 91 virtual const storage::ChangeObserverList* GetChangeObservers( 92 storage::FileSystemType type) const OVERRIDE; 93 virtual const storage::AccessObserverList* GetAccessObservers( 94 storage::FileSystemType type) const OVERRIDE; 95 96 private: 97 // Store the profile path. We need this to create temporary snapshot files. 98 const base::FilePath profile_path_; 99 100 scoped_refptr<base::SequencedTaskRunner> media_task_runner_; 101 102 scoped_ptr<MediaPathFilter> media_path_filter_; 103 scoped_ptr<storage::CopyOrMoveFileValidatorFactory> 104 media_copy_or_move_file_validator_factory_; 105 106 scoped_ptr<storage::AsyncFileUtil> native_media_file_util_; 107 scoped_ptr<DeviceMediaAsyncFileUtil> device_media_async_file_util_; 108#if defined(OS_WIN) || defined(OS_MACOSX) 109 scoped_ptr<storage::AsyncFileUtil> picasa_file_util_; 110 scoped_ptr<storage::AsyncFileUtil> itunes_file_util_; 111#endif // defined(OS_WIN) || defined(OS_MACOSX) 112#if defined(OS_MACOSX) 113 scoped_ptr<storage::AsyncFileUtil> iphoto_file_util_; 114#endif // defined(OS_MACOSX) 115 116 DISALLOW_COPY_AND_ASSIGN(MediaFileSystemBackend); 117}; 118 119#endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_MEDIA_FILE_SYSTEM_BACKEND_H_ 120