Skip to content

Commit ba0da90

Browse files
committed
implement autoplay policy to block media autoplay...
... when not allowed by content settings. This commit adds four patches: 1. Add enable-autoplay-permssion flag to the renderer. 2. Implement experimental Autoplay site setting (behind a flag). 3. Add AllowAutoplay in WebContentSettingsClient (allows accessing the Autoplay setting in the renderer (blink). 4. Implement the below autoplay policy. Current autoplay policy (if autoplay is blocked for site as per content settings): 1. Muted autoplay is always blocked. 2. Autoplay with sound is allowed if and only if the user has interacted with domain (click, tap, etc.). If we block this, then the user won't be able to start a video by tapping on the play button, since those will be blocked too.
1 parent 2662c1c commit ba0da90

4 files changed

+797
-0
lines changed
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
From 8634f4efdde88b9e11e9981ba45a64f571cf6625 Mon Sep 17 00:00:00 2001
2+
From: octocorvus <[email protected]>
3+
Date: Wed, 26 Oct 2022 13:20:53 +0000
4+
Subject: [PATCH] [autoplay] add enable-autoplay-permssion flag in the
5+
renderer...
6+
7+
... and expose it through Java ChromeFeatureList and
8+
SiteSettingsFeatureList API. The permission will only be visible and
9+
effective when this flag is enabled.
10+
---
11+
chrome/browser/about_flags.cc | 4 ++++
12+
chrome/browser/flag-metadata.json | 7 +++++++
13+
chrome/browser/flag_descriptions.cc | 4 ++++
14+
chrome/browser/flag_descriptions.h | 3 +++
15+
chrome/browser/flags/android/chrome_feature_list.cc | 1 +
16+
.../chromium/chrome/browser/flags/ChromeFeatureList.java | 1 +
17+
.../browser_ui/site_settings/SiteSettingsFeatureList.java | 1 +
18+
.../site_settings/android/site_settings_feature_list.cc | 2 ++
19+
third_party/blink/common/features.cc | 3 +++
20+
third_party/blink/public/common/features.h | 2 ++
21+
10 files changed, 28 insertions(+)
22+
23+
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
24+
index 5fe29951b44d4..5bb2f3eb38e49 100644
25+
--- a/chrome/browser/about_flags.cc
26+
+++ b/chrome/browser/about_flags.cc
27+
@@ -6285,6 +6285,10 @@ const FeatureEntry kFeatureEntries[] = {
28+
flag_descriptions::kDisableProcessReuseDescription, kOsDesktop,
29+
FEATURE_VALUE_TYPE(features::kDisableProcessReuse)},
30+
31+
+ {"enable-autoplay-permission", flag_descriptions::kEnableAutoplayPermission,
32+
+ flag_descriptions::kEnableAutoplayPermissionDescription, kOsAndroid,
33+
+ FEATURE_VALUE_TYPE(blink::features::kEnableAutoplayPermission)},
34+
+
35+
#if !BUILDFLAG(IS_ANDROID)
36+
{"enable-accessibility-live-caption",
37+
flag_descriptions::kEnableAccessibilityLiveCaptionName,
38+
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
39+
index c74df3b8e7cab..4560f9a892a8d 100644
40+
--- a/chrome/browser/flag-metadata.json
41+
+++ b/chrome/browser/flag-metadata.json
42+
@@ -1415,6 +1415,13 @@
43+
44+
"expiry_milestone": 110
45+
},
46+
+ {
47+
+ "name": "enable-autoplay-permission",
48+
+ "owners": [
49+
50+
+ ],
51+
+ "expiry_milestone": -1
52+
+ },
53+
{
54+
"name": "disable-quick-answers-v2-translation",
55+
"owners": [ "croissant-eng" ],
56+
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
57+
index 66d1a897618f4..c904493b32250 100644
58+
--- a/chrome/browser/flag_descriptions.cc
59+
+++ b/chrome/browser/flag_descriptions.cc
60+
@@ -821,6 +821,10 @@ const char kDisableProcessReuseDescription[] =
61+
"unrelated tabs. This is an experimental mode that will result in more "
62+
"processes being created.";
63+
64+
+const char kEnableAutoplayPermission[] = "Enable autoplay permission";
65+
+const char kEnableAutoplayPermissionDescription[] =
66+
+ "Enable autoplay permission.";
67+
+
68+
const char kDisallowDocWrittenScriptsUiName[] =
69+
"Block scripts loaded via document.write";
70+
const char kDisallowDocWrittenScriptsUiDescription[] =
71+
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
72+
index 1d94a553737be..832ef6c238ec6 100644
73+
--- a/chrome/browser/flag_descriptions.h
74+
+++ b/chrome/browser/flag_descriptions.h
75+
@@ -405,6 +405,9 @@ extern const char kChromeWhatsNewInMainMenuNewBadgeDescription[];
76+
extern const char kDisableProcessReuse[];
77+
extern const char kDisableProcessReuseDescription[];
78+
79+
+extern const char kEnableAutoplayPermission[];
80+
+extern const char kEnableAutoplayPermissionDescription[];
81+
+
82+
extern const char kDiscountConsentV2Name[];
83+
extern const char kDiscountConsentV2Description[];
84+
85+
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
86+
index f6791e43511cc..abd0c42c66994 100644
87+
--- a/chrome/browser/flags/android/chrome_feature_list.cc
88+
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
89+
@@ -99,6 +99,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
90+
&autofill::features::kAutofillEnableUpdateVirtualCardEnrollment,
91+
&autofill::features::kAutofillEnableVirtualCardMetadata,
92+
&blink::features::kPrerender2,
93+
+ &blink::features::kEnableAutoplayPermission,
94+
&blink::features::kForceWebContentsDarkMode,
95+
&commerce::kCommerceMerchantViewer,
96+
&commerce::kCommercePriceTracking,
97+
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
98+
index 9500d2d9026d3..b0ea15800a1a8 100644
99+
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
100+
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
101+
@@ -347,6 +347,7 @@ public abstract class ChromeFeatureList {
102+
public static final String EARLY_LIBRARY_LOAD = "EarlyLibraryLoad";
103+
public static final String ELIDE_PRIORITIZATION_OF_PRE_NATIVE_BOOTSTRAP_TASKS =
104+
"ElidePrioritizationOfPreNativeBootstrapTasks";
105+
+ public static final String ENABLE_AUTOPLAY_PERMISSION = "EnableAutoplayPermission";
106+
public static final String ENABLE_AUTOMATIC_SNOOZE = "EnableAutomaticSnooze";
107+
public static final String ENABLE_FAMILY_INFO_FEEDBACK = "EnableFamilyInfoFeedback";
108+
public static final String ELASTIC_OVERSCROLL = "ElasticOverscroll";
109+
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
110+
index 1f72fd6058239..fd80fe51829f9 100644
111+
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
112+
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsFeatureList.java
113+
@@ -16,6 +16,7 @@ import org.chromium.build.annotations.MainDex;
114+
@JNINamespace("browser_ui")
115+
@MainDex
116+
public class SiteSettingsFeatureList {
117+
+ public static final String ENABLE_AUTOPLAY_PERMISSION = "EnableAutoplayPermission";
118+
public static final String SITE_DATA_IMPROVEMENTS = "SiteDataImprovements";
119+
public static final String REQUEST_DESKTOP_SITE_EXCEPTIONS_DOWNGRADE =
120+
"RequestDesktopSiteExceptionsDowngrade";
121+
diff --git a/components/browser_ui/site_settings/android/site_settings_feature_list.cc b/components/browser_ui/site_settings/android/site_settings_feature_list.cc
122+
index 48343f2ed9241..2ac2050950102 100644
123+
--- a/components/browser_ui/site_settings/android/site_settings_feature_list.cc
124+
+++ b/components/browser_ui/site_settings/android/site_settings_feature_list.cc
125+
@@ -7,6 +7,7 @@
126+
#include "base/notreached.h"
127+
#include "components/browser_ui/site_settings/android/features.h"
128+
#include "components/browser_ui/site_settings/android/site_settings_jni_headers/SiteSettingsFeatureList_jni.h"
129+
+#include "third_party/blink/public/common/features.h"
130+
131+
using base::android::ConvertJavaStringToUTF8;
132+
using base::android::JavaParamRef;
133+
@@ -19,6 +20,7 @@ namespace {
134+
// this array may either refer to features defined in the header of this file or
135+
// in other locations in the code base (e.g. content_features.h).
136+
const base::Feature* const kFeaturesExposedToJava[] = {
137+
+ &blink::features::kEnableAutoplayPermission,
138+
&kSiteDataImprovements,
139+
&kRequestDesktopSiteExceptionsDowngrade,
140+
};
141+
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
142+
index b26d392e51c9d..fb34216855940 100644
143+
--- a/third_party/blink/common/features.cc
144+
+++ b/third_party/blink/common/features.cc
145+
@@ -505,6 +505,9 @@ const base::Feature kLightweightNoStatePrefetch {
146+
const base::Feature kForceWebContentsDarkMode{
147+
"WebContentsForceDark", base::FEATURE_DISABLED_BY_DEFAULT};
148+
149+
+const base::Feature kEnableAutoplayPermission{
150+
+ "EnableAutoplayPermission", base::FEATURE_DISABLED_BY_DEFAULT};
151+
+
152+
// A feature to enable using the smallest image specified within image srcset
153+
// for users with Save Data enabled.
154+
const base::Feature kSaveDataImgSrcset{"SaveDataImgSrcset",
155+
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
156+
index ac637219f5808..201b144753da6 100644
157+
--- a/third_party/blink/public/common/features.h
158+
+++ b/third_party/blink/public/common/features.h
159+
@@ -241,6 +241,8 @@ BLINK_COMMON_EXPORT extern const base::Feature kLightweightNoStatePrefetch;
160+
161+
BLINK_COMMON_EXPORT extern const base::Feature kSaveDataImgSrcset;
162+
163+
+BLINK_COMMON_EXPORT extern const base::Feature kEnableAutoplayPermission;
164+
+
165+
BLINK_COMMON_EXPORT extern const base::Feature kForceWebContentsDarkMode;
166+
BLINK_COMMON_EXPORT extern const base::FeatureParam<ForceDarkInversionMethod>
167+
kForceDarkInversionMethodParam;

0 commit comments

Comments
 (0)