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

Unified Diff: Source/modules/filesystem/FileSystemCallbacks.cpp

Issue 388923004: FileSystem: Move SnapshotFileCallback into FileSystemCallbacks.h (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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
« no previous file with comments | « Source/modules/filesystem/FileSystemCallbacks.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/filesystem/FileSystemCallbacks.cpp
diff --git a/Source/modules/filesystem/FileSystemCallbacks.cpp b/Source/modules/filesystem/FileSystemCallbacks.cpp
index 708fa9c198952049645a7cea273d43fd512f808b..a1f6fc8f4b32354c6279769e366341ac8389ef29 100644
--- a/Source/modules/filesystem/FileSystemCallbacks.cpp
+++ b/Source/modules/filesystem/FileSystemCallbacks.cpp
@@ -32,6 +32,7 @@
#include "modules/filesystem/FileSystemCallbacks.h"
#include "core/dom/ExecutionContext.h"
+#include "core/fileapi/File.h"
#include "core/fileapi/FileError.h"
#include "core/html/VoidCallback.h"
#include "modules/filesystem/DOMFilePath.h"
@@ -42,6 +43,7 @@
#include "modules/filesystem/Entry.h"
#include "modules/filesystem/EntryCallback.h"
#include "modules/filesystem/ErrorCallback.h"
+#include "modules/filesystem/FileCallback.h"
#include "modules/filesystem/FileEntry.h"
#include "modules/filesystem/FileSystemCallback.h"
#include "modules/filesystem/FileWriterBase.h"
@@ -240,7 +242,7 @@ void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata)
handleEventOrScheduleCallback(m_successCallback.release(), Metadata::create(metadata));
}
-// FileWriterBaseCallbacks ----------------------------------------------------------
+// FileWriterBaseCallbacks ----------------------------------------------------
PassOwnPtr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(PassRefPtrWillBeRawPtr<FileWriterBase> fileWriter, PassOwnPtr<FileWriterBaseCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* context)
{
@@ -261,6 +263,46 @@ void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<blink::WebFileWrite
handleEventOrScheduleCallback(m_successCallback.release(), m_fileWriter.release());
}
+// SnapshotFileCallback -------------------------------------------------------
+
+PassOwnPtr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSystemBase* filesystem, const String& name, const KURL& url, PassOwnPtr<FileCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* context)
+{
+ return adoptPtr(new SnapshotFileCallback(filesystem, name, url, successCallback, errorCallback, context));
+}
+
+SnapshotFileCallback::SnapshotFileCallback(DOMFileSystemBase* filesystem, const String& name, const KURL& url, PassOwnPtr<FileCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* context)
+ : FileSystemCallbacksBase(errorCallback, filesystem, context)
+ , m_name(name)
+ , m_url(url)
+ , m_successCallback(successCallback)
+{
+}
+
+void SnapshotFileCallback::didCreateSnapshotFile(const FileMetadata& metadata, PassRefPtr<BlobDataHandle> snapshot)
+{
+ if (!m_successCallback)
+ return;
+
+ // We can't directly use the snapshot blob data handle because the content type on it hasn't been set.
+ // The |snapshot| param is here to provide a a chain of custody thru thread bridging that is held onto until
+ // *after* we've coined a File with a new handle that has the correct type set on it. This allows the
+ // blob storage system to track when a temp file can and can't be safely deleted.
+
+ // For regular filesystem types (temporary or persistent), we should not cache file metadata as it could change File semantics.
+ // For other filesystem types (which could be platform-specific ones), there's a chance that the files are on remote filesystem. If the port has returned metadata just pass it to File constructor (so we may cache the metadata).
+ // FIXME: We should use the snapshot metadata for all files.
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17746
+ if (m_fileSystem->type() == FileSystemTypeTemporary || m_fileSystem->type() == FileSystemTypePersistent) {
+ handleEventOrScheduleCallback(m_successCallback.release(), File::createWithName(metadata.platformPath, m_name));
+ } else if (!metadata.platformPath.isEmpty()) {
+ // If the platformPath in the returned metadata is given, we create a File object for the path.
+ handleEventOrScheduleCallback(m_successCallback.release(), File::createForFileSystemFile(m_name, metadata));
+ } else {
+ // Otherwise create a File from the FileSystem URL.
+ handleEventOrScheduleCallback(m_successCallback.release(), File::createForFileSystemFile(m_url, metadata));
+ }
+}
+
// VoidCallbacks --------------------------------------------------------------
PassOwnPtr<AsyncFileSystemCallbacks> VoidCallbacks::create(PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
« no previous file with comments | « Source/modules/filesystem/FileSystemCallbacks.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698