| Index: third_party/WebKit/LayoutTests/media/controls/controls-video-keynav.html | 
| diff --git a/third_party/WebKit/LayoutTests/media/controls/controls-video-keynav.html b/third_party/WebKit/LayoutTests/media/controls/controls-video-keynav.html | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..4c69aef15617de11a7a3f9af24e39a6da7f722b9 | 
| --- /dev/null | 
| +++ b/third_party/WebKit/LayoutTests/media/controls/controls-video-keynav.html | 
| @@ -0,0 +1,67 @@ | 
| +<DOCTYPE html> | 
| +<title>Test media controls video keyboard navigation</title> | 
| +<script src="../../resources/testharness.js"></script> | 
| +<script src="../../resources/testharnessreport.js"></script> | 
| +<script src="../media-file.js"></script> | 
| +<script src="../media-controls.js"></script> | 
| +<video controls></video> | 
| +<script> | 
| +test(_ => { | 
| +  assert_true('eventSender' in window); | 
| +}, 'eventSender required'); | 
| + | 
| +async_test(function(t) { | 
| +    var video = document.querySelector("video"); | 
| +    video.src = findMediaFile("video", "../content/test"); | 
| +    assert_equals(video.volume, 1); | 
| +    assert_equals(video.currentTime, 0); | 
| + | 
| +    video.oncanplaythrough = t.step_func_done(function() { | 
| +      // Focus the video. | 
| +      video.focus(); | 
| + | 
| +      // 'Enter' plays the video. | 
| +      eventSender.keyDown("Enter"); | 
| +      assert_false(video.paused); | 
| + | 
| +      // 'Down' reduces volume. | 
| +      eventSender.keyDown("ArrowDown"); | 
| +      assert_less_than(video.volume, 1); | 
| + | 
| +      // 'Up' increases volume. | 
| +      eventSender.keyDown("ArrowUp"); | 
| +      assert_equals(video.volume, 1); | 
| + | 
| +      // 'Enter' again pauses the video. | 
| +      eventSender.keyDown("Enter"); | 
| +      assert_true(video.paused); | 
| + | 
| +      // 'Space' also pauses/plays the video. | 
| +      eventSender.keyDown(" "); | 
| +      assert_false(video.paused); | 
| + | 
| +      eventSender.keyDown(" "); | 
| +      assert_true(video.paused); | 
| + | 
| +      var cur = video.currentTime; | 
| + | 
| +      // 'Right' scrubs the timeline forward. | 
| +      // Used to move the timeline off the first frame which is neccessary to | 
| +      // test 'Home', otherwise 'Home' is a no-op. | 
| +      eventSender.keyDown("ArrowRight"); | 
| +      assert_greater_than(video.currentTime, cur); | 
| + | 
| +      // 'Home' sets the timeline to 0. | 
| +      eventSender.keyDown("Home"); | 
| +      assert_equals(video.currentTime, 0); | 
| + | 
| +      // 'End' sets the timeline to end. | 
| +      eventSender.keyDown("End"); | 
| +      assert_equals(video.currentTime, video.duration); | 
| + | 
| +      // 'Left' scrubs the timeline back. | 
| +      eventSender.keyDown("ArrowLeft"); | 
| +      assert_less_than(video.currentTime, video.duration); | 
| +    }); | 
| +}); | 
| +</script> | 
|  |