15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef DOMFileSystem_h 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define DOMFileSystem_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptWrappable.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ActiveDOMObject.h" 361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/ExecutionContext.h" 371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/ExecutionContextTask.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DOMFileSystemBase.h" 393c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "modules/filesystem/EntriesCallback.h" 4010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/heap/Handle.h" 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DirectoryEntry; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class File; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FileCallback; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FileEntry; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FileWriterCallback; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class DOMFileSystem FINAL : public DOMFileSystemBase, public ScriptWrappable, public ActiveDOMObject { 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) static DOMFileSystem* create(ExecutionContext*, const String& name, FileSystemType, const KURL& rootURL); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Creates a new isolated file system for the given filesystemId. 565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) static DOMFileSystem* createIsolatedFileSystem(ExecutionContext*, const String& filesystemId); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) DirectoryEntry* root(); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) // DOMFileSystemBase overrides. 618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) virtual void addPendingCallbacks() OVERRIDE; 628abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) virtual void removePendingCallbacks() OVERRIDE; 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void reportError(ErrorCallback*, PassRefPtrWillBeRawPtr<FileError>) OVERRIDE; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // ActiveDOMObject overrides. 6607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch virtual bool hasPendingActivity() const OVERRIDE; 6707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void createWriter(const FileEntry*, FileWriterCallback*, ErrorCallback*); 697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void createFile(const FileEntry*, FileCallback*, ErrorCallback*); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Schedule a callback. This should not cross threads (should be called on the same context thread). 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: move this to a more generic place. 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template <typename CB, typename CBArg> 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static void scheduleCallback(ExecutionContext*, CB*, PassRefPtrWillBeRawPtr<CBArg>); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template <typename CB, typename CBArg> 777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static void scheduleCallback(ExecutionContext*, CB*, CBArg*); 785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) template <typename CB, typename CBArg> 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static void scheduleCallback(ExecutionContext*, CB*, const HeapVector<CBArg>&); 81aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 82aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch template <typename CB, typename CBArg> 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static void scheduleCallback(ExecutionContext*, CB*, const CBArg&); 843c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 85d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) template <typename CB> 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static void scheduleCallback(ExecutionContext*, CB*); 87d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 883c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch template <typename CB, typename CBArg> 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void scheduleCallback(CB* callback, PassRefPtrWillBeRawPtr<CBArg> callbackArg) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 911e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) scheduleCallback(executionContext(), callback, callbackArg); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 943c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch template <typename CB, typename CBArg> 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void scheduleCallback(CB* callback, CBArg* callbackArg) 965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) scheduleCallback(executionContext(), callback, callbackArg); 985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) template <typename CB, typename CBArg> 1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void scheduleCallback(CB* callback, const CBArg& callbackArg) 1023c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch { 1031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) scheduleCallback(executionContext(), callback, callbackArg); 1043c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch } 1053c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1071e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) DOMFileSystem(ExecutionContext*, const String& name, FileSystemType, const KURL& rootURL); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 109c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) class DispatchCallbackTaskBase : public ExecutionContextTask { 110c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) public: 111c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) DispatchCallbackTaskBase() 112c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) : m_taskName("FileSystem") 113c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 114c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 115c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 116c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual const String& taskNameForInstrumentation() const OVERRIDE 117c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 118c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return m_taskName; 119c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 120c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 121c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) private: 122c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const String m_taskName; 123c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }; 124c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // A helper template to schedule a callback task. 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template <typename CB, typename CBArg> 127c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) class DispatchCallbackRefPtrArgTask FINAL : public DispatchCallbackTaskBase { 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DispatchCallbackRefPtrArgTask(CB* callback, PassRefPtrWillBeRawPtr<CBArg> arg) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_callback(callback) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_callbackArg(arg) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void performTask(ExecutionContext*) OVERRIDE 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_callback->handleEvent(m_callbackArg.get()); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private: 1417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Persistent<CB> m_callback; 142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtrWillBePersistent<CBArg> m_callbackArg; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1443c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1453c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch template <typename CB, typename CBArg> 146c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) class DispatchCallbackPtrArgTask FINAL : public DispatchCallbackTaskBase { 1475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) public: 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DispatchCallbackPtrArgTask(CB* callback, CBArg* arg) 1495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) : m_callback(callback) 1505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) , m_callbackArg(arg) 1515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 1525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 1535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void performTask(ExecutionContext*) OVERRIDE 1555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 1565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_callback->handleEvent(m_callbackArg.get()); 1575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 1585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) private: 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Persistent<CB> m_callback; 1615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Persistent<CBArg> m_callbackArg; 1625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }; 1635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) template <typename CB, typename CBArg> 165c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) class DispatchCallbackNonPtrArgTask FINAL : public DispatchCallbackTaskBase { 1663c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch public: 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DispatchCallbackNonPtrArgTask(CB* callback, const CBArg& arg) 1683c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch : m_callback(callback) 1693c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch , m_callbackArg(arg) 1703c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch { 1713c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch } 1723c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 17309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void performTask(ExecutionContext*) OVERRIDE 1743c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch { 1753c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch m_callback->handleEvent(m_callbackArg); 1763c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch } 1773c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1783c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch private: 1797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Persistent<CB> m_callback; 1803c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch CBArg m_callbackArg; 1813c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch }; 18207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 183d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) template <typename CB> 184c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) class DispatchCallbackNoArgTask FINAL : public DispatchCallbackTaskBase { 185d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) public: 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DispatchCallbackNoArgTask(CB* callback) 187d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) : m_callback(callback) 188d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) { 189d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 190d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 191d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) virtual void performTask(ExecutionContext*) OVERRIDE 192d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) { 193d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_callback->handleEvent(); 194d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 195d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 196d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) private: 1977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Persistent<CB> m_callback; 198d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) }; 199d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 20007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch int m_numberOfPendingCallbacks; 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template <typename CB, typename CBArg> 2047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* callback, PassRefPtrWillBeRawPtr<CBArg> arg) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ASSERT(executionContext->isContextThread()); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (callback) 2085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) executionContext->postTask(adoptPtr(new DispatchCallbackRefPtrArgTask<CB, CBArg>(callback, arg))); 2095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 2105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 2115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)template <typename CB, typename CBArg> 2127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* callback, CBArg* arg) 2135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 2145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ASSERT(executionContext->isContextThread()); 2155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (callback) 2165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) executionContext->postTask(adoptPtr(new DispatchCallbackPtrArgTask<CB, CBArg>(callback, arg))); 2173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch} 2183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 2193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochtemplate <typename CB, typename CBArg> 2207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* callback, const HeapVector<CBArg>& arg) 221aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 222aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT(executionContext->isContextThread()); 223aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (callback) 224aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch executionContext->postTask(adoptPtr(new DispatchCallbackNonPtrArgTask<CB, PersistentHeapVector<CBArg> >(callback, arg))); 225aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 226aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 227aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochtemplate <typename CB, typename CBArg> 2287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* callback, const CBArg& arg) 2293c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch{ 2301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ASSERT(executionContext->isContextThread()); 2313c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (callback) 2321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) executionContext->postTask(adoptPtr(new DispatchCallbackNonPtrArgTask<CB, CBArg>(callback, arg))); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 235d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)template <typename CB> 2367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid DOMFileSystem::scheduleCallback(ExecutionContext* executionContext, CB* callback) 237d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 238d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT(executionContext->isContextThread()); 239d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (callback) 240d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) executionContext->postTask(adoptPtr(new DispatchCallbackNoArgTask<CB>(callback))); 241d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 242d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 2437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // DOMFileSystem_h 246