Diff
Modified: trunk/LayoutTests/ChangeLog (190378 => 190379)
--- trunk/LayoutTests/ChangeLog 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/LayoutTests/ChangeLog 2015-10-01 01:04:19 UTC (rev 190379)
@@ -1,3 +1,13 @@
+2015-09-30 Brady Eidson <beid...@apple.com>
+
+ Add UniqueIDBDatabase object, IDBBackingStore objects, and a database operation thread.
+ https://bugs.webkit.org/show_bug.cgi?id=149678
+
+ Reviewed by Alex Christensen.
+
+ * storage/indexeddb/modern/opendatabase-request-event-expected.txt: Added.
+ * storage/indexeddb/modern/opendatabase-request-event.html: Added.
+
2015-09-30 Myles C. Maxfield <mmaxfi...@apple.com>
Crash when using an SVG font with > 390 glyphs
Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-expected.txt (0 => 190379)
--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-expected.txt (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event-expected.txt 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,4 @@
+ALERT: [object IDBOpenDBRequest]
+ALERT: error [object Event]
+ALERT: Done
+This test calls open on window.indexedDB in various ways, verifying that IDBOpenDBRequest objects are returned when expected and exceptions are thrown when expected.
Added: trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event.html (0 => 190379)
--- trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event.html (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/opendatabase-request-event.html 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,29 @@
+This test calls open on window.indexedDB in various ways, verifying that IDBOpenDBRequest objects are returned when expected and exceptions are thrown when expected.
+<script>
+
+if (window.testRunner) {
+ testRunner.waitUntilDone();
+ testRunner.dumpAsText();
+}
+
+function done()
+{
+ alert("Done");
+ if (window.testRunner)
+ testRunner.notifyDone();
+}
+
+var request = window.indexedDB.open("TestDatabase");
+alert(request);
+
+request._onsuccess_ = function()
+{
+ alert("success");
+ done();
+}
+request._onerror_ = function(e)
+{
+ alert("error " + e);
+ done();
+}
+</script>
Modified: trunk/Source/WebCore/CMakeLists.txt (190378 => 190379)
--- trunk/Source/WebCore/CMakeLists.txt 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/CMakeLists.txt 2015-10-01 01:04:19 UTC (rev 190379)
@@ -898,7 +898,11 @@
Modules/indexeddb/server/IDBConnectionToClient.cpp
Modules/indexeddb/server/IDBServer.cpp
+ Modules/indexeddb/server/IDBServerOperation.cpp
+ Modules/indexeddb/server/MemoryIDBBackingStore.cpp
+ Modules/indexeddb/server/UniqueIDBDatabase.cpp
+ Modules/indexeddb/shared/IDBDatabaseInfo.cpp
Modules/indexeddb/shared/IDBError.cpp
Modules/indexeddb/shared/IDBRequestData.cpp
Modules/indexeddb/shared/IDBRequestIdentifier.cpp
Modified: trunk/Source/WebCore/ChangeLog (190378 => 190379)
--- trunk/Source/WebCore/ChangeLog 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/ChangeLog 2015-10-01 01:04:19 UTC (rev 190379)
@@ -1,3 +1,97 @@
+2015-09-30 Brady Eidson <beid...@apple.com>
+
+ Add UniqueIDBDatabase object, IDBBackingStore objects, and a database operation thread.
+ https://bugs.webkit.org/show_bug.cgi?id=149678
+
+ Reviewed by Alex Christensen.
+
+ Test: storage/indexeddb/modern/opendatabase-request-event.html
+
+ - UniqueIDBDatabase represents a specific IDB database instance that can have multiple
+ connections to it.
+ - IDBBackingStore is an abstract representation of a unique database's backing store,
+ and has a concrete in-memory implementation for now.
+ - The database thread exists on IDBServer and is for offloading actual database I/O from
+ the main thread.
+
+ * CMakeLists.txt:
+
+ * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
+ (WebCore::IDBDatabaseIdentifier::isolatedCopy):
+ * Modules/indexeddb/IDBDatabaseIdentifier.h:
+
+ * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+ (WebCore::IDBClient::IDBConnectionToServer::openDatabase):
+ (WebCore::IDBClient::IDBConnectionToServer::didOpenDatabase):
+ * Modules/indexeddb/client/IDBConnectionToServer.h:
+ * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
+
+ * Modules/indexeddb/client/IDBFactoryImpl.cpp:
+ (WebCore::IDBClient::IDBFactory::openInternal):
+
+ * Modules/indexeddb/server/IDBBackingStore.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h.
+ (WebCore::IDBServer::IDBBackingStore::~IDBBackingStore):
+
+ * Modules/indexeddb/server/IDBConnectionToClient.cpp:
+ (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
+ * Modules/indexeddb/server/IDBConnectionToClient.h:
+ * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
+
+ * Modules/indexeddb/server/IDBServer.cpp:
+ (WebCore::IDBServer::IDBServer::IDBServer):
+ (WebCore::IDBServer::IDBServer::getOrCreateUniqueIDBDatabase):
+ (WebCore::IDBServer::IDBServer::createBackingStore):
+ (WebCore::IDBServer::IDBServer::openDatabase):
+ (WebCore::IDBServer::IDBServer::deleteDatabase):
+ (WebCore::IDBServer::IDBServer::postDatabaseTask):
+ (WebCore::IDBServer::IDBServer::postDatabaseTaskReply):
+ (WebCore::IDBServer::IDBServer::databaseThreadEntry):
+ (WebCore::IDBServer::IDBServer::databaseRunLoop):
+ (WebCore::IDBServer::IDBServer::handleTaskRepliesOnMainThread):
+ * Modules/indexeddb/server/IDBServer.h:
+
+ * Modules/indexeddb/server/IDBServerOperation.cpp: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h.
+ (WebCore::IDBServer::IDBServerOperation::create):
+ (WebCore::IDBServer::IDBServerOperation::IDBServerOperation):
+ * Modules/indexeddb/server/IDBServerOperation.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBServer.h.
+ (WebCore::IDBServer::IDBServerOperation::connection):
+ (WebCore::IDBServer::IDBServerOperation::requestData):
+
+ * Modules/indexeddb/server/MemoryIDBBackingStore.cpp: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp.
+ (WebCore::IDBServer::MemoryIDBBackingStore::create):
+ (WebCore::IDBServer::MemoryIDBBackingStore::MemoryIDBBackingStore):
+ (WebCore::IDBServer::MemoryIDBBackingStore::~MemoryIDBBackingStore):
+ (WebCore::IDBServer::MemoryIDBBackingStore::getOrEstablishDatabaseInfo):
+ * Modules/indexeddb/server/MemoryIDBBackingStore.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h.
+
+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp: Added.
+ (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
+ (WebCore::IDBServer::UniqueIDBDatabase::openDatabaseConnection):
+ (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
+ (WebCore::IDBServer::UniqueIDBDatabase::openBackingStore):
+ (WebCore::IDBServer::UniqueIDBDatabase::didOpenBackingStore):
+ * Modules/indexeddb/server/UniqueIDBDatabase.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBServer.h.
+ (WebCore::IDBServer::UniqueIDBDatabase::create):
+
+ * Modules/indexeddb/shared/IDBDatabaseInfo.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h.
+ (WebCore::IDBDatabaseInfo::IDBDatabaseInfo):
+ (WebCore::IDBDatabaseInfo::isolatedCopy):
+ * Modules/indexeddb/shared/IDBDatabaseInfo.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h.
+ (WebCore::IDBDatabaseInfo::IDBDatabaseInfo):
+
+ * Modules/indexeddb/shared/InProcessIDBServer.cpp:
+ (WebCore::InProcessIDBServer::didDeleteDatabase):
+ (WebCore::InProcessIDBServer::openDatabase):
+ (WebCore::InProcessIDBServer::didOpenDatabase):
+ * Modules/indexeddb/shared/InProcessIDBServer.h:
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+ * platform/CrossThreadCopier.cpp:
+ (WebCore::IDBDatabaseInfo>::copy):
+ (WebCore::IDBDatabaseIdentifier>::copy):
+ * platform/CrossThreadCopier.h:
+
2015-09-30 Myles C. Maxfield <mmaxfi...@apple.com>
Crash when using an SVG font with > 390 glyphs
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -44,7 +44,17 @@
ASSERT(!databaseName.isNull());
}
+IDBDatabaseIdentifier IDBDatabaseIdentifier::isolatedCopy() const
+{
+ IDBDatabaseIdentifier identifier;
+ identifier.m_databaseName = m_databaseName.isolatedCopy();
+ identifier.m_openingOrigin = m_openingOrigin.isolatedCopy();
+ identifier.m_mainFrameOrigin = m_mainFrameOrigin.isolatedCopy();
+
+ return WTF::move(identifier);
+}
+
#ifndef NDEBUG
String IDBDatabaseIdentifier::debugString() const
{
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -50,6 +50,8 @@
m_mainFrameOrigin.port = -1;
}
+ IDBDatabaseIdentifier isolatedCopy() const;
+
bool isHashTableDeletedValue() const
{
return m_openingOrigin.port == -1 && m_mainFrameOrigin.port == -1;
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -72,6 +72,27 @@
request->requestCompleted(resultData);
}
+void IDBConnectionToServer::openDatabase(IDBOpenDBRequest& request)
+{
+ LOG(IndexedDB, "IDBConnectionToServer::openDatabase - %s", request.databaseIdentifier().debugString().utf8().data());
+
+ ASSERT(!m_openDBRequestMap.contains(request.requestIdentifier()));
+ m_openDBRequestMap.set(request.requestIdentifier(), &request);
+
+ IDBRequestData requestData(*this, request);
+ m_delegate->openDatabase(requestData);
+}
+
+void IDBConnectionToServer::didOpenDatabase(const IDBResultData& resultData)
+{
+ LOG(IndexedDB, "IDBConnectionToServer::didOpenDatabase");
+
+ auto request = m_openDBRequestMap.take(resultData.requestIdentifier());
+ ASSERT(request);
+
+ request->requestCompleted(resultData);
+}
+
} // namespace IDBClient
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -50,7 +50,10 @@
void deleteDatabase(IDBOpenDBRequest&);
void didDeleteDatabase(const IDBResultData&);
-
+
+ void openDatabase(IDBOpenDBRequest&);
+ void didOpenDatabase(const IDBResultData&);
+
private:
IDBConnectionToServer(IDBConnectionToServerDelegate&);
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -40,7 +40,8 @@
virtual uint64_t identifier() const = 0;
virtual void deleteDatabase(IDBRequestData&) = 0;
-
+ virtual void openDatabase(IDBRequestData&) = 0;
+
virtual void ref() = 0;
virtual void deref() = 0;
};
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -115,6 +115,8 @@
}
auto request = IDBOpenDBRequest::createOpenRequest(m_connectionToServer.get(), context, databaseIdentifier, version);
+ m_connectionToServer->openDatabase(request.get());
+
return adoptRef(&request.leakRef());
}
Copied: trunk/Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IDBBackingStore_h
+#define IDBBackingStore_h
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBDatabaseInfo.h"
+
+namespace WebCore {
+namespace IDBServer {
+
+class IDBBackingStore {
+public:
+ virtual ~IDBBackingStore() { }
+
+ virtual const IDBDatabaseInfo& getOrEstablishDatabaseInfo() = 0;
+};
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
+#endif // IDBBackingStore_h
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -51,6 +51,11 @@
m_delegate->didDeleteDatabase(result);
}
+void IDBConnectionToClient::didOpenDatabase(const IDBResultData& result)
+{
+ m_delegate->didOpenDatabase(result);
+}
+
} // namespace IDBServer
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -45,6 +45,7 @@
uint64_t identifier() const;
void didDeleteDatabase(const IDBResultData&);
+ void didOpenDatabase(const IDBResultData&);
private:
IDBConnectionToClient(IDBConnectionToClientDelegate&);
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -41,6 +41,7 @@
virtual uint64_t identifier() const = 0;
virtual void didDeleteDatabase(const IDBResultData&) = 0;
+ virtual void didOpenDatabase(const IDBResultData&) = 0;
virtual void ref() = 0;
virtual void deref() = 0;
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -31,6 +31,9 @@
#include "IDBRequestData.h"
#include "IDBResultData.h"
#include "Logging.h"
+#include "MemoryIDBBackingStore.h"
+#include <wtf/Locker.h>
+#include <wtf/MainThread.h>
namespace WebCore {
namespace IDBServer {
@@ -42,6 +45,8 @@
IDBServer::IDBServer()
{
+ Locker<Lock> locker(m_databaseThreadCreationLock);
+ m_threadID = createThread(IDBServer::databaseThreadEntry, this, "IndexedDatabase Server");
}
void IDBServer::registerConnection(IDBConnectionToClient& connection)
@@ -58,24 +63,110 @@
m_connectionMap.remove(connection.identifier());
}
-void IDBServer::deleteDatabase(const IDBRequestData& data)
+UniqueIDBDatabase& IDBServer::getOrCreateUniqueIDBDatabase(const IDBDatabaseIdentifier& identifier)
{
- LOG(IndexedDB, "IDBServer::deleteDatabase - %s", data.databaseIdentifier().debugString().utf8().data());
+ auto uniqueIDBDatabase = m_uniqueIDBDatabaseMap.add(identifier, nullptr);
+ if (uniqueIDBDatabase.isNewEntry)
+ uniqueIDBDatabase.iterator->value = UniqueIDBDatabase::create(*this, identifier);
+
+ return *uniqueIDBDatabase.iterator->value;
+}
+
+std::unique_ptr<IDBBackingStore> IDBServer::createBackingStore(const IDBDatabaseIdentifier& identifier)
+{
+ ASSERT(!isMainThread());
+
+ // FIXME: For now we only have the in-memory backing store, which we'll continue to use for private browsing.
+ // Once it's time for persistent backing stores this is where we'll calculate the correct path on disk
+ // and create it.
+
+ return MemoryIDBBackingStore::create(identifier);
+}
+
+void IDBServer::openDatabase(const IDBRequestData& requestData)
+{
+ LOG(IndexedDB, "IDBServer::openDatabase");
+
+ auto& uniqueIDBDatabase = getOrCreateUniqueIDBDatabase(requestData.databaseIdentifier());
+
+ auto connection = m_connectionMap.get(requestData.requestIdentifier().connectionIdentifier());
+ if (!connection) {
+ // If the connection back to the client is gone, there's no way to open the database as
+ // well as no way to message back failure.
+ return;
+ }
+
+ uniqueIDBDatabase.openDatabaseConnection(*connection, requestData);
+}
+
+void IDBServer::deleteDatabase(const IDBRequestData& requestData)
+{
+ LOG(IndexedDB, "IDBServer::deleteDatabase - %s", requestData.databaseIdentifier().debugString().utf8().data());
- auto connection = m_connectionMap.get(data.requestIdentifier().connectionIdentifier());
+ auto connection = m_connectionMap.get(requestData.requestIdentifier().connectionIdentifier());
if (!connection) {
- // If we don't have record of this connection (e.g. it has dropped due to a process crashing)
- // then we can't report back status of the operation.
- // Therefore we shouldn't bother performing it.
+ // If the connection back to the client is gone, there's no way to delete the database as
+ // well as no way to message back failure.
return;
}
// FIXME: During bringup of modern IDB, the database deletion is a no-op, and is
// immediately reported back to the WebProcess as failure.
- IDBResultData result(data.requestIdentifier(), IDBError(IDBExceptionCode::Unknown));
+ IDBResultData result(requestData.requestIdentifier(), IDBError(IDBExceptionCode::Unknown));
connection->didDeleteDatabase(result);
}
+void IDBServer::postDatabaseTask(std::unique_ptr<CrossThreadTask>&& task)
+{
+ ASSERT(isMainThread());
+ m_databaseQueue.append(WTF::move(task));
+}
+
+void IDBServer::postDatabaseTaskReply(std::unique_ptr<CrossThreadTask>&& task)
+{
+ ASSERT(!isMainThread());
+ m_databaseReplyQueue.append(WTF::move(task));
+
+
+ Locker<Lock> locker(m_mainThreadReplyLock);
+ if (m_mainThreadReplyScheduled)
+ return;
+
+ m_mainThreadReplyScheduled = true;
+ callOnMainThread([this] {
+ handleTaskRepliesOnMainThread();
+ });
+}
+
+void IDBServer::databaseThreadEntry(void* threadData)
+{
+ ASSERT(threadData);
+ IDBServer* server = reinterpret_cast<IDBServer*>(threadData);
+ server->databaseRunLoop();
+}
+
+void IDBServer::databaseRunLoop()
+{
+ ASSERT(!isMainThread());
+ {
+ Locker<Lock> locker(m_databaseThreadCreationLock);
+ }
+
+ while (auto task = m_databaseQueue.waitForMessage())
+ task->performTask();
+}
+
+void IDBServer::handleTaskRepliesOnMainThread()
+{
+ {
+ Locker<Lock> locker(m_mainThreadReplyLock);
+ m_mainThreadReplyScheduled = false;
+ }
+
+ while (auto task = m_databaseReplyQueue.tryGetMessage())
+ task->performTask();
+}
+
} // namespace IDBServer
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -28,14 +28,20 @@
#if ENABLE(INDEXED_DATABASE)
+#include "CrossThreadTask.h"
#include "IDBConnectionToClient.h"
+#include "IDBDatabaseIdentifier.h"
+#include "UniqueIDBDatabase.h"
#include <wtf/HashMap.h>
+#include <wtf/Lock.h>
+#include <wtf/MessageQueue.h>
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
namespace WebCore {
+class CrossThreadTask;
class IDBRequestData;
namespace IDBServer {
@@ -48,12 +54,33 @@
void unregisterConnection(IDBConnectionToClient&);
// Operations requested by the client.
+ void openDatabase(const IDBRequestData&);
void deleteDatabase(const IDBRequestData&);
+ void postDatabaseTask(std::unique_ptr<CrossThreadTask>&&);
+ void postDatabaseTaskReply(std::unique_ptr<CrossThreadTask>&&);
+
+ std::unique_ptr<IDBBackingStore> createBackingStore(const IDBDatabaseIdentifier&);
+
private:
IDBServer();
+ UniqueIDBDatabase& getOrCreateUniqueIDBDatabase(const IDBDatabaseIdentifier&);
+
+ static void databaseThreadEntry(void*);
+ void databaseRunLoop();
+ void handleTaskRepliesOnMainThread();
+
HashMap<uint64_t, RefPtr<IDBConnectionToClient>> m_connectionMap;
+ HashMap<IDBDatabaseIdentifier, RefPtr<UniqueIDBDatabase>> m_uniqueIDBDatabaseMap;
+
+ ThreadIdentifier m_threadID { 0 };
+ Lock m_databaseThreadCreationLock;
+ Lock m_mainThreadReplyLock;
+ bool m_mainThreadReplyScheduled { false };
+
+ MessageQueue<CrossThreadTask> m_databaseQueue;
+ MessageQueue<CrossThreadTask> m_databaseReplyQueue;
};
} // namespace IDBServer
Copied: trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "IDBServerOperation.h"
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+namespace IDBServer {
+
+Ref<IDBServerOperation> IDBServerOperation::create(IDBConnectionToClient& connection, const IDBRequestData& requestData)
+{
+ return adoptRef(*new IDBServerOperation(connection, requestData));
+}
+
+IDBServerOperation::IDBServerOperation(IDBConnectionToClient& connection, const IDBRequestData& requestData)
+ : m_connection(connection)
+ , m_requestData(requestData)
+{
+}
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
Copied: trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServerOperation.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IDBServerOperation_h
+#define IDBServerOperation_h
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBConnectionToClient.h"
+#include "IDBRequestData.h"
+#include <wtf/Ref.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+namespace IDBServer {
+
+class IDBServerOperation : public RefCounted<IDBServerOperation> {
+public:
+ static Ref<IDBServerOperation> create(IDBConnectionToClient&, const IDBRequestData&);
+
+ IDBConnectionToClient& connection() { return m_connection; }
+ const IDBRequestData& requestData() const { return m_requestData; }
+
+private:
+ IDBServerOperation(IDBConnectionToClient&, const IDBRequestData&);
+
+ IDBConnectionToClient& m_connection;
+ IDBRequestData m_requestData;
+};
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
+#endif // IDBServerOperation_h
Copied: trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "MemoryIDBBackingStore.h"
+
+#if ENABLE(INDEXED_DATABASE)
+
+namespace WebCore {
+namespace IDBServer {
+
+std::unique_ptr<MemoryIDBBackingStore> MemoryIDBBackingStore::create(const IDBDatabaseIdentifier& identifier)
+{
+ return std::make_unique<MemoryIDBBackingStore>(identifier);
+}
+
+MemoryIDBBackingStore::MemoryIDBBackingStore(const IDBDatabaseIdentifier& identifier)
+ : m_identifier(identifier)
+{
+}
+
+MemoryIDBBackingStore::~MemoryIDBBackingStore()
+{
+}
+
+const IDBDatabaseInfo& MemoryIDBBackingStore::getOrEstablishDatabaseInfo()
+{
+ if (!m_databaseInfo)
+ m_databaseInfo = std::make_unique<IDBDatabaseInfo>(m_identifier.databaseName(), 0);
+
+ return *m_databaseInfo;
+}
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
Copied: trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MemoryIDBBackingStore_h
+#define MemoryIDBBackingStore_h
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBBackingStore.h"
+#include "IDBDatabaseIdentifier.h"
+
+namespace WebCore {
+namespace IDBServer {
+
+class MemoryIDBBackingStore : public IDBBackingStore {
+ friend std::unique_ptr<MemoryIDBBackingStore> std::make_unique<MemoryIDBBackingStore>(const IDBDatabaseIdentifier&);
+public:
+ static std::unique_ptr<MemoryIDBBackingStore> create(const IDBDatabaseIdentifier&);
+
+ virtual ~MemoryIDBBackingStore() override final;
+
+ virtual const IDBDatabaseInfo& getOrEstablishDatabaseInfo() override final;
+
+private:
+ MemoryIDBBackingStore(const IDBDatabaseIdentifier&);
+
+ IDBDatabaseIdentifier m_identifier;
+ std::unique_ptr<IDBDatabaseInfo> m_databaseInfo;
+};
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
+#endif // MemoryIDBBackingStore_h
Added: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "UniqueIDBDatabase.h"
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBResultData.h"
+#include "IDBServer.h"
+#include "Logging.h"
+#include <wtf/MainThread.h>
+#include <wtf/ThreadSafeRefCounted.h>
+
+namespace WebCore {
+namespace IDBServer {
+
+UniqueIDBDatabase::UniqueIDBDatabase(IDBServer& server, const IDBDatabaseIdentifier& identifier)
+ : m_server(server)
+ , m_identifier(identifier)
+{
+}
+
+void UniqueIDBDatabase::openDatabaseConnection(IDBConnectionToClient& connection, const IDBRequestData& requestData)
+{
+ auto operation = IDBServerOperation::create(connection, requestData);
+ m_pendingOpenDatabaseOperations.append(WTF::move(operation));
+
+ if (m_databaseInfo) {
+ handleOpenDatabaseOperations();
+ return;
+ }
+
+ m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::openBackingStore, m_identifier));
+}
+
+void UniqueIDBDatabase::handleOpenDatabaseOperations()
+{
+ ASSERT(isMainThread());
+ LOG(IndexedDB, "(main) UniqueIDBDatabase::handleOpenDatabaseOperations");
+
+ auto operation = m_pendingOpenDatabaseOperations.takeFirst();
+
+ // FIXME: Reporting open operations as failures for now.
+ // Creating database connections for success will be the next step.
+
+ IDBResultData result(operation->requestData().requestIdentifier(), IDBError(IDBExceptionCode::Unknown));
+ operation->connection().didOpenDatabase(result);
+}
+
+void UniqueIDBDatabase::openBackingStore(const IDBDatabaseIdentifier& identifier)
+{
+ ASSERT(!isMainThread());
+ LOG(IndexedDB, "(db) UniqueIDBDatabase::openBackingStore");
+
+ ASSERT(!m_backingStore);
+ m_backingStore = m_server.createBackingStore(identifier);
+ auto databaseInfo = m_backingStore->getOrEstablishDatabaseInfo();
+
+ m_server.postDatabaseTaskReply(createCrossThreadTask(*this, &UniqueIDBDatabase::didOpenBackingStore, databaseInfo));
+}
+
+void UniqueIDBDatabase::didOpenBackingStore(const IDBDatabaseInfo& info)
+{
+ ASSERT(isMainThread());
+ LOG(IndexedDB, "(main) UniqueIDBDatabase::didOpenBackingStore");
+
+ m_databaseInfo = std::make_unique<IDBDatabaseInfo>(info);
+
+ handleOpenDatabaseOperations();
+}
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
Copied: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UniqueIDBDatabase_h
+#define UniqueIDBDatabase_h
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include "IDBBackingStore.h"
+#include "IDBDatabaseIdentifier.h"
+#include "IDBDatabaseInfo.h"
+#include "IDBServerOperation.h"
+#include <wtf/Deque.h>
+#include <wtf/Ref.h>
+#include <wtf/ThreadSafeRefCounted.h>
+
+namespace WebCore {
+
+class IDBRequestData;
+
+namespace IDBServer {
+
+class IDBConnectionToClient;
+class IDBServer;
+
+class UniqueIDBDatabase : public ThreadSafeRefCounted<UniqueIDBDatabase> {
+public:
+ static Ref<UniqueIDBDatabase> create(IDBServer& server, const IDBDatabaseIdentifier& identifier)
+ {
+ return adoptRef(*new UniqueIDBDatabase(server, identifier));
+ }
+
+ void openDatabaseConnection(IDBConnectionToClient&, const IDBRequestData&);
+
+private:
+ UniqueIDBDatabase(IDBServer&, const IDBDatabaseIdentifier&);
+
+ void handleOpenDatabaseOperations();
+
+ // Database thread operations
+ void openBackingStore(const IDBDatabaseIdentifier&);
+
+ // Main thread callbacks
+ void didOpenBackingStore(const IDBDatabaseInfo&);
+
+ IDBServer& m_server;
+ IDBDatabaseIdentifier m_identifier;
+
+ Deque<Ref<IDBServerOperation>> m_pendingOpenDatabaseOperations;
+
+ std::unique_ptr<IDBBackingStore> m_backingStore;
+ std::unique_ptr<IDBDatabaseInfo> m_databaseInfo;
+};
+
+} // namespace IDBServer
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
+#endif // UniqueIDBDatabase_h
Copied: trunk/Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.cpp (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.cpp (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "IDBDatabaseInfo.h"
+
+#if ENABLE(INDEXED_DATABASE)
+
+namespace WebCore {
+
+IDBDatabaseInfo::IDBDatabaseInfo(const String& name, uint64_t version)
+ : m_name(name)
+ , m_version(version)
+{
+}
+
+IDBDatabaseInfo IDBDatabaseInfo::isolatedCopy() const
+{
+ IDBDatabaseInfo info;
+
+ info.m_name = m_name.isolatedCopy();
+ info.m_version = m_version;
+
+ return WTF::move(info);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
Copied: trunk/Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.h (from rev 190378, trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h) (0 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.h (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IDBDatabaseInfo_h
+#define IDBDatabaseInfo_h
+
+#if ENABLE(INDEXED_DATABASE)
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+class IDBDatabaseInfo {
+public:
+ IDBDatabaseInfo(const String& name, uint64_t version);
+
+ IDBDatabaseInfo isolatedCopy() const;
+
+private:
+ IDBDatabaseInfo()
+ {
+ }
+
+ String m_name;
+ uint64_t m_version { 0 };
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
+#endif // IDBDatabaseInfo_h
Modified: trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -83,8 +83,25 @@
RefPtr<InProcessIDBServer> self(this);
RunLoop::current().dispatch([this, self, resultData] {
m_connectionToServer->didDeleteDatabase(resultData);
- });}
+ });
+}
+void InProcessIDBServer::openDatabase(IDBRequestData& requestData)
+{
+ RefPtr<InProcessIDBServer> self(this);
+ RunLoop::current().dispatch([this, self, requestData] {
+ m_server->openDatabase(requestData);
+ });
+}
+
+void InProcessIDBServer::didOpenDatabase(const IDBResultData& resultData)
+{
+ RefPtr<InProcessIDBServer> self(this);
+ RunLoop::current().dispatch([this, self, resultData] {
+ m_connectionToServer->didOpenDatabase(resultData);
+ });
+}
+
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
Modified: trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h (190378 => 190379)
--- trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -55,10 +55,12 @@
// IDBConnectionToServer
virtual void deleteDatabase(IDBRequestData&) override final;
-
+ virtual void openDatabase(IDBRequestData&) override final;
+
// IDBConnectionToClient
virtual uint64_t identifier() const override;
virtual void didDeleteDatabase(const IDBResultData&) override final;
+ virtual void didOpenDatabase(const IDBResultData&) override final;
virtual void ref() override { RefCounted<InProcessIDBServer>::ref(); }
virtual void deref() override { RefCounted<InProcessIDBServer>::deref(); }
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (190378 => 190379)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-10-01 01:04:19 UTC (rev 190379)
@@ -1921,7 +1921,7 @@
510A58E41BAA40B100C19282 /* InProcessIDBServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510A58E21BAA40AE00C19282 /* InProcessIDBServer.cpp */; };
510A58E51BAA40B100C19282 /* InProcessIDBServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A58E31BAA40AE00C19282 /* InProcessIDBServer.h */; settings = {ATTRIBUTES = (Private, ); }; };
510A58F91BACC7F200C19282 /* IDBRequestData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510A58F51BACC4A500C19282 /* IDBRequestData.cpp */; };
- 510A58FA1BACC7F200C19282 /* IDBRequestData.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A58F61BACC4A500C19282 /* IDBRequestData.h */; };
+ 510A58FA1BACC7F200C19282 /* IDBRequestData.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A58F61BACC4A500C19282 /* IDBRequestData.h */; settings = {ATTRIBUTES = (Private, ); }; };
510A58FB1BACC7F200C19282 /* IDBRequestIdentifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510A58E61BAA41C900C19282 /* IDBRequestIdentifier.cpp */; };
510A58FC1BACC7F200C19282 /* IDBRequestIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A58E71BAA41C900C19282 /* IDBRequestIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
510D4A33103165EE0049EA54 /* SocketStreamErrorBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510D4A2D103165EE0049EA54 /* SocketStreamErrorBase.cpp */; };
@@ -2099,6 +2099,10 @@
5185FCB91BB4CBF80012898F /* IDBConnectionToClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A58FE1BB07AA500C19282 /* IDBConnectionToClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
5185FCBA1BB4CBF80012898F /* IDBServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510A58EF1BAB720F00C19282 /* IDBServer.cpp */; };
5185FCBB1BB4CBF80012898F /* IDBServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A58F01BAB720F00C19282 /* IDBServer.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 518864E01BBAF57100E540C9 /* UniqueIDBDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 518864DE1BBAF30F00E540C9 /* UniqueIDBDatabase.cpp */; };
+ 518864E11BBAF57400E540C9 /* UniqueIDBDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 518864DF1BBAF30F00E540C9 /* UniqueIDBDatabase.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 518864E61BBB4B8300E540C9 /* IDBServerOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 518864E41BBB4B7E00E540C9 /* IDBServerOperation.cpp */; };
+ 518864E71BBB4B8300E540C9 /* IDBServerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 518864E51BBB4B7E00E540C9 /* IDBServerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };
5189F01D10B37BD900F3C739 /* JSPopStateEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5189F01B10B37BD900F3C739 /* JSPopStateEvent.cpp */; };
5189F01E10B37BD900F3C739 /* JSPopStateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5189F01C10B37BD900F3C739 /* JSPopStateEvent.h */; };
5189F0DE10B46B0E00F3C739 /* PopStateEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5189F0DD10B46B0E00F3C739 /* PopStateEvent.cpp */; };
@@ -2127,6 +2131,11 @@
51B45D201AB8D1E200117CD2 /* ContentExtension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B45D1E1AB8D1E200117CD2 /* ContentExtension.cpp */; };
51B45D211AB8D1E200117CD2 /* ContentExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B45D1F1AB8D1E200117CD2 /* ContentExtension.h */; settings = {ATTRIBUTES = (Private, ); }; };
51B58FD4195A964D002990B0 /* PlatformGamepad.h in Headers */ = {isa = PBXBuildFile; fileRef = 515E5FEF195101470086CA5E /* PlatformGamepad.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 51BA4AC31BBB5CD800DF3D6D /* IDBDatabaseInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51BA4AC11BBB5CBF00DF3D6D /* IDBDatabaseInfo.cpp */; };
+ 51BA4AC41BBB5CD800DF3D6D /* IDBDatabaseInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC21BBB5CBF00DF3D6D /* IDBDatabaseInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 51BA4ACA1BBC5BD900DF3D6D /* MemoryIDBBackingStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51BA4AC81BBC5B9E00DF3D6D /* MemoryIDBBackingStore.cpp */; };
+ 51BA4ACB1BBC5BD900DF3D6D /* MemoryIDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */; };
+ 51BA4ACC1BBC5BDD00DF3D6D /* IDBBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
51BE37E00DAEE00E001085FC /* StorageArea.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BE37DE0DAEE00E001085FC /* StorageArea.h */; settings = {ATTRIBUTES = (Private, ); }; };
51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C0AA380F2AA10A001648C2 /* CachedFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
51C0AA410F2AA15E001648C2 /* CachedFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */; };
@@ -9414,6 +9423,10 @@
5185FCB61BB4C7610012898F /* DOMRequestState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMRequestState.h; sourceTree = "<group>"; };
5185FCBC1BB5CB770012898F /* IDBConnectionToServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBConnectionToServer.cpp; sourceTree = "<group>"; };
5185FCBD1BB5CB770012898F /* IDBConnectionToServerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBConnectionToServerDelegate.h; sourceTree = "<group>"; };
+ 518864DE1BBAF30F00E540C9 /* UniqueIDBDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniqueIDBDatabase.cpp; sourceTree = "<group>"; };
+ 518864DF1BBAF30F00E540C9 /* UniqueIDBDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueIDBDatabase.h; sourceTree = "<group>"; };
+ 518864E41BBB4B7E00E540C9 /* IDBServerOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBServerOperation.cpp; sourceTree = "<group>"; };
+ 518864E51BBB4B7E00E540C9 /* IDBServerOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBServerOperation.h; sourceTree = "<group>"; };
5189F01B10B37BD900F3C739 /* JSPopStateEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPopStateEvent.cpp; sourceTree = "<group>"; };
5189F01C10B37BD900F3C739 /* JSPopStateEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPopStateEvent.h; sourceTree = "<group>"; };
5189F0DD10B46B0E00F3C739 /* PopStateEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PopStateEvent.cpp; sourceTree = "<group>"; };
@@ -9451,6 +9464,11 @@
51B454E91B4DAE7D0085EAA6 /* PingHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PingHandle.h; sourceTree = "<group>"; };
51B45D1E1AB8D1E200117CD2 /* ContentExtension.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentExtension.cpp; sourceTree = "<group>"; };
51B45D1F1AB8D1E200117CD2 /* ContentExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentExtension.h; sourceTree = "<group>"; };
+ 51BA4AC11BBB5CBF00DF3D6D /* IDBDatabaseInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseInfo.cpp; sourceTree = "<group>"; };
+ 51BA4AC21BBB5CBF00DF3D6D /* IDBDatabaseInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseInfo.h; sourceTree = "<group>"; };
+ 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBBackingStore.h; sourceTree = "<group>"; };
+ 51BA4AC81BBC5B9E00DF3D6D /* MemoryIDBBackingStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryIDBBackingStore.cpp; sourceTree = "<group>"; };
+ 51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryIDBBackingStore.h; sourceTree = "<group>"; };
51BE37DE0DAEE00E001085FC /* StorageArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageArea.h; sourceTree = "<group>"; };
51C0AA380F2AA10A001648C2 /* CachedFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedFrame.h; sourceTree = "<group>"; };
51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = CachedFrame.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
@@ -16636,6 +16654,8 @@
510A58E11BAA409800C19282 /* shared */ = {
isa = PBXGroup;
children = (
+ 51BA4AC11BBB5CBF00DF3D6D /* IDBDatabaseInfo.cpp */,
+ 51BA4AC21BBB5CBF00DF3D6D /* IDBDatabaseInfo.h */,
5148453C1BB9D076006A72ED /* IDBError.cpp */,
5148453D1BB9D076006A72ED /* IDBError.h */,
510A58F51BACC4A500C19282 /* IDBRequestData.cpp */,
@@ -16653,11 +16673,18 @@
510A58EE1BAB71E000C19282 /* server */ = {
isa = PBXGroup;
children = (
+ 51BA4AC71BBC5AD600DF3D6D /* IDBBackingStore.h */,
516D7D6D1BB5F06500AF7C77 /* IDBConnectionToClient.cpp */,
510A58FE1BB07AA500C19282 /* IDBConnectionToClient.h */,
516D7D6E1BB5F06500AF7C77 /* IDBConnectionToClientDelegate.h */,
510A58EF1BAB720F00C19282 /* IDBServer.cpp */,
510A58F01BAB720F00C19282 /* IDBServer.h */,
+ 518864E41BBB4B7E00E540C9 /* IDBServerOperation.cpp */,
+ 518864E51BBB4B7E00E540C9 /* IDBServerOperation.h */,
+ 51BA4AC81BBC5B9E00DF3D6D /* MemoryIDBBackingStore.cpp */,
+ 51BA4AC91BBC5B9E00DF3D6D /* MemoryIDBBackingStore.h */,
+ 518864DE1BBAF30F00E540C9 /* UniqueIDBDatabase.cpp */,
+ 518864DF1BBAF30F00E540C9 /* UniqueIDBDatabase.h */,
);
path = server;
sourceTree = "<group>";
@@ -24656,6 +24683,7 @@
BC64641C11D7F416006455B0 /* DatasetDOMStringMap.h in Headers */,
85031B3E0A44EFC700F992E0 /* DataTransfer.h in Headers */,
4B8AF4AA0B1CE02B00687690 /* DataTransferAccessPolicy.h in Headers */,
+ 51BA4ACC1BBC5BDD00DF3D6D /* IDBBackingStore.h in Headers */,
81AC5999131636E60009A7E0 /* DataTransferItem.h in Headers */,
81AC599A131636E60009A7E0 /* DataTransferItemList.h in Headers */,
E4A007831B820EC8002C5A6E /* DataURLDecoder.h in Headers */,
@@ -25945,6 +25973,7 @@
A84EBD830CB8C97700079609 /* JSStyleSheetList.h in Headers */,
E1FF8F65180745D800132674 /* JSSubtleCrypto.h in Headers */,
B20111080AB7740500DB0E68 /* JSSVGAElement.h in Headers */,
+ 518864E71BBB4B8300E540C9 /* IDBServerOperation.h in Headers */,
24D9129213CA951E00D21915 /* JSSVGAltGlyphDefElement.h in Headers */,
6515EC920D9723FF0063D49A /* JSSVGAltGlyphElement.h in Headers */,
24D9129613CA956100D21915 /* JSSVGAltGlyphItemElement.h in Headers */,
@@ -26551,6 +26580,7 @@
BC5C762B1497FE1400BC4775 /* PlatformEvent.h in Headers */,
26601EBF14B3B9AD0012C0FE /* PlatformEventFactoryIOS.h in Headers */,
BCAA487014A052530088FAC4 /* PlatformEventFactoryMac.h in Headers */,
+ 51BA4AC41BBB5CD800DF3D6D /* IDBDatabaseInfo.h in Headers */,
A723F77B1484CA4C008C6DBE /* PlatformExportMacros.h in Headers */,
51B58FD4195A964D002990B0 /* PlatformGamepad.h in Headers */,
935C476809AC4D4300A6AAB4 /* PlatformKeyboardEvent.h in Headers */,
@@ -26602,6 +26632,7 @@
B71FE6DF11091CB300DAEF77 /* PrintContext.h in Headers */,
A8EA7EBC0A1945D000A8EF5F /* ProcessingInstruction.h in Headers */,
E44613EC0CD681B500FADA75 /* ProgressEvent.h in Headers */,
+ 518864E11BBAF57400E540C9 /* UniqueIDBDatabase.h in Headers */,
A715E653134BBBEC00D8E713 /* ProgressShadowElement.h in Headers */,
1A2A68240B5BEDE70002A480 /* ProgressTracker.h in Headers */,
1ACADD791880D91C00D8B71D /* ProgressTrackerClient.h in Headers */,
@@ -26828,6 +26859,7 @@
514C767F0CE923A1007EF3CD /* ResourceResponseBase.h in Headers */,
FD3160A512B026F700C1A359 /* Reverb.h in Headers */,
FD3160A712B026F700C1A359 /* ReverbAccumulationBuffer.h in Headers */,
+ 51BA4ACB1BBC5BD900DF3D6D /* MemoryIDBBackingStore.h in Headers */,
FD3160A912B026F700C1A359 /* ReverbConvolver.h in Headers */,
FD3160AB12B026F700C1A359 /* ReverbConvolverStage.h in Headers */,
FD3160AD12B026F700C1A359 /* ReverbInputBuffer.h in Headers */,
@@ -28158,6 +28190,7 @@
45830D4D1679B4F800ACF8C3 /* AutoscrollController.cpp in Sources */,
A8CFF0500A154F09000A4234 /* AutoTableLayout.cpp in Sources */,
070363E1181A1CDC00C074A5 /* AVAudioCaptureSource.mm in Sources */,
+ 518864E61BBB4B8300E540C9 /* IDBServerOperation.cpp in Sources */,
070363E3181A1CDC00C074A5 /* AVCaptureDeviceManager.mm in Sources */,
070363E5181A1CDC00C074A5 /* AVMediaCaptureSource.mm in Sources */,
CD336F6117F9F64700DDDCD0 /* AVTrackPrivateAVFObjCImpl.mm in Sources */,
@@ -28615,6 +28648,7 @@
8540756C0AD6CBF900620C57 /* DOMHTMLOptionElement.mm in Sources */,
85DF2F9C0AA3CAE500AD64C5 /* DOMHTMLOptionsCollection.mm in Sources */,
85183B470AA6926100F19FA3 /* DOMHTMLParagraphElement.mm in Sources */,
+ 518864E01BBAF57100E540C9 /* UniqueIDBDatabase.cpp in Sources */,
85ECBEF80AA7626900544F0B /* DOMHTMLParamElement.mm in Sources */,
85183B490AA6926100F19FA3 /* DOMHTMLPreElement.mm in Sources */,
A4226E961163D73A008B8397 /* DOMHTMLProgressElement.mm in Sources */,
@@ -30047,6 +30081,7 @@
443F04270E75C8FB007E5407 /* NetworkStateNotifierIOS.mm in Sources */,
1A7FA6490DDA3CBA0028F8A5 /* NetworkStateNotifierMac.cpp in Sources */,
E13EF34916850C470034C83F /* NetworkStorageSessionCFNet.cpp in Sources */,
+ 51BA4ACA1BBC5BD900DF3D6D /* MemoryIDBBackingStore.cpp in Sources */,
269397261A4A5FBD00E8349D /* NFA.cpp in Sources */,
267726001A5B3AD9003C24DD /* NFAToDFA.cpp in Sources */,
BCEF43E00E674110001C1287 /* NinePieceImage.cpp in Sources */,
@@ -30854,6 +30889,7 @@
A1DE71321861322200734192 /* TouchConstructors.cpp in Sources */,
A1DE712D18612AC100734192 /* TouchEvents.cpp in Sources */,
070334D9145A006F008D8D45 /* TrackBase.cpp in Sources */,
+ 51BA4AC31BBB5CD800DF3D6D /* IDBDatabaseInfo.cpp in Sources */,
070334D31459FFAD008D8D45 /* TrackEvent.cpp in Sources */,
BE88E0C11715CE2600658D98 /* TrackListBase.cpp in Sources */,
FFAC30FF184FB145008C4F1E /* TrailingObjects.cpp in Sources */,
Modified: trunk/Source/WebCore/platform/CrossThreadCopier.cpp (190378 => 190379)
--- trunk/Source/WebCore/platform/CrossThreadCopier.cpp 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/platform/CrossThreadCopier.cpp 2015-10-01 01:04:19 UTC (rev 190379)
@@ -42,6 +42,8 @@
#include <wtf/text/WTFString.h>
#if ENABLE(INDEXED_DATABASE)
+#include "IDBDatabaseIdentifier.h"
+#include "IDBDatabaseInfo.h"
#include "IDBDatabaseMetadata.h"
#include "IDBGetResult.h"
#include "IDBKeyData.h"
@@ -127,6 +129,15 @@
return metadata.isolatedCopy();
}
+CrossThreadCopierBase<false, false, IDBDatabaseInfo>::Type CrossThreadCopierBase<false, false, IDBDatabaseInfo>::copy(const IDBDatabaseInfo& info)
+{
+ return info.isolatedCopy();
+}
+
+CrossThreadCopierBase<false, false, IDBDatabaseIdentifier>::Type CrossThreadCopierBase<false, false, IDBDatabaseIdentifier>::copy(const IDBDatabaseIdentifier& identifier)
+{
+ return identifier.isolatedCopy();
+}
#endif
// Test CrossThreadCopier using COMPILE_ASSERT.
Modified: trunk/Source/WebCore/platform/CrossThreadCopier.h (190378 => 190379)
--- trunk/Source/WebCore/platform/CrossThreadCopier.h 2015-10-01 00:40:12 UTC (rev 190378)
+++ trunk/Source/WebCore/platform/CrossThreadCopier.h 2015-10-01 01:04:19 UTC (rev 190379)
@@ -190,6 +190,19 @@
typedef IDBObjectStoreMetadata Type;
static Type copy(const IDBObjectStoreMetadata&);
};
+
+ class IDBDatabaseInfo;
+ template<> struct WEBCORE_EXPORT CrossThreadCopierBase<false, false, IDBDatabaseInfo> {
+ typedef IDBDatabaseInfo Type;
+ static Type copy(const IDBDatabaseInfo&);
+ };
+
+ class IDBDatabaseIdentifier;
+ template<> struct WEBCORE_EXPORT CrossThreadCopierBase<false, false, IDBDatabaseIdentifier> {
+ typedef IDBDatabaseIdentifier Type;
+ static Type copy(const IDBDatabaseIdentifier&);
+ };
+
#endif
template<typename T>