1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Google Inc. All rights reserved. 3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Redistribution and use in source and binary forms, with or without 5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * modification, are permitted provided that the following conditions 6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * are met: 7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 1. Redistributions of source code must retain the above copyright 9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * notice, this list of conditions and the following disclaimer. 10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 2. Redistributions in binary form must reproduce the above copyright 11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * notice, this list of conditions and the following disclaimer in the 12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * documentation and/or other materials provided with the distribution. 13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark */ 25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef IDBDatabase_h 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define IDBDatabase_h 28d0825bca7fe65beaee391d30da42e937db621564Steve Block 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "ActiveDOMObject.h" 30dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "DOMStringList.h" 312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "Event.h" 322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "EventTarget.h" 33a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "ExceptionCode.h" 34dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "IDBDatabaseBackendInterface.h" 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "IDBDatabaseCallbacksImpl.h" 36a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "IDBObjectStore.h" 37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "IDBTransaction.h" 384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "OptionsObject.h" 395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include <wtf/PassRefPtr.h> 40dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/RefCounted.h> 41dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/RefPtr.h> 42d0825bca7fe65beaee391d30da42e937db621564Steve Block 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(INDEXED_DATABASE) 44d0825bca7fe65beaee391d30da42e937db621564Steve Block 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebCore { 46d0825bca7fe65beaee391d30da42e937db621564Steve Block 4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass IDBVersionChangeRequest; 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass ScriptExecutionContext; 495af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 502bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass IDBDatabase : public RefCounted<IDBDatabase>, public EventTarget, public ActiveDOMObject { 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic: 522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block static PassRefPtr<IDBDatabase> create(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendInterface>); 53dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ~IDBDatabase(); 545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block void setSetVersionTransaction(IDBTransaction*); 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 57dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Implement the IDL 58dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch String name() const { return m_backend->name(); } 59dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch String version() const { return m_backend->version(); } 604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang PassRefPtr<DOMStringList> objectStoreNames() const { return m_backend->objectStoreNames(); } 61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 62a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // FIXME: Try to modify the code generator so this is unneeded. 634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang PassRefPtr<IDBObjectStore> createObjectStore(const String& name, ExceptionCode& ec) { return createObjectStore(name, OptionsObject(), ec); } 642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext* context, ExceptionCode& ec) { return transaction(context, 0, ec); } 652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext* context, PassRefPtr<DOMStringList> storeNames, ExceptionCode& ec) { return transaction(context, storeNames, IDBTransaction::READ_ONLY, ec); } 662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block PassRefPtr<IDBTransaction> transaction(ScriptExecutionContext*, PassRefPtr<DOMStringList>, unsigned short mode, ExceptionCode&); 67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang PassRefPtr<IDBObjectStore> createObjectStore(const String& name, const OptionsObject&, ExceptionCode&); 694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang void deleteObjectStore(const String& name, ExceptionCode&); 7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch PassRefPtr<IDBVersionChangeRequest> setVersion(ScriptExecutionContext*, const String& version, ExceptionCode&); 71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void close(); 725ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_ATTRIBUTE_EVENT_LISTENER(abort); 742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_ATTRIBUTE_EVENT_LISTENER(error); 7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch DEFINE_ATTRIBUTE_EVENT_LISTENER(versionchange); 7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // IDBDatabaseCallbacks 7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void onVersionChange(const String& requestedVersion); 792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // ActiveDOMObject 812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual bool hasPendingActivity() const; 822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void stop(); 832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // EventTarget 852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual IDBDatabase* toIDBDatabase() { return this; } 862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual ScriptExecutionContext* scriptExecutionContext() const; 872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 8881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void open(); 9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void enqueueEvent(PassRefPtr<Event>); 9181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool dispatchEvent(PassRefPtr<Event> event, ExceptionCode& ec) { return EventTarget::dispatchEvent(event, ec); } 9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual bool dispatchEvent(PassRefPtr<Event>); 9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 942bde8e466a4451c7319e3a072d118917957d6554Steve Block using RefCounted<IDBDatabase>::ref; 952bde8e466a4451c7319e3a072d118917957d6554Steve Block using RefCounted<IDBDatabase>::deref; 962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 97dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochprivate: 982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block IDBDatabase(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendInterface>); 992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // EventTarget 1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void refEventTarget() { ref(); } 1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void derefEventTarget() { deref(); } 1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual EventTargetData* eventTargetData(); 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual EventTargetData* ensureEventTargetData(); 105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 106dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RefPtr<IDBDatabaseBackendInterface> m_backend; 1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RefPtr<IDBTransaction> m_setVersionTransaction; 1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block bool m_noNewTransactions; 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block bool m_stopped; 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block EventTargetData m_eventTargetData; 11381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Keep track of the versionchange events waiting to be fired on this 11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // database so that we can cancel them if the database closes. 11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Vector<RefPtr<Event> > m_enqueuedEvents; 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<IDBDatabaseCallbacksImpl> m_databaseCallbacks; 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 120d0825bca7fe65beaee391d30da42e937db621564Steve Block 121d0825bca7fe65beaee391d30da42e937db621564Steve Block} // namespace WebCore 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif // IDBDatabase_h 126