Title: [240085] branches/safari-607-branch/Source
Revision
240085
Author
alanc...@apple.com
Date
2019-01-16 15:28:46 -0800 (Wed, 16 Jan 2019)

Log Message

Apply patch. rdar://problem/47260377

    Cherry-pick r239887. rdar://problem/47260377

        IndexedDB: leak WebIDBConnectionToClient for retain cycle
        https://bugs.webkit.org/show_bug.cgi?id=193097
        <rdar://problem/46899601>

        Reviewed by Brady Eidson.

        Source/WebCore:

        Let IDBConnectionToClient hold a WeakPtr of IDBConnectionToClientDelegate.

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient):
        (WebCore::IDBServer::IDBConnectionToClient::identifier const):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase):
        (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
        (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
        (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore):
        (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex):
        (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex):
        (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd):
        (WebCore::IDBServer::IDBConnectionToClient::didGetRecord):
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords):
        (WebCore::IDBServer::IDBConnectionToClient::didGetCount):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord):
        (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor):
        (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor):
        (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction):
        (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
        (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction):
        (WebCore::IDBServer::IDBConnectionToClient::didCloseFromServer):
        (WebCore::IDBServer::IDBConnectionToClient::notifyOpenDBRequestBlocked):
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        Source/WebKit:

        Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break
        the cycle.

        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):

        git-svn-id: http://svn.webkit.org/repository/webkit/trunk@239887 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-607-branch/Source/WebCore/ChangeLog (240084 => 240085)


--- branches/safari-607-branch/Source/WebCore/ChangeLog	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebCore/ChangeLog	2019-01-16 23:28:46 UTC (rev 240085)
@@ -1,3 +1,106 @@
+2019-01-16  Alan Coon  <alanc...@apple.com>
+
+        Apply patch. rdar://problem/47260377
+
+    Cherry-pick r239887. rdar://problem/47260377
+    
+        IndexedDB: leak WebIDBConnectionToClient for retain cycle
+        https://bugs.webkit.org/show_bug.cgi?id=193097
+        <rdar://problem/46899601>
+    
+        Reviewed by Brady Eidson.
+    
+        Source/WebCore:
+    
+        Let IDBConnectionToClient hold a WeakPtr of IDBConnectionToClientDelegate.
+    
+        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
+        (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient):
+        (WebCore::IDBServer::IDBConnectionToClient::identifier const):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase):
+        (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
+        (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
+        (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex):
+        (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex):
+        (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetRecord):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetCount):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord):
+        (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor):
+        (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor):
+        (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction):
+        (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
+        (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction):
+        (WebCore::IDBServer::IDBConnectionToClient::didCloseFromServer):
+        (WebCore::IDBServer::IDBConnectionToClient::notifyOpenDBRequestBlocked):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames):
+        * Modules/indexeddb/server/IDBConnectionToClient.h:
+        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
+    
+        Source/WebKit:
+    
+        Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break
+        the cycle.
+    
+        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
+        (WebKit::WebIDBConnectionToClient::create):
+        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
+        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
+        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
+    
+        git-svn-id: http://svn.webkit.org/repository/webkit/trunk@239887 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-01-16  David Kilzer  <ddkil...@apple.com>
+
+            Cherry-pick r239887. rdar://problem/47260377
+
+        2019-01-11  Sihui Liu  <sihui_...@apple.com>
+
+            IndexedDB: leak WebIDBConnectionToClient for retain cycle
+            https://bugs.webkit.org/show_bug.cgi?id=193097
+            <rdar://problem/46899601>
+
+            Reviewed by Brady Eidson.
+
+            Let IDBConnectionToClient hold a WeakPtr of IDBConnectionToClientDelegate.
+
+            * Modules/indexeddb/server/IDBConnectionToClient.cpp:
+            (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient):
+            (WebCore::IDBServer::IDBConnectionToClient::identifier const):
+            (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase):
+            (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
+            (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
+            (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore):
+            (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
+            (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore):
+            (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore):
+            (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex):
+            (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex):
+            (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex):
+            (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd):
+            (WebCore::IDBServer::IDBConnectionToClient::didGetRecord):
+            (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords):
+            (WebCore::IDBServer::IDBConnectionToClient::didGetCount):
+            (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord):
+            (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor):
+            (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor):
+            (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction):
+            (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
+            (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction):
+            (WebCore::IDBServer::IDBConnectionToClient::didCloseFromServer):
+            (WebCore::IDBServer::IDBConnectionToClient::notifyOpenDBRequestBlocked):
+            (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames):
+            * Modules/indexeddb/server/IDBConnectionToClient.h:
+            * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
+
 2019-01-15  Alan Coon  <alanc...@apple.com>
 
         Cherry-pick r239904. rdar://problem/4726030

Modified: branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp (240084 => 240085)


--- branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp	2019-01-16 23:28:46 UTC (rev 240085)
@@ -39,128 +39,152 @@
 }
 
 IDBConnectionToClient::IDBConnectionToClient(IDBConnectionToClientDelegate& delegate)
-    : m_delegate(delegate)
+    : m_delegate(makeWeakPtr(delegate))
 {
 }
 
 uint64_t IDBConnectionToClient::identifier() const
 {
+    ASSERT(m_delegate);
     return m_delegate->identifier();
 }
 
 void IDBConnectionToClient::didDeleteDatabase(const IDBResultData& result)
 {
-    m_delegate->didDeleteDatabase(result);
+    if (m_delegate)
+        m_delegate->didDeleteDatabase(result);
 }
 
 void IDBConnectionToClient::didOpenDatabase(const IDBResultData& result)
 {
-    m_delegate->didOpenDatabase(result);
+    if (m_delegate)
+        m_delegate->didOpenDatabase(result);
 }
 
 void IDBConnectionToClient::didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
 {
-    m_delegate->didAbortTransaction(transactionIdentifier, error);
+    if (m_delegate)
+        m_delegate->didAbortTransaction(transactionIdentifier, error);
 }
 
 void IDBConnectionToClient::didCreateObjectStore(const IDBResultData& result)
 {
-    m_delegate->didCreateObjectStore(result);
+    if (m_delegate)
+        m_delegate->didCreateObjectStore(result);
 }
 
 void IDBConnectionToClient::didDeleteObjectStore(const IDBResultData& result)
 {
-    m_delegate->didDeleteObjectStore(result);
+    if (m_delegate)
+        m_delegate->didDeleteObjectStore(result);
 }
 
 void IDBConnectionToClient::didRenameObjectStore(const IDBResultData& result)
 {
-    m_delegate->didRenameObjectStore(result);
+    if (m_delegate)
+        m_delegate->didRenameObjectStore(result);
 }
 
 void IDBConnectionToClient::didClearObjectStore(const IDBResultData& result)
 {
-    m_delegate->didClearObjectStore(result);
+    if (m_delegate)
+        m_delegate->didClearObjectStore(result);
 }
 
 void IDBConnectionToClient::didCreateIndex(const IDBResultData& result)
 {
-    m_delegate->didCreateIndex(result);
+    if (m_delegate)
+        m_delegate->didCreateIndex(result);
 }
 
 void IDBConnectionToClient::didDeleteIndex(const IDBResultData& result)
 {
-    m_delegate->didDeleteIndex(result);
+    if (m_delegate)
+        m_delegate->didDeleteIndex(result);
 }
 
 void IDBConnectionToClient::didRenameIndex(const IDBResultData& result)
 {
-    m_delegate->didRenameIndex(result);
+    if (m_delegate)
+        m_delegate->didRenameIndex(result);
 }
 
 void IDBConnectionToClient::didPutOrAdd(const IDBResultData& result)
 {
-    m_delegate->didPutOrAdd(result);
+    if (m_delegate)
+        m_delegate->didPutOrAdd(result);
 }
 
 void IDBConnectionToClient::didGetRecord(const IDBResultData& result)
 {
-    m_delegate->didGetRecord(result);
+    if (m_delegate)
+        m_delegate->didGetRecord(result);
 }
 
 void IDBConnectionToClient::didGetAllRecords(const IDBResultData& result)
 {
-    m_delegate->didGetAllRecords(result);
+    if (m_delegate)
+        m_delegate->didGetAllRecords(result);
 }
 
 void IDBConnectionToClient::didGetCount(const IDBResultData& result)
 {
-    m_delegate->didGetCount(result);
+    if (m_delegate)
+        m_delegate->didGetCount(result);
 }
 
 void IDBConnectionToClient::didDeleteRecord(const IDBResultData& result)
 {
-    m_delegate->didDeleteRecord(result);
+    if (m_delegate)
+        m_delegate->didDeleteRecord(result);
 }
 
 void IDBConnectionToClient::didOpenCursor(const IDBResultData& result)
 {
-    m_delegate->didOpenCursor(result);
+    if (m_delegate)
+        m_delegate->didOpenCursor(result);
 }
 
 void IDBConnectionToClient::didIterateCursor(const IDBResultData& result)
 {
-    m_delegate->didIterateCursor(result);
+    if (m_delegate)
+        m_delegate->didIterateCursor(result);
 }
 
 void IDBConnectionToClient::didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
 {
-    m_delegate->didCommitTransaction(transactionIdentifier, error);
+    if (m_delegate)
+        m_delegate->didCommitTransaction(transactionIdentifier, error);
 }
 
 void IDBConnectionToClient::fireVersionChangeEvent(UniqueIDBDatabaseConnection& connection, const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion)
 {
-    m_delegate->fireVersionChangeEvent(connection, requestIdentifier, requestedVersion);
+    if (m_delegate)
+        m_delegate->fireVersionChangeEvent(connection, requestIdentifier, requestedVersion);
 }
 
 void IDBConnectionToClient::didStartTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
 {
-    m_delegate->didStartTransaction(transactionIdentifier, error);
+    if (m_delegate)
+        m_delegate->didStartTransaction(transactionIdentifier, error);
 }
 
 void IDBConnectionToClient::didCloseFromServer(UniqueIDBDatabaseConnection& connection, const IDBError& error)
 {
-    m_delegate->didCloseFromServer(connection, error);
+    if (m_delegate)
+        m_delegate->didCloseFromServer(connection, error);
 }
 
 void IDBConnectionToClient::notifyOpenDBRequestBlocked(const IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion)
 {
-    m_delegate->notifyOpenDBRequestBlocked(requestIdentifier, oldVersion, newVersion);
+    if (m_delegate)
+        m_delegate->notifyOpenDBRequestBlocked(requestIdentifier, oldVersion, newVersion);
 }
 
 void IDBConnectionToClient::didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames)
 {
-    m_delegate->didGetAllDatabaseNames(callbackID, databaseNames);
+    if (m_delegate)
+        m_delegate->didGetAllDatabaseNames(callbackID, databaseNames);
 }
 
 void IDBConnectionToClient::registerDatabaseConnection(UniqueIDBDatabaseConnection& connection)

Modified: branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h (240084 => 240085)


--- branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h	2019-01-16 23:28:46 UTC (rev 240085)
@@ -31,6 +31,7 @@
 #include <wtf/HashSet.h>
 #include <wtf/Ref.h>
 #include <wtf/RefCounted.h>
+#include <wtf/WeakPtr.h>
 
 namespace WebCore {
 
@@ -82,7 +83,7 @@
 private:
     IDBConnectionToClient(IDBConnectionToClientDelegate&);
     
-    Ref<IDBConnectionToClientDelegate> m_delegate;
+    WeakPtr<IDBConnectionToClientDelegate> m_delegate;
     HashSet<UniqueIDBDatabaseConnection*> m_databaseConnections;
 };
 

Modified: branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h (240084 => 240085)


--- branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h	2019-01-16 23:28:46 UTC (rev 240085)
@@ -28,6 +28,7 @@
 #if ENABLE(INDEXED_DATABASE)
 
 #include <wtf/Forward.h>
+#include <wtf/WeakPtr.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -40,7 +41,7 @@
 
 class UniqueIDBDatabaseConnection;
 
-class IDBConnectionToClientDelegate {
+class IDBConnectionToClientDelegate : public CanMakeWeakPtr<IDBConnectionToClientDelegate> {
 public:
     virtual ~IDBConnectionToClientDelegate() = default;
     

Modified: branches/safari-607-branch/Source/WebKit/ChangeLog (240084 => 240085)


--- branches/safari-607-branch/Source/WebKit/ChangeLog	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebKit/ChangeLog	2019-01-16 23:28:46 UTC (rev 240085)
@@ -1,5 +1,88 @@
 2019-01-16  Alan Coon  <alanc...@apple.com>
 
+        Apply patch. rdar://problem/47260377
+
+    Cherry-pick r239887. rdar://problem/47260377
+    
+        IndexedDB: leak WebIDBConnectionToClient for retain cycle
+        https://bugs.webkit.org/show_bug.cgi?id=193097
+        <rdar://problem/46899601>
+    
+        Reviewed by Brady Eidson.
+    
+        Source/WebCore:
+    
+        Let IDBConnectionToClient hold a WeakPtr of IDBConnectionToClientDelegate.
+    
+        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
+        (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient):
+        (WebCore::IDBServer::IDBConnectionToClient::identifier const):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase):
+        (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
+        (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
+        (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore):
+        (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex):
+        (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex):
+        (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetRecord):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetCount):
+        (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord):
+        (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor):
+        (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor):
+        (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction):
+        (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
+        (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction):
+        (WebCore::IDBServer::IDBConnectionToClient::didCloseFromServer):
+        (WebCore::IDBServer::IDBConnectionToClient::notifyOpenDBRequestBlocked):
+        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames):
+        * Modules/indexeddb/server/IDBConnectionToClient.h:
+        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
+    
+        Source/WebKit:
+    
+        Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break
+        the cycle.
+    
+        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
+        (WebKit::WebIDBConnectionToClient::create):
+        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
+        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
+        * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
+    
+        git-svn-id: http://svn.webkit.org/repository/webkit/trunk@239887 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-01-16  David Kilzer  <ddkil...@apple.com>
+
+            Cherry-pick r239887. rdar://problem/47260377
+
+        2019-01-11  Sihui Liu  <sihui_...@apple.com>
+
+            IndexedDB: leak WebIDBConnectionToClient for retain cycle
+            https://bugs.webkit.org/show_bug.cgi?id=193097
+            <rdar://problem/46899601>
+
+            Reviewed by Brady Eidson.
+
+            Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break
+            the cycle.
+
+            * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp:
+            (WebKit::WebIDBConnectionToClient::create):
+            (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
+            (WebKit::WebIDBConnectionToClient::messageSenderConnection):
+            * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h:
+            * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+            (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
+
+2019-01-16  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r239852. rdar://problem/47260195
 
     [WebAuthN] Change the nonce in the CTAP kInit command to weak random values

Modified: branches/safari-607-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp (240084 => 240085)


--- branches/safari-607-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp	2019-01-16 23:28:46 UTC (rev 240085)
@@ -44,12 +44,12 @@
 namespace WebKit {
 using namespace WebCore;
 
-Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkConnectionToWebProcess& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
+Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(IPC::Connection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
 {
     return adoptRef(*new WebIDBConnectionToClient(connection, serverConnectionIdentifier, sessionID));
 }
 
-WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkConnectionToWebProcess& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
+WebIDBConnectionToClient::WebIDBConnectionToClient(IPC::Connection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)
     : m_connection(connection)
     , m_identifier(serverConnectionIdentifier)
     , m_sessionID(sessionID)
@@ -70,7 +70,7 @@
 
 IPC::Connection* WebIDBConnectionToClient::messageSenderConnection()
 {
-    return &m_connection->connection();
+    return m_connection.ptr();
 }
 
 WebCore::IDBServer::IDBConnectionToClient& WebIDBConnectionToClient::connectionToClient()

Modified: branches/safari-607-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h (240084 => 240085)


--- branches/safari-607-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h	2019-01-16 23:28:46 UTC (rev 240085)
@@ -52,7 +52,7 @@
 
 class WebIDBConnectionToClient final : public WebCore::IDBServer::IDBConnectionToClientDelegate, public IPC::MessageSender, public RefCounted<WebIDBConnectionToClient> {
 public:
-    static Ref<WebIDBConnectionToClient> create(NetworkConnectionToWebProcess&, uint64_t serverConnectionIdentifier, PAL::SessionID);
+    static Ref<WebIDBConnectionToClient> create(IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);
 
     virtual ~WebIDBConnectionToClient();
 
@@ -126,13 +126,13 @@
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
 
 private:
-    WebIDBConnectionToClient(NetworkConnectionToWebProcess&, uint64_t serverConnectionIdentifier, PAL::SessionID);
+    WebIDBConnectionToClient(IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);
 
     IPC::Connection* messageSenderConnection() final;
 
     template<class MessageType> void handleGetResult(const WebCore::IDBResultData&);
 
-    Ref<NetworkConnectionToWebProcess> m_connection;
+    Ref<IPC::Connection> m_connection;
 
     uint64_t m_identifier;
     PAL::SessionID m_sessionID;

Modified: branches/safari-607-branch/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (240084 => 240085)


--- branches/safari-607-branch/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2019-01-16 23:28:42 UTC (rev 240084)
+++ branches/safari-607-branch/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2019-01-16 23:28:46 UTC (rev 240085)
@@ -702,7 +702,7 @@
     LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, serverConnectionIdentifier);
     ASSERT(!m_webIDBConnections.contains(serverConnectionIdentifier));
     
-    m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(*this, serverConnectionIdentifier, sessionID));
+    m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_connection.get(), serverConnectionIdentifier, sessionID));
 }
 
 void NetworkConnectionToWebProcess::removeIDBConnectionToServer(uint64_t serverConnectionIdentifier)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to