Add renderer_process_terminated signal to tab API
This commit is contained in:
parent
2227c037f0
commit
2469d01ce7
@ -74,6 +74,14 @@ class UnsupportedOperationError(WebTabError):
|
||||
"""Raised when an operation is not supported with the given backend."""
|
||||
|
||||
|
||||
TerminationStatus = usertypes.enum('TerminationStatus', [
|
||||
'normal',
|
||||
'abnormal', # non-zero exit status
|
||||
'crashed', # e.g. segfault
|
||||
'killed'
|
||||
])
|
||||
|
||||
|
||||
class TabData:
|
||||
|
||||
"""A simple namespace with a fixed set of attributes.
|
||||
@ -532,6 +540,10 @@ class AbstractTab(QWidget):
|
||||
fullscreen_requested: Fullscreen display was requested by the page.
|
||||
arg: True if fullscreen should be turned on,
|
||||
False if it should be turned off.
|
||||
renderer_process_terminated: Emitted when the underlying renderer process
|
||||
terminated.
|
||||
arg 0: A TerminationStatus member.
|
||||
arg 1: The exit code.
|
||||
"""
|
||||
|
||||
window_close_requested = pyqtSignal()
|
||||
@ -548,6 +560,7 @@ class AbstractTab(QWidget):
|
||||
contents_size_changed = pyqtSignal(QSizeF)
|
||||
add_history_item = pyqtSignal(QUrl, QUrl, str) # url, requested url, title
|
||||
fullscreen_requested = pyqtSignal(bool)
|
||||
renderer_process_terminated = pyqtSignal(TerminationStatus, int)
|
||||
|
||||
def __init__(self, win_id, mode_manager, parent=None):
|
||||
self.win_id = win_id
|
||||
|
@ -40,7 +40,7 @@ from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory,
|
||||
webenginedownloads)
|
||||
from qutebrowser.misc import miscwidgets
|
||||
from qutebrowser.utils import (usertypes, qtutils, log, javascript, utils,
|
||||
objreg, jinja, message)
|
||||
objreg, jinja)
|
||||
|
||||
|
||||
_qute_scheme_handler = None
|
||||
@ -683,17 +683,17 @@ class WebEngineTab(browsertab.AbstractTab):
|
||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-58697
|
||||
status = QWebEnginePage.CrashedTerminationStatus
|
||||
|
||||
if status == QWebEnginePage.NormalTerminationStatus:
|
||||
pass
|
||||
elif status == QWebEnginePage.AbnormalTerminationStatus:
|
||||
message.error("Renderer process exited with status {}".format(
|
||||
exitcode))
|
||||
elif status == QWebEnginePage.CrashedTerminationStatus:
|
||||
message.error("Renderer process crashed")
|
||||
elif status == QWebEnginePage.KilledTerminationStatus:
|
||||
message.error("Renderer process was killed")
|
||||
else:
|
||||
raise ValueError("Invalid status {}".format(status))
|
||||
status_map = {
|
||||
QWebEnginePage.NormalTerminationStatus:
|
||||
browsertab.TerminationStatus.normal,
|
||||
QWebEnginePage.AbnormalTerminationStatus:
|
||||
browsertab.TerminationStatus.abnormal,
|
||||
QWebEnginePage.CrashedTerminationStatus:
|
||||
browsertab.TerminationStatus.crashed,
|
||||
QWebEnginePage.KilledTerminationStatus:
|
||||
browsertab.TerminationStatus.killed,
|
||||
}
|
||||
self.renderer_process_terminated.emit(status_map[status], exitcode)
|
||||
|
||||
def _connect_signals(self):
|
||||
view = self._widget
|
||||
|
@ -198,6 +198,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
||||
functools.partial(self.on_load_started, tab))
|
||||
tab.window_close_requested.connect(
|
||||
functools.partial(self.on_window_close_requested, tab))
|
||||
tab.renderer_process_terminated.connect(
|
||||
functools.partial(self._on_renderer_process_terminated, tab))
|
||||
tab.new_tab_requested.connect(self.tabopen)
|
||||
tab.add_history_item.connect(objreg.get('web-history').add_from_tab)
|
||||
tab.fullscreen_requested.connect(self.page_fullscreen_requested)
|
||||
@ -655,6 +657,20 @@ class TabbedBrowser(tabwidget.TabWidget):
|
||||
self.update_window_title()
|
||||
self.update_tab_title(idx)
|
||||
|
||||
def _on_renderer_process_terminated(self, tab, status, code):
|
||||
"""Show an error when a renderer process terminated."""
|
||||
if status == browsertab.TerminationStatus.normal:
|
||||
pass
|
||||
elif status == browsertab.TerminationStatus.abnormal:
|
||||
message.error("Renderer process exited with status {}".format(
|
||||
code))
|
||||
elif status == browsertab.TerminationStatus.crashed:
|
||||
message.error("Renderer process crashed")
|
||||
elif status == browsertab.TerminationStatus.killed:
|
||||
message.error("Renderer process was killed")
|
||||
else:
|
||||
raise ValueError("Invalid status {}".format(status))
|
||||
|
||||
def resizeEvent(self, e):
|
||||
"""Extend resizeEvent of QWidget to emit a resized signal afterwards.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user