Index: Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp |
=================================================================== |
--- Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp (revision 120957) |
+++ Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp (working copy) |
@@ -67,6 +67,70 @@ |
EXPECT_TRUE(backingStore->hasOneRef()); |
} |
+class MockIDBCallbacks : public IDBCallbacks { |
+public: |
+ static PassRefPtr<MockIDBCallbacks> create() { return adoptRef(new MockIDBCallbacks()); } |
+ virtual ~MockIDBCallbacks() OVERRIDE |
+ { |
+ EXPECT_TRUE(m_wasSuccessDBCalled); |
+ } |
+ virtual void onError(PassRefPtr<IDBDatabaseError>) OVERRIDE { } |
+ virtual void onSuccess(PassRefPtr<DOMStringList>) OVERRIDE { } |
+ virtual void onSuccess(PassRefPtr<IDBCursorBackendInterface>) OVERRIDE { } |
+ virtual void onSuccess(PassRefPtr<IDBDatabaseBackendInterface>) OVERRIDE |
+ { |
+ m_wasSuccessDBCalled = true; |
+ } |
+ virtual void onSuccess(PassRefPtr<IDBKey>) OVERRIDE { } |
+ virtual void onSuccess(PassRefPtr<IDBTransactionBackendInterface>) OVERRIDE { } |
+ virtual void onSuccess(PassRefPtr<SerializedScriptValue>) OVERRIDE { } |
+ virtual void onSuccessWithContinuation() OVERRIDE { } |
+ virtual void onSuccessWithPrefetch(const Vector<RefPtr<IDBKey> >&, const Vector<RefPtr<IDBKey> >&, const Vector<RefPtr<SerializedScriptValue> >&) OVERRIDE { } |
+ virtual void onBlocked() OVERRIDE { } |
+private: |
+ MockIDBCallbacks() |
+ : m_wasSuccessDBCalled(false) { } |
+ bool m_wasSuccessDBCalled; |
+}; |
+ |
+class FakeIDBDatabaseCallbacks : public IDBDatabaseCallbacks { |
+public: |
+ static PassRefPtr<FakeIDBDatabaseCallbacks> create() { return adoptRef(new FakeIDBDatabaseCallbacks()); } |
+ virtual ~FakeIDBDatabaseCallbacks() OVERRIDE { } |
+ virtual void onVersionChange(const String& version) OVERRIDE { } |
+private: |
+ FakeIDBDatabaseCallbacks() { } |
+}; |
+ |
+TEST(IDBDatabaseBackendTest, ConnectionLifecycle) |
+{ |
+ RefPtr<IDBFakeBackingStore> backingStore = adoptRef(new IDBFakeBackingStore()); |
+ EXPECT_TRUE(backingStore->hasOneRef()); |
+ |
+ IDBTransactionCoordinator* coordinator = 0; |
+ IDBFactoryBackendImpl* factory = 0; |
+ RefPtr<IDBDatabaseBackendImpl> db = IDBDatabaseBackendImpl::create("db", backingStore.get(), coordinator, factory, "uniqueid"); |
+ EXPECT_GT(backingStore->refCount(), 1); |
+ |
+ RefPtr<MockIDBCallbacks> request1 = MockIDBCallbacks::create(); |
+ db->openConnection(request1); |
+ |
+ RefPtr<FakeIDBDatabaseCallbacks> connection1 = FakeIDBDatabaseCallbacks::create(); |
+ db->registerFrontendCallbacks(connection1); |
+ |
+ RefPtr<MockIDBCallbacks> request2 = MockIDBCallbacks::create(); |
+ db->openConnection(request2); |
+ |
+ db->close(connection1); |
+ EXPECT_GT(backingStore->refCount(), 1); |
+ |
+ RefPtr<FakeIDBDatabaseCallbacks> connection2 = FakeIDBDatabaseCallbacks::create(); |
+ db->registerFrontendCallbacks(connection2); |
+ |
+ db->close(connection2); |
+ EXPECT_TRUE(backingStore->hasOneRef()); |
+} |
+ |
} // namespace |
#endif // ENABLE(INDEXED_DATABASE) |