<!DOCTYPE html><!-- webkit-test-runner [ ModernMediaControlsEnabled=false ] -->
<html>
<head>
<script src="media-controls.js"></script>
<script src="media-file.js"></script>
<script src="video-test.js"></script>
<script>
if (window.internals) {
    internals.settings.setVideoPlaybackRequiresUserGesture(true);
    internals.settings.setRequiresUserGestureToLoadVideo(true);
}

var didUserGesture = false;

function checkDidLoadMetadataAfterUserGesture()
{
    if (didUserGesture)
        passTest("Did load metadata after user gesture.");
    else
        failTest("Did load metadata without user gesture");
}

function performClickOnPlayButton()
{
    didUserGesture = true;
    clickPlayButton(video);
}

function start()
{
    findMediaElement();
    waitForEvent("loadedmetadata", checkDidLoadMetadataAfterUserGesture);
    video.src = findMediaFile("video", "content/test");

    window.setTimeout(performClickOnPlayButton, 0);
}
</script>
</head>
<body onload="start()">
    <video id="video" controls></video>
</body>
</html>
