From 41865779282fcc6966db9d058d23bf0084b3e149 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 11 Jun 2018 16:51:18 +0200 Subject: [PATCH] Add support for navigator.registerProtocolHandler See #3010 --- doc/changelog.asciidoc | 6 +++--- doc/help/settings.asciidoc | 19 +++++++++++++++++++ qutebrowser/browser/webengine/webenginetab.py | 12 ++++++++++++ qutebrowser/config/configdata.yml | 9 +++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 92fa2d9e7..b9bfe66a6 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -34,9 +34,9 @@ Added * New `{audio}` field for `window.title_format` and `tabs.title.format` which displays `[M]`/`[A]` for muted/recently audible tabs. * New `:tab-mute` command (bound to ``) to mute/unmute a tab. -- QtWebEngine: Support for `navigator.webkitPersistentStorage.requestQuota` - * New `content.persistent_storage` setting to allow/deny requests (default: - ask). +- QtWebEngine: Support for new permissions, including new settings (true/false/ask): + * `navigator.webkitPersistentStorage.requestQuota` with a new `content.persistent_storage` setting. + * `navigator.registerProtocolHandler` with a new `content.register_protocol_handler` setting. Changed ~~~~~~~ diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index b3f0e995f..67089aa0a 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -150,6 +150,7 @@ |<>|Open new windows in private browsing mode which does not record visited pages. |<>|Proxy to use. |<>|Send DNS requests over the configured proxy. +|<>|Allow websites to register protocol handlers via `navigator.registerProtocolHandler`. |<>|Validate SSL handshakes. |<>|List of user stylesheet filenames to use. |<>|Enable WebGL. @@ -1930,6 +1931,24 @@ Default: +pass:[true]+ This setting is only available with the QtWebKit backend. +[[content.register_protocol_handler]] +=== content.register_protocol_handler +Allow websites to register protocol handlers via `navigator.registerProtocolHandler`. + +Type: <> + +Valid values: + + * +true+ + * +false+ + * +ask+ + +Default: +pass:[ask]+ + +On QtWebEngine, this setting requires Qt 5.11 or newer. + +On QtWebKit, this setting is unavailable. + [[content.ssl_strict]] === content.ssl_strict Validate SSL handshakes. diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 9b2c85240..ee7fb4e9f 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -1057,6 +1057,16 @@ class WebEngineTab(browsertab.AbstractTab): abort_on=[self.shutting_down, self.load_started], blocking=True) + @pyqtSlot('QWebEngineRegisterProtocolHandlerRequest') + def _on_register_protocol_handler_requested(self, request): + shared.feature_permission( + url=request.origin(), + option='content.register_protocol_handler', + msg='open all {} links'.format(request.scheme()), + yes_action=request.accept, no_action=request.reject, + abort_on=[self.shutting_down, self.load_started], + blocking=True) + @pyqtSlot() def _on_load_started(self): """Clear search when a new load is started if needed.""" @@ -1217,6 +1227,8 @@ class WebEngineTab(browsertab.AbstractTab): self._on_feature_permission_requested) try: page.quotaRequested.connect(self._on_quota_requested) + page.registerProtocolHandlerRequested.connect( + self._on_register_protocol_handler_requested) except AttributeError: # Added in Qt 5.11 pass diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index d858f6079..03b1b1a4e 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -644,6 +644,15 @@ content.proxy_dns_requests: backend: QtWebKit desc: Send DNS requests over the configured proxy. +content.register_protocol_handler: + default: ask + type: BoolAsk + backend: + QtWebKit: false + QtWebEngine: Qt 5.11 + desc: Allow websites to register protocol handlers via + `navigator.registerProtocolHandler`. + content.ssl_strict: default: ask type: BoolAsk