summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/webengine/quicknanobrowser/BrowserWindow.qml8
-rw-r--r--src/core/web_contents_adapter.cpp10
-rw-r--r--src/core/web_contents_delegate_qt.cpp4
-rw-r--r--src/core/web_engine_settings.cpp34
-rw-r--r--src/core/web_engine_settings.h6
-rw-r--r--src/webengine/api/qquickwebenginesettings.cpp22
-rw-r--r--src/webengine/api/qquickwebenginesettings_p.h4
-rw-r--r--src/webenginewidgets/api/qwebenginesettings.cpp2
-rw-r--r--src/webenginewidgets/api/qwebenginesettings.h3
-rw-r--r--src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc5
10 files changed, 90 insertions, 8 deletions
diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml
index 633ec7a98..193f10ab3 100644
--- a/examples/webengine/quicknanobrowser/BrowserWindow.qml
+++ b/examples/webengine/quicknanobrowser/BrowserWindow.qml
@@ -87,6 +87,7 @@ ApplicationWindow {
property alias fullScreenSupportEnabled: fullScreenSupportEnabled.checked
property alias autoLoadIconsForPage: autoLoadIconsForPage.checked
property alias touchIconsEnabled: touchIconsEnabled.checked
+ property alias webRTCPublicInterfacesOnly : webRTCPublicInterfacesOnly.checked
}
Action {
@@ -311,6 +312,12 @@ ApplicationWindow {
checked: WebEngine.settings.touchIconsEnabled
enabled: autoLoadIconsForPage.checked
}
+ MenuItem {
+ id: webRTCPublicInterfacesOnly
+ text: "WebRTC Public Interfaces Only"
+ checkable: true
+ checked: WebEngine.settings.webRTCPublicInterfacesOnly
+ }
}
}
}
@@ -384,6 +391,7 @@ ApplicationWindow {
settings.fullScreenSupportEnabled: appSettings.fullScreenSupportEnabled
settings.autoLoadIconsForPage: appSettings.autoLoadIconsForPage
settings.touchIconsEnabled: appSettings.touchIconsEnabled
+ settings.webRTCPublicInterfacesOnly: appSettings.webRTCPublicInterfacesOnly
onCertificateError: {
error.defer();
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index effd6e340..6576a9c3b 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -60,7 +60,8 @@
#include "web_engine_context.h"
#include "web_engine_settings.h"
-#include <base/run_loop.h>
+#include "base/command_line.h"
+#include "base/run_loop.h"
#include "base/values.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
@@ -80,6 +81,7 @@
#include "content/public/common/resource_request_body.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/web_preferences.h"
+#include "content/public/common/webrtc_ip_handling_policy.h"
#include "third_party/WebKit/public/web/WebFindOptions.h"
#include "printing/features/features.h"
#include "ui/base/clipboard/clipboard.h"
@@ -428,10 +430,14 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
rendererPrefs->caret_blink_interval = 0.5 * static_cast<double>(qtCursorFlashTime) / 1000;
rendererPrefs->user_agent_override = d->browserContextAdapter->httpUserAgent().toStdString();
rendererPrefs->accept_languages = d->browserContextAdapter->httpAcceptLanguageWithoutQualities().toStdString();
-#if defined(ENABLE_WEBRTC)
+#if BUILDFLAG(ENABLE_WEBRTC)
base::CommandLine* commandLine = base::CommandLine::ForCurrentProcess();
if (commandLine->HasSwitch(switches::kForceWebRtcIPHandlingPolicy))
rendererPrefs->webrtc_ip_handling_policy = commandLine->GetSwitchValueASCII(switches::kForceWebRtcIPHandlingPolicy);
+ else
+ rendererPrefs->webrtc_ip_handling_policy = adapterClient->webEngineSettings()->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly)
+ ? content::kWebRTCIPHandlingDefaultPublicInterfaceOnly
+ : content::kWebRTCIPHandlingDefault;
#endif
// Set web-contents font settings to the default font settings as Chromium constantly overrides
// the global font defaults with the font settings of the latest web-contents created.
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 111a6943a..54aeac710 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -485,9 +485,9 @@ void WebContentsDelegateQt::RequestToLockMouse(content::WebContents *web_content
m_viewClient->runMouseLockPermissionRequest(toQt(web_contents->GetVisibleURL()));
}
-void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *, content::WebPreferences *webPreferences)
+void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *webContents, content::WebPreferences *webPreferences)
{
- m_viewClient->webEngineSettings()->overrideWebPreferences(webPreferences);
+ m_viewClient->webEngineSettings()->overrideWebPreferences(webContents, webPreferences);
}
QWeakPointer<WebContentsAdapter> WebContentsDelegateQt::createWindow(content::WebContents *new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture)
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index a585e7bb3..58245d760 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -46,9 +46,13 @@
#include "base/command_line.h"
#include "chrome/common/chrome_switches.h"
#include "content/browser/gpu/gpu_process_host.h"
+#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h"
+#include "content/public/common/renderer_preferences.h"
#include "content/public/common/web_preferences.h"
#include "media/base/media_switches.h"
+#include "content/public/common/webrtc_ip_handling_policy.h"
#include "ui/events/event_switches.h"
#include <QFont>
@@ -127,7 +131,7 @@ WebEngineSettings::~WebEngineSettings()
}
}
-void WebEngineSettings::overrideWebPreferences(content::WebPreferences *prefs)
+void WebEngineSettings::overrideWebPreferences(content::WebContents *webContents, content::WebPreferences *prefs)
{
// Apply our settings on top of those.
applySettingsToWebPreferences(prefs);
@@ -136,6 +140,12 @@ void WebEngineSettings::overrideWebPreferences(content::WebPreferences *prefs)
// before we get here (e.g. number_of_cpu_cores).
if (webPreferences.isNull())
webPreferences.reset(new content::WebPreferences(*prefs));
+
+ if (webContents
+ && webContents->GetRenderViewHost()
+ && applySettingsToRendererPreferences(webContents->GetMutableRendererPrefs())) {
+ webContents->GetRenderViewHost()->SyncRendererPrefs();
+ }
}
void WebEngineSettings::setAttribute(WebEngineSettings::Attribute attr, bool on)
@@ -286,6 +296,7 @@ void WebEngineSettings::initDefaults()
if (commandLine->HasSwitch(switches::kAutoplayPolicy))
playbackRequiresUserGesture = (commandLine->GetSwitchValueASCII(switches::kAutoplayPolicy) != switches::autoplay::kNoUserGestureRequiredPolicy);
s_defaultAttributes.insert(PlaybackRequiresUserGesture, playbackRequiresUserGesture);
+ s_defaultAttributes.insert(WebRTCPublicInterfacesOnly, false);
}
if (s_defaultFontFamilies.isEmpty()) {
@@ -332,9 +343,11 @@ void WebEngineSettings::doApply()
return;
// Override with our settings when applicable
applySettingsToWebPreferences(webPreferences.data());
-
Q_ASSERT(m_adapter);
m_adapter->updateWebPreferences(*webPreferences.data());
+
+ if (applySettingsToRendererPreferences(m_adapter->webContents()->GetMutableRendererPrefs()))
+ m_adapter->webContents()->GetRenderViewHost()->SyncRendererPrefs();
}
void WebEngineSettings::applySettingsToWebPreferences(content::WebPreferences *prefs)
@@ -390,6 +403,23 @@ void WebEngineSettings::applySettingsToWebPreferences(content::WebPreferences *p
prefs->default_encoding = defaultTextEncoding().toStdString();
}
+bool WebEngineSettings::applySettingsToRendererPreferences(content::RendererPreferences *prefs)
+{
+ bool changed = false;
+#if BUILDFLAG(ENABLE_WEBRTC)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kForceWebRtcIPHandlingPolicy)) {
+ std::string webrtc_ip_handling_policy = testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly)
+ ? content::kWebRTCIPHandlingDefaultPublicInterfaceOnly
+ : content::kWebRTCIPHandlingDefault;
+ if (prefs->webrtc_ip_handling_policy != webrtc_ip_handling_policy) {
+ prefs->webrtc_ip_handling_policy = webrtc_ip_handling_policy;
+ changed = true;
+ }
+ }
+#endif
+ return changed;
+}
+
void WebEngineSettings::scheduleApplyRecursively()
{
scheduleApply();
diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h
index 5881303a2..06e6ac59c 100644
--- a/src/core/web_engine_settings.h
+++ b/src/core/web_engine_settings.h
@@ -48,6 +48,8 @@
#include <QSet>
namespace content {
+struct RendererPreferences;
+class WebContents;
struct WebPreferences;
}
namespace QtWebEngineCore {
@@ -87,6 +89,7 @@ public:
AllowWindowActivationFromJavaScript,
ShowScrollBars,
PlaybackRequiresUserGesture,
+ WebRTCPublicInterfacesOnly,
};
// Must match the values from the public API in qwebenginesettings.h.
@@ -121,7 +124,7 @@ public:
void setParentSettings(WebEngineSettings *parentSettings);
- void overrideWebPreferences(content::WebPreferences *prefs);
+ void overrideWebPreferences(content::WebContents *webContents, content::WebPreferences *prefs);
void setAttribute(Attribute, bool on);
bool testAttribute(Attribute) const;
@@ -152,6 +155,7 @@ public:
private:
void doApply();
void applySettingsToWebPreferences(content::WebPreferences *);
+ bool applySettingsToRendererPreferences(content::RendererPreferences *);
void setWebContentsAdapter(WebContentsAdapter *adapter) { m_adapter = adapter; }
WebContentsAdapter* m_adapter;
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp
index b238833ad..71b0deeca 100644
--- a/src/webengine/api/qquickwebenginesettings.cpp
+++ b/src/webengine/api/qquickwebenginesettings.cpp
@@ -412,6 +412,20 @@ bool QQuickWebEngineSettings::playbackRequiresUserGesture() const
}
/*!
+ \qmlproperty bool WebEngineSettings::webRTCPublicInterfacesOnly
+ \since QtWebEngine 1.7
+ Limits WebRTC to public IP addresses only. When disabled WebRTC may also use
+ local network IP addresses, but remote hosts can also see your local network
+ IP address.
+
+ Disabled by default.
+*/
+bool QQuickWebEngineSettings::webRTCPublicInterfacesOnly() const
+{
+ return d_ptr->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly);
+}
+
+/*!
\qmlproperty string WebEngineSettings::defaultTextEncoding
\since QtWebEngine 1.2
@@ -662,6 +676,14 @@ void QQuickWebEngineSettings::setUnknownUrlSchemePolicy(QQuickWebEngineSettings:
Q_EMIT unknownUrlSchemePolicyChanged();
}
+void QQuickWebEngineSettings::setWebRTCPublicInterfacesOnly(bool on)
+{
+ bool wasOn = d_ptr->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly);
+ d_ptr->setAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly, on);
+ if (wasOn != on)
+ Q_EMIT webRTCPublicInterfacesOnlyChanged();
+}
+
void QQuickWebEngineSettings::setParentSettings(QQuickWebEngineSettings *parentSettings)
{
d_ptr->setParentSettings(parentSettings->d_ptr.data());
diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h
index 63c397d21..60baa7323 100644
--- a/src/webengine/api/qquickwebenginesettings_p.h
+++ b/src/webengine/api/qquickwebenginesettings_p.h
@@ -90,6 +90,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineSettings : public QObject {
Q_PROPERTY(bool showScrollBars READ showScrollBars WRITE setShowScrollBars NOTIFY showScrollBarsChanged REVISION 5 FINAL)
Q_PROPERTY(UnknownUrlSchemePolicy unknownUrlSchemePolicy READ unknownUrlSchemePolicy WRITE setUnknownUrlSchemePolicy NOTIFY unknownUrlSchemePolicyChanged REVISION 6 FINAL)
Q_PROPERTY(bool playbackRequiresUserGesture READ playbackRequiresUserGesture WRITE setPlaybackRequiresUserGesture NOTIFY playbackRequiresUserGestureChanged REVISION 6 FINAL)
+ Q_PROPERTY(bool webRTCPublicInterfacesOnly READ webRTCPublicInterfacesOnly WRITE setWebRTCPublicInterfacesOnly NOTIFY webRTCPublicInterfacesOnlyChanged REVISION 6 FINAL)
public:
enum UnknownUrlSchemePolicy {
@@ -129,6 +130,7 @@ public:
bool showScrollBars() const;
UnknownUrlSchemePolicy unknownUrlSchemePolicy() const;
bool playbackRequiresUserGesture() const;
+ bool webRTCPublicInterfacesOnly() const;
void setAutoLoadImages(bool on);
void setJavascriptEnabled(bool on);
@@ -157,6 +159,7 @@ public:
void setShowScrollBars(bool on);
void setUnknownUrlSchemePolicy(UnknownUrlSchemePolicy policy);
void setPlaybackRequiresUserGesture(bool on);
+ void setWebRTCPublicInterfacesOnly(bool on);
signals:
void autoLoadImagesChanged();
@@ -186,6 +189,7 @@ signals:
Q_REVISION(5) void showScrollBarsChanged();
Q_REVISION(6) void unknownUrlSchemePolicyChanged();
Q_REVISION(6) void playbackRequiresUserGestureChanged();
+ Q_REVISION(6) void webRTCPublicInterfacesOnlyChanged();
private:
explicit QQuickWebEngineSettings(QQuickWebEngineSettings *parentSettings = 0);
diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp
index b51f502a5..b829c5799 100644
--- a/src/webenginewidgets/api/qwebenginesettings.cpp
+++ b/src/webenginewidgets/api/qwebenginesettings.cpp
@@ -103,6 +103,8 @@ static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::Web
return WebEngineSettings::ShowScrollBars;
case QWebEngineSettings::PlaybackRequiresUserGesture:
return WebEngineSettings::PlaybackRequiresUserGesture;
+ case QWebEngineSettings::WebRTCPublicInterfacesOnly:
+ return WebEngineSettings::WebRTCPublicInterfacesOnly;
default:
return WebEngineSettings::UnsupportedInCoreSettings;
diff --git a/src/webenginewidgets/api/qwebenginesettings.h b/src/webenginewidgets/api/qwebenginesettings.h
index ab03e207a..81b6c2937 100644
--- a/src/webenginewidgets/api/qwebenginesettings.h
+++ b/src/webenginewidgets/api/qwebenginesettings.h
@@ -92,7 +92,8 @@ public:
AllowGeolocationOnInsecureOrigins,
AllowWindowActivationFromJavaScript,
ShowScrollBars,
- PlaybackRequiresUserGesture
+ PlaybackRequiresUserGesture,
+ WebRTCPublicInterfacesOnly,
};
enum FontSize {
diff --git a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
index 2f33d2e7a..970a4e4c3 100644
--- a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
@@ -173,6 +173,11 @@
the page. This is similar to how Chrome on Android behaves, while
the default behavior when it is disabled is similar to Chrome on desktops.
Disabled by default. (Added in Qt 5.11)
+ \value WebRTCPublicInterfacesOnly
+ Limits WebRTC to public IP addresses only. When disabled WebRTC may also use
+ local network IP addresses, but remote hosts can also see your local network
+ IP address.
+ Disabled by default. (Added in Qt 5.11)
*/
/*!