summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-10-23 15:07:16 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-02 09:53:21 +0000
commit18ea13a7f5e083538910646c52a96a5e4642d1f2 (patch)
tree93e9d944d16030669be07d5d597bdf4f2d323d64 /src
parentba63729ed9a39e122475ac8860cee27fc235241b (diff)
Add setting to inhibit autoplay until user interaction
Pass through the PlaybackRequiresUserGesture Chromium setting which Chrome enables by default on Android. Task-number: QTBUG-60799 Change-Id: I105fc7d558f9b67417a0047ecb1efe7677817ea4 Reviewed-by: Florian Bruhin <qt-project.org@the-compiler.org> Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/core/web_engine_settings.cpp21
-rw-r--r--src/core/web_engine_settings.h4
-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
7 files changed, 59 insertions, 2 deletions
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index 44ecaf2ef..a585e7bb3 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -48,6 +48,7 @@
#include "content/browser/gpu/gpu_process_host.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/web_preferences.h"
+#include "media/base/media_switches.h"
#include "ui/events/event_switches.h"
#include <QFont>
@@ -152,6 +153,17 @@ bool WebEngineSettings::testAttribute(WebEngineSettings::Attribute attr) const
return m_attributes.value(attr, parentSettings->testAttribute(attr));
}
+bool WebEngineSettings::isAttributeExplicitlySet(Attribute attr) const
+{
+ if (m_attributes.contains(attr))
+ return true;
+
+ if (parentSettings)
+ return parentSettings->isAttributeExplicitlySet(attr);
+
+ return false;
+}
+
void WebEngineSettings::resetAttribute(WebEngineSettings::Attribute attr)
{
m_attributes.remove(attr);
@@ -270,6 +282,10 @@ void WebEngineSettings::initDefaults()
s_defaultAttributes.insert(AllowRunningInsecureContent, allowRunningInsecureContent);
s_defaultAttributes.insert(AllowGeolocationOnInsecureOrigins, false);
s_defaultAttributes.insert(AllowWindowActivationFromJavaScript, false);
+ bool playbackRequiresUserGesture = false;
+ if (commandLine->HasSwitch(switches::kAutoplayPolicy))
+ playbackRequiresUserGesture = (commandLine->GetSwitchValueASCII(switches::kAutoplayPolicy) != switches::autoplay::kNoUserGestureRequiredPolicy);
+ s_defaultAttributes.insert(PlaybackRequiresUserGesture, playbackRequiresUserGesture);
}
if (s_defaultFontFamilies.isEmpty()) {
@@ -353,6 +369,11 @@ void WebEngineSettings::applySettingsToWebPreferences(content::WebPreferences *p
prefs->allow_running_insecure_content = testAttribute(AllowRunningInsecureContent);
prefs->allow_geolocation_on_insecure_origins = testAttribute(AllowGeolocationOnInsecureOrigins);
prefs->hide_scrollbars = !testAttribute(ShowScrollBars);
+ if (isAttributeExplicitlySet(PlaybackRequiresUserGesture)) {
+ prefs->autoplay_policy = testAttribute(PlaybackRequiresUserGesture)
+ ? content::AutoplayPolicy::kUserGestureRequired
+ : content::AutoplayPolicy::kNoUserGestureRequired;
+ }
// Fonts settings.
prefs->standard_font_family_map[content::kCommonScript] = toString16(fontFamily(StandardFont));
diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h
index ea647a61f..5881303a2 100644
--- a/src/core/web_engine_settings.h
+++ b/src/core/web_engine_settings.h
@@ -85,7 +85,8 @@ public:
AllowRunningInsecureContent,
AllowGeolocationOnInsecureOrigins,
AllowWindowActivationFromJavaScript,
- ShowScrollBars
+ ShowScrollBars,
+ PlaybackRequiresUserGesture,
};
// Must match the values from the public API in qwebenginesettings.h.
@@ -125,6 +126,7 @@ public:
void setAttribute(Attribute, bool on);
bool testAttribute(Attribute) const;
void resetAttribute(Attribute);
+ bool isAttributeExplicitlySet(Attribute) const;
void setFontFamily(FontFamily, const QString &);
QString fontFamily(FontFamily);
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp
index 71af00d30..b238833ad 100644
--- a/src/webengine/api/qquickwebenginesettings.cpp
+++ b/src/webengine/api/qquickwebenginesettings.cpp
@@ -398,6 +398,20 @@ bool QQuickWebEngineSettings::showScrollBars() const
}
/*!
+ \qmlproperty bool WebEngineSettings::playbackRequiresUserGesture
+ \since QtWebEngine 1.7
+ Inhibits playback of media content until the user interacts with
+ the page. Disabled by default.
+
+ \note The behavior is similar to Chrome on Android when enabled,
+ and similar to Chrome on desktops when disabled (default).
+*/
+bool QQuickWebEngineSettings::playbackRequiresUserGesture() const
+{
+ return d_ptr->testAttribute(WebEngineSettings::PlaybackRequiresUserGesture);
+}
+
+/*!
\qmlproperty string WebEngineSettings::defaultTextEncoding
\since QtWebEngine 1.2
@@ -631,6 +645,14 @@ void QQuickWebEngineSettings::setShowScrollBars(bool on)
Q_EMIT showScrollBarsChanged();
}
+void QQuickWebEngineSettings::setPlaybackRequiresUserGesture(bool on)
+{
+ bool wasOn = d_ptr->testAttribute(WebEngineSettings::PlaybackRequiresUserGesture);
+ d_ptr->setAttribute(WebEngineSettings::PlaybackRequiresUserGesture, on);
+ if (wasOn != on)
+ Q_EMIT playbackRequiresUserGestureChanged();
+}
+
void QQuickWebEngineSettings::setUnknownUrlSchemePolicy(QQuickWebEngineSettings::UnknownUrlSchemePolicy policy)
{
WebEngineSettings::UnknownUrlSchemePolicy oldPolicy = d_ptr->unknownUrlSchemePolicy();
diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h
index 6e0900c58..63c397d21 100644
--- a/src/webengine/api/qquickwebenginesettings_p.h
+++ b/src/webengine/api/qquickwebenginesettings_p.h
@@ -89,6 +89,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineSettings : public QObject {
Q_PROPERTY(bool allowWindowActivationFromJavaScript READ allowWindowActivationFromJavaScript WRITE setAllowWindowActivationFromJavaScript NOTIFY allowWindowActivationFromJavaScriptChanged REVISION 5 FINAL)
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)
public:
enum UnknownUrlSchemePolicy {
@@ -127,6 +128,7 @@ public:
bool allowWindowActivationFromJavaScript() const;
bool showScrollBars() const;
UnknownUrlSchemePolicy unknownUrlSchemePolicy() const;
+ bool playbackRequiresUserGesture() const;
void setAutoLoadImages(bool on);
void setJavascriptEnabled(bool on);
@@ -154,6 +156,7 @@ public:
void setAllowWindowActivationFromJavaScript(bool on);
void setShowScrollBars(bool on);
void setUnknownUrlSchemePolicy(UnknownUrlSchemePolicy policy);
+ void setPlaybackRequiresUserGesture(bool on);
signals:
void autoLoadImagesChanged();
@@ -182,6 +185,7 @@ signals:
Q_REVISION(5) void allowWindowActivationFromJavaScriptChanged();
Q_REVISION(5) void showScrollBarsChanged();
Q_REVISION(6) void unknownUrlSchemePolicyChanged();
+ Q_REVISION(6) void playbackRequiresUserGestureChanged();
private:
explicit QQuickWebEngineSettings(QQuickWebEngineSettings *parentSettings = 0);
diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp
index 2d7c68926..b51f502a5 100644
--- a/src/webenginewidgets/api/qwebenginesettings.cpp
+++ b/src/webenginewidgets/api/qwebenginesettings.cpp
@@ -101,6 +101,8 @@ static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::Web
return WebEngineSettings::AllowWindowActivationFromJavaScript;
case QWebEngineSettings::ShowScrollBars:
return WebEngineSettings::ShowScrollBars;
+ case QWebEngineSettings::PlaybackRequiresUserGesture:
+ return WebEngineSettings::PlaybackRequiresUserGesture;
default:
return WebEngineSettings::UnsupportedInCoreSettings;
diff --git a/src/webenginewidgets/api/qwebenginesettings.h b/src/webenginewidgets/api/qwebenginesettings.h
index fc9372968..ab03e207a 100644
--- a/src/webenginewidgets/api/qwebenginesettings.h
+++ b/src/webenginewidgets/api/qwebenginesettings.h
@@ -91,7 +91,8 @@ public:
AllowRunningInsecureContent,
AllowGeolocationOnInsecureOrigins,
AllowWindowActivationFromJavaScript,
- ShowScrollBars
+ ShowScrollBars,
+ PlaybackRequiresUserGesture
};
enum FontSize {
diff --git a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
index fb5ed019e..2f33d2e7a 100644
--- a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
@@ -168,6 +168,11 @@
\value ShowScrollBars
Shows scroll bars.
Enabled by default. (Added in Qt 5.10)
+ \value PlaybackRequiresUserGesture
+ Inhibits playback of media content until the user interacts with
+ 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)
*/
/*!