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 IDBCursor_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define IDBCursor_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptValue.h" 30197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptWrappable.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/indexeddb/IDBKey.h" 3251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "modules/indexeddb/IDBRequest.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/indexeddb/IndexedDB.h" 3451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebIDBCursor.h" 3576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "public/platform/WebIDBTypes.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/PassRefPtr.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/RefPtr.h" 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liunamespace blink { 40f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass ExceptionState; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBAny; 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class IDBTransaction; 441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class ExecutionContext; 45e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)class SharedBuffer; 46e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class WebBlobInfo; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class IDBCursor : public GarbageCollectedFinalized<IDBCursor>, public ScriptWrappable { 497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 51e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static WebIDBCursorDirection stringToDirection(const String& modeString, ExceptionState&); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static IDBCursor* create(PassOwnPtr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~IDBCursor(); 552fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) void dispose(); 56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void trace(Visitor*); 57f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void contextWillBeDestroyed() { m_backend.clear(); } 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Implement the IDL 60e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) const String& direction() const; 61f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ScriptValue key(ScriptState*); 62f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ScriptValue primaryKey(ScriptState*); 63f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ScriptValue value(ScriptState*); 64f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu ScriptValue source(ScriptState*) const; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci IDBRequest* update(ScriptState*, const ScriptValue&, ExceptionState&); 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch void advance(unsigned long, ExceptionState&); 68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void continueFunction(ScriptState*, const ScriptValue& key, ExceptionState&); 69d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void continuePrimaryKey(ScriptState*, const ScriptValue& key, const ScriptValue& primaryKey, ExceptionState&); 70d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) IDBRequest* deleteFunction(ScriptState*, ExceptionState&); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 72e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool isKeyDirty() const { return m_keyDirty; } 73e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool isPrimaryKeyDirty() const { return m_primaryKeyDirty; } 74e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool isValueDirty() const { return m_valueDirty; } 75e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 76d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void continueFunction(IDBKey*, IDBKey* primaryKey, ExceptionState&); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void postSuccessHandlerCallback(); 786f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch bool isDeleted() const; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void close(); 80e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) void setValueReady(IDBKey*, IDBKey* primaryKey, PassRefPtr<SharedBuffer> value, PassOwnPtr<Vector<WebBlobInfo> >); 81d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) IDBKey* idbPrimaryKey() const { return m_primaryKey; } 8251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) IDBRequest* request() const { return m_request.get(); } 8306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) virtual bool isKeyCursor() const { return true; } 8406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) virtual bool isCursorWithValue() const { return false; } 858abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 87e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) IDBCursor(PassOwnPtr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 90d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) IDBObjectStore* effectiveObjectStore() const; 91f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void handleBlobAcks(); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) OwnPtr<WebIDBCursor> m_backend; 94d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBRequest> m_request; 95e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) const WebIDBCursorDirection m_direction; 96d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBAny> m_source; 97d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBTransaction> m_transaction; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_gotValue; 99e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool m_keyDirty; 100e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool m_primaryKeyDirty; 101e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool m_valueDirty; 102d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBKey> m_key; 103d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Member<IDBKey> m_primaryKey; 104e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) RefPtr<SharedBuffer> m_value; 105e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) OwnPtr<Vector<WebBlobInfo> > m_blobInfo; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 108c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // IDBCursor_h 111