Chromium Code Reviews| Index: webkit/fileapi/media/device_media_file_util.cc |
| diff --git a/webkit/fileapi/media/device_media_file_util.cc b/webkit/fileapi/media/device_media_file_util.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..37b04a9061521f89401aeb42d50999e2eb73eea1 |
| --- /dev/null |
| +++ b/webkit/fileapi/media/device_media_file_util.cc |
| @@ -0,0 +1,202 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "webkit/fileapi/media/device_media_file_util.h" |
| + |
| +#include "base/file_util.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/message_loop_proxy.h" |
| +#include "webkit/blob/shareable_file_reference.h" |
| +#include "webkit/fileapi/file_system_operation_context.h" |
| +#include "webkit/fileapi/file_system_url.h" |
| +#include "webkit/fileapi/isolated_context.h" |
| +#include "webkit/fileapi/media/media_device_interface_impl.h" |
| +#include "webkit/fileapi/media/media_device_map_service.h" |
| + |
| +using base::PlatformFileError; |
| +using base::PlatformFileInfo; |
| +using webkit_blob::ShareableFileReference; |
| + |
| +namespace fileapi { |
| + |
| +namespace { |
| + |
| +const FilePath::CharType kDeviceMediaFileUtilTempDir[] = |
| + FILE_PATH_LITERAL("DeviceMediaFileSystem"); |
| + |
| +} // namespace |
| + |
| +DeviceMediaFileUtil::DeviceMediaFileUtil(const FilePath& profile_path) |
| + : profile_path_(profile_path) { |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::CreateOrOpen( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, int file_flags, |
| + PlatformFile* file_handle, bool* created) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::Close( |
| + FileSystemOperationContext* context, |
| + PlatformFile file_handle) { |
| + // We don't allow open thus Close won't be called. |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::EnsureFileExists( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + bool* created) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::CreateDirectory( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + bool exclusive, |
| + bool recursive) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::GetFileInfo( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + PlatformFileInfo* file_info, |
| + FilePath* platform_path) { |
| + if (!context->media_device()) |
| + return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
| + return context->media_device()->GetFileInfo(url.path(), file_info); |
| +} |
| + |
| +FileSystemFileUtil::AbstractFileEnumerator* |
| +DeviceMediaFileUtil::CreateFileEnumerator( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + bool recursive) { |
| + if (!context->media_device()) |
| + return new FileSystemFileUtil::EmptyFileEnumerator(); |
| + return context->media_device()->CreateFileEnumerator(url.path(), recursive); |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::GetLocalFilePath( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& file_system_url, |
| + FilePath* local_file_path) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::Touch( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + const base::Time& last_access_time, |
| + const base::Time& last_modified_time) { |
| + if (!context->media_device()) |
| + return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
| + return context->media_device()->Touch(url.path(), last_access_time, |
| + last_modified_time); |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::Truncate( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + int64 length) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +bool DeviceMediaFileUtil::PathExists( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url) { |
| + if (!context->media_device()) |
| + return false; |
| + return context->media_device()->PathExists(url.path()); |
| +} |
| + |
| +bool DeviceMediaFileUtil::DirectoryExists( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url) { |
| + if (!context->media_device()) |
| + return false; |
| + return context->media_device()->DirectoryExists(url.path()); |
| +} |
| + |
| +bool DeviceMediaFileUtil::IsDirectoryEmpty( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url) { |
| + if (!context->media_device()) |
| + return false; |
| + return context->media_device()->IsDirectoryEmpty(url.path()); |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::CopyOrMoveFile( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& src_url, |
| + const FileSystemURL& dest_url, |
| + bool copy) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::CopyInForeignFile( |
| + FileSystemOperationContext* context, |
| + const FilePath& src_file_path, |
| + const FileSystemURL& dest_url) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::DeleteFile( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +PlatformFileError DeviceMediaFileUtil::DeleteSingleDirectory( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url) { |
| + return base::PLATFORM_FILE_ERROR_SECURITY; |
| +} |
| + |
| +scoped_refptr<ShareableFileReference> DeviceMediaFileUtil::CreateSnapshotFile( |
| + FileSystemOperationContext* context, |
| + const FileSystemURL& url, |
| + base::PlatformFileError* result, |
| + base::PlatformFileInfo* file_info, |
| + FilePath* local_path) { |
| + DCHECK(result); |
| + DCHECK(file_info); |
| + DCHECK(local_path); |
| + |
| + scoped_refptr<ShareableFileReference> file_ref; |
| + if (!context->media_device()) { |
| + *result = base::PLATFORM_FILE_ERROR_NOT_FOUND; |
| + return file_ref; |
| + } |
| + |
| + *result = base::PLATFORM_FILE_ERROR_FAILED; |
| + |
| + // Create a temp file in "profile_path_/kDeviceMediaFileUtilTempDir". |
| + FilePath isolated_media_file_system_dir_path = |
|
Lei Zhang
2012/08/02 21:32:03
I forgot to mention this problem because I hacked
kmadhusu
2012/08/02 22:05:39
kinuko@ is working on the fix.
kinuko
2012/08/13 16:41:03
I believe this has been fixed after http://crrev.c
kmadhusu
2012/08/13 16:43:06
Np. Thanks for the info.
|
| + profile_path_.Append(kDeviceMediaFileUtilTempDir); |
| + bool dir_exists = file_util::DirectoryExists( |
| + isolated_media_file_system_dir_path); |
| + if (!dir_exists) { |
| + if (!file_util::CreateDirectory(isolated_media_file_system_dir_path)) |
| + return file_ref; |
| + } |
| + |
| + bool file_created = file_util::CreateTemporaryFileInDir( |
| + isolated_media_file_system_dir_path, local_path); |
| + if (!file_created) |
| + return file_ref; |
| + |
| + *result = context->media_device()->CreateSnapshotFile(url.path(), *local_path, |
| + file_info); |
| + if (*result == base::PLATFORM_FILE_OK) { |
| + file_ref = ShareableFileReference::GetOrCreate( |
| + *local_path, ShareableFileReference::DELETE_ON_FINAL_RELEASE, |
| + context->file_task_runner()); |
| + } |
| + return file_ref; |
| +} |
| + |
| +} // namespace fileapi |