diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2018-07-09 09:27:33 +0200 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2018-07-16 08:53:10 +0000 |
commit | f055da31fb011e852345665fceb6933fa966f731 (patch) | |
tree | 8f8fbfd4e7c963bebfa7aee577d649009c9d8645 | |
parent | 5ad6d45d88e020da039872d3187416547b11e605 (diff) |
Fix segfault in devtools openInNewTab handling
- Use OpenURL on the devtools WebContents.
- Guard against self-destruction (otherwise quicknanobrowser crashes).
- Change quicknanobrowser to open links in new tabs.
Task-number: QTBUG-69359
Change-Id: I4db379731c6fa855124d38c5066b0aad622861d2
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r-- | examples/webengine/quicknanobrowser/BrowserWindow.qml | 5 | ||||
-rw-r--r-- | src/core/devtools_frontend_qt.cpp | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml index fc9cd0253..3bfcaabfd 100644 --- a/examples/webengine/quicknanobrowser/BrowserWindow.qml +++ b/examples/webengine/quicknanobrowser/BrowserWindow.qml @@ -505,6 +505,11 @@ ApplicationWindow { anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom + onNewViewRequested: function(request) { + var tab = tabs.createEmptyTab(currentWebView.profile); + tabs.currentIndex = tabs.count - 1; + request.openIn(tab.item); + } } MessageDialog { id: sslDialog diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp index 810235dba..1f741f526 100644 --- a/src/core/devtools_frontend_qt.cpp +++ b/src/core/devtools_frontend_qt.cpp @@ -428,7 +428,16 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, false); - m_frontendDelegate->OpenURLFromTab(nullptr, openParams); + // OpenURL will (via WebContentsDelegateQt::OpenURLFromTab) call + // application code, which may decide to close this devtools view (see + // quicknanobrowser for example). + // + // Chromium always calls SendMessageAck through a callback bound to a + // WeakPtr, we do the same here, except without the callback. + base::WeakPtr<DevToolsFrontendQt> weakThis = m_weakFactory.GetWeakPtr(); + web_contents()->OpenURL(openParams); + if (!weakThis) + return; } else if (method == "bringToFront") { Activate(); } else { |