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