summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-08-24 08:29:43 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-08-24 08:29:43 +0200
commit2e2ba8ff45915f40ed3e014101269c175f2a89a0 (patch)
tree3b94a9a9fa83efa384b8dac611cf8c6495532a62 /Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp
parentf53e6f8e798362ed712d4a51633b0d0b03dbc213 (diff)
downloadqtwebkit-2e2ba8ff45915f40ed3e014101269c175f2a89a0.tar.gz
Imported WebKit commit bf0b0213bbf3886c96610020602012ca7d11b084 (http://svn.webkit.org/repository/webkit/trunk@126545)
New snapshot with clang and python build fixes
Diffstat (limited to 'Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp')
-rw-r--r--Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp b/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp
index 8605c0f1a..ead7f9bb9 100644
--- a/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp
+++ b/Source/WebKit/chromium/tests/IDBDatabaseBackendTest.cpp
@@ -32,12 +32,17 @@
#include "IDBIndexBackendImpl.h"
#include "IDBObjectStoreBackendImpl.h"
#include "IDBTransactionCoordinator.h"
+#include "WebIDBDatabaseCallbacksImpl.h"
+#include "WebIDBDatabaseImpl.h"
#include <gtest/gtest.h>
#if ENABLE(INDEXED_DATABASE)
using namespace WebCore;
+using WebKit::WebIDBDatabase;
+using WebKit::WebIDBDatabaseCallbacksImpl;
+using WebKit::WebIDBDatabaseImpl;
namespace {
@@ -101,6 +106,7 @@ public:
virtual ~FakeIDBDatabaseCallbacks() { }
virtual void onVersionChange(const String& version) OVERRIDE { }
virtual void onVersionChange(int64_t oldVersion, int64_t newVersion) OVERRIDE { }
+ virtual void onForcedClose() OVERRIDE { }
private:
FakeIDBDatabaseCallbacks() { }
};
@@ -134,6 +140,72 @@ TEST(IDBDatabaseBackendTest, ConnectionLifecycle)
EXPECT_TRUE(backingStore->hasOneRef());
}
+class MockIDBDatabaseBackendProxy : public IDBDatabaseBackendInterface {
+public:
+ static PassRefPtr<MockIDBDatabaseBackendProxy> create(WebIDBDatabaseImpl& database)
+ {
+ return adoptRef(new MockIDBDatabaseBackendProxy(database));
+ }
+
+ ~MockIDBDatabaseBackendProxy()
+ {
+ EXPECT_TRUE(m_wasRegisterFrontendCallbacksCalled);
+ }
+
+ virtual IDBDatabaseMetadata metadata() const { return IDBDatabaseMetadata(); }
+ virtual PassRefPtr<IDBObjectStoreBackendInterface> createObjectStore(const String& name, const IDBKeyPath&, bool autoIncrement, IDBTransactionBackendInterface*, ExceptionCode&) { return 0; }
+ virtual void deleteObjectStore(const String& name, IDBTransactionBackendInterface*, ExceptionCode&) { }
+ virtual void setVersion(const String& version, PassRefPtr<IDBCallbacks>, PassRefPtr<IDBDatabaseCallbacks>, ExceptionCode&) { }
+ virtual PassRefPtr<IDBTransactionBackendInterface> transaction(DOMStringList* storeNames, unsigned short mode, ExceptionCode&) { return 0; }
+
+ virtual void close(PassRefPtr<IDBDatabaseCallbacks>)
+ {
+ m_wasCloseCalled = true;
+ m_webDatabase.close();
+ }
+ virtual void registerFrontendCallbacks(PassRefPtr<IDBDatabaseCallbacks> connection)
+ {
+ m_wasRegisterFrontendCallbacksCalled = true;
+ m_webDatabase.open(new WebIDBDatabaseCallbacksImpl(connection));
+ }
+
+private:
+ MockIDBDatabaseBackendProxy(WebIDBDatabaseImpl& webDatabase)
+ : m_wasRegisterFrontendCallbacksCalled(false)
+ , m_wasCloseCalled(false)
+ , m_webDatabase(webDatabase) { }
+
+ bool m_wasRegisterFrontendCallbacksCalled;
+ bool m_wasCloseCalled;
+
+ WebIDBDatabaseImpl& m_webDatabase;
+};
+
+TEST(IDBDatabaseBackendTest, ForcedClose)
+{
+ RefPtr<IDBFakeBackingStore> backingStore = adoptRef(new IDBFakeBackingStore());
+ EXPECT_TRUE(backingStore->hasOneRef());
+
+ IDBTransactionCoordinator* coordinator = 0;
+ IDBFactoryBackendImpl* factory = 0;
+ RefPtr<IDBDatabaseBackendImpl> backend = IDBDatabaseBackendImpl::create("db", backingStore.get(), coordinator, factory, "uniqueid");
+ EXPECT_GT(backingStore->refCount(), 1);
+
+ WebIDBDatabaseImpl webDatabase(backend);
+
+ RefPtr<MockIDBCallbacks> request1 = MockIDBCallbacks::create();
+ backend->openConnection(request1);
+
+ RefPtr<MockIDBDatabaseBackendProxy> proxy = MockIDBDatabaseBackendProxy::create(webDatabase);
+
+ ScriptExecutionContext* context = 0;
+ RefPtr<IDBDatabase> idbDatabase = IDBDatabase::create(context, proxy);
+ idbDatabase->registerFrontendCallbacks();
+
+ webDatabase.forceClose();
+ EXPECT_TRUE(backingStore->hasOneRef());
+}
+
} // namespace
#endif // ENABLE(INDEXED_DATABASE)