blob: 79d8cc63bbb94137b2d588d77ab78c1de52c9a14 [file] [edit]
<!-- webkit-test-runner [ MediaSessionExtendedActionsEnabled=true ] -->
<!DOCTYPE html>
<html>
<head>
<title>mock-actionHandlers</title>
<script src="../video-test.js"></script>
<script>
var actionDetails;
function isEqualActionDetails(setA, setB) {
return setA.action === setB.action
&& setA.seekOffset === setB.seekOffset
&& setA.seekTime === setB.seekTime
&& setA.fastSeek === setB.fastSeek
}
function testExpectedActionDetails(testFuncString, expected)
{
let observed = eval(testFuncString);
let success = isEqualActionDetails(observed, expected);
reportExpected(success, testFuncString, '===', JSON.stringify(expected), JSON.stringify(observed));
}
window.addEventListener('load', async event => {
if (!window.internals) {
failTest('This test requires Internals');
return;
}
let actions = ["play", "pause", "seekbackward", "seekforward", "previoustrack", "nexttrack", "skipad", "stop", "seekto", "previousslide", "nextslide"];
for (action of actions) {
navigator.mediaSession.setActionHandler(action, actionDetails => {
consoleWrite(`ACTION: ${actionDetails.action}`);
window.actionDetails = actionDetails;
});
}
consoleWrite('Test that synthetic Media Session actions trigger page installed actionHandlers.')
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "play"})');
testExpectedActionDetails('actionDetails', {action: 'play'});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "pause"})');
testExpectedActionDetails('actionDetails', {action: 'pause'});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "seekbackward", seekOffset: -10})');
testExpectedActionDetails('actionDetails', {action: 'seekbackward', seekOffset: -10});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "seekbackward", seekOffset: -10, fastSeek: true})');
testExpectedActionDetails('actionDetails', {action: 'seekbackward', seekOffset: -10, fastSeek: true});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "seekforward", seekOffset: 10})');
testExpectedActionDetails('actionDetails', {action: 'seekforward', seekOffset: 10});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "seekforward", seekOffset: 10, fastSeek: true})');
testExpectedActionDetails('actionDetails', {action: 'seekforward', seekOffset: 10, fastSeek: true});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "previoustrack"})');
testExpectedActionDetails('actionDetails', {action: 'previoustrack'});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "nexttrack"})');
testExpectedActionDetails('actionDetails', {action: 'nexttrack'});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "skipad"})');
testExpectedActionDetails('actionDetails', {action: 'skipad'});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "stop"})');
testExpectedActionDetails('actionDetails', {action: 'stop'});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "seekto", seekTime: 1})');
testExpectedActionDetails('actionDetails', {action: 'seekto', seekTime: 1});
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "seekto", seekTime: 1, fastSeek: true})');
testExpectedActionDetails('actionDetails', {action: 'seekto', seekTime: 1, fastSeek: true});
consoleWrite('Test that nexttrack handler takes priority over nextslide when both are registered');
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "nexttrack"})');
testExpectedActionDetails('actionDetails', {action: 'nexttrack'});
consoleWrite('Test that nexttrack falls back to nextslide handler when only nextslide is registered');
navigator.mediaSession.setActionHandler('nexttrack', null);
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "nexttrack"})');
testExpectedActionDetails('actionDetails', {action: 'nextslide'});
consoleWrite('Test that previoustrack handler takes priority over previousslide when both are registered');
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "previoustrack"})');
testExpectedActionDetails('actionDetails', {action: 'previoustrack'});
consoleWrite('Test that previoustrack falls back to previousslide handler when only previousslide is registered');
navigator.mediaSession.setActionHandler('previoustrack', null);
run('internals.sendMediaSessionAction(navigator.mediaSession, {action: "previoustrack"})');
testExpectedActionDetails('actionDetails', {action: 'previousslide'});
endTest();
}, {once: true});
</script>
</head>
<body>
</body>
</html>