| Index: Source/WebCore/inspector/InspectorIndexedDBAgent.cpp
|
| ===================================================================
|
| --- Source/WebCore/inspector/InspectorIndexedDBAgent.cpp (revision 120957)
|
| +++ Source/WebCore/inspector/InspectorIndexedDBAgent.cpp (working copy)
|
| @@ -43,6 +43,7 @@
|
| #include "IDBCallbacks.h"
|
| #include "IDBCursor.h"
|
| #include "IDBDatabaseBackendInterface.h"
|
| +#include "IDBDatabaseCallbacks.h"
|
| #include "IDBFactoryBackendInterface.h"
|
| #include "IDBIndexBackendInterface.h"
|
| #include "IDBKey.h"
|
| @@ -115,6 +116,21 @@
|
| virtual void onBlocked() { }
|
| };
|
|
|
| +class InspectorIDBDatabaseCallbacks : public IDBDatabaseCallbacks {
|
| +public:
|
| + static PassRefPtr<InspectorIDBDatabaseCallbacks> create()
|
| + {
|
| + return adoptRef(new InspectorIDBDatabaseCallbacks());
|
| + }
|
| +
|
| + virtual ~InspectorIDBDatabaseCallbacks() { }
|
| +
|
| + virtual void onVersionChange(const String& version) { }
|
| +private:
|
| + InspectorIDBDatabaseCallbacks() { }
|
| +};
|
| +
|
| +
|
| class InspectorIDBTransactionCallback : public IDBTransactionCallbacks {
|
| public:
|
| static PassRefPtr<InspectorIDBTransactionCallback> create()
|
| @@ -172,6 +188,28 @@
|
| virtual void execute(PassRefPtr<IDBDatabaseBackendInterface>) = 0;
|
| };
|
|
|
| +class DatabaseConnection {
|
| +public:
|
| + DatabaseConnection()
|
| + : m_idbDatabaseCallbacks(InspectorIDBDatabaseCallbacks::create()) { }
|
| +
|
| + void connect(PassRefPtr<IDBDatabaseBackendInterface> idbDatabase)
|
| + {
|
| + m_idbDatabase = idbDatabase;
|
| + m_idbDatabase->registerFrontendCallbacks(m_idbDatabaseCallbacks);
|
| + }
|
| +
|
| + ~DatabaseConnection()
|
| + {
|
| + if (m_idbDatabase)
|
| + m_idbDatabase->close(m_idbDatabaseCallbacks);
|
| + }
|
| +
|
| +private:
|
| + RefPtr<IDBDatabaseBackendInterface> m_idbDatabase;
|
| + RefPtr<IDBDatabaseCallbacks> m_idbDatabaseCallbacks;
|
| +};
|
| +
|
| class OpenDatabaseCallback : public InspectorIDBCallback {
|
| public:
|
| static PassRefPtr<OpenDatabaseCallback> create(ExecutableWithDatabase* executableWithDatabase)
|
| @@ -181,8 +219,9 @@
|
|
|
| virtual ~OpenDatabaseCallback() { }
|
|
|
| - virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface> idbDatabase)
|
| + virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface> prpDatabase)
|
| {
|
| + RefPtr<IDBDatabaseBackendInterface> idbDatabase = prpDatabase;
|
| m_executableWithDatabase->execute(idbDatabase);
|
| }
|
|
|
| @@ -263,8 +302,10 @@
|
|
|
| virtual ~DatabaseLoaderCallback() { }
|
|
|
| - virtual void execute(PassRefPtr<IDBDatabaseBackendInterface> idbDatabase)
|
| + virtual void execute(PassRefPtr<IDBDatabaseBackendInterface> prpDatabase)
|
| {
|
| + RefPtr<IDBDatabaseBackendInterface> idbDatabase = prpDatabase;
|
| + m_connection.connect(idbDatabase);
|
| if (!m_frontendProvider->frontend())
|
| return;
|
|
|
| @@ -315,6 +356,7 @@
|
| , m_requestId(requestId) { }
|
| RefPtr<InspectorIndexedDBAgent::FrontendProvider> m_frontendProvider;
|
| int m_requestId;
|
| + DatabaseConnection m_connection;
|
| };
|
|
|
| static PassRefPtr<IDBKey> idbKeyFromInspectorObject(InspectorObject* key)
|
| @@ -430,6 +472,8 @@
|
| return key.release();
|
| }
|
|
|
| +class DataLoaderCallback;
|
| +
|
| class OpenCursorCallback : public InspectorIDBCallback {
|
| public:
|
| enum CursorType {
|
| @@ -437,9 +481,9 @@
|
| IndexDataCursor
|
| };
|
|
|
| - static PassRefPtr<OpenCursorCallback> create(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, InjectedScript injectedScript, PassRefPtr<IDBTransactionBackendInterface> idbTransaction, CursorType cursorType, int requestId, int skipCount, unsigned pageSize)
|
| + static PassRefPtr<OpenCursorCallback> create(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, InjectedScript injectedScript, PassRefPtr<DataLoaderCallback> dataLoaderCallback, PassRefPtr<IDBTransactionBackendInterface> idbTransaction, CursorType cursorType, int requestId, int skipCount, unsigned pageSize)
|
| {
|
| - return adoptRef(new OpenCursorCallback(frontendProvider, injectedScript, idbTransaction, cursorType, requestId, skipCount, pageSize));
|
| + return adoptRef(new OpenCursorCallback(frontendProvider, injectedScript, dataLoaderCallback, idbTransaction, cursorType, requestId, skipCount, pageSize));
|
| }
|
|
|
| virtual ~OpenCursorCallback() { }
|
| @@ -491,6 +535,7 @@
|
|
|
| void end(bool hasMore)
|
| {
|
| + m_dataLoaderCallback.clear();
|
| if (!m_frontendProvider->frontend())
|
| return;
|
|
|
| @@ -509,9 +554,10 @@
|
| }
|
|
|
| private:
|
| - OpenCursorCallback(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, InjectedScript injectedScript, PassRefPtr<IDBTransactionBackendInterface> idbTransaction, CursorType cursorType, int requestId, int skipCount, unsigned pageSize)
|
| + OpenCursorCallback(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, InjectedScript injectedScript, PassRefPtr<DataLoaderCallback> dataLoaderCallback, PassRefPtr<IDBTransactionBackendInterface> idbTransaction, CursorType cursorType, int requestId, int skipCount, unsigned pageSize)
|
| : m_frontendProvider(frontendProvider)
|
| , m_injectedScript(injectedScript)
|
| + , m_dataLoaderCallback(dataLoaderCallback)
|
| , m_idbTransaction(idbTransaction)
|
| , m_cursorType(cursorType)
|
| , m_requestId(requestId)
|
| @@ -523,6 +569,7 @@
|
| }
|
| RefPtr<InspectorIndexedDBAgent::FrontendProvider> m_frontendProvider;
|
| InjectedScript m_injectedScript;
|
| + RefPtr<DataLoaderCallback> m_dataLoaderCallback;
|
| RefPtr<IDBTransactionBackendInterface> m_idbTransaction;
|
| CursorType m_cursorType;
|
| int m_requestId;
|
| @@ -541,8 +588,10 @@
|
|
|
| virtual ~DataLoaderCallback() { }
|
|
|
| - virtual void execute(PassRefPtr<IDBDatabaseBackendInterface> idbDatabase)
|
| + virtual void execute(PassRefPtr<IDBDatabaseBackendInterface> prpDatabase)
|
| {
|
| + RefPtr<IDBDatabaseBackendInterface> idbDatabase = prpDatabase;
|
| + m_connection.connect(idbDatabase);
|
| if (!m_frontendProvider->frontend())
|
| return;
|
|
|
| @@ -558,12 +607,12 @@
|
| if (!idbIndex)
|
| return;
|
|
|
| - RefPtr<OpenCursorCallback> openCursorCallback = OpenCursorCallback::create(m_frontendProvider, m_injectedScript, idbTransaction.get(), OpenCursorCallback::IndexDataCursor, m_requestId, m_skipCount, m_pageSize);
|
| + RefPtr<OpenCursorCallback> openCursorCallback = OpenCursorCallback::create(m_frontendProvider, m_injectedScript, this, idbTransaction.get(), OpenCursorCallback::IndexDataCursor, m_requestId, m_skipCount, m_pageSize);
|
|
|
| ExceptionCode ec = 0;
|
| idbIndex->openCursor(m_idbKeyRange, IDBCursor::NEXT, openCursorCallback, idbTransaction.get(), ec);
|
| } else {
|
| - RefPtr<OpenCursorCallback> openCursorCallback = OpenCursorCallback::create(m_frontendProvider, m_injectedScript, idbTransaction.get(), OpenCursorCallback::ObjectStoreDataCursor, m_requestId, m_skipCount, m_pageSize);
|
| + RefPtr<OpenCursorCallback> openCursorCallback = OpenCursorCallback::create(m_frontendProvider, m_injectedScript, this, idbTransaction.get(), OpenCursorCallback::ObjectStoreDataCursor, m_requestId, m_skipCount, m_pageSize);
|
|
|
| ExceptionCode ec = 0;
|
| idbObjectStore->openCursor(m_idbKeyRange, IDBCursor::NEXT, openCursorCallback, idbTransaction.get(), ec);
|
| @@ -588,6 +637,7 @@
|
| RefPtr<IDBKeyRange> m_idbKeyRange;
|
| int m_skipCount;
|
| unsigned m_pageSize;
|
| + DatabaseConnection m_connection;
|
| };
|
|
|
| } // namespace
|
|
|