summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-04-13 17:20:35 +0200
committerMichal Klocek <michal.klocek@qt.io>2018-04-17 11:57:01 +0000
commitdbc8ba296698699db6dac40d1d58ef0b768034a0 (patch)
treef655e67d314ea9bb9e794afe6bed032ac1bda317
parent0d4d677499a936e1e79604af39af15e098cb6eac (diff)
Fix crash on launching and quitting nanobrowser with devtools open
Make sure it is opened after initialization of the inspected content, and deleted when the inspected content is closed. Task-number: QTBUG-67642 Change-Id: Ie7218bc437e8c529205ceb7744c4aa0c9ffe6c75 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
-rw-r--r--src/core/web_contents_adapter.cpp8
-rw-r--r--src/webengine/api/qquickwebengineview.cpp13
2 files changed, 12 insertions, 9 deletions
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 95bdaba53..900abac44 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -408,6 +408,10 @@ WebContentsAdapter::WebContentsAdapter(content::WebContents *webContents)
WebContentsAdapter::~WebContentsAdapter()
{
+ Q_D(WebContentsAdapter);
+ if (d->devToolsFrontend)
+ closeDevToolsFrontend();
+ Q_ASSERT(!d->devToolsFrontend);
}
void WebContentsAdapter::setClient(WebContentsAdapterClient *adapterClient)
@@ -1168,7 +1172,7 @@ void WebContentsAdapter::openDevToolsFrontend(QSharedPointer<WebContentsAdapter>
{
Q_D(WebContentsAdapter);
Q_ASSERT(isInitialized());
- if (d->devToolsFrontend &&
+ if (d->devToolsFrontend && frontendAdapter->webContents() &&
d->devToolsFrontend->frontendDelegate() == frontendAdapter->webContents()->GetDelegate())
return;
@@ -1183,7 +1187,6 @@ void WebContentsAdapter::openDevToolsFrontend(QSharedPointer<WebContentsAdapter>
void WebContentsAdapter::closeDevToolsFrontend()
{
Q_D(WebContentsAdapter);
- CHECK_INITIALIZED();
if (d->devToolsFrontend) {
d->devToolsFrontend->DisconnectFromTarget();
d->devToolsFrontend->Close();
@@ -1193,7 +1196,6 @@ void WebContentsAdapter::closeDevToolsFrontend()
void WebContentsAdapter::devToolsFrontendDestroyed(DevToolsFrontendQt *frontend)
{
Q_D(WebContentsAdapter);
- Q_ASSERT(isInitialized());
Q_ASSERT(frontend == d->devToolsFrontend);
Q_UNUSED(frontend);
d->devToolsFrontend = nullptr;
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 8d5a30016..334def6c4 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -755,10 +755,9 @@ void QQuickWebEngineViewPrivate::initializationFinished()
adapter->setWebChannel(m_webChannel, m_webChannelWorld);
if (!qFuzzyCompare(adapter->currentZoomFactor(), m_defaultZoomFactor))
q->setZoomFactor(m_defaultZoomFactor);
+
if (devToolsView && devToolsView->d_ptr->adapter)
adapter->openDevToolsFrontend(devToolsView->d_ptr->adapter);
- else if (inspectedView && inspectedView->d_ptr->adapter)
- inspectedView->d_ptr->adapter->openDevToolsFrontend(adapter);
Q_FOREACH (QQuickWebEngineScript *script, m_userScripts)
script->d_func()->bind(browserContextAdapter()->userResourceController(), adapter.data());
@@ -1270,10 +1269,12 @@ void QQuickWebEngineView::setDevToolsView(QQuickWebEngineView *devToolsView)
d->devToolsView = devToolsView;
if (devToolsView)
devToolsView->setInspectedView(this);
- if (devToolsView)
- d->adapter->openDevToolsFrontend(devToolsView->d_ptr->adapter);
- else
- d->adapter->closeDevToolsFrontend();
+ if (d->adapter->isInitialized()) {
+ if (devToolsView)
+ d->adapter->openDevToolsFrontend(devToolsView->d_ptr->adapter);
+ else
+ d->adapter->closeDevToolsFrontend();
+ }
Q_EMIT devToolsViewChanged();
}