Test that a user gesture is preserved across XHR and setTimeout.


Run!

** gesture -> XHR -> timeout -> XHR -> window.open: should fail because XHR only propagates user gesture for media
sending XHR, delay = 100
EVENT(load): readyState = 4
setting timeout, delay = 100
sending XHR, delay = 100
EVENT(load): readyState = 4
EXPECTED (window.open("about:blank") == 'null') OK

** gesture -> timeout -> XHR -> timeout -> window.open: should succeed
setting timeout, delay = 100
sending XHR, delay = 100
EVENT(load): readyState = 4
setting timeout, delay = 100
EXPECTED (window.open("about:blank") != 'null') OK

** gesture -> timeout -> XHR -> timeout -> video playback: should succeed
EVENT(canplaythrough)
setting timeout, delay = 100
sending XHR, delay = 100
EVENT(load): readyState = 4
setting timeout, delay = 100
RUN(shouldResolve(mediaElement.play()).then(testComplete, testComplete))
Promise resolved OK

** gesture -> XHR -> timeout -> XHR -> video playback: should succeed
EVENT(canplaythrough)
sending XHR, delay = 100
EVENT(load): readyState = 4
setting timeout, delay = 100
sending XHR, delay = 100
EVENT(load): readyState = 4
RUN(shouldResolve(mediaElement.play()).then(testComplete, testComplete))
Promise resolved OK

** NO gesture -> XHR -> timeout -> video playback: should fail
EVENT(canplaythrough)
sending XHR, delay = 100
EVENT(load): readyState = 4
setting timeout, delay = 100
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** gesture -> "long" XHR -> video playback: should fail
EVENT(canplaythrough)
sending XHR, delay = 300
EVENT(load): readyState = 4
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** gesture -> fetch -> window.open: should fail because Fetch only propagates user gesture for media
fetching, delay = 100
FETCH(resolved): status = 200
EXPECTED (window.open("about:blank") == 'null') OK

** gesture -> fetch -> video playback: should succeed
EVENT(canplaythrough)
fetching, delay = 100
FETCH(resolved): status = 200
RUN(shouldResolve(mediaElement.play()).then(testComplete, testComplete))
Promise resolved OK

** gesture -> "long" Fetch -> video playback: should fail
EVENT(canplaythrough)
fetching, delay = 300
FETCH(resolved): status = 200
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** no gesture -> fetch -> video playback: should fail
EVENT(canplaythrough)
fetching, delay = 100
FETCH(resolved): status = 200
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** gesture -> fetch -> blob -> window.open: should fail because Fetch only propagates user gesture for media
fetching blob, delay = 100
FETCH(resolved): status = 200
FETCH(response resolved)
EXPECTED (window.open("about:blank") == 'null') OK

** gesture -> fetch -> blob -> video playback: should succeed
EVENT(canplaythrough)
fetching blob, delay = 100
FETCH(resolved): status = 200
FETCH(response resolved)
RUN(shouldResolve(mediaElement.play()).then(testComplete, testComplete))
Promise resolved OK

** gesture -> fetch -> "long" blob -> video playback: should fail
EVENT(canplaythrough)
fetching blob, delay = 300
FETCH(resolved): status = 200
FETCH(response resolved)
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** no gesture -> fetch -> blob -> video playback: should fail
EVENT(canplaythrough)
fetching blob, delay = 100
FETCH(resolved): status = 200
FETCH(response resolved)
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** no gesture -> promise -> video playback: should fail
EVENT(canplaythrough)
promise
PROMISE(resolved)
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** gesture -> promise -> video playback: should fail because promise only propagates user gesture propagated through Fetch
EVENT(canplaythrough)
promise
PROMISE(resolved)
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

** gesture -> fetch -> promise -> video playback: should succeed
EVENT(canplaythrough)
fetch then promise
FETCH(resolved): status = 200
PROMISE(resolved)
RUN(shouldResolve(mediaElement.play()).then(testComplete, testComplete))
Promise resolved OK

** gesture -> fetch -> crypto -> video playback: should fail since the user gesture will not be propagated through other API even though it returns promises
EVENT(canplaythrough)
fetch then crypto
FETCH(resolved): status = 200
CRYPTO(key generated)
RUN(shouldReject(mediaElement.play()).then(testComplete, testComplete))
Promise rejected correctly OK

END OF TEST

