16c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen/* 26c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * Copyright (C) 2010 Google Inc. All rights reserved. 36c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 46c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * Redistribution and use in source and binary forms, with or without 56c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * modification, are permitted provided that the following conditions 66c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * are met: 76c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 86c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 1. Redistributions of source code must retain the above copyright 96c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * notice, this list of conditions and the following disclaimer. 106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 2. Redistributions in binary form must reproduce the above copyright 116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * notice, this list of conditions and the following disclaimer in the 126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * documentation and/or other materials provided with the distribution. 136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * its contributors may be used to endorse or promote products derived 156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * from this software without specific prior written permission. 166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen */ 286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#ifndef AbstractDatabase_h 306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#define AbstractDatabase_h 316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(DATABASE) 336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 34967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include "ExceptionCode.h" 3506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "PlatformString.h" 36ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "SQLiteDatabase.h" 37ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include <wtf/Forward.h> 382bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/ThreadSafeRefCounted.h> 3933227a6c6e4f49f430734efd6b339706181588c1Steve Block#if !LOG_DISABLED || !ERROR_DISABLED 40ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include "SecurityOrigin.h" 41ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 4206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsennamespace WebCore { 446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 45ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockclass DatabaseAuthorizer; 4606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass ScriptExecutionContext; 4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass SecurityOrigin; 4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 492bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass AbstractDatabase : public ThreadSafeRefCounted<AbstractDatabase> { 5006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenpublic: 5106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static bool isAvailable(); 5206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static void setIsAvailable(bool available); 5306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual ~AbstractDatabase(); 5506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 56ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual String version() const; 57ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 58ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool opened() const { return m_opened; } 59ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool isNew() const { return m_new; } 60ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 61ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual ScriptExecutionContext* scriptExecutionContext() const; 62ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual SecurityOrigin* securityOrigin() const; 63ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual String stringIdentifier() const; 64ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual String displayName() const; 65ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual unsigned long estimatedSize() const; 66ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual String fileName() const; 67967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch SQLiteDatabase& sqliteDatabase() { return m_sqliteDatabase; } 68967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 69967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch unsigned long long maximumSize() const; 70967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch void incrementalVacuumIfNeeded(); 71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void interrupt(); 72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool isInterrupted(); 73ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 74ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // FIXME: move all version-related methods to a DatabaseVersionTracker class 75ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool versionMatchesExpected() const; 76ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void setExpectedVersion(const String& version); 77ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool getVersionFromDatabase(String& version); 78ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool setVersionInDatabase(const String& version); 79ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 80ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void disableAuthorizer(); 81ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void enableAuthorizer(); 82ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void setAuthorizerReadOnly(); 83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setAuthorizerPermissions(int permissions); 84ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool lastActionChangedDatabase(); 85ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool lastActionWasInsert(); 86ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void resetDeletes(); 87ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool hadDeletes(); 88ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void resetAuthorizer(); 8906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 9006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual void markAsDeletedAndClose() = 0; 9106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual void closeImmediately() = 0; 92ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 93ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockprotected: 94ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block AbstractDatabase(ScriptExecutionContext*, const String& name, const String& expectedVersion, 95ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block const String& displayName, unsigned long estimatedSize); 96ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 97ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void closeDatabase(); 98ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 99ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual bool performOpenAndVerify(bool shouldSetVersionInNewDatabase, ExceptionCode& ec); 100ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 101ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block static const String& databaseInfoTableName(); 102ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 103ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RefPtr<ScriptExecutionContext> m_scriptExecutionContext; 104ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RefPtr<SecurityOrigin> m_contextThreadSecurityOrigin; 105ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 106ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block String m_name; 107ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block String m_expectedVersion; 108ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block String m_displayName; 109ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block unsigned long m_estimatedSize; 110ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block String m_filename; 111ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 11233227a6c6e4f49f430734efd6b339706181588c1Steve Block#if !LOG_DISABLED || !ERROR_DISABLED 113ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block String databaseDebugName() const { return m_contextThreadSecurityOrigin->toString() + "::" + m_name; } 114ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 115ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 116ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockprivate: 117ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block static const String& databaseVersionKey(); 118ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 119ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block int m_guid; 120ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool m_opened; 121ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block bool m_new; 122ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 123967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch SQLiteDatabase m_sqliteDatabase; 124967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 125ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RefPtr<DatabaseAuthorizer> m_databaseAuthorizer; 1266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}; 1276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} // namespace WebCore 1296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif // ENABLE(DATABASE) 1316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif // AbstractDatabase_h 133