diff options
Diffstat (limited to 'Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp')
| -rw-r--r-- | Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp b/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp index 098a7327f..17dd24bc6 100644 --- a/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp +++ b/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp @@ -67,6 +67,70 @@ TEST(IDBDatabaseBackendTest, BackingStoreRetention) EXPECT_TRUE(backingStore->hasOneRef()); } +class MockIDBCallbacks : public IDBCallbacks { +public: + static PassRefPtr<MockIDBCallbacks> create() { return adoptRef(new MockIDBCallbacks()); } + virtual ~MockIDBCallbacks() + { + 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() { } + 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) |
