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

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

Issue 277353002: Use asynchronized api for file system request. [blink] (3/4) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update implemetation of LocalFileSystem. Created 6 years, 7 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: Source/modules/filesystem/LocalFileSystem.cpp
diff --git a/Source/modules/filesystem/LocalFileSystem.cpp b/Source/modules/filesystem/LocalFileSystem.cpp
index 98d046d5beecfa556938bcf35821c9b5f255a86a..cdf4609a485df539e45586cdde694f7bc209f453 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 {
@@ -64,34 +66,86 @@ LocalFileSystem::~LocalFileSystem()
{
}
-void LocalFileSystem::resolveURL(ExecutionContext* context, const KURL& fileSystemURL, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+void LocalFileSystem::resolveURL(PassRefPtr<ExecutionContext> context, const KURL& fileSystemURL, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
{
- if (!client() || !client()->allowFileSystem(context)) {
- context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks));
+ RefPtr<ExecutionContext> contextPtr = context;
+ if (!client()) {
+ fileSystemNotAllowedInternal(contextPtr, callbacks);
return;
}
- blink::Platform::current()->fileSystem()->resolveURL(fileSystemURL, callbacks);
+ ASSERT(contextPtr);
+ if (!contextPtr->isDocument()) {
+ if (!client()->requestFileSystemAccessSync(contextPtr.get())) {
+ fileSystemNotAllowedInternal(contextPtr, callbacks);
+ return;
+ }
+ resolveURLInternal(fileSystemURL, callbacks);
+ return;
+ }
+ client()->requestFileSystemAccessAsync(contextPtr.get(), PermissionCallbacks::create(
+ bind(&LocalFileSystem::resolveURLInternal, this, fileSystemURL, callbacks),
+ bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, callbacks)));
kinuko 2014/05/19 09:02:46 I think these patterns can be probably implemented
Xi Han 2014/05/20 16:13:32 Done.
}
-void LocalFileSystem::requestFileSystem(ExecutionContext* context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+void LocalFileSystem::requestFileSystem(PassRefPtr<ExecutionContext> context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
{
- if (!client() || !client()->allowFileSystem(context)) {
- context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks));
+ RefPtr<ExecutionContext> contextPtr = context;
+ if (!client()) {
+ fileSystemNotAllowedInternal(contextPtr, callbacks);
return;
}
- KURL storagePartition = KURL(KURL(), context->securityOrigin()->toString());
- blink::Platform::current()->fileSystem()->openFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks);
+ ASSERT(contextPtr);
+ if (!contextPtr->isDocument()) {
+ if (!client()->requestFileSystemAccessSync(contextPtr.get())) {
+ fileSystemNotAllowedInternal(contextPtr, callbacks);
+ return;
+ }
+ fileSystemAllowedInternal(contextPtr, type, callbacks);
+ return;
+ }
+ client()->requestFileSystemAccessAsync(contextPtr.get(), PermissionCallbacks::create(
+ bind(&LocalFileSystem::fileSystemAllowedInternal, this, contextPtr, type, callbacks),
+ bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, callbacks)));
}
-void LocalFileSystem::deleteFileSystem(ExecutionContext* context, FileSystemType type, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+void LocalFileSystem::deleteFileSystem(PassRefPtr<ExecutionContext> context, FileSystemType type, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
{
- ASSERT(context);
- ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument());
-
- if (!client() || !client()->allowFileSystem(context)) {
- context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks));
+ RefPtr<ExecutionContext> contextPtr = context;
+ ASSERT(contextPtr);
+ ASSERT_WITH_SECURITY_IMPLICATION(contextPtr->isDocument());
+ if (!client()) {
+ fileSystemNotAllowedInternal(contextPtr, callbacks);
return;
}
+ client()->requestFileSystemAccessAsync(contextPtr.get(), PermissionCallbacks::create(
+ bind(&LocalFileSystem::deleteFileSystemInternal, this, contextPtr, type, callbacks),
+ bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, callbacks)));
+}
+
+void LocalFileSystem::fileSystemNotAllowedInternal(
+ PassRefPtr<ExecutionContext> context,
+ PassOwnPtr<AsyncFileSystemCallbacks> callbacks) {
+ context->postTask(createCallbackTask(&fileSystemNotAllowed, callbacks));
+}
+
+void LocalFileSystem::fileSystemAllowedInternal(
+ PassRefPtr<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::resolveURLInternal(
+ const KURL& fileSystemURL,
+ PassOwnPtr<AsyncFileSystemCallbacks> callbacks) {
+ blink::Platform::current()->fileSystem()->resolveURL(fileSystemURL, callbacks);
+}
+
+void LocalFileSystem::deleteFileSystemInternal(
+ PassRefPtr<ExecutionContext> context,
+ FileSystemType type,
+ PassOwnPtr<AsyncFileSystemCallbacks> callbacks) {
KURL storagePartition = KURL(KURL(), context->securityOrigin()->toString());
blink::Platform::current()->fileSystem()->deleteFileSystem(storagePartition, static_cast<blink::WebFileSystemType>(type), callbacks);
}

Powered by Google App Engine
This is Rietveld 408576698