Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: third_party/WebKit/LayoutTests/media/autoplay-experiment-helper.js

Issue 1920863005: Disable autoplay experiments if the autoplay content settings is set to block. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@autoplay-ifsameorigin-ormuted
Patch Set: split autoplay experiment tests Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/media/autoplay-experiment-helper.js
diff --git a/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes.html b/third_party/WebKit/LayoutTests/media/autoplay-experiment-helper.js
similarity index 75%
copy from third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes.html
copy to third_party/WebKit/LayoutTests/media/autoplay-experiment-helper.js
index edf742f1954cd537edad87c611e0507fac722bf0..183e2f11ad54822906f51136d95e567c4b4322c3 100644
--- a/third_party/WebKit/LayoutTests/media/video-autoplay-experiment-modes.html
+++ b/third_party/WebKit/LayoutTests/media/autoplay-experiment-helper.js
@@ -1,72 +1,3 @@
-<html>
-<video autoplay controls></video>
-<script src=media-file.js></script>
-<!-- TODO(philipj): Convert test to testharness.js. crbug.com/588956
- (Please avoid writing new tests using video-test.js) -->
-<script src=video-test.js></script>
-<body>
-<pre>
- Check if the autoplay gesture override experiment works. There are a lot
- of config options, so this test just runs all of them.
-
- The "results" table contains one row per config tested.
- == Test Inputs ==
- # - config number, in case you'd like to run just one.
- Flags - autoplay experiment setting being tested.
- a - "foraudio"
- v - "forvideo"
- V - "ifviewport"
- P - "ifpagevisible"
- M - "ifmuted"
- p - "playmuted"
- m - "ifmobile"
- For example, vM means '-forvideo-ifmuted".
- Type - audio or video element?
- audio - <audio>
- video - <video>
- Play w/- how is play requested?
- none - play is not requested.
- attr - autoplay attribute is set on the element.
- play() - play() called after media is ready to play.
- Mute - how is media muted?
- no - media is not muted.
- yes - muted attribute is set on the element.
- Mobile - is page optimized for mobile?
- no - page is not optimized for mobile.
- yes - page is optimized for mobile.
- View - is media in viewport?
- onscreen - element starts out onscreen.
- scroll - element starts offscreen, scrolled into view once
- it is ready to play.
- offscreen - element starts out offscreen and stays offscreen.
- obscured - onscreen but page is not visible.
-
- == Test Outputs ==
- Early? - did playback start before element was scrolled onscreen? For
- tests in which View!=scroll, this is reported as "-".
- Played? - did playback start by the conclusion of the test?
- Muted? - was the media muted? If the media didn't play, then this is
- reported as "-".
-
-</pre>
-<table id="results">
-<tr>
-<td>#</td>
-<td>Flags</td>
-<td>Type</td>
-<td>Play w/</td>
-<td>Mute</td>
-<td>Mobile</td>
-<td>View</td>
-<td>Early?</td>
-<td>Played?</td>
-<td>Muted?</td>
-</tr>
-</table>
-</body>
-
-<script>
-
// Starting configuration number. This should be zero normally.
var configNumber = 0;
@@ -95,7 +26,6 @@ function becomeOptimizedForMobile(enable)
if (!enable) {
// We can't transition out of optimized for mobile.
- console.log("becomeOptimizedForMobile: test is broken -- cannot un-enable mobile");
endTest();
} else {
// This only works once.
@@ -130,7 +60,7 @@ function addResultsRow(spec)
// Add remaining fields.
var fields = [ "elementType", "autoplayType", "mutedType", "mobileType",
- "visType", "playedEarly", "played", "muted"];
+ "visType", "settingValue", "playedEarly", "played", "muted"];
for(idx in fields)
row.insertCell().innerText = spec[fields[idx]].substring(0,7);
}
@@ -171,6 +101,7 @@ function runOneConfig(spec)
{
internals.settings.setAutoplayExperimentMode(spec.experimentType);
internals.settings.setViewportMetaEnabled(true);
+ testRunner.setAutoplayAllowed(spec.settingValue == "enabled");
// Create, configure, and attach a media element.
var element = document.createElement(spec.elementType);
@@ -231,23 +162,14 @@ function runOneConfig(spec)
element.src = mediaFile;
}
-var experimentTypes = [
- "none",
- "enabled-forvideo",
- "enabled-forvideo-ifpagevisible",
- "enabled-forvideo-ifviewport",
- "enabled-forvideo-ifviewport-ifmuted",
- "enabled-forvideo-ifviewport-playmuted",
- "enabled-foraudio",
- "enabled-forvideo-ifmobile",
- "enabled-foraudio-ifviewport",
-];
-var elementTypes = ["video", "audio"];
+var experimentTypes = []; // set in start().
+var elementTypes = []; // set in start().
var autoplayTypes = ["none", "attr", "play()"];
var mutedTypes = ["no", "yes"];
var visTypes = ["onscreen", "scroll", "offscreen", "obscured"];
// mobileTypes must always start with no, since we cannot un-optimize the page.
var mobileTypes = ["no", "yes"];
+var autoplaySettings = ["enabled", "disabled"];
function runNextConfig()
{
@@ -266,11 +188,14 @@ function runNextConfig()
exp = Math.floor(exp / mutedTypes.length);
spec.visType = visTypes[exp % visTypes.length];
exp = Math.floor(exp / visTypes.length);
+ spec.settingValue = autoplaySettings[exp % autoplaySettings.length];
+ exp = Math.floor(exp / autoplaySettings.length);
// Mobile must always change last, so that all the "no" cases precede
// all the "yes" cases, since we can't switch the doc back to "not
// optimized for mobile".
spec.mobileType = mobileTypes[exp % mobileTypes.length];
exp = Math.floor(exp / mobileTypes.length);
+
spec.experimentNumber = configNumber;
// Return null if configNumber was larger than the highest experiment.
@@ -327,6 +252,9 @@ function runNextConfig()
|| spec.autoplayType != "attr" || spec.elementType != "video")
&& spec.experimentType.includes("-ifpagevisible"))
skip = true;
+ else if (spec.settingValue == "disabled"
+ && ((spec.visType != "onscreen") || (spec.autoplayType != "play()")))
+ skip = true;
if (skip)
queueNextExperiment();
@@ -334,8 +262,10 @@ function runNextConfig()
runOneConfig(spec);
}
-window.internals.settings.setMediaPlaybackRequiresUserGesture(true);
-runNextConfig();
+function start(mediaType, experiments) {
+ elementTypes = [ mediaType ];
+ experimentTypes = experiments;
-</script>
-</html>
+ window.internals.settings.setMediaPlaybackRequiresUserGesture(true);
+ runNextConfig();
+}

Powered by Google App Engine
This is Rietveld 408576698