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 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef IDBTransaction_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define IDBTransaction_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "bindings/core/v8/ScriptState.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ActiveDOMObject.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DOMError.h" 3206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/EventListener.h" 33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "modules/EventModules.h" 34d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "modules/EventTargetModules.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/indexeddb/IDBMetadata.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/indexeddb/IndexedDB.h" 3710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/heap/Handle.h" 3851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebIDBDatabase.h" 3976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "public/platform/WebIDBTypes.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/HashSet.h" 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass DOMError; 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass ExceptionState; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBCursor; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBDatabase; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBObjectStore; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBOpenDBRequest; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct IDBObjectStoreMetadata; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass IDBTransaction FINAL 535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<IDBTransaction> 54f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , public EventTargetWithInlineData 55f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , public ActiveDOMObject { 565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<IDBTransaction>); 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 58d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(IDBTransaction); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static IDBTransaction* create(ScriptState*, int64_t, const Vector<String>& objectStoreNames, WebIDBTransactionMode, IDBDatabase*); 617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static IDBTransaction* create(ScriptState*, int64_t, IDBDatabase*, IDBOpenDBRequest*, const IDBDatabaseMetadata& previousMetadata); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~IDBTransaction(); 63d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static WebIDBTransactionMode stringToMode(const String&, ExceptionState&); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 676f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch // When the connection is closed backend will be 0. 68e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebIDBDatabase* backendDB() const; 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int64_t id() const { return m_id; } 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isActive() const { return m_state == Active; } 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isFinished() const { return m_state == Finished; } 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu bool isFinishing() const { return m_state == Finishing; } 74e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) bool isReadOnly() const { return m_mode == WebIDBTransactionModeReadOnly; } 75e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) bool isVersionChange() const { return m_mode == WebIDBTransactionModeVersionChange; } 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Implement the IDBTransaction IDL 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& mode() const; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IDBDatabase* db() const { return m_database.get(); } 80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) PassRefPtrWillBeRawPtr<DOMError> error() const { return m_error; } 81d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) IDBObjectStore* objectStore(const String& name, ExceptionState&); 82e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch void abort(ExceptionState&); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void registerRequest(IDBRequest*); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void unregisterRequest(IDBRequest*); 86d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void objectStoreCreated(const String&, IDBObjectStore*); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void objectStoreDeleted(const String&); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setActive(bool); 89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setError(PassRefPtrWillBeRawPtr<DOMError>); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_ATTRIBUTE_EVENT_LISTENER(abort); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_ATTRIBUTE_EVENT_LISTENER(complete); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_ATTRIBUTE_EVENT_LISTENER(error); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void onAbort(PassRefPtrWillBeRawPtr<DOMError>); 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void onComplete(); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // EventTarget 991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) virtual const AtomicString& interfaceName() const OVERRIDE; 1001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) virtual ExecutionContext* executionContext() const OVERRIDE; 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) using EventTarget::dispatchEvent; 103a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual bool dispatchEvent(PassRefPtrWillBeRawPtr<Event>) OVERRIDE; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ActiveDOMObject 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool hasPendingActivity() const OVERRIDE; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void stop() OVERRIDE; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci IDBTransaction(ScriptState*, int64_t, const Vector<String>&, WebIDBTransactionMode, IDBDatabase*, IDBOpenDBRequest*, const IDBDatabaseMetadata&); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch void enqueueEvent(PassRefPtrWillBeRawPtr<Event>); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum State { 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Inactive, // Created or started, but not in an event callback 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Active, // Created or started, in creation scope or an event callback 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Finishing, // In the process of aborting or completing. 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Finished, // No more events will fire and no new requests may be filed. 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int64_t m_id; 122d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBDatabase> m_database; 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Vector<String> m_objectStoreNames; 124d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBOpenDBRequest> m_openDBRequest; 125e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) const WebIDBTransactionMode m_mode; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) State m_state; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_hasPendingActivity; 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_contextStopped; 129f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RefPtrWillBeMember<DOMError> m_error; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 131d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) HeapListHashSet<Member<IDBRequest> > m_requestList; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 133d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) typedef HeapHashMap<String, Member<IDBObjectStore> > IDBObjectStoreMap; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IDBObjectStoreMap m_objectStoreMap; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) typedef HeapHashSet<Member<IDBObjectStore> > IDBObjectStoreSet; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IDBObjectStoreSet m_deletedObjectStores; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) typedef HeapHashMap<Member<IDBObjectStore>, IDBObjectStoreMetadata> IDBObjectStoreMetadataMap; 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IDBObjectStoreMetadataMap m_objectStoreCleanupMap; 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IDBDatabaseMetadata m_previousMetadata; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // IDBTransaction_h 147