1/* 2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef DatabaseBackend_h 27#define DatabaseBackend_h 28 29#if ENABLE(SQL_DATABASE) 30 31#include "DatabaseBackendBase.h" 32#include <wtf/Deque.h> 33#include <wtf/text/WTFString.h> 34 35namespace WebCore { 36 37class ChangeVersionData; 38class Database; 39class DatabaseServer; 40class SQLTransaction; 41class SQLTransactionBackend; 42class SQLTransactionClient; 43class SQLTransactionCoordinator; 44 45// FIXME: This implementation of DatabaseBackend is only a place holder 46// for the split out of the Database backend to be done later. This 47// place holder is needed to allow other code that need to reference the 48// DatabaseBackend to do so before the proper backend split is 49// available. This should be replaced with the actual implementation later. 50 51class DatabaseBackend : public DatabaseBackendBase { 52public: 53 DatabaseBackend(PassRefPtr<DatabaseBackendContext>, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize); 54 55 virtual bool openAndVerifyVersion(bool setVersionInNewDatabase, DatabaseError&, String& errorMessage); 56 void close(); 57 58 PassRefPtr<SQLTransactionBackend> runTransaction(PassRefPtr<SQLTransaction>, bool readOnly, const ChangeVersionData*); 59 void scheduleTransactionStep(SQLTransactionBackend*); 60 void inProgressTransactionCompleted(); 61 62 SQLTransactionClient* transactionClient() const; 63 SQLTransactionCoordinator* transactionCoordinator() const; 64 65private: 66 class DatabaseOpenTask; 67 class DatabaseCloseTask; 68 class DatabaseTransactionTask; 69 class DatabaseTableNamesTask; 70 71 virtual bool performOpenAndVerify(bool setVersionInNewDatabase, DatabaseError&, String& errorMessage); 72 73 void scheduleTransaction(); 74 75 Deque<RefPtr<SQLTransactionBackend>> m_transactionQueue; 76 Mutex m_transactionInProgressMutex; 77 bool m_transactionInProgress; 78 bool m_isTransactionQueueEnabled; 79 80 friend class Database; 81}; 82 83} // namespace WebCore 84 85#endif // ENABLE(SQL_DATABASE) 86 87#endif // DatabaseBackend_h 88