| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 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/device_media_async_file_util.h" | 5 #include "chrome/browser/media_galleries/fileapi/device_media_async_file_util.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
| 11 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" | 11 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" |
| 12 #include "chrome/browser/media_galleries/fileapi/mtp_device_async_delegate.h" | 12 #include "chrome/browser/media_galleries/fileapi/mtp_device_async_delegate.h" |
| 13 #include "chrome/browser/media_galleries/fileapi/mtp_device_map_service.h" | 13 #include "chrome/browser/media_galleries/fileapi/mtp_device_map_service.h" |
| 14 #include "chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h" | 14 #include "chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h" |
| 15 #include "chrome/browser/media_galleries/fileapi/native_media_file_util.h" | 15 #include "chrome/browser/media_galleries/fileapi/native_media_file_util.h" |
| 16 #include "chrome/browser/media_galleries/fileapi/readahead_file_stream_reader.h" | 16 #include "chrome/browser/media_galleries/fileapi/readahead_file_stream_reader.h" |
| 17 #include "content/public/browser/browser_thread.h" | 17 #include "content/public/browser/browser_thread.h" |
| 18 #include "webkit/browser/blob/file_stream_reader.h" | 18 #include "webkit/browser/blob/file_stream_reader.h" |
| 19 #include "webkit/browser/fileapi/file_system_context.h" | 19 #include "webkit/browser/fileapi/file_system_context.h" |
| 20 #include "webkit/browser/fileapi/file_system_operation_context.h" | 20 #include "webkit/browser/fileapi/file_system_operation_context.h" |
| 21 #include "webkit/browser/fileapi/file_system_url.h" | 21 #include "webkit/browser/fileapi/file_system_url.h" |
| 22 #include "webkit/browser/fileapi/native_file_util.h" | 22 #include "webkit/browser/fileapi/native_file_util.h" |
| 23 #include "webkit/common/blob/shareable_file_reference.h" | 23 #include "webkit/common/blob/shareable_file_reference.h" |
| 24 | 24 |
| 25 using fileapi::AsyncFileUtil; | 25 using storage::AsyncFileUtil; |
| 26 using fileapi::FileSystemOperationContext; | 26 using storage::FileSystemOperationContext; |
| 27 using fileapi::FileSystemURL; | 27 using storage::FileSystemURL; |
| 28 using webkit_blob::ShareableFileReference; | 28 using storage::ShareableFileReference; |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 const char kDeviceMediaAsyncFileUtilTempDir[] = "DeviceMediaFileSystem"; | 32 const char kDeviceMediaAsyncFileUtilTempDir[] = "DeviceMediaFileSystem"; |
| 33 | 33 |
| 34 MTPDeviceAsyncDelegate* GetMTPDeviceDelegate(const FileSystemURL& url) { | 34 MTPDeviceAsyncDelegate* GetMTPDeviceDelegate(const FileSystemURL& url) { |
| 35 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 35 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 36 return MTPDeviceMapService::GetInstance()->GetMTPDeviceAsyncDelegate( | 36 return MTPDeviceMapService::GetInstance()->GetMTPDeviceAsyncDelegate( |
| 37 url.filesystem_id()); | 37 url.filesystem_id()); |
| 38 } | 38 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 snapshot_file_path = base::FilePath(); | 97 snapshot_file_path = base::FilePath(); |
| 98 } | 98 } |
| 99 return snapshot_file_path; | 99 return snapshot_file_path; |
| 100 } | 100 } |
| 101 | 101 |
| 102 // Called after OnDidCreateSnapshotFile finishes media check. | 102 // Called after OnDidCreateSnapshotFile finishes media check. |
| 103 // |callback| is invoked to complete the CreateSnapshotFile request. | 103 // |callback| is invoked to complete the CreateSnapshotFile request. |
| 104 void OnDidCheckMediaForCreateSnapshotFile( | 104 void OnDidCheckMediaForCreateSnapshotFile( |
| 105 const AsyncFileUtil::CreateSnapshotFileCallback& callback, | 105 const AsyncFileUtil::CreateSnapshotFileCallback& callback, |
| 106 const base::File::Info& file_info, | 106 const base::File::Info& file_info, |
| 107 scoped_refptr<webkit_blob::ShareableFileReference> platform_file, | 107 scoped_refptr<storage::ShareableFileReference> platform_file, |
| 108 base::File::Error error) { | 108 base::File::Error error) { |
| 109 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 109 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 110 base::FilePath platform_path(platform_file.get()->path()); | 110 base::FilePath platform_path(platform_file.get()->path()); |
| 111 if (error != base::File::FILE_OK) | 111 if (error != base::File::FILE_OK) |
| 112 platform_file = NULL; | 112 platform_file = NULL; |
| 113 callback.Run(error, file_info, platform_path, platform_file); | 113 callback.Run(error, file_info, platform_path, platform_file); |
| 114 } | 114 } |
| 115 | 115 |
| 116 // Called when the snapshot file specified by the |platform_path| is | 116 // Called when the snapshot file specified by the |platform_path| is |
| 117 // successfully created. |file_info| contains the device media file details | 117 // successfully created. |file_info| contains the device media file details |
| 118 // for which the snapshot file is created. | 118 // for which the snapshot file is created. |
| 119 void OnDidCreateSnapshotFile( | 119 void OnDidCreateSnapshotFile( |
| 120 const AsyncFileUtil::CreateSnapshotFileCallback& callback, | 120 const AsyncFileUtil::CreateSnapshotFileCallback& callback, |
| 121 base::SequencedTaskRunner* media_task_runner, | 121 base::SequencedTaskRunner* media_task_runner, |
| 122 bool validate_media_files, | 122 bool validate_media_files, |
| 123 const base::File::Info& file_info, | 123 const base::File::Info& file_info, |
| 124 const base::FilePath& platform_path) { | 124 const base::FilePath& platform_path) { |
| 125 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 125 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 126 scoped_refptr<webkit_blob::ShareableFileReference> file = | 126 scoped_refptr<storage::ShareableFileReference> file = |
| 127 ShareableFileReference::GetOrCreate( | 127 ShareableFileReference::GetOrCreate( |
| 128 platform_path, | 128 platform_path, |
| 129 ShareableFileReference::DELETE_ON_FINAL_RELEASE, | 129 ShareableFileReference::DELETE_ON_FINAL_RELEASE, |
| 130 media_task_runner); | 130 media_task_runner); |
| 131 | 131 |
| 132 if (validate_media_files) { | 132 if (validate_media_files) { |
| 133 base::PostTaskAndReplyWithResult( | 133 base::PostTaskAndReplyWithResult( |
| 134 media_task_runner, | 134 media_task_runner, |
| 135 FROM_HERE, | 135 FROM_HERE, |
| 136 base::Bind(&NativeMediaFileUtil::IsMediaFile, platform_path), | 136 base::Bind(&NativeMediaFileUtil::IsMediaFile, platform_path), |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 } | 217 } |
| 218 | 218 |
| 219 DeviceMediaAsyncFileUtil::MediaPathFilterWrapper::~MediaPathFilterWrapper() { | 219 DeviceMediaAsyncFileUtil::MediaPathFilterWrapper::~MediaPathFilterWrapper() { |
| 220 } | 220 } |
| 221 | 221 |
| 222 AsyncFileUtil::EntryList | 222 AsyncFileUtil::EntryList |
| 223 DeviceMediaAsyncFileUtil::MediaPathFilterWrapper::FilterMediaEntries( | 223 DeviceMediaAsyncFileUtil::MediaPathFilterWrapper::FilterMediaEntries( |
| 224 const AsyncFileUtil::EntryList& file_list) { | 224 const AsyncFileUtil::EntryList& file_list) { |
| 225 AsyncFileUtil::EntryList results; | 225 AsyncFileUtil::EntryList results; |
| 226 for (size_t i = 0; i < file_list.size(); ++i) { | 226 for (size_t i = 0; i < file_list.size(); ++i) { |
| 227 const fileapi::DirectoryEntry& entry = file_list[i]; | 227 const storage::DirectoryEntry& entry = file_list[i]; |
| 228 if (entry.is_directory || CheckFilePath(base::FilePath(entry.name))) { | 228 if (entry.is_directory || CheckFilePath(base::FilePath(entry.name))) { |
| 229 results.push_back(entry); | 229 results.push_back(entry); |
| 230 } | 230 } |
| 231 } | 231 } |
| 232 return results; | 232 return results; |
| 233 } | 233 } |
| 234 | 234 |
| 235 bool DeviceMediaAsyncFileUtil::MediaPathFilterWrapper::CheckFilePath( | 235 bool DeviceMediaAsyncFileUtil::MediaPathFilterWrapper::CheckFilePath( |
| 236 const base::FilePath& path) { | 236 const base::FilePath& path) { |
| 237 return media_path_filter_->Match(path); | 237 return media_path_filter_->Match(path); |
| 238 } | 238 } |
| 239 | 239 |
| 240 DeviceMediaAsyncFileUtil::~DeviceMediaAsyncFileUtil() { | 240 DeviceMediaAsyncFileUtil::~DeviceMediaAsyncFileUtil() { |
| 241 } | 241 } |
| 242 | 242 |
| 243 // static | 243 // static |
| 244 scoped_ptr<DeviceMediaAsyncFileUtil> DeviceMediaAsyncFileUtil::Create( | 244 scoped_ptr<DeviceMediaAsyncFileUtil> DeviceMediaAsyncFileUtil::Create( |
| 245 const base::FilePath& profile_path, | 245 const base::FilePath& profile_path, |
| 246 MediaFileValidationType validation_type) { | 246 MediaFileValidationType validation_type) { |
| 247 DCHECK(!profile_path.empty()); | 247 DCHECK(!profile_path.empty()); |
| 248 return make_scoped_ptr( | 248 return make_scoped_ptr( |
| 249 new DeviceMediaAsyncFileUtil(profile_path, validation_type)); | 249 new DeviceMediaAsyncFileUtil(profile_path, validation_type)); |
| 250 } | 250 } |
| 251 | 251 |
| 252 bool DeviceMediaAsyncFileUtil::SupportsStreaming( | 252 bool DeviceMediaAsyncFileUtil::SupportsStreaming( |
| 253 const fileapi::FileSystemURL& url) { | 253 const storage::FileSystemURL& url) { |
| 254 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 254 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 255 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(url); | 255 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(url); |
| 256 if (!delegate) | 256 if (!delegate) |
| 257 return false; | 257 return false; |
| 258 return delegate->IsStreaming(); | 258 return delegate->IsStreaming(); |
| 259 } | 259 } |
| 260 | 260 |
| 261 void DeviceMediaAsyncFileUtil::CreateOrOpen( | 261 void DeviceMediaAsyncFileUtil::CreateOrOpen( |
| 262 scoped_ptr<FileSystemOperationContext> context, | 262 scoped_ptr<FileSystemOperationContext> context, |
| 263 const FileSystemURL& url, | 263 const FileSystemURL& url, |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 task_runner, | 435 task_runner, |
| 436 FROM_HERE, | 436 FROM_HERE, |
| 437 base::Bind(&CreateSnapshotFileOnBlockingPool, url.path(), profile_path_), | 437 base::Bind(&CreateSnapshotFileOnBlockingPool, url.path(), profile_path_), |
| 438 base::Bind(&OnSnapshotFileCreatedRunTask, | 438 base::Bind(&OnSnapshotFileCreatedRunTask, |
| 439 base::Passed(&context), | 439 base::Passed(&context), |
| 440 callback, | 440 callback, |
| 441 url, | 441 url, |
| 442 validate_media_files())); | 442 validate_media_files())); |
| 443 } | 443 } |
| 444 | 444 |
| 445 scoped_ptr<webkit_blob::FileStreamReader> | 445 scoped_ptr<storage::FileStreamReader> |
| 446 DeviceMediaAsyncFileUtil::GetFileStreamReader( | 446 DeviceMediaAsyncFileUtil::GetFileStreamReader( |
| 447 const FileSystemURL& url, | 447 const FileSystemURL& url, |
| 448 int64 offset, | 448 int64 offset, |
| 449 const base::Time& expected_modification_time, | 449 const base::Time& expected_modification_time, |
| 450 fileapi::FileSystemContext* context) { | 450 storage::FileSystemContext* context) { |
| 451 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(url); | 451 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(url); |
| 452 if (!delegate) | 452 if (!delegate) |
| 453 return scoped_ptr<webkit_blob::FileStreamReader>(); | 453 return scoped_ptr<storage::FileStreamReader>(); |
| 454 | 454 |
| 455 DCHECK(delegate->IsStreaming()); | 455 DCHECK(delegate->IsStreaming()); |
| 456 return scoped_ptr<webkit_blob::FileStreamReader>( | 456 return scoped_ptr<storage::FileStreamReader>(new ReadaheadFileStreamReader( |
| 457 new ReadaheadFileStreamReader( | 457 new MTPFileStreamReader(context, |
| 458 new MTPFileStreamReader(context, | 458 url, |
| 459 url, | 459 offset, |
| 460 offset, | 460 expected_modification_time, |
| 461 expected_modification_time, | 461 validate_media_files()))); |
| 462 validate_media_files()))); | |
| 463 } | 462 } |
| 464 | 463 |
| 465 DeviceMediaAsyncFileUtil::DeviceMediaAsyncFileUtil( | 464 DeviceMediaAsyncFileUtil::DeviceMediaAsyncFileUtil( |
| 466 const base::FilePath& profile_path, | 465 const base::FilePath& profile_path, |
| 467 MediaFileValidationType validation_type) | 466 MediaFileValidationType validation_type) |
| 468 : profile_path_(profile_path), | 467 : profile_path_(profile_path), |
| 469 weak_ptr_factory_(this) { | 468 weak_ptr_factory_(this) { |
| 470 if (validation_type == APPLY_MEDIA_FILE_VALIDATION) { | 469 if (validation_type == APPLY_MEDIA_FILE_VALIDATION) { |
| 471 media_path_filter_wrapper_ = new MediaPathFilterWrapper; | 470 media_path_filter_wrapper_ = new MediaPathFilterWrapper; |
| 472 } | 471 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 FROM_HERE, | 507 FROM_HERE, |
| 509 base::Bind(&MediaPathFilterWrapper::FilterMediaEntries, | 508 base::Bind(&MediaPathFilterWrapper::FilterMediaEntries, |
| 510 media_path_filter_wrapper_, | 509 media_path_filter_wrapper_, |
| 511 file_list), | 510 file_list), |
| 512 base::Bind(&OnDidCheckMediaForReadDirectory, callback, has_more)); | 511 base::Bind(&OnDidCheckMediaForReadDirectory, callback, has_more)); |
| 513 } | 512 } |
| 514 | 513 |
| 515 bool DeviceMediaAsyncFileUtil::validate_media_files() const { | 514 bool DeviceMediaAsyncFileUtil::validate_media_files() const { |
| 516 return media_path_filter_wrapper_.get() != NULL; | 515 return media_path_filter_wrapper_.get() != NULL; |
| 517 } | 516 } |
| OLD | NEW |