| Index: LayoutTests/http/tests/media/mixed-range-response.html
|
| diff --git a/LayoutTests/http/tests/media/mixed-range-response.html b/LayoutTests/http/tests/media/mixed-range-response.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e4fec3688df130dab3a18988851f36688422472c
|
| --- /dev/null
|
| +++ b/LayoutTests/http/tests/media/mixed-range-response.html
|
| @@ -0,0 +1,73 @@
|
| +<title>Mixed range responses must be handled as an error.</title>
|
| +<script src="../resources/testharness.js"></script>
|
| +<script src="../resources/testharnessreport.js"></script>
|
| +<script src="../resources/get-host-info.js"></script>
|
| +<script src="../../media-resources/media-file.js"></script>
|
| +<body>
|
| +<script>
|
| +// This file tests the following behavior:
|
| +// 1. The audio element sends the first request.
|
| +// 2. mixed-range-response.php returns the first 3 bytes ("Ogg").
|
| +// 3. The element sends the second request with "Range: bytes=3-" header.
|
| +// 4. mixed-range-response.php returns 206 response.
|
| +// 5. The element sends the third request to load-video.php.
|
| +// 6. load-video.php returns the audio file from the fourth byte.
|
| +//
|
| +// If the origin of 2. (mixed-range-response.php) and 6. (load-video.php) are
|
| +// different, an error should occur.
|
| +
|
| +function create_failure_audio_test(url) {
|
| + return new Promise(function(resolve, reject) {
|
| + var audio = document.createElement('audio');
|
| + audio.oncanplay = function() {
|
| + reject('canplay event should not be fired. url: ' + url);
|
| + };
|
| + audio.onerror = resolve;
|
| + audio.src = url;
|
| + document.body.appendChild(audio);
|
| + });
|
| +}
|
| +
|
| +function create_success_audio_test(url) {
|
| + return new Promise(function(resolve, reject) {
|
| + var audio = document.createElement('audio');
|
| + audio.oncanplay = resolve;
|
| + audio.onerror = function(e) {
|
| + reject('error event should not be fired. url: ' + url);
|
| + };
|
| + audio.src = url;
|
| + document.body.appendChild(audio);
|
| + });
|
| +}
|
| +
|
| +var HOST_INFO = get_host_info();
|
| +var MIX_RESPONSE_PHP_PATH = '/media/resources/mixed-range-response.php';
|
| +var AUDIO_PATH = '/media/resources/load-video.php?' +
|
| + 'name=../../../../media/content/silence.oga&type=audio/ogg';
|
| +
|
| +promise_test(function(t) {
|
| + return create_success_audio_test(
|
| + HOST_INFO['HTTP_ORIGIN'] + MIX_RESPONSE_PHP_PATH + '?location=' +
|
| + encodeURIComponent(HOST_INFO['HTTP_ORIGIN'] + AUDIO_PATH));
|
| + }, 'Mixing same-origin responses must succeed.');
|
| +
|
| +promise_test(function(t) {
|
| + return create_failure_audio_test(
|
| + HOST_INFO['HTTP_ORIGIN'] + MIX_RESPONSE_PHP_PATH + '?location=' +
|
| + encodeURIComponent(HOST_INFO['HTTP_REMOTE_ORIGIN'] + AUDIO_PATH));
|
| + }, 'Mixing same-origin response and remote-origin response must fail.');
|
| +
|
| +promise_test(function(t) {
|
| + return create_failure_audio_test(
|
| + HOST_INFO['HTTP_REMOTE_ORIGIN'] + MIX_RESPONSE_PHP_PATH + '?location=' +
|
| + encodeURIComponent(HOST_INFO['HTTP_ORIGIN'] + AUDIO_PATH));
|
| + }, 'Mixing remote-origin response and same-origin response must fail.');
|
| +
|
| +promise_test(function(t) {
|
| + return create_success_audio_test(
|
| + HOST_INFO['HTTP_REMOTE_ORIGIN'] + MIX_RESPONSE_PHP_PATH + '?location=' +
|
| + encodeURIComponent(HOST_INFO['HTTP_REMOTE_ORIGIN'] + AUDIO_PATH));
|
| + }, 'Mixing same remote-origin responses must succeed.');
|
| +
|
| +</script>
|
| +</body>
|
|
|