1a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch/* 2a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * Copyright (C) 2010 Google Inc. All rights reserved. 3a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * 4a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * Redistribution and use in source and binary forms, with or without 5a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * modification, are permitted provided that the following conditions are 6a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * met: 7a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * 8a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * * Redistributions of source code must retain the above copyright 9a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * notice, this list of conditions and the following disclaimer. 10a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * * Redistributions in binary form must reproduce the above 11a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * copyright notice, this list of conditions and the following disclaimer 12a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * in the documentation and/or other materials provided with the 13a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * distribution. 14a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * * Neither the name of Google Inc. nor the names of its 15a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * contributors may be used to endorse or promote products derived from 16a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * this software without specific prior written permission. 17a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * 18a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch */ 30a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 31a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "config.h" 32a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WorkerAsyncFileSystemChromium.h" 33a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 34a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(FILE_SYSTEM) 35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 36a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "AsyncFileSystemCallbacks.h" 376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "FileMetadata.h" 38a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "FileSystem.h" 39a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "NotImplemented.h" 40a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebFileSystem.h" 41a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebFileSystemCallbacksImpl.h" 426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "WebFileWriter.h" 43a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebKit.h" 44a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebKitClient.h" 45a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebWorkerBase.h" 466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "WorkerAsyncFileWriterChromium.h" 47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WorkerContext.h" 48a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WorkerFileSystemCallbacksBridge.h" 49a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WorkerScriptController.h" 50a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WorkerThread.h" 51a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <wtf/text/CString.h> 52a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 53a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochusing namespace WebKit; 54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochnamespace WebCore { 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 57a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochstatic const char fileSystemOperationsMode[] = "fileSystemOperationsMode"; 58a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 592fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWorkerAsyncFileSystemChromium::WorkerAsyncFileSystemChromium(ScriptExecutionContext* context, AsyncFileSystem::Type type, const String& rootPath, bool synchronous) 602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : AsyncFileSystem(type, rootPath) 61a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_scriptExecutionContext(context) 62a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_webFileSystem(WebKit::webKitClient()->fileSystem()) 63a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_workerContext(static_cast<WorkerContext*>(context)) 64a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_synchronous(synchronous) 65a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 66a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ASSERT(m_webFileSystem); 67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ASSERT(m_scriptExecutionContext->isWorkerContext()); 68a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 69a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WorkerLoaderProxy* workerLoaderProxy = &m_workerContext->thread()->workerLoaderProxy(); 70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_worker = static_cast<WebWorkerBase*>(workerLoaderProxy); 71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 72a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 73a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochWorkerAsyncFileSystemChromium::~WorkerAsyncFileSystemChromium() 74a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 75a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 76a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 77a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochbool WorkerAsyncFileSystemChromium::waitForOperationToComplete() 78a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!m_bridgeForCurrentOperation.get()) 80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 81a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 82a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch RefPtr<WorkerFileSystemCallbacksBridge> bridge = m_bridgeForCurrentOperation.release(); 83a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (m_workerContext->thread()->runLoop().runInMode(m_workerContext, m_modeForCurrentOperation) == MessageQueueTerminated) { 84a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch bridge->stop(); 85a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 86a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 87a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return true; 88a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 89a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 90a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::move(const String& sourcePath, const String& destinationPath, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 91a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 92a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postMoveToMainThread(m_webFileSystem, sourcePath, destinationPath, m_modeForCurrentOperation); 93a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 94a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 95a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::copy(const String& sourcePath, const String& destinationPath, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 96a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 97a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postCopyToMainThread(m_webFileSystem, sourcePath, destinationPath, m_modeForCurrentOperation); 98a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 99a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 100a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::remove(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 101a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 102a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postRemoveToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 103a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 104a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 105a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::removeRecursively(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 106a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 107a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postRemoveRecursivelyToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 108a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 109a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 110a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::readMetadata(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 111a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 112a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postReadMetadataToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 113a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 114a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 115a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::createFile(const String& path, bool exclusive, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 116a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 117a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postCreateFileToMainThread(m_webFileSystem, path, exclusive, m_modeForCurrentOperation); 118a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 119a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 120a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::createDirectory(const String& path, bool exclusive, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 121a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 122a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postCreateDirectoryToMainThread(m_webFileSystem, path, exclusive, m_modeForCurrentOperation); 123a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 124a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 125a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::fileExists(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 126a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 127a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postFileExistsToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 128a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 129a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 130a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::directoryExists(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 131a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 132a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postDirectoryExistsToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 133a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 134a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 135a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid WorkerAsyncFileSystemChromium::readDirectory(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 136a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 137a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch createWorkerFileSystemCallbacksBridge(callbacks)->postReadDirectoryToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 138a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 139a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerclass WorkerFileWriterHelperCallbacks : public AsyncFileSystemCallbacks { 1416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerpublic: 1426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner static PassOwnPtr<WorkerFileWriterHelperCallbacks> create(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks, WorkerContext* workerContext) 1436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return adoptPtr(new WorkerFileWriterHelperCallbacks(client, path, webFileSystem, callbacks, workerContext)); 1456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didSucceed() 1486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT_NOT_REACHED(); 1506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didReadMetadata(const FileMetadata& metadata) 1536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(m_callbacks); 1556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (metadata.type != FileMetadata::TypeFile || metadata.length < 0) 1566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_callbacks->didFail(WebKit::WebFileErrorInvalidState); 1576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else { 1586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner OwnPtr<WorkerAsyncFileWriterChromium> asyncFileWriterChromium = WorkerAsyncFileWriterChromium::create(m_webFileSystem, m_path, m_workerContext, m_client, WorkerAsyncFileWriterChromium::Asynchronous); 1596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_callbacks->didCreateFileWriter(asyncFileWriterChromium.release(), metadata.length); 1606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didReadDirectoryEntry(const String& name, bool isDirectory) 1646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT_NOT_REACHED(); 1666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didReadDirectoryEntries(bool hasMore) 1696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT_NOT_REACHED(); 1716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem>) 1746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT_NOT_REACHED(); 1766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1786b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Called when an AsyncFileWrter has been created successfully. 1796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long) 1806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT_NOT_REACHED(); 1826b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual void didFail(int code) 1856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(m_callbacks); 1876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_callbacks->didFail(code); 1886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerprivate: 1916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WorkerFileWriterHelperCallbacks(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks, WorkerContext* workerContext) 1926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner : m_client(client) 1936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_path(path) 1946b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_webFileSystem(webFileSystem) 1956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_callbacks(callbacks) 1966b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_workerContext(workerContext) 1976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 1986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 1996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner AsyncFileWriterClient* m_client; 2016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner String m_path; 2026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WebKit::WebFileSystem* m_webFileSystem; 2036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner OwnPtr<WebCore::AsyncFileSystemCallbacks> m_callbacks; 2046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WorkerContext* m_workerContext; 2056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner}; 2066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid WorkerAsyncFileSystemChromium::createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 208a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 2096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner createWorkerFileSystemCallbacksBridge(WorkerFileWriterHelperCallbacks::create(client, path, m_webFileSystem, callbacks, m_workerContext))->postReadMetadataToMainThread(m_webFileSystem, path, m_modeForCurrentOperation); 210a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 211a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 212a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochPassRefPtr<WorkerFileSystemCallbacksBridge> WorkerAsyncFileSystemChromium::createWorkerFileSystemCallbacksBridge(PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 213a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 214a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ASSERT(!m_synchronous || !m_bridgeForCurrentOperation.get()); 215a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 216a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_modeForCurrentOperation = fileSystemOperationsMode; 217a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_modeForCurrentOperation.append(String::number(m_workerContext->thread()->runLoop().createUniqueId())); 218a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 219a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_bridgeForCurrentOperation = WorkerFileSystemCallbacksBridge::create(m_worker, m_scriptExecutionContext, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 220a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_bridgeForCurrentOperation; 221a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 222a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 223a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} // namespace WebCore 224a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 225a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif // ENABLE(FILE_SYSTEM) 226