summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-28 12:31:13 +0000
committerkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-28 12:31:13 +0000
commit17a2e1d18d81137265fac273f0218f0d47795625 (patch)
tree1f5d6560901f271eb6f9a62d89e634f2549b9752
parent945604a562be79e66de3d247fe2eaaa06dc4f777 (diff)
downloadchromium_src-17a2e1d18d81137265fac273f0218f0d47795625.zip
chromium_src-17a2e1d18d81137265fac273f0218f0d47795625.tar.gz
chromium_src-17a2e1d18d81137265fac273f0218f0d47795625.tar.bz2
No media-file validation mode for DeviceMediaAsyncUtil.
CreateSnapshotFile and GetFileStreamReader used to sniff the content of the files and returned error if it does not look like media data. This CL adds a mode to disable the check, and use the disabled mode in MTP mounting in Chrome OS file manager. BUG=367004 Review URL: https://codereview.chromium.org/251723004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266524 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.cc7
-rw-r--r--chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc43
-rw-r--r--chrome/browser/media_galleries/fileapi/device_media_async_file_util.h14
-rw-r--r--chrome/browser/media_galleries/fileapi/media_file_system_backend.cc3
-rw-r--r--chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.cc5
-rw-r--r--chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h3
6 files changed, 48 insertions, 27 deletions
diff --git a/chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.cc b/chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.cc
index 773e13d..27a01a2 100644
--- a/chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.cc
+++ b/chrome/browser/chromeos/fileapi/mtp_file_system_backend_delegate.cc
@@ -13,7 +13,8 @@ namespace chromeos {
MTPFileSystemBackendDelegate::MTPFileSystemBackendDelegate(
const base::FilePath& storage_partition_path)
: device_media_async_file_util_(
- DeviceMediaAsyncFileUtil::Create(storage_partition_path)) {
+ DeviceMediaAsyncFileUtil::Create(storage_partition_path,
+ NO_MEDIA_FILE_VALIDATION)) {
}
MTPFileSystemBackendDelegate::~MTPFileSystemBackendDelegate() {
@@ -34,10 +35,6 @@ MTPFileSystemBackendDelegate::CreateFileStreamReader(
fileapi::FileSystemContext* context) {
DCHECK_EQ(fileapi::kFileSystemTypeDeviceMediaAsFileStorage, url.type());
- // TODO(kinaba): Returned MediaFileStreamReader verifies file header and
- // stops reading if the stream does not represent a media file. We might
- // want to remove the verification here since we want to mount MTP devices
- // as normal file storage in Chrome OS file manager.
return device_media_async_file_util_->GetFileStreamReader(
url, offset, expected_modification_time, context);
}
diff --git a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
index 9ca5faa..18f3018 100644
--- a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
+++ b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
@@ -64,9 +64,10 @@ DeviceMediaAsyncFileUtil::~DeviceMediaAsyncFileUtil() {
// static
DeviceMediaAsyncFileUtil* DeviceMediaAsyncFileUtil::Create(
- const base::FilePath& profile_path) {
+ const base::FilePath& profile_path,
+ MediaFileValidationType validation_type) {
DCHECK(!profile_path.empty());
- return new DeviceMediaAsyncFileUtil(profile_path);
+ return new DeviceMediaAsyncFileUtil(profile_path, validation_type);
}
bool DeviceMediaAsyncFileUtil::SupportsStreaming(
@@ -283,12 +284,15 @@ DeviceMediaAsyncFileUtil::GetFileStreamReader(
DCHECK(delegate->IsStreaming());
return scoped_ptr<webkit_blob::FileStreamReader>(
new ReadaheadFileStreamReader(new MTPFileStreamReader(
- context, url, offset, expected_modification_time)));
+ context, url, offset, expected_modification_time,
+ validation_type_ == APPLY_MEDIA_FILE_VALIDATION)));
}
DeviceMediaAsyncFileUtil::DeviceMediaAsyncFileUtil(
- const base::FilePath& profile_path)
+ const base::FilePath& profile_path,
+ MediaFileValidationType validation_type)
: profile_path_(profile_path),
+ validation_type_(validation_type),
weak_ptr_factory_(this) {
}
@@ -322,18 +326,25 @@ void DeviceMediaAsyncFileUtil::OnDidCreateSnapshotFile(
base::SequencedTaskRunner* media_task_runner,
const base::File::Info& file_info,
const base::FilePath& platform_path) {
- base::PostTaskAndReplyWithResult(
- media_task_runner,
- FROM_HERE,
- base::Bind(&NativeMediaFileUtil::IsMediaFile, platform_path),
- base::Bind(&DeviceMediaAsyncFileUtil::OnDidCheckMedia,
- weak_ptr_factory_.GetWeakPtr(),
- callback,
- file_info,
- ShareableFileReference::GetOrCreate(
- platform_path,
- ShareableFileReference::DELETE_ON_FINAL_RELEASE,
- media_task_runner)));
+ scoped_refptr<webkit_blob::ShareableFileReference> file =
+ ShareableFileReference::GetOrCreate(
+ platform_path,
+ ShareableFileReference::DELETE_ON_FINAL_RELEASE,
+ media_task_runner);
+
+ if (validation_type_ == APPLY_MEDIA_FILE_VALIDATION) {
+ base::PostTaskAndReplyWithResult(
+ media_task_runner,
+ FROM_HERE,
+ base::Bind(&NativeMediaFileUtil::IsMediaFile, platform_path),
+ base::Bind(&DeviceMediaAsyncFileUtil::OnDidCheckMedia,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback,
+ file_info,
+ file));
+ } else {
+ OnDidCheckMedia(callback, file_info, file, base::File::FILE_OK);
+ }
}
void DeviceMediaAsyncFileUtil::OnDidCheckMedia(
diff --git a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h
index d7afcd1..83f58da 100644
--- a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h
+++ b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.h
@@ -30,6 +30,11 @@ namespace webkit_blob {
class FileStreamReader;
}
+enum MediaFileValidationType {
+ NO_MEDIA_FILE_VALIDATION,
+ APPLY_MEDIA_FILE_VALIDATION,
+};
+
class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil {
public:
virtual ~DeviceMediaAsyncFileUtil();
@@ -37,7 +42,9 @@ class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil {
// Returns an instance of DeviceMediaAsyncFileUtil. Returns NULL if
// asynchronous operation is not supported. Callers own the returned
// object.
- static DeviceMediaAsyncFileUtil* Create(const base::FilePath& profile_path);
+ static DeviceMediaAsyncFileUtil* Create(
+ const base::FilePath& profile_path,
+ MediaFileValidationType validation_type);
bool SupportsStreaming(const fileapi::FileSystemURL& url);
@@ -124,7 +131,8 @@ class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil {
private:
// Use Create() to get an instance of DeviceMediaAsyncFileUtil.
- explicit DeviceMediaAsyncFileUtil(const base::FilePath& profile_path);
+ DeviceMediaAsyncFileUtil(const base::FilePath& profile_path,
+ MediaFileValidationType validation_type);
// Called when GetFileInfo method call succeeds. |file_info| contains the
// file details of the requested url. |callback| is invoked to complete the
@@ -201,6 +209,8 @@ class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil {
// Profile path.
const base::FilePath profile_path_;
+ const MediaFileValidationType validation_type_;
+
// For callbacks that may run after destruction.
base::WeakPtrFactory<DeviceMediaAsyncFileUtil> weak_ptr_factory_;
diff --git a/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc b/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc
index 53cecee..929ce85 100644
--- a/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc
+++ b/chrome/browser/media_galleries/fileapi/media_file_system_backend.cc
@@ -127,7 +127,8 @@ MediaFileSystemBackend::MediaFileSystemBackend(
native_media_file_util_(
new NativeMediaFileUtil(media_path_filter_.get())),
device_media_async_file_util_(
- DeviceMediaAsyncFileUtil::Create(profile_path_))
+ DeviceMediaAsyncFileUtil::Create(profile_path_,
+ APPLY_MEDIA_FILE_VALIDATION))
#if defined(OS_WIN) || defined(OS_MACOSX)
,
picasa_file_util_(new picasa::PicasaFileUtil(media_path_filter_.get())),
diff --git a/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.cc b/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.cc
index 3ec83bc..990f774 100644
--- a/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.cc
+++ b/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.cc
@@ -67,12 +67,13 @@ MTPFileStreamReader::MTPFileStreamReader(
fileapi::FileSystemContext* file_system_context,
const fileapi::FileSystemURL& url,
int64 initial_offset,
- const base::Time& expected_modification_time)
+ const base::Time& expected_modification_time,
+ bool do_media_header_validation)
: file_system_context_(file_system_context),
url_(url),
current_offset_(initial_offset),
expected_modification_time_(expected_modification_time),
- media_header_validated_(false),
+ media_header_validated_(!do_media_header_validation),
weak_factory_(this) {
}
diff --git a/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h b/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h
index 0b3e61e..1b09717 100644
--- a/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h
+++ b/chrome/browser/media_galleries/fileapi/mtp_file_stream_reader.h
@@ -27,7 +27,8 @@ class MTPFileStreamReader
MTPFileStreamReader(fileapi::FileSystemContext* file_system_context,
const fileapi::FileSystemURL& url,
int64 initial_offset,
- const base::Time& expected_modification_time);
+ const base::Time& expected_modification_time,
+ bool do_media_header_validation);
virtual ~MTPFileStreamReader();