blob: 8d7c6ca32c4c108c39a8356f824feb1bb0e4efc9 [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 src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/third_party/WebKit/public/platform/modules/mediasession/media_session.mojom.js"></script>
<script src="resources/mediasessionservice-mock.js"></script>
<script src="resources/utils.js"></script>
<script>
var expectations;
var nextExpectation = 0;
// Delay the initialization since the initialization of MediaSessionAction is delayed.
function getExpectations() {
if (!expectations) {
expectations = [
[ MediaSessionAction.PLAY, true ],
[ MediaSessionAction.PAUSE, true ],
[ MediaSessionAction.PREVIOUS_TRACK, true ],
[ MediaSessionAction.NEXT_TRACK, true ],
[ MediaSessionAction.SEEK_BACKWARD, true ],
[ MediaSessionAction.SEEK_FORWARD, true ],
[ MediaSessionAction.PLAY, false ],
[ MediaSessionAction.PAUSE, false ],
[ MediaSessionAction.PREVIOUS_TRACK, false ],
[ MediaSessionAction.NEXT_TRACK, false ],
[ MediaSessionAction.SEEK_BACKWARD, false ],
[ MediaSessionAction.SEEK_FORWARD, false ],
[ MediaSessionAction.PLAY, true ],
[ MediaSessionAction.PAUSE, true ],
[ MediaSessionAction.PREVIOUS_TRACK, true ],
[ MediaSessionAction.NEXT_TRACK, true ],
[ MediaSessionAction.SEEK_BACKWARD, true ],
[ MediaSessionAction.SEEK_FORWARD, true ],
];
}
return expectations;
}
async_test(function(t) {
let m = 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", _ => {});
// 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", _ => {});
// 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);
// 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);
// 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", _ => {});
}, "test that setting event handler notifies the mojo service");
</script>