Index: Source/modules/filesystem/LocalFileSystem.cpp |
diff --git a/Source/modules/filesystem/LocalFileSystem.cpp b/Source/modules/filesystem/LocalFileSystem.cpp |
index 98d046d5beecfa556938bcf35821c9b5f255a86a..6a2a3b4fb9f533487302fbae251e7c545952fcc0 100644 |
--- a/Source/modules/filesystem/LocalFileSystem.cpp |
+++ b/Source/modules/filesystem/LocalFileSystem.cpp |
@@ -41,8 +41,10 @@ |
#include "modules/filesystem/FileSystemClient.h" |
#include "modules/filesystem/InspectorFileSystemAgent.h" |
#include "platform/AsyncFileSystemCallbacks.h" |
+#include "platform/PermissionCallbacks.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebFileSystem.h" |
+#include "wtf/Functional.h" |
namespace WebCore { |
@@ -66,16 +68,16 @@ LocalFileSystem::~LocalFileSystem() |
void LocalFileSystem::resolveURL(ExecutionContext* context, const KURL& fileSystemURL, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
{ |
- if (!client() || !client()->allowFileSystem(context)) { |
+ if (!client() || !client()->requestFileSystemAccessSync(context)) { |
kinuko
2014/05/16 10:47:05
Why we call Sync one here? resolveURL could be ca
Xi Han
2014/05/16 19:48:44
Great catch! The deleteFileSystem is the same case
|
context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks)); |
return; |
} |
blink::Platform::current()->fileSystem()->resolveURL(fileSystemURL, callbacks); |
} |
-void LocalFileSystem::requestFileSystem(ExecutionContext* context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
+void LocalFileSystem::requestFileSystemSync(ExecutionContext* context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
{ |
- if (!client() || !client()->allowFileSystem(context)) { |
+ if (!client() || !client()->requestFileSystemAccessSync(context)) { |
context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks)); |
return; |
} |
@@ -83,12 +85,38 @@ void LocalFileSystem::requestFileSystem(ExecutionContext* context, FileSystemTyp |
blink::Platform::current()->fileSystem()->openFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks); |
} |
+void LocalFileSystem::requestFileSystemAsync(ExecutionContext* context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
+{ |
+ if (!client()) { |
+ context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks)); |
+ return; |
+ } |
+ client()->requestFileSystemAccessAsync(context, PermissionCallbacks::create( |
+ bind(&LocalFileSystem::fileSystemAllowedCallbacks, this, context, type, callbacks), |
kinuko
2014/05/16 10:47:05
I haven't looked deeper into the bind implementati
Xi Han
2014/05/16 19:48:44
Done.
|
+ bind(&LocalFileSystem::fileSystemNotAllowedCallbacks, this, context, callbacks))); |
+} |
+ |
+void LocalFileSystem::fileSystemNotAllowedCallbacks( |
+ ExecutionContext* context, |
+ PassOwnPtr<AsyncFileSystemCallbacks> callbacks) { |
+ context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks)); |
+} |
+ |
+void LocalFileSystem::fileSystemAllowedCallbacks( |
+ ExecutionContext* context, |
+ FileSystemType type, |
+ PassOwnPtr<AsyncFileSystemCallbacks> callbacks) { |
+ KURL storagePartition = KURL(KURL(), context->securityOrigin()->toString()); |
+ blink::Platform::current()->fileSystem()->openFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks); |
+} |
+ |
void LocalFileSystem::deleteFileSystem(ExecutionContext* context, FileSystemType type, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
{ |
ASSERT(context); |
ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument()); |
- if (!client() || !client()->allowFileSystem(context)) { |
+ |
+ if (!client() || !client()->requestFileSystemAccessSync(context)) { |
context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks)); |
return; |
} |