| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/media_galleries/fileapi/native_media_file_util.h" | 5 #include "chrome/browser/media_galleries/fileapi/native_media_file_util.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/files/file_enumerator.h" | 12 #include "base/files/file_enumerator.h" |
| 13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
| 14 #include "base/task_runner_util.h" | 14 #include "base/task_runner_util.h" |
| 15 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" | 15 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" |
| 16 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" |
| 17 #include "net/base/io_buffer.h" | 17 #include "net/base/io_buffer.h" |
| 18 #include "net/base/mime_sniffer.h" | 18 #include "net/base/mime_sniffer.h" |
| 19 #include "url/gurl.h" | 19 #include "url/gurl.h" |
| 20 #include "webkit/browser/fileapi/file_system_context.h" | 20 #include "storage/browser/fileapi/file_system_context.h" |
| 21 #include "webkit/browser/fileapi/file_system_operation_context.h" | 21 #include "storage/browser/fileapi/file_system_operation_context.h" |
| 22 #include "webkit/browser/fileapi/native_file_util.h" | 22 #include "storage/browser/fileapi/native_file_util.h" |
| 23 #include "webkit/common/blob/shareable_file_reference.h" | 23 #include "storage/common/blob/shareable_file_reference.h" |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 // Returns true if the current thread is capable of doing IO. | 27 // Returns true if the current thread is capable of doing IO. |
| 28 bool IsOnTaskRunnerThread(fileapi::FileSystemOperationContext* context) { | 28 bool IsOnTaskRunnerThread(storage::FileSystemOperationContext* context) { |
| 29 return context->task_runner()->RunsTasksOnCurrentThread(); | 29 return context->task_runner()->RunsTasksOnCurrentThread(); |
| 30 } | 30 } |
| 31 | 31 |
| 32 base::File::Error IsMediaHeader(const char* buf, size_t length) { | 32 base::File::Error IsMediaHeader(const char* buf, size_t length) { |
| 33 if (length == 0) | 33 if (length == 0) |
| 34 return base::File::FILE_ERROR_SECURITY; | 34 return base::File::FILE_ERROR_SECURITY; |
| 35 | 35 |
| 36 std::string mime_type; | 36 std::string mime_type; |
| 37 if (!net::SniffMimeTypeFromLocalData(buf, length, &mime_type)) | 37 if (!net::SniffMimeTypeFromLocalData(buf, length, &mime_type)) |
| 38 return base::File::FILE_ERROR_SECURITY; | 38 return base::File::FILE_ERROR_SECURITY; |
| 39 | 39 |
| 40 if (StartsWithASCII(mime_type, "image/", true) || | 40 if (StartsWithASCII(mime_type, "image/", true) || |
| 41 StartsWithASCII(mime_type, "audio/", true) || | 41 StartsWithASCII(mime_type, "audio/", true) || |
| 42 StartsWithASCII(mime_type, "video/", true) || | 42 StartsWithASCII(mime_type, "video/", true) || |
| 43 mime_type == "application/x-shockwave-flash") { | 43 mime_type == "application/x-shockwave-flash") { |
| 44 return base::File::FILE_OK; | 44 return base::File::FILE_OK; |
| 45 } | 45 } |
| 46 return base::File::FILE_ERROR_SECURITY; | 46 return base::File::FILE_ERROR_SECURITY; |
| 47 } | 47 } |
| 48 | 48 |
| 49 void HoldFileRef( | 49 void HoldFileRef( |
| 50 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) { | 50 const scoped_refptr<storage::ShareableFileReference>& file_ref) { |
| 51 } | 51 } |
| 52 | 52 |
| 53 void DidOpenSnapshot( | 53 void DidOpenSnapshot( |
| 54 const fileapi::AsyncFileUtil::CreateOrOpenCallback& callback, | 54 const storage::AsyncFileUtil::CreateOrOpenCallback& callback, |
| 55 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref, | 55 const scoped_refptr<storage::ShareableFileReference>& file_ref, |
| 56 base::File file) { | 56 base::File file) { |
| 57 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 57 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 58 if (!file.IsValid()) { | 58 if (!file.IsValid()) { |
| 59 callback.Run(file.Pass(), base::Closure()); | 59 callback.Run(file.Pass(), base::Closure()); |
| 60 return; | 60 return; |
| 61 } | 61 } |
| 62 callback.Run(file.Pass(), base::Bind(&HoldFileRef, file_ref)); | 62 callback.Run(file.Pass(), base::Bind(&HoldFileRef, file_ref)); |
| 63 } | 63 } |
| 64 | 64 |
| 65 } // namespace | 65 } // namespace |
| (...skipping 26 matching lines...) Expand all Loading... |
| 92 // static | 92 // static |
| 93 base::File::Error NativeMediaFileUtil::BufferIsMediaHeader( | 93 base::File::Error NativeMediaFileUtil::BufferIsMediaHeader( |
| 94 net::IOBuffer* buf, size_t length) { | 94 net::IOBuffer* buf, size_t length) { |
| 95 return IsMediaHeader(buf->data(), length); | 95 return IsMediaHeader(buf->data(), length); |
| 96 } | 96 } |
| 97 | 97 |
| 98 // static | 98 // static |
| 99 void NativeMediaFileUtil::CreatedSnapshotFileForCreateOrOpen( | 99 void NativeMediaFileUtil::CreatedSnapshotFileForCreateOrOpen( |
| 100 base::SequencedTaskRunner* media_task_runner, | 100 base::SequencedTaskRunner* media_task_runner, |
| 101 int file_flags, | 101 int file_flags, |
| 102 const fileapi::AsyncFileUtil::CreateOrOpenCallback& callback, | 102 const storage::AsyncFileUtil::CreateOrOpenCallback& callback, |
| 103 base::File::Error result, | 103 base::File::Error result, |
| 104 const base::File::Info& file_info, | 104 const base::File::Info& file_info, |
| 105 const base::FilePath& platform_path, | 105 const base::FilePath& platform_path, |
| 106 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) { | 106 const scoped_refptr<storage::ShareableFileReference>& file_ref) { |
| 107 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 107 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 108 if (result != base::File::FILE_OK) { | 108 if (result != base::File::FILE_OK) { |
| 109 callback.Run(base::File(), base::Closure()); | 109 callback.Run(base::File(), base::Closure()); |
| 110 return; | 110 return; |
| 111 } | 111 } |
| 112 base::PostTaskAndReplyWithResult( | 112 base::PostTaskAndReplyWithResult( |
| 113 media_task_runner, | 113 media_task_runner, |
| 114 FROM_HERE, | 114 FROM_HERE, |
| 115 base::Bind(&fileapi::NativeFileUtil::CreateOrOpen, | 115 base::Bind( |
| 116 platform_path, | 116 &storage::NativeFileUtil::CreateOrOpen, platform_path, file_flags), |
| 117 file_flags), | |
| 118 base::Bind(&DidOpenSnapshot, callback, file_ref)); | 117 base::Bind(&DidOpenSnapshot, callback, file_ref)); |
| 119 } | 118 } |
| 120 | 119 |
| 121 void NativeMediaFileUtil::CreateOrOpen( | 120 void NativeMediaFileUtil::CreateOrOpen( |
| 122 scoped_ptr<fileapi::FileSystemOperationContext> context, | 121 scoped_ptr<storage::FileSystemOperationContext> context, |
| 123 const fileapi::FileSystemURL& url, | 122 const storage::FileSystemURL& url, |
| 124 int file_flags, | 123 int file_flags, |
| 125 const CreateOrOpenCallback& callback) { | 124 const CreateOrOpenCallback& callback) { |
| 126 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 125 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 127 // Returns an error if any unsupported flag is found. | 126 // Returns an error if any unsupported flag is found. |
| 128 if (file_flags & ~(base::File::FLAG_OPEN | | 127 if (file_flags & ~(base::File::FLAG_OPEN | |
| 129 base::File::FLAG_READ | | 128 base::File::FLAG_READ | |
| 130 base::File::FLAG_WRITE_ATTRIBUTES)) { | 129 base::File::FLAG_WRITE_ATTRIBUTES)) { |
| 131 callback.Run(base::File(base::File::FILE_ERROR_SECURITY), base::Closure()); | 130 callback.Run(base::File(base::File::FILE_ERROR_SECURITY), base::Closure()); |
| 132 return; | 131 return; |
| 133 } | 132 } |
| 134 scoped_refptr<base::SequencedTaskRunner> task_runner = context->task_runner(); | 133 scoped_refptr<base::SequencedTaskRunner> task_runner = context->task_runner(); |
| 135 CreateSnapshotFile( | 134 CreateSnapshotFile( |
| 136 context.Pass(), | 135 context.Pass(), |
| 137 url, | 136 url, |
| 138 base::Bind(&NativeMediaFileUtil::CreatedSnapshotFileForCreateOrOpen, | 137 base::Bind(&NativeMediaFileUtil::CreatedSnapshotFileForCreateOrOpen, |
| 139 task_runner, | 138 task_runner, |
| 140 file_flags, | 139 file_flags, |
| 141 callback)); | 140 callback)); |
| 142 } | 141 } |
| 143 | 142 |
| 144 void NativeMediaFileUtil::EnsureFileExists( | 143 void NativeMediaFileUtil::EnsureFileExists( |
| 145 scoped_ptr<fileapi::FileSystemOperationContext> context, | 144 scoped_ptr<storage::FileSystemOperationContext> context, |
| 146 const fileapi::FileSystemURL& url, | 145 const storage::FileSystemURL& url, |
| 147 const EnsureFileExistsCallback& callback) { | 146 const EnsureFileExistsCallback& callback) { |
| 148 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 147 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 149 callback.Run(base::File::FILE_ERROR_SECURITY, false); | 148 callback.Run(base::File::FILE_ERROR_SECURITY, false); |
| 150 } | 149 } |
| 151 | 150 |
| 152 void NativeMediaFileUtil::CreateDirectory( | 151 void NativeMediaFileUtil::CreateDirectory( |
| 153 scoped_ptr<fileapi::FileSystemOperationContext> context, | 152 scoped_ptr<storage::FileSystemOperationContext> context, |
| 154 const fileapi::FileSystemURL& url, | 153 const storage::FileSystemURL& url, |
| 155 bool exclusive, | 154 bool exclusive, |
| 156 bool recursive, | 155 bool recursive, |
| 157 const StatusCallback& callback) { | 156 const StatusCallback& callback) { |
| 158 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 157 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 159 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 158 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 160 const bool success = context_ptr->task_runner()->PostTask( | 159 const bool success = context_ptr->task_runner()->PostTask( |
| 161 FROM_HERE, | 160 FROM_HERE, |
| 162 base::Bind(&NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread, | 161 base::Bind(&NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread, |
| 163 weak_factory_.GetWeakPtr(), base::Passed(&context), | 162 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 164 url, exclusive, recursive, callback)); | 163 url, exclusive, recursive, callback)); |
| 165 DCHECK(success); | 164 DCHECK(success); |
| 166 } | 165 } |
| 167 | 166 |
| 168 void NativeMediaFileUtil::GetFileInfo( | 167 void NativeMediaFileUtil::GetFileInfo( |
| 169 scoped_ptr<fileapi::FileSystemOperationContext> context, | 168 scoped_ptr<storage::FileSystemOperationContext> context, |
| 170 const fileapi::FileSystemURL& url, | 169 const storage::FileSystemURL& url, |
| 171 const GetFileInfoCallback& callback) { | 170 const GetFileInfoCallback& callback) { |
| 172 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 171 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 173 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 172 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 174 const bool success = context_ptr->task_runner()->PostTask( | 173 const bool success = context_ptr->task_runner()->PostTask( |
| 175 FROM_HERE, | 174 FROM_HERE, |
| 176 base::Bind(&NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread, | 175 base::Bind(&NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread, |
| 177 weak_factory_.GetWeakPtr(), base::Passed(&context), | 176 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 178 url, callback)); | 177 url, callback)); |
| 179 DCHECK(success); | 178 DCHECK(success); |
| 180 } | 179 } |
| 181 | 180 |
| 182 void NativeMediaFileUtil::ReadDirectory( | 181 void NativeMediaFileUtil::ReadDirectory( |
| 183 scoped_ptr<fileapi::FileSystemOperationContext> context, | 182 scoped_ptr<storage::FileSystemOperationContext> context, |
| 184 const fileapi::FileSystemURL& url, | 183 const storage::FileSystemURL& url, |
| 185 const ReadDirectoryCallback& callback) { | 184 const ReadDirectoryCallback& callback) { |
| 186 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 185 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 187 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 186 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 188 const bool success = context_ptr->task_runner()->PostTask( | 187 const bool success = context_ptr->task_runner()->PostTask( |
| 189 FROM_HERE, | 188 FROM_HERE, |
| 190 base::Bind(&NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread, | 189 base::Bind(&NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread, |
| 191 weak_factory_.GetWeakPtr(), base::Passed(&context), | 190 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 192 url, callback)); | 191 url, callback)); |
| 193 DCHECK(success); | 192 DCHECK(success); |
| 194 } | 193 } |
| 195 | 194 |
| 196 void NativeMediaFileUtil::Touch( | 195 void NativeMediaFileUtil::Touch( |
| 197 scoped_ptr<fileapi::FileSystemOperationContext> context, | 196 scoped_ptr<storage::FileSystemOperationContext> context, |
| 198 const fileapi::FileSystemURL& url, | 197 const storage::FileSystemURL& url, |
| 199 const base::Time& last_access_time, | 198 const base::Time& last_access_time, |
| 200 const base::Time& last_modified_time, | 199 const base::Time& last_modified_time, |
| 201 const StatusCallback& callback) { | 200 const StatusCallback& callback) { |
| 202 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 201 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 203 callback.Run(base::File::FILE_ERROR_SECURITY); | 202 callback.Run(base::File::FILE_ERROR_SECURITY); |
| 204 } | 203 } |
| 205 | 204 |
| 206 void NativeMediaFileUtil::Truncate( | 205 void NativeMediaFileUtil::Truncate( |
| 207 scoped_ptr<fileapi::FileSystemOperationContext> context, | 206 scoped_ptr<storage::FileSystemOperationContext> context, |
| 208 const fileapi::FileSystemURL& url, | 207 const storage::FileSystemURL& url, |
| 209 int64 length, | 208 int64 length, |
| 210 const StatusCallback& callback) { | 209 const StatusCallback& callback) { |
| 211 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 210 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 212 callback.Run(base::File::FILE_ERROR_SECURITY); | 211 callback.Run(base::File::FILE_ERROR_SECURITY); |
| 213 } | 212 } |
| 214 | 213 |
| 215 void NativeMediaFileUtil::CopyFileLocal( | 214 void NativeMediaFileUtil::CopyFileLocal( |
| 216 scoped_ptr<fileapi::FileSystemOperationContext> context, | 215 scoped_ptr<storage::FileSystemOperationContext> context, |
| 217 const fileapi::FileSystemURL& src_url, | 216 const storage::FileSystemURL& src_url, |
| 218 const fileapi::FileSystemURL& dest_url, | 217 const storage::FileSystemURL& dest_url, |
| 219 CopyOrMoveOption option, | 218 CopyOrMoveOption option, |
| 220 const CopyFileProgressCallback& progress_callback, | 219 const CopyFileProgressCallback& progress_callback, |
| 221 const StatusCallback& callback) { | 220 const StatusCallback& callback) { |
| 222 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 221 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 223 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 222 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 224 const bool success = context_ptr->task_runner()->PostTask( | 223 const bool success = context_ptr->task_runner()->PostTask( |
| 225 FROM_HERE, | 224 FROM_HERE, |
| 226 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, | 225 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, |
| 227 weak_factory_.GetWeakPtr(), base::Passed(&context), | 226 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 228 src_url, dest_url, option, true /* copy */, callback)); | 227 src_url, dest_url, option, true /* copy */, callback)); |
| 229 DCHECK(success); | 228 DCHECK(success); |
| 230 } | 229 } |
| 231 | 230 |
| 232 void NativeMediaFileUtil::MoveFileLocal( | 231 void NativeMediaFileUtil::MoveFileLocal( |
| 233 scoped_ptr<fileapi::FileSystemOperationContext> context, | 232 scoped_ptr<storage::FileSystemOperationContext> context, |
| 234 const fileapi::FileSystemURL& src_url, | 233 const storage::FileSystemURL& src_url, |
| 235 const fileapi::FileSystemURL& dest_url, | 234 const storage::FileSystemURL& dest_url, |
| 236 CopyOrMoveOption option, | 235 CopyOrMoveOption option, |
| 237 const StatusCallback& callback) { | 236 const StatusCallback& callback) { |
| 238 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 237 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 239 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 238 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 240 const bool success = context_ptr->task_runner()->PostTask( | 239 const bool success = context_ptr->task_runner()->PostTask( |
| 241 FROM_HERE, | 240 FROM_HERE, |
| 242 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, | 241 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, |
| 243 weak_factory_.GetWeakPtr(), base::Passed(&context), | 242 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 244 src_url, dest_url, option, false /* copy */, callback)); | 243 src_url, dest_url, option, false /* copy */, callback)); |
| 245 DCHECK(success); | 244 DCHECK(success); |
| 246 } | 245 } |
| 247 | 246 |
| 248 void NativeMediaFileUtil::CopyInForeignFile( | 247 void NativeMediaFileUtil::CopyInForeignFile( |
| 249 scoped_ptr<fileapi::FileSystemOperationContext> context, | 248 scoped_ptr<storage::FileSystemOperationContext> context, |
| 250 const base::FilePath& src_file_path, | 249 const base::FilePath& src_file_path, |
| 251 const fileapi::FileSystemURL& dest_url, | 250 const storage::FileSystemURL& dest_url, |
| 252 const StatusCallback& callback) { | 251 const StatusCallback& callback) { |
| 253 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 252 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 254 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 253 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 255 const bool success = context_ptr->task_runner()->PostTask( | 254 const bool success = context_ptr->task_runner()->PostTask( |
| 256 FROM_HERE, | 255 FROM_HERE, |
| 257 base::Bind(&NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread, | 256 base::Bind(&NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread, |
| 258 weak_factory_.GetWeakPtr(), base::Passed(&context), | 257 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 259 src_file_path, dest_url, callback)); | 258 src_file_path, dest_url, callback)); |
| 260 DCHECK(success); | 259 DCHECK(success); |
| 261 } | 260 } |
| 262 | 261 |
| 263 void NativeMediaFileUtil::DeleteFile( | 262 void NativeMediaFileUtil::DeleteFile( |
| 264 scoped_ptr<fileapi::FileSystemOperationContext> context, | 263 scoped_ptr<storage::FileSystemOperationContext> context, |
| 265 const fileapi::FileSystemURL& url, | 264 const storage::FileSystemURL& url, |
| 266 const StatusCallback& callback) { | 265 const StatusCallback& callback) { |
| 267 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 266 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 268 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 267 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 269 const bool success = context_ptr->task_runner()->PostTask( | 268 const bool success = context_ptr->task_runner()->PostTask( |
| 270 FROM_HERE, | 269 FROM_HERE, |
| 271 base::Bind(&NativeMediaFileUtil::DeleteFileOnTaskRunnerThread, | 270 base::Bind(&NativeMediaFileUtil::DeleteFileOnTaskRunnerThread, |
| 272 weak_factory_.GetWeakPtr(), base::Passed(&context), | 271 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 273 url, callback)); | 272 url, callback)); |
| 274 DCHECK(success); | 273 DCHECK(success); |
| 275 } | 274 } |
| 276 | 275 |
| 277 // This is needed to support Copy and Move. | 276 // This is needed to support Copy and Move. |
| 278 void NativeMediaFileUtil::DeleteDirectory( | 277 void NativeMediaFileUtil::DeleteDirectory( |
| 279 scoped_ptr<fileapi::FileSystemOperationContext> context, | 278 scoped_ptr<storage::FileSystemOperationContext> context, |
| 280 const fileapi::FileSystemURL& url, | 279 const storage::FileSystemURL& url, |
| 281 const StatusCallback& callback) { | 280 const StatusCallback& callback) { |
| 282 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 281 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 283 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 282 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 284 const bool success = context_ptr->task_runner()->PostTask( | 283 const bool success = context_ptr->task_runner()->PostTask( |
| 285 FROM_HERE, | 284 FROM_HERE, |
| 286 base::Bind(&NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread, | 285 base::Bind(&NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread, |
| 287 weak_factory_.GetWeakPtr(), base::Passed(&context), | 286 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 288 url, callback)); | 287 url, callback)); |
| 289 DCHECK(success); | 288 DCHECK(success); |
| 290 } | 289 } |
| 291 | 290 |
| 292 void NativeMediaFileUtil::DeleteRecursively( | 291 void NativeMediaFileUtil::DeleteRecursively( |
| 293 scoped_ptr<fileapi::FileSystemOperationContext> context, | 292 scoped_ptr<storage::FileSystemOperationContext> context, |
| 294 const fileapi::FileSystemURL& url, | 293 const storage::FileSystemURL& url, |
| 295 const StatusCallback& callback) { | 294 const StatusCallback& callback) { |
| 296 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 295 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 297 callback.Run(base::File::FILE_ERROR_INVALID_OPERATION); | 296 callback.Run(base::File::FILE_ERROR_INVALID_OPERATION); |
| 298 } | 297 } |
| 299 | 298 |
| 300 void NativeMediaFileUtil::CreateSnapshotFile( | 299 void NativeMediaFileUtil::CreateSnapshotFile( |
| 301 scoped_ptr<fileapi::FileSystemOperationContext> context, | 300 scoped_ptr<storage::FileSystemOperationContext> context, |
| 302 const fileapi::FileSystemURL& url, | 301 const storage::FileSystemURL& url, |
| 303 const CreateSnapshotFileCallback& callback) { | 302 const CreateSnapshotFileCallback& callback) { |
| 304 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 303 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 305 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 304 storage::FileSystemOperationContext* context_ptr = context.get(); |
| 306 const bool success = context_ptr->task_runner()->PostTask( | 305 const bool success = context_ptr->task_runner()->PostTask( |
| 307 FROM_HERE, | 306 FROM_HERE, |
| 308 base::Bind(&NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread, | 307 base::Bind(&NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread, |
| 309 weak_factory_.GetWeakPtr(), base::Passed(&context), | 308 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 310 url, callback)); | 309 url, callback)); |
| 311 DCHECK(success); | 310 DCHECK(success); |
| 312 } | 311 } |
| 313 | 312 |
| 314 void NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread( | 313 void NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread( |
| 315 scoped_ptr<fileapi::FileSystemOperationContext> context, | 314 scoped_ptr<storage::FileSystemOperationContext> context, |
| 316 const fileapi::FileSystemURL& url, | 315 const storage::FileSystemURL& url, |
| 317 bool exclusive, | 316 bool exclusive, |
| 318 bool recursive, | 317 bool recursive, |
| 319 const StatusCallback& callback) { | 318 const StatusCallback& callback) { |
| 320 DCHECK(IsOnTaskRunnerThread(context.get())); | 319 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 321 base::File::Error error = | 320 base::File::Error error = |
| 322 CreateDirectorySync(context.get(), url, exclusive, recursive); | 321 CreateDirectorySync(context.get(), url, exclusive, recursive); |
| 323 content::BrowserThread::PostTask( | 322 content::BrowserThread::PostTask( |
| 324 content::BrowserThread::IO, | 323 content::BrowserThread::IO, |
| 325 FROM_HERE, | 324 FROM_HERE, |
| 326 base::Bind(callback, error)); | 325 base::Bind(callback, error)); |
| 327 } | 326 } |
| 328 | 327 |
| 329 void NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread( | 328 void NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread( |
| 330 scoped_ptr<fileapi::FileSystemOperationContext> context, | 329 scoped_ptr<storage::FileSystemOperationContext> context, |
| 331 const fileapi::FileSystemURL& url, | 330 const storage::FileSystemURL& url, |
| 332 const GetFileInfoCallback& callback) { | 331 const GetFileInfoCallback& callback) { |
| 333 DCHECK(IsOnTaskRunnerThread(context.get())); | 332 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 334 base::File::Info file_info; | 333 base::File::Info file_info; |
| 335 base::File::Error error = | 334 base::File::Error error = |
| 336 GetFileInfoSync(context.get(), url, &file_info, NULL); | 335 GetFileInfoSync(context.get(), url, &file_info, NULL); |
| 337 content::BrowserThread::PostTask( | 336 content::BrowserThread::PostTask( |
| 338 content::BrowserThread::IO, | 337 content::BrowserThread::IO, |
| 339 FROM_HERE, | 338 FROM_HERE, |
| 340 base::Bind(callback, error, file_info)); | 339 base::Bind(callback, error, file_info)); |
| 341 } | 340 } |
| 342 | 341 |
| 343 void NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread( | 342 void NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread( |
| 344 scoped_ptr<fileapi::FileSystemOperationContext> context, | 343 scoped_ptr<storage::FileSystemOperationContext> context, |
| 345 const fileapi::FileSystemURL& url, | 344 const storage::FileSystemURL& url, |
| 346 const ReadDirectoryCallback& callback) { | 345 const ReadDirectoryCallback& callback) { |
| 347 DCHECK(IsOnTaskRunnerThread(context.get())); | 346 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 348 EntryList entry_list; | 347 EntryList entry_list; |
| 349 base::File::Error error = | 348 base::File::Error error = |
| 350 ReadDirectorySync(context.get(), url, &entry_list); | 349 ReadDirectorySync(context.get(), url, &entry_list); |
| 351 content::BrowserThread::PostTask( | 350 content::BrowserThread::PostTask( |
| 352 content::BrowserThread::IO, | 351 content::BrowserThread::IO, |
| 353 FROM_HERE, | 352 FROM_HERE, |
| 354 base::Bind(callback, error, entry_list, false /* has_more */)); | 353 base::Bind(callback, error, entry_list, false /* has_more */)); |
| 355 } | 354 } |
| 356 | 355 |
| 357 void NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread( | 356 void NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread( |
| 358 scoped_ptr<fileapi::FileSystemOperationContext> context, | 357 scoped_ptr<storage::FileSystemOperationContext> context, |
| 359 const fileapi::FileSystemURL& src_url, | 358 const storage::FileSystemURL& src_url, |
| 360 const fileapi::FileSystemURL& dest_url, | 359 const storage::FileSystemURL& dest_url, |
| 361 CopyOrMoveOption option, | 360 CopyOrMoveOption option, |
| 362 bool copy, | 361 bool copy, |
| 363 const StatusCallback& callback) { | 362 const StatusCallback& callback) { |
| 364 DCHECK(IsOnTaskRunnerThread(context.get())); | 363 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 365 base::File::Error error = | 364 base::File::Error error = |
| 366 CopyOrMoveFileSync(context.get(), src_url, dest_url, option, copy); | 365 CopyOrMoveFileSync(context.get(), src_url, dest_url, option, copy); |
| 367 content::BrowserThread::PostTask( | 366 content::BrowserThread::PostTask( |
| 368 content::BrowserThread::IO, | 367 content::BrowserThread::IO, |
| 369 FROM_HERE, | 368 FROM_HERE, |
| 370 base::Bind(callback, error)); | 369 base::Bind(callback, error)); |
| 371 } | 370 } |
| 372 | 371 |
| 373 void NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread( | 372 void NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread( |
| 374 scoped_ptr<fileapi::FileSystemOperationContext> context, | 373 scoped_ptr<storage::FileSystemOperationContext> context, |
| 375 const base::FilePath& src_file_path, | 374 const base::FilePath& src_file_path, |
| 376 const fileapi::FileSystemURL& dest_url, | 375 const storage::FileSystemURL& dest_url, |
| 377 const StatusCallback& callback) { | 376 const StatusCallback& callback) { |
| 378 DCHECK(IsOnTaskRunnerThread(context.get())); | 377 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 379 base::File::Error error = | 378 base::File::Error error = |
| 380 CopyInForeignFileSync(context.get(), src_file_path, dest_url); | 379 CopyInForeignFileSync(context.get(), src_file_path, dest_url); |
| 381 content::BrowserThread::PostTask( | 380 content::BrowserThread::PostTask( |
| 382 content::BrowserThread::IO, | 381 content::BrowserThread::IO, |
| 383 FROM_HERE, | 382 FROM_HERE, |
| 384 base::Bind(callback, error)); | 383 base::Bind(callback, error)); |
| 385 } | 384 } |
| 386 | 385 |
| 387 void NativeMediaFileUtil::DeleteFileOnTaskRunnerThread( | 386 void NativeMediaFileUtil::DeleteFileOnTaskRunnerThread( |
| 388 scoped_ptr<fileapi::FileSystemOperationContext> context, | 387 scoped_ptr<storage::FileSystemOperationContext> context, |
| 389 const fileapi::FileSystemURL& url, | 388 const storage::FileSystemURL& url, |
| 390 const StatusCallback& callback) { | 389 const StatusCallback& callback) { |
| 391 DCHECK(IsOnTaskRunnerThread(context.get())); | 390 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 392 base::File::Error error = DeleteFileSync(context.get(), url); | 391 base::File::Error error = DeleteFileSync(context.get(), url); |
| 393 content::BrowserThread::PostTask( | 392 content::BrowserThread::PostTask( |
| 394 content::BrowserThread::IO, | 393 content::BrowserThread::IO, |
| 395 FROM_HERE, | 394 FROM_HERE, |
| 396 base::Bind(callback, error)); | 395 base::Bind(callback, error)); |
| 397 } | 396 } |
| 398 | 397 |
| 399 void NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread( | 398 void NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread( |
| 400 scoped_ptr<fileapi::FileSystemOperationContext> context, | 399 scoped_ptr<storage::FileSystemOperationContext> context, |
| 401 const fileapi::FileSystemURL& url, | 400 const storage::FileSystemURL& url, |
| 402 const StatusCallback& callback) { | 401 const StatusCallback& callback) { |
| 403 DCHECK(IsOnTaskRunnerThread(context.get())); | 402 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 404 base::File::Error error = DeleteDirectorySync(context.get(), url); | 403 base::File::Error error = DeleteDirectorySync(context.get(), url); |
| 405 content::BrowserThread::PostTask( | 404 content::BrowserThread::PostTask( |
| 406 content::BrowserThread::IO, | 405 content::BrowserThread::IO, |
| 407 FROM_HERE, | 406 FROM_HERE, |
| 408 base::Bind(callback, error)); | 407 base::Bind(callback, error)); |
| 409 } | 408 } |
| 410 | 409 |
| 411 void NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread( | 410 void NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread( |
| 412 scoped_ptr<fileapi::FileSystemOperationContext> context, | 411 scoped_ptr<storage::FileSystemOperationContext> context, |
| 413 const fileapi::FileSystemURL& url, | 412 const storage::FileSystemURL& url, |
| 414 const CreateSnapshotFileCallback& callback) { | 413 const CreateSnapshotFileCallback& callback) { |
| 415 DCHECK(IsOnTaskRunnerThread(context.get())); | 414 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 416 base::File::Info file_info; | 415 base::File::Info file_info; |
| 417 base::FilePath platform_path; | 416 base::FilePath platform_path; |
| 418 scoped_refptr<webkit_blob::ShareableFileReference> file_ref; | 417 scoped_refptr<storage::ShareableFileReference> file_ref; |
| 419 base::File::Error error = CreateSnapshotFileSync( | 418 base::File::Error error = CreateSnapshotFileSync( |
| 420 context.get(), url, &file_info, &platform_path, &file_ref); | 419 context.get(), url, &file_info, &platform_path, &file_ref); |
| 421 content::BrowserThread::PostTask( | 420 content::BrowserThread::PostTask( |
| 422 content::BrowserThread::IO, | 421 content::BrowserThread::IO, |
| 423 FROM_HERE, | 422 FROM_HERE, |
| 424 base::Bind(callback, error, file_info, platform_path, file_ref)); | 423 base::Bind(callback, error, file_info, platform_path, file_ref)); |
| 425 } | 424 } |
| 426 | 425 |
| 427 base::File::Error NativeMediaFileUtil::CreateDirectorySync( | 426 base::File::Error NativeMediaFileUtil::CreateDirectorySync( |
| 428 fileapi::FileSystemOperationContext* context, | 427 storage::FileSystemOperationContext* context, |
| 429 const fileapi::FileSystemURL& url, | 428 const storage::FileSystemURL& url, |
| 430 bool exclusive, | 429 bool exclusive, |
| 431 bool recursive) { | 430 bool recursive) { |
| 432 base::FilePath file_path; | 431 base::FilePath file_path; |
| 433 base::File::Error error = GetLocalFilePath(context, url, &file_path); | 432 base::File::Error error = GetLocalFilePath(context, url, &file_path); |
| 434 if (error != base::File::FILE_OK) | 433 if (error != base::File::FILE_OK) |
| 435 return error; | 434 return error; |
| 436 return fileapi::NativeFileUtil::CreateDirectory(file_path, exclusive, | 435 return storage::NativeFileUtil::CreateDirectory( |
| 437 recursive); | 436 file_path, exclusive, recursive); |
| 438 } | 437 } |
| 439 | 438 |
| 440 base::File::Error NativeMediaFileUtil::CopyOrMoveFileSync( | 439 base::File::Error NativeMediaFileUtil::CopyOrMoveFileSync( |
| 441 fileapi::FileSystemOperationContext* context, | 440 storage::FileSystemOperationContext* context, |
| 442 const fileapi::FileSystemURL& src_url, | 441 const storage::FileSystemURL& src_url, |
| 443 const fileapi::FileSystemURL& dest_url, | 442 const storage::FileSystemURL& dest_url, |
| 444 CopyOrMoveOption option, | 443 CopyOrMoveOption option, |
| 445 bool copy) { | 444 bool copy) { |
| 446 DCHECK(IsOnTaskRunnerThread(context)); | 445 DCHECK(IsOnTaskRunnerThread(context)); |
| 447 base::FilePath src_file_path; | 446 base::FilePath src_file_path; |
| 448 base::File::Error error = | 447 base::File::Error error = |
| 449 GetFilteredLocalFilePathForExistingFileOrDirectory( | 448 GetFilteredLocalFilePathForExistingFileOrDirectory( |
| 450 context, src_url, | 449 context, src_url, |
| 451 base::File::FILE_ERROR_NOT_FOUND, | 450 base::File::FILE_ERROR_NOT_FOUND, |
| 452 &src_file_path); | 451 &src_file_path); |
| 453 if (error != base::File::FILE_OK) | 452 if (error != base::File::FILE_OK) |
| 454 return error; | 453 return error; |
| 455 if (fileapi::NativeFileUtil::DirectoryExists(src_file_path)) | 454 if (storage::NativeFileUtil::DirectoryExists(src_file_path)) |
| 456 return base::File::FILE_ERROR_NOT_A_FILE; | 455 return base::File::FILE_ERROR_NOT_A_FILE; |
| 457 | 456 |
| 458 base::FilePath dest_file_path; | 457 base::FilePath dest_file_path; |
| 459 error = GetLocalFilePath(context, dest_url, &dest_file_path); | 458 error = GetLocalFilePath(context, dest_url, &dest_file_path); |
| 460 if (error != base::File::FILE_OK) | 459 if (error != base::File::FILE_OK) |
| 461 return error; | 460 return error; |
| 462 base::File::Info file_info; | 461 base::File::Info file_info; |
| 463 error = fileapi::NativeFileUtil::GetFileInfo(dest_file_path, &file_info); | 462 error = storage::NativeFileUtil::GetFileInfo(dest_file_path, &file_info); |
| 464 if (error != base::File::FILE_OK && | 463 if (error != base::File::FILE_OK && |
| 465 error != base::File::FILE_ERROR_NOT_FOUND) { | 464 error != base::File::FILE_ERROR_NOT_FOUND) { |
| 466 return error; | 465 return error; |
| 467 } | 466 } |
| 468 if (error == base::File::FILE_OK && file_info.is_directory) | 467 if (error == base::File::FILE_OK && file_info.is_directory) |
| 469 return base::File::FILE_ERROR_INVALID_OPERATION; | 468 return base::File::FILE_ERROR_INVALID_OPERATION; |
| 470 if (!media_path_filter_->Match(dest_file_path)) | 469 if (!media_path_filter_->Match(dest_file_path)) |
| 471 return base::File::FILE_ERROR_SECURITY; | 470 return base::File::FILE_ERROR_SECURITY; |
| 472 | 471 |
| 473 return fileapi::NativeFileUtil::CopyOrMoveFile( | 472 return storage::NativeFileUtil::CopyOrMoveFile( |
| 474 src_file_path, dest_file_path, option, | 473 src_file_path, |
| 475 fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, copy)); | 474 dest_file_path, |
| 475 option, |
| 476 storage::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, copy)); |
| 476 } | 477 } |
| 477 | 478 |
| 478 base::File::Error NativeMediaFileUtil::CopyInForeignFileSync( | 479 base::File::Error NativeMediaFileUtil::CopyInForeignFileSync( |
| 479 fileapi::FileSystemOperationContext* context, | 480 storage::FileSystemOperationContext* context, |
| 480 const base::FilePath& src_file_path, | 481 const base::FilePath& src_file_path, |
| 481 const fileapi::FileSystemURL& dest_url) { | 482 const storage::FileSystemURL& dest_url) { |
| 482 DCHECK(IsOnTaskRunnerThread(context)); | 483 DCHECK(IsOnTaskRunnerThread(context)); |
| 483 if (src_file_path.empty()) | 484 if (src_file_path.empty()) |
| 484 return base::File::FILE_ERROR_INVALID_OPERATION; | 485 return base::File::FILE_ERROR_INVALID_OPERATION; |
| 485 | 486 |
| 486 base::FilePath dest_file_path; | 487 base::FilePath dest_file_path; |
| 487 base::File::Error error = | 488 base::File::Error error = |
| 488 GetFilteredLocalFilePath(context, dest_url, &dest_file_path); | 489 GetFilteredLocalFilePath(context, dest_url, &dest_file_path); |
| 489 if (error != base::File::FILE_OK) | 490 if (error != base::File::FILE_OK) |
| 490 return error; | 491 return error; |
| 491 return fileapi::NativeFileUtil::CopyOrMoveFile( | 492 return storage::NativeFileUtil::CopyOrMoveFile( |
| 492 src_file_path, dest_file_path, | 493 src_file_path, |
| 493 fileapi::FileSystemOperation::OPTION_NONE, | 494 dest_file_path, |
| 494 fileapi::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, | 495 storage::FileSystemOperation::OPTION_NONE, |
| 496 storage::NativeFileUtil::CopyOrMoveModeForDestination(dest_url, |
| 495 true /* copy */)); | 497 true /* copy */)); |
| 496 } | 498 } |
| 497 | 499 |
| 498 base::File::Error NativeMediaFileUtil::GetFileInfoSync( | 500 base::File::Error NativeMediaFileUtil::GetFileInfoSync( |
| 499 fileapi::FileSystemOperationContext* context, | 501 storage::FileSystemOperationContext* context, |
| 500 const fileapi::FileSystemURL& url, | 502 const storage::FileSystemURL& url, |
| 501 base::File::Info* file_info, | 503 base::File::Info* file_info, |
| 502 base::FilePath* platform_path) { | 504 base::FilePath* platform_path) { |
| 503 DCHECK(context); | 505 DCHECK(context); |
| 504 DCHECK(IsOnTaskRunnerThread(context)); | 506 DCHECK(IsOnTaskRunnerThread(context)); |
| 505 DCHECK(file_info); | 507 DCHECK(file_info); |
| 506 | 508 |
| 507 base::FilePath file_path; | 509 base::FilePath file_path; |
| 508 base::File::Error error = GetLocalFilePath(context, url, &file_path); | 510 base::File::Error error = GetLocalFilePath(context, url, &file_path); |
| 509 if (error != base::File::FILE_OK) | 511 if (error != base::File::FILE_OK) |
| 510 return error; | 512 return error; |
| 511 if (base::IsLink(file_path)) | 513 if (base::IsLink(file_path)) |
| 512 return base::File::FILE_ERROR_NOT_FOUND; | 514 return base::File::FILE_ERROR_NOT_FOUND; |
| 513 error = fileapi::NativeFileUtil::GetFileInfo(file_path, file_info); | 515 error = storage::NativeFileUtil::GetFileInfo(file_path, file_info); |
| 514 if (error != base::File::FILE_OK) | 516 if (error != base::File::FILE_OK) |
| 515 return error; | 517 return error; |
| 516 | 518 |
| 517 if (platform_path) | 519 if (platform_path) |
| 518 *platform_path = file_path; | 520 *platform_path = file_path; |
| 519 if (file_info->is_directory || | 521 if (file_info->is_directory || |
| 520 media_path_filter_->Match(file_path)) { | 522 media_path_filter_->Match(file_path)) { |
| 521 return base::File::FILE_OK; | 523 return base::File::FILE_OK; |
| 522 } | 524 } |
| 523 return base::File::FILE_ERROR_NOT_FOUND; | 525 return base::File::FILE_ERROR_NOT_FOUND; |
| 524 } | 526 } |
| 525 | 527 |
| 526 base::File::Error NativeMediaFileUtil::GetLocalFilePath( | 528 base::File::Error NativeMediaFileUtil::GetLocalFilePath( |
| 527 fileapi::FileSystemOperationContext* context, | 529 storage::FileSystemOperationContext* context, |
| 528 const fileapi::FileSystemURL& url, | 530 const storage::FileSystemURL& url, |
| 529 base::FilePath* local_file_path) { | 531 base::FilePath* local_file_path) { |
| 530 DCHECK(local_file_path); | 532 DCHECK(local_file_path); |
| 531 DCHECK(url.is_valid()); | 533 DCHECK(url.is_valid()); |
| 532 if (url.path().empty()) { | 534 if (url.path().empty()) { |
| 533 // Root direcory case, which should not be accessed. | 535 // Root direcory case, which should not be accessed. |
| 534 return base::File::FILE_ERROR_ACCESS_DENIED; | 536 return base::File::FILE_ERROR_ACCESS_DENIED; |
| 535 } | 537 } |
| 536 *local_file_path = url.path(); | 538 *local_file_path = url.path(); |
| 537 return base::File::FILE_OK; | 539 return base::File::FILE_OK; |
| 538 } | 540 } |
| 539 | 541 |
| 540 base::File::Error NativeMediaFileUtil::ReadDirectorySync( | 542 base::File::Error NativeMediaFileUtil::ReadDirectorySync( |
| 541 fileapi::FileSystemOperationContext* context, | 543 storage::FileSystemOperationContext* context, |
| 542 const fileapi::FileSystemURL& url, | 544 const storage::FileSystemURL& url, |
| 543 EntryList* file_list) { | 545 EntryList* file_list) { |
| 544 DCHECK(IsOnTaskRunnerThread(context)); | 546 DCHECK(IsOnTaskRunnerThread(context)); |
| 545 DCHECK(file_list); | 547 DCHECK(file_list); |
| 546 DCHECK(file_list->empty()); | 548 DCHECK(file_list->empty()); |
| 547 base::File::Info file_info; | 549 base::File::Info file_info; |
| 548 base::FilePath dir_path; | 550 base::FilePath dir_path; |
| 549 base::File::Error error = | 551 base::File::Error error = |
| 550 GetFileInfoSync(context, url, &file_info, &dir_path); | 552 GetFileInfoSync(context, url, &file_info, &dir_path); |
| 551 | 553 |
| 552 if (error != base::File::FILE_OK) | 554 if (error != base::File::FILE_OK) |
| 553 return error; | 555 return error; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 567 continue; | 569 continue; |
| 568 | 570 |
| 569 base::FileEnumerator::FileInfo info = file_enum.GetInfo(); | 571 base::FileEnumerator::FileInfo info = file_enum.GetInfo(); |
| 570 | 572 |
| 571 // NativeMediaFileUtil skip criteria. | 573 // NativeMediaFileUtil skip criteria. |
| 572 if (MediaPathFilter::ShouldSkip(enum_path)) | 574 if (MediaPathFilter::ShouldSkip(enum_path)) |
| 573 continue; | 575 continue; |
| 574 if (!info.IsDirectory() && !media_path_filter_->Match(enum_path)) | 576 if (!info.IsDirectory() && !media_path_filter_->Match(enum_path)) |
| 575 continue; | 577 continue; |
| 576 | 578 |
| 577 fileapi::DirectoryEntry entry; | 579 storage::DirectoryEntry entry; |
| 578 entry.is_directory = info.IsDirectory(); | 580 entry.is_directory = info.IsDirectory(); |
| 579 entry.name = enum_path.BaseName().value(); | 581 entry.name = enum_path.BaseName().value(); |
| 580 entry.size = info.GetSize(); | 582 entry.size = info.GetSize(); |
| 581 entry.last_modified_time = info.GetLastModifiedTime(); | 583 entry.last_modified_time = info.GetLastModifiedTime(); |
| 582 | 584 |
| 583 file_list->push_back(entry); | 585 file_list->push_back(entry); |
| 584 } | 586 } |
| 585 | 587 |
| 586 return base::File::FILE_OK; | 588 return base::File::FILE_OK; |
| 587 } | 589 } |
| 588 | 590 |
| 589 base::File::Error NativeMediaFileUtil::DeleteFileSync( | 591 base::File::Error NativeMediaFileUtil::DeleteFileSync( |
| 590 fileapi::FileSystemOperationContext* context, | 592 storage::FileSystemOperationContext* context, |
| 591 const fileapi::FileSystemURL& url) { | 593 const storage::FileSystemURL& url) { |
| 592 DCHECK(IsOnTaskRunnerThread(context)); | 594 DCHECK(IsOnTaskRunnerThread(context)); |
| 593 base::File::Info file_info; | 595 base::File::Info file_info; |
| 594 base::FilePath file_path; | 596 base::FilePath file_path; |
| 595 base::File::Error error = | 597 base::File::Error error = |
| 596 GetFileInfoSync(context, url, &file_info, &file_path); | 598 GetFileInfoSync(context, url, &file_info, &file_path); |
| 597 if (error != base::File::FILE_OK) | 599 if (error != base::File::FILE_OK) |
| 598 return error; | 600 return error; |
| 599 if (file_info.is_directory) | 601 if (file_info.is_directory) |
| 600 return base::File::FILE_ERROR_NOT_A_FILE; | 602 return base::File::FILE_ERROR_NOT_A_FILE; |
| 601 return fileapi::NativeFileUtil::DeleteFile(file_path); | 603 return storage::NativeFileUtil::DeleteFile(file_path); |
| 602 } | 604 } |
| 603 | 605 |
| 604 base::File::Error NativeMediaFileUtil::DeleteDirectorySync( | 606 base::File::Error NativeMediaFileUtil::DeleteDirectorySync( |
| 605 fileapi::FileSystemOperationContext* context, | 607 storage::FileSystemOperationContext* context, |
| 606 const fileapi::FileSystemURL& url) { | 608 const storage::FileSystemURL& url) { |
| 607 DCHECK(IsOnTaskRunnerThread(context)); | 609 DCHECK(IsOnTaskRunnerThread(context)); |
| 608 base::FilePath file_path; | 610 base::FilePath file_path; |
| 609 base::File::Error error = GetLocalFilePath(context, url, &file_path); | 611 base::File::Error error = GetLocalFilePath(context, url, &file_path); |
| 610 if (error != base::File::FILE_OK) | 612 if (error != base::File::FILE_OK) |
| 611 return error; | 613 return error; |
| 612 return fileapi::NativeFileUtil::DeleteDirectory(file_path); | 614 return storage::NativeFileUtil::DeleteDirectory(file_path); |
| 613 } | 615 } |
| 614 | 616 |
| 615 base::File::Error NativeMediaFileUtil::CreateSnapshotFileSync( | 617 base::File::Error NativeMediaFileUtil::CreateSnapshotFileSync( |
| 616 fileapi::FileSystemOperationContext* context, | 618 storage::FileSystemOperationContext* context, |
| 617 const fileapi::FileSystemURL& url, | 619 const storage::FileSystemURL& url, |
| 618 base::File::Info* file_info, | 620 base::File::Info* file_info, |
| 619 base::FilePath* platform_path, | 621 base::FilePath* platform_path, |
| 620 scoped_refptr<webkit_blob::ShareableFileReference>* file_ref) { | 622 scoped_refptr<storage::ShareableFileReference>* file_ref) { |
| 621 DCHECK(IsOnTaskRunnerThread(context)); | 623 DCHECK(IsOnTaskRunnerThread(context)); |
| 622 base::File::Error error = | 624 base::File::Error error = |
| 623 GetFileInfoSync(context, url, file_info, platform_path); | 625 GetFileInfoSync(context, url, file_info, platform_path); |
| 624 if (error == base::File::FILE_OK && file_info->is_directory) | 626 if (error == base::File::FILE_OK && file_info->is_directory) |
| 625 error = base::File::FILE_ERROR_NOT_A_FILE; | 627 error = base::File::FILE_ERROR_NOT_A_FILE; |
| 626 if (error == base::File::FILE_OK) | 628 if (error == base::File::FILE_OK) |
| 627 error = NativeMediaFileUtil::IsMediaFile(*platform_path); | 629 error = NativeMediaFileUtil::IsMediaFile(*platform_path); |
| 628 | 630 |
| 629 // We're just returning the local file information. | 631 // We're just returning the local file information. |
| 630 *file_ref = scoped_refptr<webkit_blob::ShareableFileReference>(); | 632 *file_ref = scoped_refptr<storage::ShareableFileReference>(); |
| 631 | 633 |
| 632 return error; | 634 return error; |
| 633 } | 635 } |
| 634 | 636 |
| 635 base::File::Error NativeMediaFileUtil::GetFilteredLocalFilePath( | 637 base::File::Error NativeMediaFileUtil::GetFilteredLocalFilePath( |
| 636 fileapi::FileSystemOperationContext* context, | 638 storage::FileSystemOperationContext* context, |
| 637 const fileapi::FileSystemURL& file_system_url, | 639 const storage::FileSystemURL& file_system_url, |
| 638 base::FilePath* local_file_path) { | 640 base::FilePath* local_file_path) { |
| 639 DCHECK(IsOnTaskRunnerThread(context)); | 641 DCHECK(IsOnTaskRunnerThread(context)); |
| 640 base::FilePath file_path; | 642 base::FilePath file_path; |
| 641 base::File::Error error = | 643 base::File::Error error = |
| 642 GetLocalFilePath(context, file_system_url, &file_path); | 644 GetLocalFilePath(context, file_system_url, &file_path); |
| 643 if (error != base::File::FILE_OK) | 645 if (error != base::File::FILE_OK) |
| 644 return error; | 646 return error; |
| 645 if (!media_path_filter_->Match(file_path)) | 647 if (!media_path_filter_->Match(file_path)) |
| 646 return base::File::FILE_ERROR_SECURITY; | 648 return base::File::FILE_ERROR_SECURITY; |
| 647 | 649 |
| 648 *local_file_path = file_path; | 650 *local_file_path = file_path; |
| 649 return base::File::FILE_OK; | 651 return base::File::FILE_OK; |
| 650 } | 652 } |
| 651 | 653 |
| 652 base::File::Error | 654 base::File::Error |
| 653 NativeMediaFileUtil::GetFilteredLocalFilePathForExistingFileOrDirectory( | 655 NativeMediaFileUtil::GetFilteredLocalFilePathForExistingFileOrDirectory( |
| 654 fileapi::FileSystemOperationContext* context, | 656 storage::FileSystemOperationContext* context, |
| 655 const fileapi::FileSystemURL& file_system_url, | 657 const storage::FileSystemURL& file_system_url, |
| 656 base::File::Error failure_error, | 658 base::File::Error failure_error, |
| 657 base::FilePath* local_file_path) { | 659 base::FilePath* local_file_path) { |
| 658 DCHECK(IsOnTaskRunnerThread(context)); | 660 DCHECK(IsOnTaskRunnerThread(context)); |
| 659 base::FilePath file_path; | 661 base::FilePath file_path; |
| 660 base::File::Error error = | 662 base::File::Error error = |
| 661 GetLocalFilePath(context, file_system_url, &file_path); | 663 GetLocalFilePath(context, file_system_url, &file_path); |
| 662 if (error != base::File::FILE_OK) | 664 if (error != base::File::FILE_OK) |
| 663 return error; | 665 return error; |
| 664 | 666 |
| 665 if (!base::PathExists(file_path)) | 667 if (!base::PathExists(file_path)) |
| 666 return failure_error; | 668 return failure_error; |
| 667 base::File::Info file_info; | 669 base::File::Info file_info; |
| 668 if (!base::GetFileInfo(file_path, &file_info)) | 670 if (!base::GetFileInfo(file_path, &file_info)) |
| 669 return base::File::FILE_ERROR_FAILED; | 671 return base::File::FILE_ERROR_FAILED; |
| 670 | 672 |
| 671 if (!file_info.is_directory && | 673 if (!file_info.is_directory && |
| 672 !media_path_filter_->Match(file_path)) { | 674 !media_path_filter_->Match(file_path)) { |
| 673 return failure_error; | 675 return failure_error; |
| 674 } | 676 } |
| 675 | 677 |
| 676 *local_file_path = file_path; | 678 *local_file_path = file_path; |
| 677 return base::File::FILE_OK; | 679 return base::File::FILE_OK; |
| 678 } | 680 } |
| OLD | NEW |