Index: Source/modules/filesystem/LocalFileSystem.cpp |
diff --git a/Source/modules/filesystem/LocalFileSystem.cpp b/Source/modules/filesystem/LocalFileSystem.cpp |
index 5b40daf1151db5223493e4b50c40f5299c5c547e..0d92f4c8bc048a49d35b07fd5bd792af68a4a92c 100644 |
--- a/Source/modules/filesystem/LocalFileSystem.cpp |
+++ b/Source/modules/filesystem/LocalFileSystem.cpp |
@@ -50,9 +50,9 @@ namespace blink { |
namespace { |
-void fileSystemNotAllowed(ExecutionContext*, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
+void reportFailure(ExecutionContext*, PassOwnPtr<AsyncFileSystemCallbacks> callbacks, FileError::ErrorCode error) |
{ |
- callbacks->didFail(FileError::ABORT_ERR); |
+ callbacks->didFail(error); |
} |
} // namespace |
@@ -84,10 +84,11 @@ LocalFileSystem::~LocalFileSystem() |
void LocalFileSystem::resolveURL(ExecutionContext* context, const KURL& fileSystemURL, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
{ |
+ RefPtrWillBeRawPtr<ExecutionContext> contextPtr(context); |
RefPtr<CallbackWrapper> wrapper = adoptRef(new CallbackWrapper(callbacks)); |
requestFileSystemAccessInternal(context, |
- bind(&LocalFileSystem::resolveURLInternal, this, fileSystemURL, wrapper), |
- bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, PassRefPtrWillBeRawPtr<ExecutionContext>(context), wrapper)); |
+ bind(&LocalFileSystem::resolveURLInternal, this, contextPtr, fileSystemURL, wrapper), |
+ bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, wrapper)); |
} |
void LocalFileSystem::requestFileSystem(ExecutionContext* context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
@@ -111,6 +112,14 @@ void LocalFileSystem::deleteFileSystem(ExecutionContext* context, FileSystemType |
bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, wrapper)); |
} |
+WebFileSystem* LocalFileSystem::fileSystem() const |
+{ |
+ Platform* platform = Platform::current(); |
+ if (!platform) |
+ return nullptr; |
+ return Platform::current()->fileSystem(); |
kinuko
2014/08/11 16:03:49
Is the crash happening because Platform::shutdown(
tzik
2014/08/12 06:12:11
Right, we still can't assume all workers join to t
|
+} |
+ |
void LocalFileSystem::requestFileSystemAccessInternal(ExecutionContext* context, const Closure& allowed, const Closure& denied) |
{ |
if (!client()) { |
@@ -128,11 +137,18 @@ void LocalFileSystem::requestFileSystemAccessInternal(ExecutionContext* context, |
client()->requestFileSystemAccessAsync(context, PermissionCallbacks::create(allowed, denied)); |
} |
+void LocalFileSystem::fileSystemNotAvailable( |
+ PassRefPtrWillBeRawPtr<ExecutionContext> context, |
+ PassRefPtr<CallbackWrapper> callbacks) |
+{ |
+ context->postTask(createCrossThreadTask(&reportFailure, callbacks->release(), FileError::ABORT_ERR)); |
+} |
+ |
void LocalFileSystem::fileSystemNotAllowedInternal( |
PassRefPtrWillBeRawPtr<ExecutionContext> context, |
PassRefPtr<CallbackWrapper> callbacks) |
{ |
- context->postTask(createCrossThreadTask(&fileSystemNotAllowed, callbacks->release())); |
+ context->postTask(createCrossThreadTask(&reportFailure, callbacks->release(), FileError::ABORT_ERR)); |
} |
void LocalFileSystem::fileSystemAllowedInternal( |
@@ -140,15 +156,25 @@ void LocalFileSystem::fileSystemAllowedInternal( |
FileSystemType type, |
PassRefPtr<CallbackWrapper> callbacks) |
{ |
+ if (!fileSystem()) { |
+ fileSystemNotAvailable(context, callbacks); |
+ return; |
+ } |
+ |
KURL storagePartition = KURL(KURL(), context->securityOrigin()->toString()); |
- blink::Platform::current()->fileSystem()->openFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks->release()); |
+ fileSystem()->openFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks->release()); |
} |
void LocalFileSystem::resolveURLInternal( |
+ PassRefPtrWillBeRawPtr<ExecutionContext> context, |
const KURL& fileSystemURL, |
PassRefPtr<CallbackWrapper> callbacks) |
{ |
- blink::Platform::current()->fileSystem()->resolveURL(fileSystemURL, callbacks->release()); |
+ if (!fileSystem()) { |
+ fileSystemNotAvailable(context, callbacks); |
+ return; |
+ } |
+ fileSystem()->resolveURL(fileSystemURL, callbacks->release()); |
} |
void LocalFileSystem::deleteFileSystemInternal( |
@@ -156,8 +182,12 @@ void LocalFileSystem::deleteFileSystemInternal( |
FileSystemType type, |
PassRefPtr<CallbackWrapper> callbacks) |
{ |
+ if (!fileSystem()) { |
+ fileSystemNotAvailable(context, callbacks); |
+ return; |
+ } |
KURL storagePartition = KURL(KURL(), context->securityOrigin()->toString()); |
- blink::Platform::current()->fileSystem()->deleteFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks->release()); |
+ fileSystem()->deleteFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks->release()); |
} |
LocalFileSystem::LocalFileSystem(PassOwnPtr<FileSystemClient> client) |