| <!-- 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> |