forked from mirrors/gecko-dev
Instead of just adding one test, integrate the event order test to all current browser test in order to ensure the event order won't be broke in any situations. Differential Revision: https://phabricator.services.mozilla.com/D95360
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
const PAGE_NON_AUTOPLAY_MEDIA =
|
|
"https://example.com/browser/dom/media/mediacontrol/tests/browser/file_non_autoplay.html";
|
|
|
|
const testVideoId = "video";
|
|
|
|
add_task(async function setupTestingPref() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["media.mediacontrol.testingevents.enabled", true]],
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Seeking a captured audio media before it starts, and it should still be able
|
|
* to be controlled via media key after it starts playing.
|
|
*/
|
|
add_task(async function testSeekAudibleCapturedMedia() {
|
|
info(`open new non autoplay media page`);
|
|
const tab = await createLoadedTabWrapper(PAGE_NON_AUTOPLAY_MEDIA);
|
|
|
|
info(`perform seek on the captured media before it starts`);
|
|
await captureAudio(tab, testVideoId);
|
|
await seekAudio(tab, testVideoId);
|
|
|
|
info(`start captured media`);
|
|
await playMedia(tab, testVideoId);
|
|
|
|
info(`pressing 'pause' key, captured media should be paused`);
|
|
await generateMediaControlKeyEvent("pause");
|
|
await checkOrWaitUntilMediaStoppedPlaying(tab, testVideoId);
|
|
|
|
info(`remove tab`);
|
|
await tab.close();
|
|
});
|
|
|
|
/**
|
|
* The following are helper functions.
|
|
*/
|
|
function captureAudio(tab, elementId) {
|
|
return SpecialPowers.spawn(tab.linkedBrowser, [elementId], Id => {
|
|
const video = content.document.getElementById(Id);
|
|
if (!video) {
|
|
ok(false, `can't get the media element!`);
|
|
}
|
|
const context = new content.AudioContext();
|
|
// Capture audio from the media element to a MediaElementAudioSourceNode.
|
|
context.createMediaElementSource(video);
|
|
});
|
|
}
|
|
|
|
function seekAudio(tab, elementId) {
|
|
return SpecialPowers.spawn(tab.linkedBrowser, [elementId], async Id => {
|
|
const video = content.document.getElementById(Id);
|
|
if (!video) {
|
|
ok(false, `can't get the media element!`);
|
|
}
|
|
video.currentTime = 0.0;
|
|
await new Promise(r => (video.onseeked = r));
|
|
});
|
|
}
|