| <!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"]; |
| |
| 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}); |
| |
| endTest(); |
| }, {once: true}); |
| </script> |
| </head> |
| <body> |
| |
| </body> |
| </html> |