Index: third_party/WebKit/LayoutTests/media/media-play-promise.html |
diff --git a/third_party/WebKit/LayoutTests/media/media-play-promise.html b/third_party/WebKit/LayoutTests/media/media-play-promise.html |
index 2c18fbb70f37deaf5133d8b68c619af8e7f8004d..d16ae9ff6ff4290742c83c36d6b91352e4260a70 100644 |
--- a/third_party/WebKit/LayoutTests/media/media-play-promise.html |
+++ b/third_party/WebKit/LayoutTests/media/media-play-promise.html |
@@ -1,7 +1,8 @@ |
<html> |
<head> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
<script src=media-file.js></script> |
-<script src=video-test.js></script> |
<script> |
// This is testing the behavior of play() with regards to the returned |
@@ -18,29 +19,41 @@ |
// Each test should start by prting its name in order to facilitate reading |
// the output. |
+ // This is initialized during the test setup. |
+ var gMediaElement = null; |
+ |
function runNextTestOrFinish() |
{ |
- currentTest++; |
- if (currentTest >= TESTS.length) { |
- endTest(); |
+ currentTestIndex++; |
+ if (currentTestIndex >= TESTS.length) { |
+ currentTest.done(); |
return; |
} |
- consoleWrite(""); |
- TESTS[currentTest](); |
+ var previousTest = currentTest; |
+ |
+ var test = TESTS[currentTestIndex]; |
+ currentTest = async_test(test.description); |
+ if (previousTest) |
+ previousTest.done(); |
+ test.run(currentTest); |
} |
function play() |
{ |
- return mediaElement.play().then(function() { |
- consoleWrite("Promise Resolved"); |
- }, function(e) { |
- consoleWrite("Promise Failed with " + e.name); |
- }).then(runNextTestOrFinish); |
+ // TODO: see if possible to do something like that in a clean fashion. |
+ |
+ // return mediaElement.play().then(function() { |
+ // consoleWrite("Promise Resolved"); |
+ // }, function(e) { |
+ // consoleWrite("Promise Failed with " + e.name); |
+ // }).then(runNextTestOrFinish); |
} |
function playWithUserGesture() |
{ |
+ // TODO: convert to work as a manual test. |
+ |
if (!window.eventSender) { |
failTest("No window.eventSender"); |
return; |
@@ -61,322 +74,363 @@ |
eventSender.mouseUp(); |
} |
- var currentTest = -1; |
+ var currentTestIndex = -1; |
+ var currentTest = null; |
var TESTS = [ |
- // Test that play() on an element that is currently loading returns a |
- // promise which resolves successfuly. |
- function playLoading() |
- { |
- consoleWrite("playLoading()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- play(); |
- }, |
- |
- // Test that play() on an element that is already loaded returns a |
- // promise which which resolves successfuly. |
- function playLoaded() |
- { |
- consoleWrite("playLoaded()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- |
- waitForEvent('canplaythrough', function() { |
- testExpected(HTMLMediaElement.HAVE_ENOUGH_DATA, mediaElement.readyState); |
- testExpected(true, mediaElement.paused) |
- |
- play(); |
- }); |
- |
- mediaElement.load(); |
- }, |
- |
- // Test that play() on an element when media playback requires a gesture |
- // returns a rejected promise if there is no user gesture. |
- function playRequiresUserGestureAndHasIt() |
- { |
- consoleWrite("playRequiresUserGestureAndHasIt()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(true); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- playWithUserGesture(); |
- }, |
- |
- // Test that play() on an element when media playback requires a gesture |
- // returns a resolved promise if there is a user gesture. |
- function playRequiresUserGestureAndDoesNotHaveIt() |
- { |
- consoleWrite("playRequiresUserGestureAndDoesNotHaveIt()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(true); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- play(); |
- }, |
- |
- // Test that play() on an element with an unsupported content will |
- // return a rejected promise. |
- function playNotSupportedContent() |
- { |
- consoleWrite("playNotSupportedContent()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/garbage"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- waitForEvent('error', function() { |
- testExpected("mediaElement.error", "[object MediaError]"); |
- testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
- }); |
- play(); |
- }, |
- |
- // Test that play() returns a resolved promise if called after the |
- // element suffered from a decode error. |
- function playDecodeError() |
- { |
- consoleWrite("playDecodeError()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- waitForEvent('error', function() { |
- testExpected("mediaElement.error", "[object MediaError]"); |
- testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_DECODE); |
- }); |
- |
- // The setMediaElementNetworkState() method requires metadata to be |
- // available. |
- waitForEvent('loadedmetadata', function() { |
- internals.setMediaElementNetworkState(mediaElement, 6 /* NetworkStateDecodeError */); |
- play(); |
- }); |
- }, |
- |
- // Test that play() returns a resolved promise if called after the |
- // element suffered from a network error. |
- function playNetworkError() |
- { |
- consoleWrite("playNetworkError()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- waitForEvent('error', function() { |
- testExpected("mediaElement.error", "[object MediaError]"); |
- testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_NETWORK); |
- }); |
- |
- // The setMediaElementNetworkState() method requires metadata to be |
- // available. |
- waitForEvent('loadedmetadata', function() { |
- internals.setMediaElementNetworkState(mediaElement, 5 /* NetworkStateNetworkError */); |
- play(); |
- }); |
- }, |
- |
- // Test that play() returns a rejected promise if the element is |
- // suferring from a not supported error. |
- function playWithErrorAlreadySet() |
- { |
- consoleWrite("playWithErrorAlreadySet()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/garbage"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- run("mediaElement.load()"); |
- |
- waitForEvent('playing'); |
- waitForEvent('error', function() { |
- testExpected("mediaElement.error", "[object MediaError]"); |
- testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
- play(); |
- }); |
- }, |
- |
- // Test that play() returns a resolved promise if the element had its |
- // source changed after suffering from an error. |
- function playSrcChangedAfterError() |
{ |
- consoleWrite("playSrcChangedAfterError()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/garbage"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- run("mediaElement.load()"); |
- |
- waitForEvent('error', function() { |
- testExpected("mediaElement.error", "[object MediaError]"); |
- testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
- |
- mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- waitForEvent('loadedmetadata', function() { |
- play(); |
- }); |
- }); |
+ description: "Test that play() on an element that is currently loading returns a promise which resolves successfuly.", |
+ run: |
+ function playLoading(t) |
+ { |
+ var mediaElement = document.createElement('audio'); |
+ mediaElement.src = findMediaFile("audio", "content/test"); |
+ |
+ // TODO: add test checking the order between playing and the promise. |
+ |
+ mediaElement.play().then(function() { |
+ }, function(e) { |
+ assert_unreached("Promise should be successful.") |
+ }).then(runNextTestOrFinish); |
+ } |
}, |
- // Test that play() returns a rejected promise if the element had an |
- // error and just changed its source. |
- function playRaceWithSrcChangeError() |
{ |
- consoleWrite("playRaceWithSrcChangeError()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/garbage"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- run("mediaElement.load()"); |
- |
- waitForEvent('error', function() { |
- testExpected("mediaElement.error", "[object MediaError]"); |
- testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
- |
- mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- // TODO(mlamouri): if we print the 'playing' event, it seems |
- // that it actually happens later. It's unclear why. |
- play(); |
- }); |
- }, |
- |
- // Test that play() returns a resolved promise when calling play() then |
- // pause() on an element that already has enough data to play. In other |
- // words, pause() doesn't cancel play() because it was resolved |
- // immediately. |
- function playFollowedByPauseWhenLoaded() |
- { |
- consoleWrite("playFollowedByPauseWhenLoaded()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- run("mediaElement.load()"); |
- |
- waitForEvent('canplaythrough', function() { |
- waitForEvent('playing'); |
- testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_ENOUGH_DATA); |
- play(); |
- testExpected("mediaElement.paused", false); |
- mediaElement.pause(); |
- testExpected("mediaElement.paused", true); |
- }); |
+ description: "Test that play() on an element that is already loaded returns a promise which which resolves successfuly.", |
+ run: |
+ function playLoaded(t) |
+ { |
+ var mediaElement = document.createElement('audio'); |
+ mediaElement.src = findMediaFile("audio", "content/test"); |
+ |
+ mediaElement.addEventListener('canplaythrough', t.step_func(function() { |
+ assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_ENOUGH_DATA); |
+ assert_true(mediaElement.paused); |
+ |
+ // TODO: refactor |
+ mediaElement.play().then(function() { |
+ }, function(e) { |
+ assert_unreached("Promise should be successful.") |
+ }).then(runNextTestOrFinish); |
+ })); |
+ |
+ mediaElement.load(); |
+ }, |
}, |
- // Test that play() returns a rejected promise when calling play() then |
- // pause() on an element that doesn't have enough data to play. In other |
- // words, pause() cancels play() before it can be resolved. |
- function playFollowedByPauseWhenLoading() |
- { |
- consoleWrite("playFollowedByPauseWhenLoaded()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- waitForEvent('playing'); |
- testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOTHING); |
- play(); |
- testExpected("mediaElement.paused", false); |
- mediaElement.pause(); |
- testExpected("mediaElement.paused", true); |
- }, |
- |
- // Test that load() rejects all the pending play() promises. |
- function loadRejectPendingPromises() |
- { |
- consoleWrite("loadRejectPendingPromises()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- |
- play(); // the promise will be left pending. |
- |
- waitForEvent('playing'); |
- run("mediaElement.load()"); |
- }, |
- |
- // Test that changing the src rejects the pending play() promises. |
- function newSrcRejectPendingPromises() |
- { |
- consoleWrite("newSrcRejectPendingPromises()"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- run("mediaElement = document.createElement('audio')"); |
- |
- play(); // the promise will be left pending. |
- |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- }, |
- |
- // Test ordering of events and promises. |
- // This is testing a bug in Blink, see https://crbug.com/587871 |
- function testEventAndPromiseOrdering() |
- { |
- consoleWrite("testEventAndPromiseOrdering"); |
- internals.settings.setMediaPlaybackRequiresUserGesture(false); |
- |
- var promiseResolver = null; |
- var p = new Promise(function(resolve, reject) { |
- promiseResolver = resolve; |
- }); |
- p.then(function() { |
- consoleWrite("Should be after the play() promise is resolved"); |
- }); |
- |
- run("mediaElement = document.createElement('audio')"); |
- var mediaFile = findMediaFile("audio", "content/test"); |
- run("mediaElement.src = '" + mediaFile + "'"); |
- |
- play(); |
- waitForEvent('playing', function() { |
- promiseResolver(); |
- }); |
- } |
+ // // Test that play() on an element that is already loaded returns a |
+ // // promise which which resolves successfuly. |
+ // function playLoaded() |
+ // { |
+ // consoleWrite("playLoaded()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // |
+ // waitForEvent('canplaythrough', function() { |
+ // testExpected(HTMLMediaElement.HAVE_ENOUGH_DATA, mediaElement.readyState); |
+ // testExpected(true, mediaElement.paused) |
+ // |
+ // play(); |
+ // }); |
+ // |
+ // mediaElement.load(); |
+ // }, |
+ // |
+ // // Test that play() on an element when media playback requires a gesture |
+ // // returns a rejected promise if there is no user gesture. |
+ // function playRequiresUserGestureAndHasIt() |
+ // { |
+ // consoleWrite("playRequiresUserGestureAndHasIt()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(true); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // playWithUserGesture(); |
+ // }, |
+ // |
+ // // Test that play() on an element when media playback requires a gesture |
+ // // returns a resolved promise if there is a user gesture. |
+ // function playRequiresUserGestureAndDoesNotHaveIt() |
+ // { |
+ // consoleWrite("playRequiresUserGestureAndDoesNotHaveIt()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(true); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // play(); |
+ // }, |
+ // |
+ // // Test that play() on an element with an unsupported content will |
+ // // return a rejected promise. |
+ // function playNotSupportedContent() |
+ // { |
+ // consoleWrite("playNotSupportedContent()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/garbage"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // waitForEvent('error', function() { |
+ // testExpected("mediaElement.error", "[object MediaError]"); |
+ // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
+ // }); |
+ // play(); |
+ // }, |
+ // |
+ // // Test that play() returns a resolved promise if called after the |
+ // // element suffered from a decode error. |
+ // function playDecodeError() |
+ // { |
+ // consoleWrite("playDecodeError()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // waitForEvent('error', function() { |
+ // testExpected("mediaElement.error", "[object MediaError]"); |
+ // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_DECODE); |
+ // }); |
+ // |
+ // // The setMediaElementNetworkState() method requires metadata to be |
+ // // available. |
+ // waitForEvent('loadedmetadata', function() { |
+ // internals.setMediaElementNetworkState(mediaElement, 6 /* NetworkStateDecodeError */); |
+ // play(); |
+ // }); |
+ // }, |
+ // |
+ // // Test that play() returns a resolved promise if called after the |
+ // // element suffered from a network error. |
+ // function playNetworkError() |
+ // { |
+ // consoleWrite("playNetworkError()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // waitForEvent('error', function() { |
+ // testExpected("mediaElement.error", "[object MediaError]"); |
+ // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_NETWORK); |
+ // }); |
+ // |
+ // // The setMediaElementNetworkState() method requires metadata to be |
+ // // available. |
+ // waitForEvent('loadedmetadata', function() { |
+ // internals.setMediaElementNetworkState(mediaElement, 5 /* NetworkStateNetworkError */); |
+ // play(); |
+ // }); |
+ // }, |
+ // |
+ // // Test that play() returns a rejected promise if the element is |
+ // // suferring from a not supported error. |
+ // function playWithErrorAlreadySet() |
+ // { |
+ // consoleWrite("playWithErrorAlreadySet()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/garbage"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // run("mediaElement.load()"); |
+ // |
+ // waitForEvent('playing'); |
+ // waitForEvent('error', function() { |
+ // testExpected("mediaElement.error", "[object MediaError]"); |
+ // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
+ // play(); |
+ // }); |
+ // }, |
+ // |
+ // // Test that play() returns a resolved promise if the element had its |
+ // // source changed after suffering from an error. |
+ // function playSrcChangedAfterError() |
+ // { |
+ // consoleWrite("playSrcChangedAfterError()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/garbage"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // run("mediaElement.load()"); |
+ // |
+ // waitForEvent('error', function() { |
+ // testExpected("mediaElement.error", "[object MediaError]"); |
+ // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
+ // |
+ // mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // waitForEvent('loadedmetadata', function() { |
+ // play(); |
+ // }); |
+ // }); |
+ // }, |
+ // |
+ // // Test that play() returns a rejected promise if the element had an |
+ // // error and just changed its source. |
+ // function playRaceWithSrcChangeError() |
+ // { |
+ // consoleWrite("playRaceWithSrcChangeError()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/garbage"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // run("mediaElement.load()"); |
+ // |
+ // waitForEvent('error', function() { |
+ // testExpected("mediaElement.error", "[object MediaError]"); |
+ // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); |
+ // |
+ // mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // // TODO(mlamouri): if we print the 'playing' event, it seems |
+ // // that it actually happens later. It's unclear why. |
+ // play(); |
+ // }); |
+ // }, |
+ // |
+ // // Test that play() returns a resolved promise when calling play() then |
+ // // pause() on an element that already has enough data to play. In other |
+ // // words, pause() doesn't cancel play() because it was resolved |
+ // // immediately. |
+ // function playFollowedByPauseWhenLoaded() |
+ // { |
+ // consoleWrite("playFollowedByPauseWhenLoaded()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // run("mediaElement.load()"); |
+ // |
+ // waitForEvent('canplaythrough', function() { |
+ // waitForEvent('playing'); |
+ // testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_ENOUGH_DATA); |
+ // play(); |
+ // testExpected("mediaElement.paused", false); |
+ // mediaElement.pause(); |
+ // testExpected("mediaElement.paused", true); |
+ // }); |
+ // }, |
+ // |
+ // // Test that play() returns a rejected promise when calling play() then |
+ // // pause() on an element that doesn't have enough data to play. In other |
+ // // words, pause() cancels play() before it can be resolved. |
+ // function playFollowedByPauseWhenLoading() |
+ // { |
+ // consoleWrite("playFollowedByPauseWhenLoaded()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // waitForEvent('playing'); |
+ // testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOTHING); |
+ // play(); |
+ // testExpected("mediaElement.paused", false); |
+ // mediaElement.pause(); |
+ // testExpected("mediaElement.paused", true); |
+ // }, |
+ // |
+ // // Test that load() rejects all the pending play() promises. |
+ // function loadRejectPendingPromises() |
+ // { |
+ // consoleWrite("loadRejectPendingPromises()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // |
+ // play(); // the promise will be left pending. |
+ // |
+ // waitForEvent('playing'); |
+ // run("mediaElement.load()"); |
+ // }, |
+ // |
+ // // Test that changing the src rejects the pending play() promises. |
+ // function newSrcRejectPendingPromises() |
+ // { |
+ // consoleWrite("newSrcRejectPendingPromises()"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // |
+ // play(); // the promise will be left pending. |
+ // |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // }, |
+ // |
+ // // Test ordering of events and promises. |
+ // // This is testing a bug in Blink, see https://crbug.com/587871 |
+ // function testEventAndPromiseOrdering() |
+ // { |
+ // consoleWrite("testEventAndPromiseOrdering"); |
+ // internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ // |
+ // var promiseResolver = null; |
+ // var p = new Promise(function(resolve, reject) { |
+ // promiseResolver = resolve; |
+ // }); |
+ // p.then(function() { |
+ // consoleWrite("Should be after the play() promise is resolved"); |
+ // }); |
+ // |
+ // run("mediaElement = document.createElement('audio')"); |
+ // var mediaFile = findMediaFile("audio", "content/test"); |
+ // run("mediaElement.src = '" + mediaFile + "'"); |
+ // |
+ // play(); |
+ // waitForEvent('playing', function() { |
+ // promiseResolver(); |
+ // }); |
+ // } |
]; |
+ function requestUserGesture() |
+ { |
+ // TODO: the goal here is to call load() on gMediaElement so it will be |
+ // registered as getting user gesture and play() and load() will work. |
+ } |
+ |
function start() |
{ |
- runNextTestOrFinish(); |
+ var gMediaElement = document.createElement('audio'); |
+ gMediaElement.src = findMediaFile("audio", "content/test"); |
+ |
+ gMediaElement.play().then(function() { |
+ }, function() { |
+ if ('internals' in window) |
+ internals.settings.setMediaPlaybackRequiresUserGesture(false); |
+ else |
+ return requestUserGesture(); |
+ }).then(runNextTestOrFinish); |
} |
</script> |