[WK2] WebDiagnosticLoggingClient is leaking
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Apr 2015 08:12:30 +0000 (08:12 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Apr 2015 08:12:30 +0000 (08:12 +0000)
https://bugs.webkit.org/show_bug.cgi?id=144089
<rdar://problem/19706214>

Reviewed by Darin Adler.

WebDiagnosticLoggingClient is leaking. It is constructed inside WebPage
constructor but there is no code destroying it.

This patch adds a new xxxDestroyed() virtual function to
DiagnosticLoggingClient and that is overriden in
WebDiagnosticLoggingClient to call "delete this". This is the same
pattern as for other WK2 clients (e.g. WebFrameLoaderClient,
WebProgressTrackerClient).

Source/WebCore:

* loader/EmptyClients.h:
* page/DiagnosticLoggingClient.h:
* page/MainFrame.cpp:
(WebCore::MainFrame::~MainFrame):

Source/WebKit2:

* WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
(WebKit::WebDiagnosticLoggingClient::mainFrameDestroyed):
* WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

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

Source/WebCore/ChangeLog
Source/WebCore/loader/EmptyClients.h
Source/WebCore/page/DiagnosticLoggingClient.h
Source/WebCore/page/MainFrame.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp
Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h

index db6b9b1..c649bbe 100644 (file)
@@ -1,3 +1,25 @@
+2015-04-23  Chris Dumez  <cdumez@apple.com>
+
+        [WK2] WebDiagnosticLoggingClient is leaking
+        https://bugs.webkit.org/show_bug.cgi?id=144089
+        <rdar://problem/19706214>
+
+        Reviewed by Darin Adler.
+
+        WebDiagnosticLoggingClient is leaking. It is constructed inside WebPage
+        constructor but there is no code destroying it.
+
+        This patch adds a new xxxDestroyed() virtual function to
+        DiagnosticLoggingClient and that is overriden in
+        WebDiagnosticLoggingClient to call "delete this". This is the same
+        pattern as for other WK2 clients (e.g. WebFrameLoaderClient,
+        WebProgressTrackerClient).
+
+        * loader/EmptyClients.h:
+        * page/DiagnosticLoggingClient.h:
+        * page/MainFrame.cpp:
+        (WebCore::MainFrame::~MainFrame):
+
 2015-04-22  Antti Koivisto  <antti@apple.com>
 
         CrashTracer: WebProcess at com.apple.WebCore: WebCore::toScriptElementIfPossible + 4
index 9fd11dd..1dfe2a2 100644 (file)
@@ -634,6 +634,8 @@ class EmptyDiagnosticLoggingClient final : public DiagnosticLoggingClient {
     virtual void logDiagnosticMessage(const String&, const String&, ShouldSample) override { }
     virtual void logDiagnosticMessageWithResult(const String&, const String&, DiagnosticLoggingResultType, ShouldSample) override { }
     virtual void logDiagnosticMessageWithValue(const String&, const String&, const String&, ShouldSample) override { }
+
+    virtual void mainFrameDestroyed() override { }
 };
 
 void fillWithEmptyClients(PageConfiguration&);
index bc5a1ed..b4ff5d4 100644 (file)
@@ -39,6 +39,8 @@ public:
     virtual void logDiagnosticMessageWithResult(const String& message, const String& description, DiagnosticLoggingResultType, ShouldSample) = 0;
     virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, ShouldSample) = 0;
 
+    virtual void mainFrameDestroyed() = 0;
+
 protected:
     virtual ~DiagnosticLoggingClient() { }
 };
index 866d5b3..4dd2ad5 100644 (file)
@@ -58,6 +58,8 @@ inline MainFrame::MainFrame(Page& page, PageConfiguration& configuration)
 
 MainFrame::~MainFrame()
 {
+    if (m_diagnosticLoggingClient)
+        m_diagnosticLoggingClient->mainFrameDestroyed();
 }
 
 RefPtr<MainFrame> MainFrame::create(Page& page, PageConfiguration& configuration)
index 1a0e5b7..780afc1 100644 (file)
@@ -1,3 +1,24 @@
+2015-04-23  Chris Dumez  <cdumez@apple.com>
+
+        [WK2] WebDiagnosticLoggingClient is leaking
+        https://bugs.webkit.org/show_bug.cgi?id=144089
+        <rdar://problem/19706214>
+
+        Reviewed by Darin Adler.
+
+        WebDiagnosticLoggingClient is leaking. It is constructed inside WebPage
+        constructor but there is no code destroying it.
+
+        This patch adds a new xxxDestroyed() virtual function to
+        DiagnosticLoggingClient and that is overriden in
+        WebDiagnosticLoggingClient to call "delete this". This is the same
+        pattern as for other WK2 clients (e.g. WebFrameLoaderClient,
+        WebProgressTrackerClient).
+
+        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
+        (WebKit::WebDiagnosticLoggingClient::mainFrameDestroyed):
+        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:
+
 2015-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [UNIX] Simplify the file descriptor handling in SharedMemory
index 5aa48b0..6c006fe 100644 (file)
@@ -71,4 +71,9 @@ void WebDiagnosticLoggingClient::logDiagnosticMessageWithValue(const String& mes
     m_page.send(Messages::WebPageProxy::LogDiagnosticMessageWithValue(message, description, value, shouldSample == WebCore::ShouldSample::Yes));
 }
 
+void WebDiagnosticLoggingClient::mainFrameDestroyed()
+{
+    delete this;
+}
+
 } // namespace WebKit
index 3687cc8..e5a1341 100644 (file)
@@ -43,6 +43,8 @@ private:
     virtual void logDiagnosticMessageWithResult(const String& message, const String& description, WebCore::DiagnosticLoggingResultType, WebCore::ShouldSample) override;
     virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, WebCore::ShouldSample) override;
 
+    virtual void mainFrameDestroyed() override;
+
     WebPage& m_page;
 };