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) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef IDBRequest_h
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define IDBRequest_h
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptState.h"
33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptValue.h"
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ActiveDOMObject.h"
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DOMError.h"
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DOMStringList.h"
3706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/EventListener.h"
3806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/EventTarget.h"
39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "modules/EventModules.h"
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/indexeddb/IDBAny.h"
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "modules/indexeddb/IDBTransaction.h"
4251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "modules/indexeddb/IndexedDB.h"
4310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/heap/Handle.h"
44f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/platform/WebBlobInfo.h"
4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebIDBCursor.h"
4676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "public/platform/WebIDBTypes.h"
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass ExceptionState;
5143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)class IDBCursor;
5251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)struct IDBDatabaseMetadata;
53e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)class SharedBuffer;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class IDBRequest
565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<IDBRequest>
57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    , public EventTargetWithInlineData
58d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    , public ActiveDOMObject {
595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<IDBRequest>);
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DEFINE_WRAPPERTYPEINFO();
61d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(IDBRequest);
6251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)public:
63d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBRequest* create(ScriptState*, IDBAny* source, IDBTransaction*);
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~IDBRequest();
652fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles)    void dispose();
66d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void trace(Visitor*) OVERRIDE;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
682fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles)    ScriptState* scriptState() { return m_scriptState.get(); }
69a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    ScriptValue result(ExceptionState&);
70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<DOMError> error(ExceptionState&) const;
716f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    ScriptValue source() const;
72f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    IDBTransaction* transaction() const { return m_transaction.get(); }
73a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
74a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    bool isResultDirty() const { return m_resultDirty; }
75d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    IDBAny* resultAsAny() const { return m_result; }
7651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
7751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    // Requests made during index population are implementation details and so
7851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    // events should not be visible to script.
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void preventPropagation() { m_preventPropagation = true; }
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Defined in the IDL
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum ReadyState {
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        PENDING = 1,
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DONE = 2,
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        EarlyDeath = 3
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const String& readyState() const;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(success);
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
93e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    void setCursorDetails(IndexedDB::CursorType, WebIDBCursorDirection);
94d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setPendingCursor(IDBCursor*);
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void abort();
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void onError(PassRefPtrWillBeRawPtr<DOMError>);
9853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    virtual void onSuccess(const Vector<String>&);
99e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void onSuccess(PassOwnPtr<WebIDBCursor>, IDBKey*, IDBKey* primaryKey, PassRefPtr<SharedBuffer>, PassOwnPtr<Vector<WebBlobInfo> >);
100d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void onSuccess(IDBKey*);
101e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void onSuccess(PassRefPtr<SharedBuffer>, PassOwnPtr<Vector<WebBlobInfo> >);
102e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void onSuccess(PassRefPtr<SharedBuffer>, PassOwnPtr<Vector<WebBlobInfo> >, IDBKey*, const IDBKeyPath&);
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void onSuccess(int64_t);
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void onSuccess();
105e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void onSuccess(IDBKey*, IDBKey* primaryKey, PassRefPtr<SharedBuffer>, PassOwnPtr<Vector<WebBlobInfo> >);
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    // Only IDBOpenDBRequest instances should receive these:
10851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    virtual void onBlocked(int64_t oldVersion) { ASSERT_NOT_REACHED(); }
109e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void onUpgradeNeeded(int64_t oldVersion, PassOwnPtr<WebIDBDatabase>, const IDBDatabaseMetadata&, WebIDBDataLoss, String dataLossMessage) { ASSERT_NOT_REACHED(); }
110e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void onSuccess(PassOwnPtr<WebIDBDatabase>, const IDBDatabaseMetadata&) { ASSERT_NOT_REACHED(); }
11151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // ActiveDOMObject
11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool hasPendingActivity() const OVERRIDE FINAL;
11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void stop() OVERRIDE FINAL;
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // EventTarget
1171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    virtual const AtomicString& interfaceName() const OVERRIDE;
11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual ExecutionContext* executionContext() const OVERRIDE FINAL;
11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void uncaughtExceptionInEventHandler() OVERRIDE FINAL;
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    using EventTarget::dispatchEvent;
122a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    virtual bool dispatchEvent(PassRefPtrWillBeRawPtr<Event>) OVERRIDE;
123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
124a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    // Called by a version change transaction that has finished to set this
125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    // request back from DONE (following "upgradeneeded") back to PENDING (for
126a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    // the upcoming "success" or "error").
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void transactionDidFinishAndDispatch();
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
129a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBCursor* getResultCursor() const;
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected:
132d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    IDBRequest(ScriptState*, IDBAny* source, IDBTransaction*);
133a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    void enqueueEvent(PassRefPtrWillBeRawPtr<Event>);
134a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void dequeueEvent(Event*);
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual bool shouldEnqueueEvent() const;
136d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void onSuccessInternal(IDBAny*);
137d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setResult(IDBAny*);
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_contextStopped;
140d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Member<IDBTransaction> m_transaction;
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ReadyState m_readyState;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_requestAborted; // May be aborted by transaction then receive async onsuccess; ignore vs. assert.
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
145e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    void setResultCursor(IDBCursor*, IDBKey*, IDBKey* primaryKey, PassRefPtr<SharedBuffer> value, PassOwnPtr<Vector<WebBlobInfo> >);
1462fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles)    void setBlobInfo(PassOwnPtr<Vector<WebBlobInfo>>);
147f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void handleBlobAcks();
1488abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
149f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    RefPtr<ScriptState> m_scriptState;
150d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Member<IDBAny> m_source;
151d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Member<IDBAny> m_result;
152f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    RefPtrWillBeMember<DOMError> m_error;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_hasPendingActivity;
155f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    WillBeHeapVector<RefPtrWillBeMember<Event> > m_enqueuedEvents;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Only used if the result type will be a cursor.
158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    IndexedDB::CursorType m_cursorType;
159e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebIDBCursorDirection m_cursorDirection;
160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    // When a cursor is continued/advanced, m_result is cleared and m_pendingCursor holds it.
161d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Member<IDBCursor> m_pendingCursor;
162a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    // New state is not applied to the cursor object until the event is dispatched.
163d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Member<IDBKey> m_cursorKey;
164d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Member<IDBKey> m_cursorPrimaryKey;
165e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    RefPtr<SharedBuffer> m_cursorValue;
166e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    OwnPtr<Vector<WebBlobInfo> > m_blobInfo;
167a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_didFireUpgradeNeededEvent;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_preventPropagation;
170a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    bool m_resultDirty;
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
173c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // IDBRequest_h
176