blob: 2abbfa2df3dc1eb18c5127fdd915c028058412ea [file] [log] [blame]
<!DOCTYPE html>
<title>Test that setting MediaSession event handler should notify the service</title>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script type="module">
import {MediaSessionServiceMock} from './resources/mediasessionservice-mock.js';
import {MediaSessionAction} from '/gen/services/media_session/public/mojom/media_session.mojom.m.js';
var expectations;
var nextExpectation = 0;
// Delay the initialization since the initialization of MediaSessionAction is delayed.
function getExpectations() {
if (!expectations) {
expectations = [
[ MediaSessionAction.kPlay, true ],
[ MediaSessionAction.kPause, true ],
[ MediaSessionAction.kPreviousTrack, true ],
[ MediaSessionAction.kNextTrack, true ],
[ MediaSessionAction.kSeekBackward, true ],
[ MediaSessionAction.kSeekForward, true ],
[ MediaSessionAction.kSeekTo, true ],
[ MediaSessionAction.kPlay, false ],
[ MediaSessionAction.kPause, false ],
[ MediaSessionAction.kPreviousTrack, false ],
[ MediaSessionAction.kNextTrack, false ],
[ MediaSessionAction.kSeekBackward, false ],
[ MediaSessionAction.kSeekForward, false ],
[ MediaSessionAction.kSeekTo, false ],
[ MediaSessionAction.kPlay, true ],
[ MediaSessionAction.kPause, true ],
[ MediaSessionAction.kPreviousTrack, true ],
[ MediaSessionAction.kNextTrack, true ],
[ MediaSessionAction.kSeekBackward, true ],
[ MediaSessionAction.kSeekForward, true ],
[ MediaSessionAction.kSeekTo, true ],
];
}
return expectations;
}
async_test(function(t) {
const m = new MediaSessionServiceMock();
m.setEnableDisableActionCallback(t.step_func(function(action, isEnabled) {
var expectedAction = getExpectations()[nextExpectation][0];
var expectedIsEnabled = getExpectations()[nextExpectation][1];
assert_equals(expectedAction, action);
assert_equals(expectedIsEnabled, isEnabled);
if (++nextExpectation >= getExpectations().length)
t.done();
}));
// Setting handlers should notify the service.
window.navigator.mediaSession.setActionHandler("play", _ => {});
window.navigator.mediaSession.setActionHandler("pause", _ => {});
window.navigator.mediaSession.setActionHandler("previoustrack", _ => {});
window.navigator.mediaSession.setActionHandler("nexttrack", _ => {});
window.navigator.mediaSession.setActionHandler("seekbackward", _ => {});
window.navigator.mediaSession.setActionHandler("seekforward", _ => {});
window.navigator.mediaSession.setActionHandler("seekto", _ => {});
// Setting handlers again should not notify the service.
window.navigator.mediaSession.setActionHandler("play", _ => {});
window.navigator.mediaSession.setActionHandler("pause", _ => {});
window.navigator.mediaSession.setActionHandler("previoustrack", _ => {});
window.navigator.mediaSession.setActionHandler("nexttrack", _ => {});
window.navigator.mediaSession.setActionHandler("seekbackward", _ => {});
window.navigator.mediaSession.setActionHandler("seekforward", _ => {});
window.navigator.mediaSession.setActionHandler("seekto", _ => {});
// Unsetting handlers should notify the service.
window.navigator.mediaSession.setActionHandler("play", null);
window.navigator.mediaSession.setActionHandler("pause", null);
window.navigator.mediaSession.setActionHandler("previoustrack", null);
window.navigator.mediaSession.setActionHandler("nexttrack", null);
window.navigator.mediaSession.setActionHandler("seekbackward", null);
window.navigator.mediaSession.setActionHandler("seekforward", null);
window.navigator.mediaSession.setActionHandler("seekto", null);
// Unsetting handlers should not notify the service.
window.navigator.mediaSession.setActionHandler("play", null);
window.navigator.mediaSession.setActionHandler("pause", null);
window.navigator.mediaSession.setActionHandler("previoustrack", null);
window.navigator.mediaSession.setActionHandler("nexttrack", null);
window.navigator.mediaSession.setActionHandler("seekbackward", null);
window.navigator.mediaSession.setActionHandler("seekforward", null);
window.navigator.mediaSession.setActionHandler("seekto", null);
// Setting handlers again should notify the service.
window.navigator.mediaSession.setActionHandler("play", _ => {});
window.navigator.mediaSession.setActionHandler("pause", _ => {});
window.navigator.mediaSession.setActionHandler("previoustrack", _ => {});
window.navigator.mediaSession.setActionHandler("nexttrack", _ => {});
window.navigator.mediaSession.setActionHandler("seekbackward", _ => {});
window.navigator.mediaSession.setActionHandler("seekforward", _ => {});
window.navigator.mediaSession.setActionHandler("seekto", _ => {});
}, "test that setting event handler notifies the mojo service");
</script>