Autoplay: add document user activation flag in chrome://flags
This is plumbing the flag to Blink. The feature is not fully implemented
but can be tested. The missing parts are:
- Media Engagement Index;
- Iframe delecation;
- Sticky bit across navigations.
BUG=715049
Review-Url: https://codereview.chromium.org/2921273002
Cr-Commit-Position: refs/heads/master@{#477238}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index a3f2521..1e03569 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -757,6 +757,9 @@
switches::kAutoplayPolicy,
switches::autoplay::kUserGestureRequiredForCrossOriginPolicy},
#endif
+ {flag_descriptions::kAutoplayPolicyDocumentUserActivation,
+ switches::kAutoplayPolicy,
+ switches::autoplay::kDocumentUserActivationRequiredPolicy},
};
const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index db5fad8..54de7a89 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3104,6 +3104,9 @@
const char kAutoplayPolicyUserGestureRequiredForCrossOrigin[] =
"User gesture is required for cross-origin iframes.";
+const char kAutoplayPolicyDocumentUserActivation[] =
+ "Document user activation is required.";
+
const char kOmniboxDisplayTitleForCurrentUrlName[] =
"Include title for the current URL in the omnibox";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 5ccc0d6..91d0c3f4 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -52,6 +52,7 @@
extern const char kAutoplayPolicyUserGestureRequiredForCrossOrigin[];
extern const char kAutoplayPolicyNoUserGestureRequired[];
extern const char kAutoplayPolicyUserGestureRequired[];
+extern const char kAutoplayPolicyDocumentUserActivation[];
extern const char kBackgroundVideoTrackOptimizationName[];
extern const char kBackgroundVideoTrackOptimizationDescription[];
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index ee956813..2a5d922 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -466,6 +466,11 @@
} else if (autoplay_policy ==
switches::autoplay::kUserGestureRequiredForCrossOriginPolicy) {
prefs.autoplay_policy = AutoplayPolicy::kUserGestureRequiredForCrossOrigin;
+ } else if (autoplay_policy ==
+ switches::autoplay::kDocumentUserActivationRequiredPolicy) {
+ prefs.autoplay_policy = AutoplayPolicy::kDocumentUserActivationRequired;
+ } else {
+ NOTREACHED();
}
const std::string touch_enabled_switch =
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h
index 25b9c8c8..befe55e 100644
--- a/content/public/common/common_param_traits_macros.h
+++ b/content/public/common/common_param_traits_macros.h
@@ -81,7 +81,7 @@
IPC_ENUM_TRAITS_MIN_MAX_VALUE(
content::AutoplayPolicy,
content::AutoplayPolicy::kNoUserGestureRequired,
- content::AutoplayPolicy::kUserGestureRequiredForCrossOrigin)
+ content::AutoplayPolicy::kDocumentUserActivationRequired)
IPC_STRUCT_TRAITS_BEGIN(blink::WebPoint)
IPC_STRUCT_TRAITS_MEMBER(x)
diff --git a/content/public/common/web_preferences.h b/content/public/common/web_preferences.h
index 80816ae..901b50ea 100644
--- a/content/public/common/web_preferences.h
+++ b/content/public/common/web_preferences.h
@@ -72,6 +72,7 @@
kNoUserGestureRequired,
kUserGestureRequired,
kUserGestureRequiredForCrossOrigin,
+ kDocumentUserActivationRequired,
};
// The ISO 15924 script code for undetermined script aka Common. It's the
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index b0d3c28..9967866 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1035,6 +1035,10 @@
settings->SetAutoplayPolicy(
WebSettings::AutoplayPolicy::kUserGestureRequiredForCrossOrigin);
break;
+ case AutoplayPolicy::kDocumentUserActivationRequired:
+ settings->SetAutoplayPolicy(
+ WebSettings::AutoplayPolicy::kDocumentUserActivationRequired);
+ break;
}
settings->SetViewportEnabled(prefs.viewport_enabled);
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index aad4a7e..af8c995 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -164,6 +164,10 @@
namespace autoplay {
+// Autoplay policy that requires a document user activation.
+const char kDocumentUserActivationRequiredPolicy[] =
+ "document-user-activation-required";
+
// Autoplay policy that does not require any user gesture.
const char kNoUserGestureRequiredPolicy[] = "no-user-gesture-required";
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index b33e9529..abbeb5a8 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -92,6 +92,7 @@
namespace autoplay {
+MEDIA_EXPORT extern const char kDocumentUserActivationRequiredPolicy[];
MEDIA_EXPORT extern const char kNoUserGestureRequiredPolicy[];
MEDIA_EXPORT extern const char kUserGestureRequiredPolicy[];
MEDIA_EXPORT extern const char kUserGestureRequiredForCrossOriginPolicy[];