diff options
author | Steve Block <steveblock@google.com> | 2011-05-25 19:08:45 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-06-08 13:51:31 +0100 |
commit | 2bde8e466a4451c7319e3a072d118917957d6554 (patch) | |
tree | 28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Source/WebCore/workers | |
parent | 6939c99b71d9372d14a0c74a772108052e8c48c8 (diff) | |
download | external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2 |
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Source/WebCore/workers')
-rw-r--r-- | Source/WebCore/workers/DefaultSharedWorkerRepository.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/workers/WorkerContext.cpp | 50 | ||||
-rw-r--r-- | Source/WebCore/workers/WorkerContext.h | 6 | ||||
-rw-r--r-- | Source/WebCore/workers/WorkerContext.idl | 4 |
4 files changed, 60 insertions, 2 deletions
diff --git a/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp b/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp index c20cd30..31b2d4f 100644 --- a/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp +++ b/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp @@ -58,7 +58,7 @@ namespace WebCore { -class SharedWorkerProxy : public ThreadSafeShared<SharedWorkerProxy>, public WorkerLoaderProxy, public WorkerReportingProxy { +class SharedWorkerProxy : public ThreadSafeRefCounted<SharedWorkerProxy>, public WorkerLoaderProxy, public WorkerReportingProxy { public: static PassRefPtr<SharedWorkerProxy> create(const String& name, const KURL& url, PassRefPtr<SecurityOrigin> origin) { return adoptRef(new SharedWorkerProxy(name, url, origin)); } diff --git a/Source/WebCore/workers/WorkerContext.cpp b/Source/WebCore/workers/WorkerContext.cpp index acf7f04..3b14e59 100644 --- a/Source/WebCore/workers/WorkerContext.cpp +++ b/Source/WebCore/workers/WorkerContext.cpp @@ -67,9 +67,12 @@ #if ENABLE(FILE_SYSTEM) #include "AsyncFileSystem.h" +#include "DirectoryEntrySync.h" #include "DOMFileSystem.h" +#include "DOMFileSystemBase.h" #include "DOMFileSystemSync.h" #include "ErrorCallback.h" +#include "FileEntrySync.h" #include "FileError.h" #include "FileException.h" #include "FileSystemCallback.h" @@ -377,6 +380,53 @@ PassRefPtr<DOMFileSystemSync> WorkerContext::requestFileSystemSync(int type, lon return helper.getResult(ec); } +void WorkerContext::resolveLocalFileSystemURL(const String& url, PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) +{ + KURL completedURL = completeURL(url); + if (!AsyncFileSystem::isAvailable() || !securityOrigin()->canAccessFileSystem() || !securityOrigin()->canRequest(completedURL)) { + DOMFileSystem::scheduleCallback(this, errorCallback, FileError::create(FileError::SECURITY_ERR)); + return; + } + + AsyncFileSystem::Type type; + String filePath; + if (!completedURL.isValid() || !DOMFileSystemBase::crackFileSystemURL(completedURL, type, filePath)) { + DOMFileSystem::scheduleCallback(this, errorCallback, FileError::create(FileError::ENCODING_ERR)); + return; + } + + LocalFileSystem::localFileSystem().readFileSystem(this, type, ResolveURICallbacks::create(successCallback, errorCallback, this, filePath)); +} + +PassRefPtr<EntrySync> WorkerContext::resolveLocalFileSystemSyncURL(const String& url, ExceptionCode& ec) +{ + ec = 0; + KURL completedURL = completeURL(url); + if (!AsyncFileSystem::isAvailable() || !securityOrigin()->canAccessFileSystem() || !securityOrigin()->canRequest(completedURL)) { + ec = FileException::SECURITY_ERR; + return 0; + } + + AsyncFileSystem::Type type; + String filePath; + if (!completedURL.isValid() || !DOMFileSystemBase::crackFileSystemURL(completedURL, type, filePath)) { + ec = FileException::ENCODING_ERR; + return 0; + } + + FileSystemSyncCallbackHelper readFileSystemHelper; + LocalFileSystem::localFileSystem().readFileSystem(this, type, FileSystemCallbacks::create(readFileSystemHelper.successCallback(), readFileSystemHelper.errorCallback(), this), true); + RefPtr<DOMFileSystemSync> fileSystem = readFileSystemHelper.getResult(ec); + if (!fileSystem) + return 0; + + RefPtr<EntrySync> entry = fileSystem->root()->getDirectory(filePath, 0, ec); + if (ec == FileException::TYPE_MISMATCH_ERR) + return fileSystem->root()->getFile(filePath, 0, ec); + + return entry.release(); +} + COMPILE_ASSERT(static_cast<int>(WorkerContext::TEMPORARY) == static_cast<int>(AsyncFileSystem::Temporary), enum_mismatch); COMPILE_ASSERT(static_cast<int>(WorkerContext::PERSISTENT) == static_cast<int>(AsyncFileSystem::Persistent), enum_mismatch); #endif diff --git a/Source/WebCore/workers/WorkerContext.h b/Source/WebCore/workers/WorkerContext.h index 2e802f2..d2ccb11 100644 --- a/Source/WebCore/workers/WorkerContext.h +++ b/Source/WebCore/workers/WorkerContext.h @@ -50,6 +50,8 @@ namespace WebCore { class Database; class DatabaseCallback; class DatabaseSync; + class EntryCallback; + class EntrySync; class ErrorCallback; class FileSystemCallback; class NotificationCenter; @@ -129,8 +131,10 @@ namespace WebCore { TEMPORARY, PERSISTENT, }; - void requestFileSystem(int type, long long size, PassRefPtr<FileSystemCallback>, PassRefPtr<ErrorCallback>); + void requestFileSystem(int type, long long size, PassRefPtr<FileSystemCallback> successCallback, PassRefPtr<ErrorCallback>); PassRefPtr<DOMFileSystemSync> requestFileSystemSync(int type, long long size, ExceptionCode&); + void resolveLocalFileSystemURL(const String& url, PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback>); + PassRefPtr<EntrySync> resolveLocalFileSystemSyncURL(const String& url, ExceptionCode&); #endif // These methods are used for GC marking. See JSWorkerContext::markChildren(MarkStack&) in diff --git a/Source/WebCore/workers/WorkerContext.idl b/Source/WebCore/workers/WorkerContext.idl index 179221e..7b2af6b 100644 --- a/Source/WebCore/workers/WorkerContext.idl +++ b/Source/WebCore/workers/WorkerContext.idl @@ -110,8 +110,12 @@ module threads { const unsigned short PERSISTENT = 1; [EnabledAtRuntime=FileSystem] void requestFileSystem(in unsigned short type, in long long size, in [Callback, Optional] FileSystemCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback); [EnabledAtRuntime=FileSystem] DOMFileSystemSync requestFileSystemSync(in unsigned short type, in long long size) raises (FileException); + [EnabledAtRuntime=FileSystem] void resolveLocalFileSystemURL(in DOMString url, in [Callback, Optional] EntryCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback); + [EnabledAtRuntime=FileSystem] EntrySync resolveLocalFileSystemSyncURL(in DOMString url) raises (FileException); attribute [EnabledAtRuntime=FileSystem] FlagsConstructor Flags; + attribute [EnabledAtRuntime=FileSystem] FileErrorConstructor FileError; + attribute [EnabledAtRuntime=FileSystem] FileExceptionConstructor FileException; #endif attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator |