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

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: Changes are made. 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..8ef69c5f5d8e6595abacaaf90d085a7b5320b796 100644
--- a/Source/modules/filesystem/LocalFileSystem.cpp
+++ b/Source/modules/filesystem/LocalFileSystem.cpp
@@ -41,6 +41,7 @@
#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"
@@ -66,36 +67,89 @@ LocalFileSystem::~LocalFileSystem()
void LocalFileSystem::resolveURL(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;
+ }
+ requestFileSystemAccesssAsyncInternal(contextPtr, bind(&LocalFileSystem::resolveURLInternal, this, fileSystemURL, callbacks), bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, callbacks));
kinuko 2014/05/21 07:24:24 Um, looking this closely actually this wouldn't wo
Xi Han 2014/05/21 19:50:05 1. Great catch! I introduced a wrapper RefCounted
kinuko 2014/05/22 10:37:42 Can't the common method do just like: { if (!
Xi Han 2014/05/22 14:21:41 Thank you for the correction and the rough patch.
}
void LocalFileSystem::requestFileSystem(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;
+ }
+ requestFileSystemAccesssAsyncInternal(contextPtr, bind(&LocalFileSystem::fileSystemAllowedInternal, this, contextPtr, type, callbacks), bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, contextPtr, callbacks));
}
void LocalFileSystem::deleteFileSystem(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;
}
+ requestFileSystemAccesssAsyncInternal(contextPtr, 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);
}
+void LocalFileSystem::requestFileSystemAccesssAsyncInternal(
+ PassRefPtr<ExecutionContext> context,
+ const Closure& allowedCallback,
+ const Closure& deniedCallback) {
+ client()->requestFileSystemAccessAsync(context.get(), PermissionCallbacks::create(allowedCallback, deniedCallback));
+}
+
LocalFileSystem::LocalFileSystem(PassOwnPtr<FileSystemClient> client)
: m_client(client)
{

Powered by Google App Engine
This is Rietveld 408576698