mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-10 13:18:45 +02:00
Depends on D14334 Differential Revision: https://phabricator.services.mozilla.com/D14335 --HG-- extra : moz-landing-system : lando
77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
/**
|
|
* This test is used to ensure that touch in point can activate document and
|
|
* allow autoplay, but touch scroll can't activate document.
|
|
*/
|
|
/* eslint-disable mozilla/no-arbitrary-setTimeout */
|
|
"use strict";
|
|
|
|
const PAGE = "https://example.com/browser/toolkit/content/tests/browser/file_nonAutoplayAudio.html";
|
|
|
|
function checkMediaPlayingState(isPlaying) {
|
|
let audio = content.document.getElementById("testAudio");
|
|
if (!audio) {
|
|
ok(false, "can't get the audio element!");
|
|
}
|
|
|
|
is(!audio.paused, isPlaying, "media playing state is correct.");
|
|
}
|
|
|
|
async function callMediaPlay(shouldStartPlaying) {
|
|
let audio = content.document.getElementById("testAudio");
|
|
if (!audio) {
|
|
ok(false, "can't get the audio element!");
|
|
}
|
|
|
|
info(`call media.play().`);
|
|
let playPromise = new Promise((resolve, reject) => {
|
|
audio.play().then(() => {
|
|
audio.isPlayStarted = true;
|
|
resolve();
|
|
});
|
|
setTimeout(() => {
|
|
if (audio.isPlayStarted) {
|
|
return;
|
|
}
|
|
reject();
|
|
}, 3000);
|
|
});
|
|
|
|
let isStartPlaying = await playPromise.then(() => true, () => false);
|
|
is(isStartPlaying, shouldStartPlaying,
|
|
"media is " + (isStartPlaying ? "" : "not ") + "playing.");
|
|
}
|
|
|
|
async function synthesizeTouchScroll(target, browser) {
|
|
const offset = 100;
|
|
await BrowserTestUtils.synthesizeTouch(target, 0, 0,
|
|
{ type: "touchstart" }, browser);
|
|
await BrowserTestUtils.synthesizeTouch(target, offset / 2, offset / 2,
|
|
{ type: "touchmove" }, browser);
|
|
await BrowserTestUtils.synthesizeTouch(target, offset, offset,
|
|
{ type: "touchend" }, browser);
|
|
}
|
|
|
|
add_task(async function setup_test_preference() {
|
|
return SpecialPowers.pushPrefEnv({"set": [
|
|
["media.autoplay.default", SpecialPowers.Ci.nsIAutoplay.BLOCKED],
|
|
["media.autoplay.enabled.user-gestures-needed", true],
|
|
]});
|
|
});
|
|
|
|
add_task(async function testTouchScroll() {
|
|
await BrowserTestUtils.withNewTab({
|
|
gBrowser,
|
|
url: PAGE,
|
|
}, async (browser) => {
|
|
info(`- media should not start playing -`);
|
|
await ContentTask.spawn(browser, false, checkMediaPlayingState);
|
|
|
|
info(`- simulate touch scroll which should not activate document -`);
|
|
await synthesizeTouchScroll("#testAudio", browser);
|
|
await ContentTask.spawn(browser, false, callMediaPlay);
|
|
|
|
info(`- simulate touch at a point which should activate document -`);
|
|
await BrowserTestUtils.synthesizeTouch("#testAudio", 0, 0, {}, browser);
|
|
await ContentTask.spawn(browser, true, callMediaPlay);
|
|
});
|
|
});
|