| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>restricted-audio-playback-with-document-gesture</title> |
| <script src=media-file.js></script> |
| <script src=video-test.js></script> |
| |
| <script> |
| function runTest() |
| { |
| next(); |
| } |
| |
| function next() { |
| if (!tests.length) { |
| endTest() |
| return; |
| } |
| |
| mediaElement = document.createElement('audio'); |
| if (window.internals) |
| internals.setMediaElementRestrictions(mediaElement, "RequireUserGestureForAudioRateChange"); |
| |
| var nextTest = tests.shift(); |
| consoleWrite(''); |
| run("mediaElement.src = findMediaFile('audio', 'content/test')"); |
| waitForEvent('canplaythrough', event => { runWithKeyDown(nextTest) }); |
| } |
| |
| var tests = [ |
| function() { |
| consoleWrite('Test > 1s in single step'); |
| consoleWrite('setTimeout 1, 1.1s'); |
| setTimeout(() => { |
| run("shouldReject(mediaElement.play()).then(next, next)"); |
| }, 1100); |
| }, |
| |
| |
| function() { |
| consoleWrite('Test > 1s in multiple steps'); |
| consoleWrite('setTimeout 1, 0.6s'); |
| setTimeout(() => { |
| consoleWrite('setTimeout 1, 0.6s'); |
| setTimeout(() => { |
| run("shouldReject(mediaElement.play()).then(next, next)"); |
| }, 600); |
| }, 600); |
| }, |
| |
| function() { |
| consoleWrite('Test < 1s total.') |
| consoleWrite('setTimeout 1, 0.1s'); |
| setTimeout(() => { |
| consoleWrite('setTimeout 2, 0.1s'); |
| setTimeout(() => { |
| consoleWrite('setTimeout 3, 0.1s'); |
| setTimeout(() => { |
| consoleWrite('setTimeout 4, 0.1s'); |
| setTimeout(() => { |
| consoleWrite('setTimeout 5, 0.1s'); |
| setTimeout(() => { |
| run("shouldResolve(mediaElement.play()).then(next, next)"); |
| }, 100); |
| }, 100); |
| }, 100); |
| }, 100); |
| }, 100); |
| }, |
| ]; |
| </script> |
| </head> |
| |
| <body onload="runTest()"> |
| <p>Test that, when RequireUserGestureForAudioRateChange is set along with MediaUserGestureInheritsForDocument, |
| nested setTimeout() calls of less than 1s will not block play() from succeeding.</p> |
| </body> |
| </html> |
| |