PassRefPtr<EntrySync> WorkerContext::webkitResolveLocalFileSystemSyncURL(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(); }
PassRefPtr<DOMFileSystemSync> WorkerContext::webkitRequestFileSystemSync(int type, long long size, ExceptionCode& ec) { ec = 0; if (!AsyncFileSystem::isAvailable() || !securityOrigin()->canAccessFileSystem()) { ec = FileException::SECURITY_ERR; return 0; } AsyncFileSystem::Type fileSystemType = static_cast<AsyncFileSystem::Type>(type); if (fileSystemType != AsyncFileSystem::Temporary && fileSystemType != AsyncFileSystem::Persistent && fileSystemType != AsyncFileSystem::External) { ec = FileException::INVALID_MODIFICATION_ERR; return 0; } FileSystemSyncCallbackHelper helper; LocalFileSystem::localFileSystem().requestFileSystem(this, fileSystemType, size, FileSystemCallbacks::create(helper.successCallback(), helper.errorCallback(), this), true); return helper.getResult(ec); }
PassRefPtr<DOMFileSystemSync> WorkerGlobalScopeFileSystem::webkitRequestFileSystemSync(WorkerGlobalScope* worker, int type, long long size, ExceptionCode& ec) { ec = 0; ScriptExecutionContext* secureContext = worker->scriptExecutionContext(); if (!AsyncFileSystem::isAvailable() || !secureContext->securityOrigin()->canAccessFileSystem()) { ec = FileException::SECURITY_ERR; return 0; } FileSystemType fileSystemType = static_cast<FileSystemType>(type); if (!DOMFileSystemBase::isValidType(fileSystemType)) { ec = FileException::INVALID_MODIFICATION_ERR; return 0; } FileSystemSyncCallbackHelper helper; LocalFileSystem::localFileSystem().requestFileSystem(worker, fileSystemType, size, FileSystemCallbacks::create(helper.successCallback(), helper.errorCallback(), worker, fileSystemType), SynchronousFileSystem); return helper.getResult(ec); }
PassRefPtr<DOMFileSystemSync> WorkerGlobalScopeFileSystem::webkitRequestFileSystemSync(WorkerGlobalScope* worker, int type, long long size, ExceptionState& exceptionState) { ExecutionContext* secureContext = worker->executionContext(); if (!secureContext->securityOrigin()->canAccessFileSystem()) { exceptionState.throwSecurityError(FileError::securityErrorMessage); return 0; } FileSystemType fileSystemType = static_cast<FileSystemType>(type); if (!DOMFileSystemBase::isValidType(fileSystemType)) { exceptionState.throwDOMException(InvalidModificationError, "the type must be TEMPORARY or PERSISTENT."); return 0; } FileSystemSyncCallbackHelper helper; OwnPtr<AsyncFileSystemCallbacks> callbacks = FileSystemCallbacks::create(helper.successCallback(), helper.errorCallback(), worker, fileSystemType); callbacks->setShouldBlockUntilCompletion(true); LocalFileSystem::from(worker)->requestFileSystem(worker, fileSystemType, size, callbacks.release()); return helper.getResult(exceptionState); }