blob: f14450613fbe1cfa0a970584639d69890800cdc8 [file] [edit]
<!-- webkit-test-runner [ MediaSessionExtendedActionsEnabled=true ] -->
<!DOCTYPE html>
<html>
<head>
<title>default-actionHandlers</title>
<script src="../video-test.js"></script>
<script src="../media-file.js"></script>
<script>
const mediaSessionActions = [ "play", "pause", "seekbackward", "seekforward", "previoustrack", "nexttrack", "skipad", "stop", "seekto", "previousslide", "nextslide" ];
async function runTest() {
if (!window.internals) {
failTest('This test requires Internals');
return;
}
findMediaElement();
run('video.src = findMediaFile("video", "../content/test")');
await waitFor(video, 'loadeddata');
consoleWrite('Test that action handlers properly register with correct PlatformMediaSession RemoteControlCommandType');
mediaSessionActions.forEach(value => {
consoleWrite(`ACTION: ${value}`);
navigator.mediaSession.setActionHandler(value, actionDetails => { });
internals.platformSupportedCommands().forEach(value => consoleWrite(`Command: ${value}`));
navigator.mediaSession.setActionHandler(value, null);
});
consoleWrite('Test that removing one of a pair sharing a platform command keeps the command, and removing both clears it');
consoleWrite('Register nexttrack and nextslide, then remove nexttrack');
navigator.mediaSession.setActionHandler('nexttrack', actionDetails => { });
navigator.mediaSession.setActionHandler('nextslide', actionDetails => { });
navigator.mediaSession.setActionHandler('nexttrack', null);
testExpected('internals.platformSupportedCommands().includes("NextTrackCommand")', true);
consoleWrite('Remove nextslide');
navigator.mediaSession.setActionHandler('nextslide', null);
testExpected('internals.platformSupportedCommands().includes("NextTrackCommand")', false);
consoleWrite('Register nexttrack and nextslide, then remove nextslide');
navigator.mediaSession.setActionHandler('nexttrack', actionDetails => { });
navigator.mediaSession.setActionHandler('nextslide', actionDetails => { });
navigator.mediaSession.setActionHandler('nextslide', null);
testExpected('internals.platformSupportedCommands().includes("NextTrackCommand")', true);
consoleWrite('Remove nexttrack');
navigator.mediaSession.setActionHandler('nexttrack', null);
testExpected('internals.platformSupportedCommands().includes("NextTrackCommand")', false);
consoleWrite('Register previoustrack and previousslide, then remove previoustrack');
navigator.mediaSession.setActionHandler('previoustrack', actionDetails => { });
navigator.mediaSession.setActionHandler('previousslide', actionDetails => { });
navigator.mediaSession.setActionHandler('previoustrack', null);
testExpected('internals.platformSupportedCommands().includes("PreviousTrackCommand")', true);
consoleWrite('Remove previousslide');
navigator.mediaSession.setActionHandler('previousslide', null);
testExpected('internals.platformSupportedCommands().includes("PreviousTrackCommand")', false);
consoleWrite('Register previoustrack and previousslide, then remove previousslide');
navigator.mediaSession.setActionHandler('previoustrack', actionDetails => { });
navigator.mediaSession.setActionHandler('previousslide', actionDetails => { });
navigator.mediaSession.setActionHandler('previousslide', null);
testExpected('internals.platformSupportedCommands().includes("PreviousTrackCommand")', true);
consoleWrite('Remove previoustrack');
navigator.mediaSession.setActionHandler('previoustrack', null);
testExpected('internals.platformSupportedCommands().includes("PreviousTrackCommand")', false);
consoleWrite('Iterate over all possible actions');
mediaSessionActions.forEach(value => {
navigator.mediaSession.setActionHandler(value, actionDetails => { });
});
internals.platformSupportedCommands().forEach(value => consoleWrite(`Command: ${value}`));
consoleWrite('Iterate over possible actions after video element src is cleared');
run('video.src = ""');
await waitFor(video, "loadstart");
testExpected('internals.platformSupportedCommands().length', 0);
internals.platformSupportedCommands().forEach(value => consoleWrite(`Command: ${value}`));
endTest();
}
</script>
</head>
<body onload="runTest()">
<video controls preload='auto'></video>
</body>
</html>