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