| 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" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 | 128 |
| 129 if (StartsWithASCII(mime_type, "image/", true) || | 129 if (StartsWithASCII(mime_type, "image/", true) || |
| 130 StartsWithASCII(mime_type, "audio/", true) || | 130 StartsWithASCII(mime_type, "audio/", true) || |
| 131 StartsWithASCII(mime_type, "video/", true) || | 131 StartsWithASCII(mime_type, "video/", true) || |
| 132 mime_type == "application/x-shockwave-flash") { | 132 mime_type == "application/x-shockwave-flash") { |
| 133 return base::PLATFORM_FILE_OK; | 133 return base::PLATFORM_FILE_OK; |
| 134 } | 134 } |
| 135 return base::PLATFORM_FILE_ERROR_SECURITY; | 135 return base::PLATFORM_FILE_ERROR_SECURITY; |
| 136 } | 136 } |
| 137 | 137 |
| 138 bool NativeMediaFileUtil::CreateOrOpen( | 138 void NativeMediaFileUtil::CreateOrOpen( |
| 139 scoped_ptr<fileapi::FileSystemOperationContext> context, | 139 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 140 const fileapi::FileSystemURL& url, | 140 const fileapi::FileSystemURL& url, |
| 141 int file_flags, | 141 int file_flags, |
| 142 const CreateOrOpenCallback& callback) { | 142 const CreateOrOpenCallback& callback) { |
| 143 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 143 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 144 // Only called by NaCl, which should not have access to media file systems. | 144 // Only called by NaCl, which should not have access to media file systems. |
| 145 base::PlatformFile invalid_file(base::kInvalidPlatformFileValue); | 145 base::PlatformFile invalid_file(base::kInvalidPlatformFileValue); |
| 146 if (!callback.is_null()) { | 146 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, |
| 147 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, | 147 base::PassPlatformFile(&invalid_file)); |
| 148 base::PassPlatformFile(&invalid_file)); | |
| 149 } | |
| 150 return true; | |
| 151 } | 148 } |
| 152 | 149 |
| 153 bool NativeMediaFileUtil::EnsureFileExists( | 150 void NativeMediaFileUtil::EnsureFileExists( |
| 154 scoped_ptr<fileapi::FileSystemOperationContext> context, | 151 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 155 const fileapi::FileSystemURL& url, | 152 const fileapi::FileSystemURL& url, |
| 156 const EnsureFileExistsCallback& callback) { | 153 const EnsureFileExistsCallback& callback) { |
| 157 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 154 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 158 if (!callback.is_null()) | 155 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, false); |
| 159 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY, false); | |
| 160 return true; | |
| 161 } | 156 } |
| 162 | 157 |
| 163 bool NativeMediaFileUtil::CreateDirectory( | 158 void NativeMediaFileUtil::CreateDirectory( |
| 164 scoped_ptr<fileapi::FileSystemOperationContext> context, | 159 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 165 const fileapi::FileSystemURL& url, | 160 const fileapi::FileSystemURL& url, |
| 166 bool exclusive, | 161 bool exclusive, |
| 167 bool recursive, | 162 bool recursive, |
| 168 const StatusCallback& callback) { | 163 const StatusCallback& callback) { |
| 169 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 164 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 170 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 165 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 171 return context_ptr->task_runner()->PostTask( | 166 const bool success = context_ptr->task_runner()->PostTask( |
| 172 FROM_HERE, | 167 FROM_HERE, |
| 173 base::Bind(&NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread, | 168 base::Bind(&NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread, |
| 174 weak_factory_.GetWeakPtr(), base::Passed(&context), | 169 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 175 url, exclusive, recursive, callback)); | 170 url, exclusive, recursive, callback)); |
| 171 DCHECK(success); |
| 176 } | 172 } |
| 177 | 173 |
| 178 bool NativeMediaFileUtil::GetFileInfo( | 174 void NativeMediaFileUtil::GetFileInfo( |
| 179 scoped_ptr<fileapi::FileSystemOperationContext> context, | 175 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 180 const fileapi::FileSystemURL& url, | 176 const fileapi::FileSystemURL& url, |
| 181 const GetFileInfoCallback& callback) { | 177 const GetFileInfoCallback& callback) { |
| 182 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 178 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 183 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 179 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 184 return context_ptr->task_runner()->PostTask( | 180 const bool success = context_ptr->task_runner()->PostTask( |
| 185 FROM_HERE, | 181 FROM_HERE, |
| 186 base::Bind(&NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread, | 182 base::Bind(&NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread, |
| 187 weak_factory_.GetWeakPtr(), base::Passed(&context), | 183 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 188 url, callback)); | 184 url, callback)); |
| 185 DCHECK(success); |
| 189 } | 186 } |
| 190 | 187 |
| 191 bool NativeMediaFileUtil::ReadDirectory( | 188 void NativeMediaFileUtil::ReadDirectory( |
| 192 scoped_ptr<fileapi::FileSystemOperationContext> context, | 189 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 193 const fileapi::FileSystemURL& url, | 190 const fileapi::FileSystemURL& url, |
| 194 const ReadDirectoryCallback& callback) { | 191 const ReadDirectoryCallback& callback) { |
| 195 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 192 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 196 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 193 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 197 return context_ptr->task_runner()->PostTask( | 194 const bool success = context_ptr->task_runner()->PostTask( |
| 198 FROM_HERE, | 195 FROM_HERE, |
| 199 base::Bind(&NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread, | 196 base::Bind(&NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread, |
| 200 weak_factory_.GetWeakPtr(), base::Passed(&context), | 197 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 201 url, callback)); | 198 url, callback)); |
| 199 DCHECK(success); |
| 202 } | 200 } |
| 203 | 201 |
| 204 bool NativeMediaFileUtil::Touch( | 202 void NativeMediaFileUtil::Touch( |
| 205 scoped_ptr<fileapi::FileSystemOperationContext> context, | 203 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 206 const fileapi::FileSystemURL& url, | 204 const fileapi::FileSystemURL& url, |
| 207 const base::Time& last_access_time, | 205 const base::Time& last_access_time, |
| 208 const base::Time& last_modified_time, | 206 const base::Time& last_modified_time, |
| 209 const StatusCallback& callback) { | 207 const StatusCallback& callback) { |
| 210 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 208 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 211 if (!callback.is_null()) | 209 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); |
| 212 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); | |
| 213 return true; | |
| 214 } | 210 } |
| 215 | 211 |
| 216 bool NativeMediaFileUtil::Truncate( | 212 void NativeMediaFileUtil::Truncate( |
| 217 scoped_ptr<fileapi::FileSystemOperationContext> context, | 213 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 218 const fileapi::FileSystemURL& url, | 214 const fileapi::FileSystemURL& url, |
| 219 int64 length, | 215 int64 length, |
| 220 const StatusCallback& callback) { | 216 const StatusCallback& callback) { |
| 221 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 217 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 222 if (!callback.is_null()) | 218 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); |
| 223 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); | |
| 224 return true; | |
| 225 } | 219 } |
| 226 | 220 |
| 227 bool NativeMediaFileUtil::CopyFileLocal( | 221 void NativeMediaFileUtil::CopyFileLocal( |
| 228 scoped_ptr<fileapi::FileSystemOperationContext> context, | 222 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 229 const fileapi::FileSystemURL& src_url, | 223 const fileapi::FileSystemURL& src_url, |
| 230 const fileapi::FileSystemURL& dest_url, | 224 const fileapi::FileSystemURL& dest_url, |
| 231 const StatusCallback& callback) { | 225 const StatusCallback& callback) { |
| 232 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 226 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 233 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 227 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 234 return context_ptr->task_runner()->PostTask( | 228 const bool success = context_ptr->task_runner()->PostTask( |
| 235 FROM_HERE, | 229 FROM_HERE, |
| 236 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, | 230 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, |
| 237 weak_factory_.GetWeakPtr(), base::Passed(&context), | 231 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 238 src_url, dest_url, true /* copy */, callback)); | 232 src_url, dest_url, true /* copy */, callback)); |
| 233 DCHECK(success); |
| 239 } | 234 } |
| 240 | 235 |
| 241 bool NativeMediaFileUtil::MoveFileLocal( | 236 void NativeMediaFileUtil::MoveFileLocal( |
| 242 scoped_ptr<fileapi::FileSystemOperationContext> context, | 237 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 243 const fileapi::FileSystemURL& src_url, | 238 const fileapi::FileSystemURL& src_url, |
| 244 const fileapi::FileSystemURL& dest_url, | 239 const fileapi::FileSystemURL& dest_url, |
| 245 const StatusCallback& callback) { | 240 const StatusCallback& callback) { |
| 246 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 241 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 247 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 242 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 248 return context_ptr->task_runner()->PostTask( | 243 const bool success = context_ptr->task_runner()->PostTask( |
| 249 FROM_HERE, | 244 FROM_HERE, |
| 250 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, | 245 base::Bind(&NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread, |
| 251 weak_factory_.GetWeakPtr(), base::Passed(&context), | 246 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 252 src_url, dest_url, false /* copy */, callback)); | 247 src_url, dest_url, false /* copy */, callback)); |
| 248 DCHECK(success); |
| 253 } | 249 } |
| 254 | 250 |
| 255 bool NativeMediaFileUtil::CopyInForeignFile( | 251 void NativeMediaFileUtil::CopyInForeignFile( |
| 256 scoped_ptr<fileapi::FileSystemOperationContext> context, | 252 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 257 const base::FilePath& src_file_path, | 253 const base::FilePath& src_file_path, |
| 258 const fileapi::FileSystemURL& dest_url, | 254 const fileapi::FileSystemURL& dest_url, |
| 259 const StatusCallback& callback) { | 255 const StatusCallback& callback) { |
| 260 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 256 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 261 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 257 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 262 return context_ptr->task_runner()->PostTask( | 258 const bool success = context_ptr->task_runner()->PostTask( |
| 263 FROM_HERE, | 259 FROM_HERE, |
| 264 base::Bind(&NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread, | 260 base::Bind(&NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread, |
| 265 weak_factory_.GetWeakPtr(), base::Passed(&context), | 261 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 266 src_file_path, dest_url, callback)); | 262 src_file_path, dest_url, callback)); |
| 263 DCHECK(success); |
| 267 } | 264 } |
| 268 | 265 |
| 269 bool NativeMediaFileUtil::DeleteFile( | 266 void NativeMediaFileUtil::DeleteFile( |
| 270 scoped_ptr<fileapi::FileSystemOperationContext> context, | 267 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 271 const fileapi::FileSystemURL& url, | 268 const fileapi::FileSystemURL& url, |
| 272 const StatusCallback& callback) { | 269 const StatusCallback& callback) { |
| 273 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 270 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 274 if (!callback.is_null()) | 271 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); |
| 275 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); | |
| 276 return true; | |
| 277 } | 272 } |
| 278 | 273 |
| 279 // This is needed to support Copy and Move. | 274 // This is needed to support Copy and Move. |
| 280 bool NativeMediaFileUtil::DeleteDirectory( | 275 void NativeMediaFileUtil::DeleteDirectory( |
| 281 scoped_ptr<fileapi::FileSystemOperationContext> context, | 276 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 282 const fileapi::FileSystemURL& url, | 277 const fileapi::FileSystemURL& url, |
| 283 const StatusCallback& callback) { | 278 const StatusCallback& callback) { |
| 284 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 279 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 285 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 280 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 286 return context_ptr->task_runner()->PostTask( | 281 const bool success = context_ptr->task_runner()->PostTask( |
| 287 FROM_HERE, | 282 FROM_HERE, |
| 288 base::Bind(&NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread, | 283 base::Bind(&NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread, |
| 289 weak_factory_.GetWeakPtr(), base::Passed(&context), | 284 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 290 url, callback)); | 285 url, callback)); |
| 286 DCHECK(success); |
| 291 } | 287 } |
| 292 | 288 |
| 293 bool NativeMediaFileUtil::DeleteRecursively( | 289 void NativeMediaFileUtil::DeleteRecursively( |
| 294 scoped_ptr<fileapi::FileSystemOperationContext> context, | 290 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 295 const fileapi::FileSystemURL& url, | 291 const fileapi::FileSystemURL& url, |
| 296 const StatusCallback& callback) { | 292 const StatusCallback& callback) { |
| 297 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 293 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 298 if (!callback.is_null()) | 294 callback.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION); |
| 299 callback.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION); | |
| 300 return true; | |
| 301 } | 295 } |
| 302 | 296 |
| 303 bool NativeMediaFileUtil::CreateSnapshotFile( | 297 void NativeMediaFileUtil::CreateSnapshotFile( |
| 304 scoped_ptr<fileapi::FileSystemOperationContext> context, | 298 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 305 const fileapi::FileSystemURL& url, | 299 const fileapi::FileSystemURL& url, |
| 306 const CreateSnapshotFileCallback& callback) { | 300 const CreateSnapshotFileCallback& callback) { |
| 307 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 301 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 308 fileapi::FileSystemOperationContext* context_ptr = context.get(); | 302 fileapi::FileSystemOperationContext* context_ptr = context.get(); |
| 309 return context_ptr->task_runner()->PostTask( | 303 const bool success = context_ptr->task_runner()->PostTask( |
| 310 FROM_HERE, | 304 FROM_HERE, |
| 311 base::Bind(&NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread, | 305 base::Bind(&NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread, |
| 312 weak_factory_.GetWeakPtr(), base::Passed(&context), | 306 weak_factory_.GetWeakPtr(), base::Passed(&context), |
| 313 url, callback)); | 307 url, callback)); |
| 308 DCHECK(success); |
| 314 } | 309 } |
| 315 | 310 |
| 316 void NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread( | 311 void NativeMediaFileUtil::CreateDirectoryOnTaskRunnerThread( |
| 317 scoped_ptr<fileapi::FileSystemOperationContext> context, | 312 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 318 const fileapi::FileSystemURL& url, | 313 const fileapi::FileSystemURL& url, |
| 319 bool exclusive, | 314 bool exclusive, |
| 320 bool recursive, | 315 bool recursive, |
| 321 const StatusCallback& callback) { | 316 const StatusCallback& callback) { |
| 322 DCHECK(IsOnTaskRunnerThread(context.get())); | 317 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 323 base::PlatformFileError error = | 318 base::PlatformFileError error = |
| 324 CreateDirectorySync(context.get(), url, exclusive, recursive); | 319 CreateDirectorySync(context.get(), url, exclusive, recursive); |
| 325 if (callback.is_null()) | |
| 326 return; | |
| 327 content::BrowserThread::PostTask( | 320 content::BrowserThread::PostTask( |
| 328 content::BrowserThread::IO, | 321 content::BrowserThread::IO, |
| 329 FROM_HERE, | 322 FROM_HERE, |
| 330 base::Bind(callback, error)); | 323 base::Bind(callback, error)); |
| 331 } | 324 } |
| 332 | 325 |
| 333 void NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread( | 326 void NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread( |
| 334 scoped_ptr<fileapi::FileSystemOperationContext> context, | 327 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 335 const fileapi::FileSystemURL& url, | 328 const fileapi::FileSystemURL& url, |
| 336 const GetFileInfoCallback& callback) { | 329 const GetFileInfoCallback& callback) { |
| 337 DCHECK(IsOnTaskRunnerThread(context.get())); | 330 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 338 base::PlatformFileInfo file_info; | 331 base::PlatformFileInfo file_info; |
| 339 // TODO(thestig): remove this. | 332 // TODO(thestig): remove this. |
| 340 base::FilePath platform_path; | 333 base::FilePath platform_path; |
| 341 base::PlatformFileError error = | 334 base::PlatformFileError error = |
| 342 GetFileInfoSync(context.get(), url, &file_info, &platform_path); | 335 GetFileInfoSync(context.get(), url, &file_info, &platform_path); |
| 343 if (callback.is_null()) | |
| 344 return; | |
| 345 content::BrowserThread::PostTask( | 336 content::BrowserThread::PostTask( |
| 346 content::BrowserThread::IO, | 337 content::BrowserThread::IO, |
| 347 FROM_HERE, | 338 FROM_HERE, |
| 348 base::Bind(callback, error, file_info)); | 339 base::Bind(callback, error, file_info)); |
| 349 } | 340 } |
| 350 | 341 |
| 351 void NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread( | 342 void NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread( |
| 352 scoped_ptr<fileapi::FileSystemOperationContext> context, | 343 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 353 const fileapi::FileSystemURL& url, | 344 const fileapi::FileSystemURL& url, |
| 354 const ReadDirectoryCallback& callback) { | 345 const ReadDirectoryCallback& callback) { |
| 355 DCHECK(IsOnTaskRunnerThread(context.get())); | 346 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 356 EntryList entry_list; | 347 EntryList entry_list; |
| 357 base::PlatformFileError error = | 348 base::PlatformFileError error = |
| 358 ReadDirectorySync(context.get(), url, &entry_list); | 349 ReadDirectorySync(context.get(), url, &entry_list); |
| 359 if (callback.is_null()) | |
| 360 return; | |
| 361 content::BrowserThread::PostTask( | 350 content::BrowserThread::PostTask( |
| 362 content::BrowserThread::IO, | 351 content::BrowserThread::IO, |
| 363 FROM_HERE, | 352 FROM_HERE, |
| 364 base::Bind(callback, error, entry_list, false /* has_more */)); | 353 base::Bind(callback, error, entry_list, false /* has_more */)); |
| 365 } | 354 } |
| 366 | 355 |
| 367 void NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread( | 356 void NativeMediaFileUtil::CopyOrMoveFileLocalOnTaskRunnerThread( |
| 368 scoped_ptr<fileapi::FileSystemOperationContext> context, | 357 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 369 const fileapi::FileSystemURL& src_url, | 358 const fileapi::FileSystemURL& src_url, |
| 370 const fileapi::FileSystemURL& dest_url, | 359 const fileapi::FileSystemURL& dest_url, |
| 371 bool copy, | 360 bool copy, |
| 372 const StatusCallback& callback) { | 361 const StatusCallback& callback) { |
| 373 DCHECK(IsOnTaskRunnerThread(context.get())); | 362 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 374 base::PlatformFileError error = | 363 base::PlatformFileError error = |
| 375 CopyOrMoveFileSync(context.get(), src_url, dest_url, copy); | 364 CopyOrMoveFileSync(context.get(), src_url, dest_url, copy); |
| 376 if (callback.is_null()) | |
| 377 return; | |
| 378 content::BrowserThread::PostTask( | 365 content::BrowserThread::PostTask( |
| 379 content::BrowserThread::IO, | 366 content::BrowserThread::IO, |
| 380 FROM_HERE, | 367 FROM_HERE, |
| 381 base::Bind(callback, error)); | 368 base::Bind(callback, error)); |
| 382 } | 369 } |
| 383 | 370 |
| 384 void NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread( | 371 void NativeMediaFileUtil::CopyInForeignFileOnTaskRunnerThread( |
| 385 scoped_ptr<fileapi::FileSystemOperationContext> context, | 372 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 386 const base::FilePath& src_file_path, | 373 const base::FilePath& src_file_path, |
| 387 const fileapi::FileSystemURL& dest_url, | 374 const fileapi::FileSystemURL& dest_url, |
| 388 const StatusCallback& callback) { | 375 const StatusCallback& callback) { |
| 389 DCHECK(IsOnTaskRunnerThread(context.get())); | 376 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 390 base::PlatformFileError error = | 377 base::PlatformFileError error = |
| 391 CopyInForeignFileSync(context.get(), src_file_path, dest_url); | 378 CopyInForeignFileSync(context.get(), src_file_path, dest_url); |
| 392 if (callback.is_null()) | |
| 393 return; | |
| 394 content::BrowserThread::PostTask( | 379 content::BrowserThread::PostTask( |
| 395 content::BrowserThread::IO, | 380 content::BrowserThread::IO, |
| 396 FROM_HERE, | 381 FROM_HERE, |
| 397 base::Bind(callback, error)); | 382 base::Bind(callback, error)); |
| 398 } | 383 } |
| 399 | 384 |
| 400 void NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread( | 385 void NativeMediaFileUtil::DeleteDirectoryOnTaskRunnerThread( |
| 401 scoped_ptr<fileapi::FileSystemOperationContext> context, | 386 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 402 const fileapi::FileSystemURL& url, | 387 const fileapi::FileSystemURL& url, |
| 403 const StatusCallback& callback) { | 388 const StatusCallback& callback) { |
| 404 DCHECK(IsOnTaskRunnerThread(context.get())); | 389 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 405 base::PlatformFileError error = DeleteDirectorySync(context.get(), url); | 390 base::PlatformFileError error = DeleteDirectorySync(context.get(), url); |
| 406 if (callback.is_null()) | |
| 407 return; | |
| 408 content::BrowserThread::PostTask( | 391 content::BrowserThread::PostTask( |
| 409 content::BrowserThread::IO, | 392 content::BrowserThread::IO, |
| 410 FROM_HERE, | 393 FROM_HERE, |
| 411 base::Bind(callback, error)); | 394 base::Bind(callback, error)); |
| 412 } | 395 } |
| 413 | 396 |
| 414 void NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread( | 397 void NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread( |
| 415 scoped_ptr<fileapi::FileSystemOperationContext> context, | 398 scoped_ptr<fileapi::FileSystemOperationContext> context, |
| 416 const fileapi::FileSystemURL& url, | 399 const fileapi::FileSystemURL& url, |
| 417 const CreateSnapshotFileCallback& callback) { | 400 const CreateSnapshotFileCallback& callback) { |
| 418 DCHECK(IsOnTaskRunnerThread(context.get())); | 401 DCHECK(IsOnTaskRunnerThread(context.get())); |
| 419 base::PlatformFileInfo file_info; | 402 base::PlatformFileInfo file_info; |
| 420 base::FilePath platform_path; | 403 base::FilePath platform_path; |
| 421 scoped_refptr<webkit_blob::ShareableFileReference> file_ref; | 404 scoped_refptr<webkit_blob::ShareableFileReference> file_ref; |
| 422 base::PlatformFileError error = | 405 base::PlatformFileError error = |
| 423 CreateSnapshotFileSync(context.get(), url, &file_info, &platform_path, | 406 CreateSnapshotFileSync(context.get(), url, &file_info, &platform_path, |
| 424 &file_ref); | 407 &file_ref); |
| 425 if (callback.is_null()) | |
| 426 return; | |
| 427 content::BrowserThread::PostTask( | 408 content::BrowserThread::PostTask( |
| 428 content::BrowserThread::IO, | 409 content::BrowserThread::IO, |
| 429 FROM_HERE, | 410 FROM_HERE, |
| 430 base::Bind(callback, error, file_info, platform_path, file_ref)); | 411 base::Bind(callback, error, file_info, platform_path, file_ref)); |
| 431 } | 412 } |
| 432 | 413 |
| 433 base::PlatformFileError NativeMediaFileUtil::CreateDirectorySync( | 414 base::PlatformFileError NativeMediaFileUtil::CreateDirectorySync( |
| 434 fileapi::FileSystemOperationContext* context, | 415 fileapi::FileSystemOperationContext* context, |
| 435 const fileapi::FileSystemURL& url, | 416 const fileapi::FileSystemURL& url, |
| 436 bool exclusive, | 417 bool exclusive, |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 if (!file_info.is_directory && | 638 if (!file_info.is_directory && |
| 658 !GetMediaPathFilter(context)->Match(file_path)) { | 639 !GetMediaPathFilter(context)->Match(file_path)) { |
| 659 return failure_error; | 640 return failure_error; |
| 660 } | 641 } |
| 661 | 642 |
| 662 *local_file_path = file_path; | 643 *local_file_path = file_path; |
| 663 return base::PLATFORM_FILE_OK; | 644 return base::PLATFORM_FILE_OK; |
| 664 } | 645 } |
| 665 | 646 |
| 666 } // namespace chrome | 647 } // namespace chrome |
| OLD | NEW |