Title: [159639] trunk/Source/WebKit2
Revision
159639
Author
[email protected]
Date
2013-11-21 12:00:13 -0800 (Thu, 21 Nov 2013)

Log Message

Hook up WebProcess-side of getOrEstablishIDBDatabaseMetadata
https://bugs.webkit.org/show_bug.cgi?id=124698

Reviewed by Anders Carlsson.

With this change the IDB API in WebKit2 using the DatabaseProcess finally does something observable:
window.indexedDB.open() sends an error to _javascript_.

* DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:
(WebKit::DatabaseProcessIDBConnection::getOrEstablishIDBDatabaseMetadata): Continue calling back to the
  WebProcess with dummy data, but include the request ID for reference.
* DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
* DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in:

Add a new class that wraps a completion callback function and gives it a unique integer identifier.
It also allows for wrapping an abort callback function (in case a connection is lost, for example).
It is templated to flexibly handle any callback function signature.
* Shared/AsyncRequest.cpp: Added.
(WebKit::generateRequestID):
(WebKit::AsyncRequest::AsyncRequest):
(WebKit::AsyncRequest::~AsyncRequest):
(WebKit::AsyncRequest::setAbortHandler):
(WebKit::AsyncRequest::requestAborted):
(WebKit::AsyncRequest::clearAbortHandler):
* Shared/AsyncRequest.h: Added.
(WebKit::AsyncRequest::requestID):
(WebKit::AsyncRequest::requestCompleted):

* WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
(WebKit::WebIDBServerConnection::getOrEstablishIDBDatabaseMetadata): Wrap the completion handler in an
  AsyncRequest and save off the request for later use.
(WebKit::WebIDBServerConnection::didGetOrEstablishIDBDatabaseMetadata): Send the results to the AsyncRequest.
* WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
* WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in:

* WebKit2.xcodeproj/project.pbxproj:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (159638 => 159639)


--- trunk/Source/WebKit2/ChangeLog	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/ChangeLog	2013-11-21 20:00:13 UTC (rev 159639)
@@ -1,3 +1,42 @@
+2013-11-20  Brady Eidson  <[email protected]>
+
+        Hook up WebProcess-side of getOrEstablishIDBDatabaseMetadata
+        https://bugs.webkit.org/show_bug.cgi?id=124698
+
+        Reviewed by Anders Carlsson.
+
+        With this change the IDB API in WebKit2 using the DatabaseProcess finally does something observable:
+        window.indexedDB.open() sends an error to _javascript_.
+
+        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:
+        (WebKit::DatabaseProcessIDBConnection::getOrEstablishIDBDatabaseMetadata): Continue calling back to the
+          WebProcess with dummy data, but include the request ID for reference.
+        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
+        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in:
+
+        Add a new class that wraps a completion callback function and gives it a unique integer identifier.
+        It also allows for wrapping an abort callback function (in case a connection is lost, for example).
+        It is templated to flexibly handle any callback function signature.
+        * Shared/AsyncRequest.cpp: Added.
+        (WebKit::generateRequestID):
+        (WebKit::AsyncRequest::AsyncRequest):
+        (WebKit::AsyncRequest::~AsyncRequest):
+        (WebKit::AsyncRequest::setAbortHandler):
+        (WebKit::AsyncRequest::requestAborted):
+        (WebKit::AsyncRequest::clearAbortHandler):
+        * Shared/AsyncRequest.h: Added.
+        (WebKit::AsyncRequest::requestID):
+        (WebKit::AsyncRequest::requestCompleted):
+
+        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
+        (WebKit::WebIDBServerConnection::getOrEstablishIDBDatabaseMetadata): Wrap the completion handler in an
+          AsyncRequest and save off the request for later use.
+        (WebKit::WebIDBServerConnection::didGetOrEstablishIDBDatabaseMetadata): Send the results to the AsyncRequest.
+        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
+        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in:
+
+        * WebKit2.xcodeproj/project.pbxproj:
+
 2013-11-20  Anders Carlsson  <[email protected]>
 
         Move activeURL getter to PageLoadState

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp (159638 => 159639)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp	2013-11-21 20:00:13 UTC (rev 159639)
@@ -64,13 +64,13 @@
     m_mainFrameOrigin = mainFrameOrigin;
 }
 
-void DatabaseProcessIDBConnection::getOrEstablishIDBDatabaseMetadata()
+void DatabaseProcessIDBConnection::getOrEstablishIDBDatabaseMetadata(uint64_t requestID)
 {
     // FIXME: This method is successfully called by messaging from the WebProcess, and calls back with dummy data.
     // Needs real implementation.
 
     IDBDatabaseMetadata data;
-    send(Messages::WebIDBServerConnection::DidGetOrEstablishIDBDatabaseMetadata(false, data));
+    send(Messages::WebIDBServerConnection::DidGetOrEstablishIDBDatabaseMetadata(requestID, false, data));
 }
 
 CoreIPC::Connection* DatabaseProcessIDBConnection::messageSenderConnection()

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h (159638 => 159639)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h	2013-11-21 20:00:13 UTC (rev 159639)
@@ -60,7 +60,7 @@
 
     // Message handlers.
     void establishConnection(const String& databaseName, const SecurityOriginData& openingOrigin, const SecurityOriginData& mainFrameOrigin);
-    void getOrEstablishIDBDatabaseMetadata();
+    void getOrEstablishIDBDatabaseMetadata(uint64_t requestID);
 
     Ref<DatabaseToWebProcessConnection> m_connection;
     uint64_t m_serverConnectionIdentifier;

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in (159638 => 159639)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in	2013-11-21 20:00:13 UTC (rev 159639)
@@ -24,7 +24,7 @@
 
 messages -> DatabaseProcessIDBConnection LegacyReceiver {
     EstablishConnection(WTF::String databaseName, WebKit::SecurityOriginData openingOrigin, WebKit::SecurityOriginData mainFrameOrigin)
-    GetOrEstablishIDBDatabaseMetadata()
+    GetOrEstablishIDBDatabaseMetadata(uint64_t requestID)
 }
 
 #endif // ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)

Added: trunk/Source/WebKit2/Shared/AsyncRequest.cpp (0 => 159639)


--- trunk/Source/WebKit2/Shared/AsyncRequest.cpp	                        (rev 0)
+++ trunk/Source/WebKit2/Shared/AsyncRequest.cpp	2013-11-21 20:00:13 UTC (rev 159639)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 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. ``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 COMPUTER, INC. OR
+ * 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 "AsyncRequest.h"
+
+#include <wtf/MainThread.h>
+
+namespace WebKit {
+
+static uint64_t generateRequestID()
+{
+    ASSERT(isMainThread());
+    static uint64_t requestID = 0;
+    return ++requestID;
+}
+
+AsyncRequest::AsyncRequest()
+    : m_requestID(generateRequestID())
+{
+}
+
+AsyncRequest::~AsyncRequest()
+{
+    ASSERT(!m_abortHandler);
+}
+
+void AsyncRequest::setAbortHandler(std::function<void()> handler)
+{
+    m_abortHandler = std::move(handler);
+}
+
+void AsyncRequest::requestAborted()
+{
+    if (m_abortHandler) {
+        m_abortHandler();
+        m_abortHandler = nullptr;
+    }
+
+    clearCompletionHandler();
+}
+
+} // namespace WebKit

Added: trunk/Source/WebKit2/Shared/AsyncRequest.h (0 => 159639)


--- trunk/Source/WebKit2/Shared/AsyncRequest.h	                        (rev 0)
+++ trunk/Source/WebKit2/Shared/AsyncRequest.h	2013-11-21 20:00:13 UTC (rev 159639)
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 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. ``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 COMPUTER, INC. OR
+ * 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 AsyncRequest_h
+#define AsyncRequest_h
+
+#include <functional>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebKit {
+
+class AsyncRequest : public RefCounted<AsyncRequest> {
+public:
+    virtual ~AsyncRequest();
+
+    uint64_t requestID() { return m_requestID; }
+
+    void setAbortHandler(std::function<void()>);
+    void requestAborted();
+    template<typename... Arguments> void requestCompleted(Arguments&&... arguments);
+
+protected:
+    AsyncRequest();
+
+    virtual void clearCompletionHandler() = 0;
+
+    std::function<void()> m_abortHandler;
+
+private:
+    uint64_t m_requestID;
+};
+
+template <typename... Arguments>
+class AsyncRequestImpl FINAL : public AsyncRequest {
+public:
+    static PassRefPtr<AsyncRequest> create(std::function<void (Arguments...)> completionHandler)
+    {
+        return adoptRef(new AsyncRequestImpl<Arguments...>(std::move(completionHandler)));
+    }
+
+    virtual ~AsyncRequestImpl()
+    {
+        ASSERT(!m_completionHandler);
+    }
+
+    void requestCompleted(Arguments&&... arguments)
+    {
+        m_completionHandler(std::forward<Arguments>(arguments)...);
+        m_completionHandler = nullptr;
+    }
+
+private:
+    AsyncRequestImpl(std::function<void (Arguments...)> completionHandler)
+        : m_completionHandler(std::move(completionHandler))
+    {
+        ASSERT(m_completionHandler);
+    }
+
+    virtual void clearCompletionHandler() OVERRIDE
+    {
+        m_completionHandler = nullptr;
+    }
+
+    std::function<void (Arguments...)> m_completionHandler;
+};
+
+template<typename... Arguments> void AsyncRequest::requestCompleted(Arguments&&... arguments)
+{
+    AsyncRequestImpl<Arguments...>* request = static_cast<AsyncRequestImpl<Arguments...>*>(this);
+    request->requestCompleted(std::forward<Arguments>(arguments)...);
+    m_abortHandler = nullptr;
+}
+
+} // namespace WebKit
+
+#endif // AsyncRequest_h

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (159638 => 159639)


--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2013-11-21 20:00:13 UTC (rev 159639)
@@ -528,6 +528,8 @@
 		5153569C1291B1D2000749DC /* WebPageContextMenuClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5153569A1291B1D2000749DC /* WebPageContextMenuClient.cpp */; };
 		5153569D1291B1D2000749DC /* WebPageContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 5153569B1291B1D2000749DC /* WebPageContextMenuClient.h */; };
 		51578B831209ECEF00A37C4A /* WebData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51578B821209ECEF00A37C4A /* WebData.h */; };
+		515E7727183DD6F60007203F /* AsyncRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 515E7725183DD6F60007203F /* AsyncRequest.cpp */; };
+		515E7728183DD6F60007203F /* AsyncRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 515E7726183DD6F60007203F /* AsyncRequest.h */; };
 		5160BFE113381DF900918999 /* Logging.mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5160BFE013381DF900918999 /* Logging.mac.mm */; };
 		516319921628980A00E22F00 /* NetworkProcessProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 516319911628980A00E22F00 /* NetworkProcessProxyMac.mm */; };
 		5163199416289A6000E22F00 /* NetworkProcessMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51ACC9341628064800342550 /* NetworkProcessMessageReceiver.cpp */; };
@@ -2047,6 +2049,8 @@
 		5153569A1291B1D2000749DC /* WebPageContextMenuClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPageContextMenuClient.cpp; sourceTree = "<group>"; };
 		5153569B1291B1D2000749DC /* WebPageContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPageContextMenuClient.h; sourceTree = "<group>"; };
 		51578B821209ECEF00A37C4A /* WebData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebData.h; sourceTree = "<group>"; };
+		515E7725183DD6F60007203F /* AsyncRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AsyncRequest.cpp; sourceTree = "<group>"; };
+		515E7726183DD6F60007203F /* AsyncRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncRequest.h; sourceTree = "<group>"; };
 		5160BFE013381DF900918999 /* Logging.mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Logging.mac.mm; sourceTree = "<group>"; };
 		516319911628980A00E22F00 /* NetworkProcessProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkProcessProxyMac.mm; path = mac/NetworkProcessProxyMac.mm; sourceTree = "<group>"; };
 		5167EE9E170377BF007681CA /* DiskCacheMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiskCacheMonitor.h; sourceTree = "<group>"; };
@@ -3329,8 +3333,6 @@
 				BC111B5A112F628200337BAB /* mac */,
 				51A8A60D1627F2AC000D90E9 /* Network */,
 				1AAE058C1279DCD400852418 /* Plugins */,
-				A7D792D51767CB6E00881CBE /* ActivityAssertion.cpp */,
-				A7D792D41767CB0900881CBE /* ActivityAssertion.h */,
 				BC64696D11DBE603006455B0 /* APIArray.cpp */,
 				BC64696E11DBE603006455B0 /* APIArray.h */,
 				1A3DD205125E5A2F004515E6 /* APIClient.h */,
@@ -3338,6 +3340,10 @@
 				5D51845413BCF9CC00C7FF4A /* APIClientTraits.h */,
 				B63403F814910D57001070B5 /* APIObject.cpp */,
 				BCF04C8C11FF9B7D00F86A58 /* APIObject.h */,
+				A7D792D51767CB6E00881CBE /* ActivityAssertion.cpp */,
+				A7D792D41767CB0900881CBE /* ActivityAssertion.h */,
+				515E7725183DD6F60007203F /* AsyncRequest.cpp */,
+				515E7726183DD6F60007203F /* AsyncRequest.h */,
 				4F601430155C5A32001FBDE0 /* BlockingResponseMap.h */,
 				BCF18637167D071E00A1A85A /* CacheModel.cpp */,
 				BC3065F91259344E00E71278 /* CacheModel.h */,
@@ -5535,6 +5541,7 @@
 				1AA575FB1496B52600A4EE06 /* EventDispatcher.h in Headers */,
 				1A90C1F41264FD71003E44D4 /* FindController.h in Headers */,
 				1A910071126675C4001842F5 /* FindIndicator.h in Headers */,
+				515E7728183DD6F60007203F /* AsyncRequest.h in Headers */,
 				37C4C08718149C5B003688B9 /* WKBackForwardListItem.h in Headers */,
 				1A91010A1268C8CA001842F5 /* FindIndicatorWindow.h in Headers */,
 				BCE81D8D1319F7EF00241910 /* FontInfo.h in Headers */,
@@ -7249,6 +7256,7 @@
 				BC14DF9E120B635F00826C0C /* WKBundleScriptWorld.cpp in Sources */,
 				BC4075F5124FF0270068F20A /* WKCertificateInfo.cpp in Sources */,
 				BC407628124FF0400068F20A /* WKCertificateInfoMac.mm in Sources */,
+				515E7727183DD6F60007203F /* AsyncRequest.cpp in Sources */,
 				F036978515F4BE6B00C3A80E /* WKColorPickerResultListener.cpp in Sources */,
 				BCA284D61492F2C7001F9042 /* WKConnection.mm in Sources */,
 				BC4A6296147313A0006C681A /* WKConnectionRef.cpp in Sources */,

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp (159638 => 159639)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp	2013-11-21 20:00:13 UTC (rev 159639)
@@ -29,6 +29,7 @@
 
 #if ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
 
+#include "AsyncRequest.h"
 #include "DatabaseProcessIDBConnectionMessages.h"
 #include "DatabaseToWebProcessConnectionMessages.h"
 #include "SecurityOriginData.h"
@@ -82,13 +83,25 @@
 
 void WebIDBServerConnection::getOrEstablishIDBDatabaseMetadata(GetIDBDatabaseMetadataFunction completionCallback)
 {
-    // FIXME: Save the completionCallback to perform this request is complete.
-    send(Messages::DatabaseProcessIDBConnection::GetOrEstablishIDBDatabaseMetadata());
+    RefPtr<AsyncRequest> serverRequest = AsyncRequestImpl<const IDBDatabaseMetadata&, bool>::create(completionCallback);
+
+    serverRequest->setAbortHandler([completionCallback]() {
+        IDBDatabaseMetadata metadata;
+        completionCallback(metadata, false);
+    });
+
+    uint64_t requestID = serverRequest->requestID();
+    m_serverRequests.set(requestID, serverRequest.release());
+
+    send(Messages::DatabaseProcessIDBConnection::GetOrEstablishIDBDatabaseMetadata(requestID));
 }
 
-void WebIDBServerConnection::didGetOrEstablishIDBDatabaseMetadata(bool, const IDBDatabaseMetadata&)
+void WebIDBServerConnection::didGetOrEstablishIDBDatabaseMetadata(uint64_t requestID, bool success, const IDBDatabaseMetadata& metadata)
 {
-    // FIXME: Lookup the appropriate completionCallback to perform with these results.
+    RefPtr<AsyncRequest> serverRequest = m_serverRequests.take(requestID);
+    ASSERT(serverRequest);
+
+    serverRequest->requestCompleted(metadata, success);
 }
 
 void WebIDBServerConnection::close()

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h (159638 => 159639)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h	2013-11-21 20:00:13 UTC (rev 159639)
@@ -35,6 +35,8 @@
 
 namespace WebKit {
 
+class AsyncRequest;
+
 class WebIDBServerConnection FINAL : public WebCore::IDBServerConnection, public CoreIPC::MessageSender {
 public:
     static PassRefPtr<WebIDBServerConnection> create(const String& databaseName, const WebCore::SecurityOrigin& openingOrigin, const WebCore::SecurityOrigin& mainFrameOrigin);
@@ -91,13 +93,15 @@
     // CoreIPC::MessageSender
     virtual CoreIPC::Connection* messageSenderConnection() OVERRIDE;
 
-    void didGetOrEstablishIDBDatabaseMetadata(bool success, const WebCore::IDBDatabaseMetadata&);
+    void didGetOrEstablishIDBDatabaseMetadata(uint64_t requestID, bool success, const WebCore::IDBDatabaseMetadata&);
 
     uint64_t m_serverConnectionIdentifier;
 
     String m_databaseName;
     Ref<WebCore::SecurityOrigin> m_openingOrigin;
     Ref<WebCore::SecurityOrigin> m_mainFrameOrigin;
+
+    HashMap<uint64_t, RefPtr<AsyncRequest>> m_serverRequests;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in (159638 => 159639)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in	2013-11-21 19:43:57 UTC (rev 159638)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in	2013-11-21 20:00:13 UTC (rev 159639)
@@ -23,7 +23,7 @@
 #if ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
 
 messages -> WebIDBServerConnection LegacyReceiver {
-    DidGetOrEstablishIDBDatabaseMetadata(bool success, WebCore::IDBDatabaseMetadata metadata)
+    DidGetOrEstablishIDBDatabaseMetadata(uint64_t requestID, bool success, WebCore::IDBDatabaseMetadata metadata)
 }
 
 #endif // ENABLE(INDEXED_DATABASE) && ENABLE(DATABASE_PROCESS)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to