Diff
Modified: trunk/Source/WebCore/ChangeLog (240930 => 240931)
--- trunk/Source/WebCore/ChangeLog 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/ChangeLog 2019-02-04 18:51:19 UTC (rev 240931)
@@ -1,3 +1,18 @@
+2019-02-04 Sihui Liu <[email protected]>
+
+ IndexedDB: leak WebIDBConnectionToServer in layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=193688
+ <rdar://problem/47353263>
+
+ Reviewed by Geoffrey Garen.
+
+ Let IDBConnectionToServer keep a WeakPtr of IDBConnectionToServerDelegate.
+
+ * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+ (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
+ * Modules/indexeddb/client/IDBConnectionToServer.h:
+ * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
+
2019-02-04 Youenn Fablet <[email protected]>
Make sure to remove the device observer in AVVideoCaptureSource
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (240930 => 240931)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp 2019-02-04 18:51:19 UTC (rev 240931)
@@ -48,7 +48,7 @@
}
IDBConnectionToServer::IDBConnectionToServer(IDBConnectionToServerDelegate& delegate)
- : m_delegate(delegate)
+ : m_delegate(makeWeakPtr(delegate))
, m_proxy(std::make_unique<IDBConnectionProxy>(*this))
{
}
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (240930 => 240931)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h 2019-02-04 18:51:19 UTC (rev 240931)
@@ -146,7 +146,7 @@
typedef void (IDBConnectionToServer::*ResultFunction)(const IDBResultData&);
void callResultFunctionWithErrorLater(ResultFunction, const IDBResourceIdentifier& requestIdentifier);
- Ref<IDBConnectionToServerDelegate> m_delegate;
+ WeakPtr<IDBConnectionToServerDelegate> m_delegate;
bool m_serverConnectionIsValid { true };
HashMap<uint64_t, WTF::Function<void (const Vector<String>&)>> m_getAllDatabaseNamesCallbacks;
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h (240930 => 240931)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h 2019-02-04 18:51:19 UTC (rev 240931)
@@ -27,6 +27,7 @@
#if ENABLE(INDEXED_DATABASE)
+#include <wtf/WeakPtr.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -53,7 +54,7 @@
namespace IDBClient {
-class IDBConnectionToServerDelegate {
+class IDBConnectionToServerDelegate : public CanMakeWeakPtr<IDBConnectionToServerDelegate> {
public:
virtual ~IDBConnectionToServerDelegate() = default;
Modified: trunk/Source/WebKit/ChangeLog (240930 => 240931)
--- trunk/Source/WebKit/ChangeLog 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/ChangeLog 2019-02-04 18:51:19 UTC (rev 240931)
@@ -1,3 +1,20 @@
+2019-02-04 Sihui Liu <[email protected]>
+
+ IndexedDB: leak WebIDBConnectionToServer in layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=193688
+ <rdar://problem/47353263>
+
+ Reviewed by Geoffrey Garen.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::didClose):
+ (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer):
+ (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): Deleted.
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
+ (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):
+
2019-02-04 Antoine Quint <[email protected]>
<rdar://problem/47788802>
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (240930 => 240931)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-02-04 18:51:19 UTC (rev 240931)
@@ -263,7 +263,7 @@
auto idbConnections = m_webIDBConnections;
for (auto& connection : idbConnections.values())
connection->disconnectedFromWebProcess();
-
+
m_webIDBConnections.clear();
#endif
@@ -753,14 +753,6 @@
m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), serverConnectionIdentifier, sessionID));
}
-
-void NetworkConnectionToWebProcess::removeIDBConnectionToServer(uint64_t serverConnectionIdentifier)
-{
- ASSERT(m_webIDBConnections.contains(serverConnectionIdentifier));
-
- auto connection = m_webIDBConnections.take(serverConnectionIdentifier);
- connection->disconnectedFromWebProcess();
-}
#endif
#if ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (240930 => 240931)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-02-04 18:51:19 UTC (rev 240931)
@@ -175,7 +175,6 @@
#if ENABLE(INDEXED_DATABASE)
// Messages handlers (Modern IDB).
void establishIDBConnectionToServer(PAL::SessionID, uint64_t& serverConnectionIdentifier);
- void removeIDBConnectionToServer(uint64_t serverConnectionIdentifier);
#endif
#if ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (240930 => 240931)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-02-04 18:51:19 UTC (rev 240931)
@@ -79,7 +79,6 @@
#if ENABLE(INDEXED_DATABASE)
EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) LegacySync
- RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier)
#endif
#if ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (240930 => 240931)
--- trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp 2019-02-04 18:47:23 UTC (rev 240930)
+++ trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp 2019-02-04 18:51:19 UTC (rev 240931)
@@ -64,14 +64,11 @@
m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer::Reply(m_identifier));
- // FIXME: This creates a reference cycle, so neither this object nor the IDBConnectionToServer will ever be deallocated.
m_connectionToServer = IDBClient::IDBConnectionToServer::create(*this);
}
WebIDBConnectionToServer::~WebIDBConnectionToServer()
{
- if (m_isOpenInServer)
- send(Messages::NetworkConnectionToWebProcess::RemoveIDBConnectionToServer(m_identifier));
}
IPC::Connection* WebIDBConnectionToServer::messageSenderConnection()