Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: webkit/fileapi/media/device_media_file_util.cc

Issue 10781014: Isolated FS for media devices. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + Addressed comments. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698