<!DOCTYPE html>
<title>MediaSession Mojo Test</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 inputStates = ["none", "paused", "playing", "invalid", "none"];
var expectations;
var nextExpectation = 0;

// Delay the initialization since the initialization of MediaSessionPlaybackState is delayed.
function getExpectations() {
  if (!expectations) {
    expectations = [
      MediaSessionPlaybackState.NONE,
      MediaSessionPlaybackState.PAUSED,
      MediaSessionPlaybackState.PLAYING,
      MediaSessionPlaybackState.NONE,
    ];
  }
  return expectations;
}

async_test(function(t) {
  let m = mediaSessionServiceMock;
  m.setPlaybackStateCallback(t.step_func(function(state) {
    assert_equals(state, getExpectations()[nextExpectation++]);
    if (nextExpectation == getExpectations().length)
      t.done();
  }));
  for (let state of inputStates)
    window.navigator.mediaSession.playbackState = state;
}, "test that MediaSession.playbackState is correctly propagated");

</script>
