forked from qt-creator/qt-creator
DVConnector: Prevent QWebEngineView from double-free
Task-number: QDS-14702 Change-Id: Ia24b2d92a49c6fb9871b081587fdbd33595edd19 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
committed by
Tim Jenssen
parent
e4fd19c59f
commit
7d4a39ce4f
@@ -120,23 +120,25 @@ DVConnector::DVConnector(QObject *parent)
|
|||||||
, m_isWebViewerVisible(false)
|
, m_isWebViewerVisible(false)
|
||||||
, m_connectorStatus(ConnectorStatus::NotLoggedIn)
|
, m_connectorStatus(ConnectorStatus::NotLoggedIn)
|
||||||
{
|
{
|
||||||
m_webEngineProfile.reset(new QWebEngineProfile("DesignViewer", this));
|
QWebEngineProfile *webEngineProfile = new QWebEngineProfile("DesignViewer");
|
||||||
m_webEngineProfile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
|
webEngineProfile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
|
||||||
m_webEnginePage.reset(new CustomWebEnginePage(m_webEngineProfile.data(), this));
|
|
||||||
m_webEngineView.reset(new QWebEngineView(Core::ICore::instance()->dialogParent()));
|
m_webEnginePage = new CustomWebEnginePage(webEngineProfile);
|
||||||
m_webEngineView->setPage(m_webEnginePage.data());
|
webEngineProfile->setParent(m_webEnginePage);
|
||||||
|
|
||||||
|
m_webEngineView = new QWebEngineView(m_webEnginePage, Core::ICore::instance()->dialogParent());
|
||||||
m_webEngineView->resize(1024, 750);
|
m_webEngineView->resize(1024, 750);
|
||||||
m_webEngineView->setWindowFlag(Qt::Dialog);
|
m_webEngineView->setWindowFlag(Qt::Dialog);
|
||||||
m_webEngineView->installEventFilter(this);
|
m_webEngineView->installEventFilter(this);
|
||||||
m_webEngineView->hide();
|
m_webEngineView->hide();
|
||||||
|
|
||||||
m_networkCookieJar.reset(
|
m_networkCookieJar.reset(
|
||||||
new CustomCookieJar(this, m_webEngineProfile->persistentStoragePath() + "/dv_cookies.txt"));
|
new CustomCookieJar(this, webEngineProfile->persistentStoragePath() + "/dv_cookies.txt"));
|
||||||
m_networkAccessManager.reset(new QNetworkAccessManager(this));
|
m_networkAccessManager.reset(new QNetworkAccessManager(this));
|
||||||
m_networkAccessManager->setCookieJar(m_networkCookieJar.data());
|
m_networkAccessManager->setCookieJar(m_networkCookieJar.data());
|
||||||
m_networkCookieJar->loadCookies();
|
m_networkCookieJar->loadCookies();
|
||||||
|
|
||||||
connect(m_webEngineProfile->cookieStore(),
|
connect(webEngineProfile->cookieStore(),
|
||||||
&QWebEngineCookieStore::cookieAdded,
|
&QWebEngineCookieStore::cookieAdded,
|
||||||
this,
|
this,
|
||||||
[&](const QNetworkCookie &cookie) {
|
[&](const QNetworkCookie &cookie) {
|
||||||
@@ -194,7 +196,7 @@ QString DVConnector::loginUrl() const
|
|||||||
|
|
||||||
bool DVConnector::eventFilter(QObject *obj, QEvent *e)
|
bool DVConnector::eventFilter(QObject *obj, QEvent *e)
|
||||||
{
|
{
|
||||||
if (obj == m_webEngineView.data()) {
|
if (obj == m_webEngineView) {
|
||||||
if (m_isWebViewerVisible != m_webEngineView->isVisible()) {
|
if (m_isWebViewerVisible != m_webEngineView->isVisible()) {
|
||||||
m_isWebViewerVisible = m_webEngineView->isVisible();
|
m_isWebViewerVisible = m_webEngineView->isVisible();
|
||||||
emit webViewerVisibleChanged();
|
emit webViewerVisibleChanged();
|
||||||
@@ -651,7 +653,8 @@ void DVConnector::logout()
|
|||||||
evaluatorData.reply = m_networkAccessManager->get(request);
|
evaluatorData.reply = m_networkAccessManager->get(request);
|
||||||
evaluatorData.description = "Logout";
|
evaluatorData.description = "Logout";
|
||||||
evaluatorData.successCallback = [this](const QByteArray &, const QList<RawHeaderPair> &) {
|
evaluatorData.successCallback = [this](const QByteArray &, const QList<RawHeaderPair> &) {
|
||||||
m_webEngineProfile->cookieStore()->deleteAllCookies();
|
QWebEngineCookieStore *cookieStore = m_webEnginePage->profile()->cookieStore();
|
||||||
|
cookieStore->deleteAllCookies();
|
||||||
m_connectorStatus = ConnectorStatus::NotLoggedIn;
|
m_connectorStatus = ConnectorStatus::NotLoggedIn;
|
||||||
emit connectorStatusUpdated(m_connectorStatus);
|
emit connectorStatusUpdated(m_connectorStatus);
|
||||||
};
|
};
|
||||||
|
@@ -90,9 +90,8 @@ private:
|
|||||||
QScopedPointer<CustomCookieJar> m_networkCookieJar;
|
QScopedPointer<CustomCookieJar> m_networkCookieJar;
|
||||||
|
|
||||||
// login
|
// login
|
||||||
QScopedPointer<QWebEngineProfile> m_webEngineProfile;
|
QWebEnginePage *m_webEnginePage;
|
||||||
QScopedPointer<QWebEnginePage> m_webEnginePage;
|
QWebEngineView *m_webEngineView;
|
||||||
QScopedPointer<QWebEngineView> m_webEngineView;
|
|
||||||
bool m_isWebViewerVisible;
|
bool m_isWebViewerVisible;
|
||||||
|
|
||||||
// status
|
// status
|
||||||
|
Reference in New Issue
Block a user