From 964963f76acbcc6df8f021b5b36dbc5e726027b6 Mon Sep 17 00:00:00 2001
From: Michal Klocek <michal.klocek@theqtcompany.com>
Date: Tue, 21 Jun 2016 16:01:03 +0200
Subject: [PATCH] Fix memory leak of unhandled certificateError

If a user does not handle onCertificateError the
instance of QQuickWebEngineCertificateError never
gets to JavaScript land and never gets deleted.

Create a strong reference before emitting the
onCertificateError to guard against the memory
leak.

Change-Id: I49dbf89445d32291e2f52976f0f5e9deda201fcb
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
---
 src/webengine/api/qquickwebengineview.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 6b3614fc5..ddca1b670 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -351,7 +351,8 @@ void QQuickWebEngineViewPrivate::allowCertificateError(const QSharedPointer<Cert
     Q_Q(QQuickWebEngineView);
 
     QQuickWebEngineCertificateError *quickController = new QQuickWebEngineCertificateError(errorController);
-    QQmlEngine::setObjectOwnership(quickController, QQmlEngine::JavaScriptOwnership);
+    // mark the object for gc by creating temporary jsvalue
+    qmlEngine(q)->newQObject(quickController);
     Q_EMIT q->certificateError(quickController);
     if (!quickController->deferred() && !quickController->answered())
         quickController->rejectCertificate();
-- 
GitLab