diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element')
227 files changed, 5861 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html new file mode 100644 index 0000000000..9e0f0bf900 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html @@ -0,0 +1,87 @@ +<!doctype html> +<title>track element cloneNode</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +test(function() { + var elm = document.createElement('track'); + assert_equals(elm.readyState, elm.NONE, 'elm.readyState after element creation'); + var clone = elm.cloneNode(true); + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after element creation'); + assert_not_equals(clone.track, elm.track, 'clone.track and elm.track'); +}, document.title+', not loaded'); + +async_test(function(t) { + var elm = document.createElement('track'); + var video = document.createElement('video'); + video.appendChild(elm); + elm.track.mode = 'showing'; + assert_equals(elm.readyState, elm.NONE, 'elm.readyState after appening to video setting mode'); + elm.src = 'resources/track.vtt?pipe=trickle(d1)'; + assert_equals(elm.readyState, elm.NONE, 'elm.readyState after setting src'); + t.step_timeout(function() { + assert_equals(elm.readyState, elm.LOADING, 'elm.readyState in setTimeout'); + var clone = elm.cloneNode(true); + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after element creation'); + video.appendChild(clone); + clone.track.mode = 'showing'; + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after appending to video and setting mode'); + assert_not_equals(clone.track, elm.track, 'clone.track and elm.track'); + t.done(); + }, 0); +}, document.title+', loading'); + +async_test(function(t) { + var elm = document.createElement('track'); + var video = document.createElement('video'); + video.appendChild(elm); + elm.track.mode = 'showing'; + elm.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\n00:00:00.000 --> 00:00:01.000\nfoo'); + assert_equals(elm.readyState, elm.NONE, 'elm.readyState after setting src'); + elm.onload = this.step_func(function() { + assert_equals(elm.readyState, elm.LOADED, 'elm.readyState'); + assert_equals(elm.track.cues.length, 1, 'elm.track.cues.length'); + assert_equals(elm.track.cues[0].startTime, 0, 'elm.track.cues[0].startTime'); + assert_equals(elm.track.cues[0].endTime, 1, 'elm.track.cues[0].endTime'); + assert_equals(elm.track.cues[0].text, 'foo', 'elm.track.cues[0].text'); + var clone = elm.cloneNode(true); + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after element creation'); + video.appendChild(clone); + clone.track.mode = 'showing'; + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after appending to video and setting mode'); + assert_not_equals(clone.track, elm.track, 'clone.track and elm.track'); + clone.onload = this.step_func(function(){ + assert_equals(clone.readyState, clone.LOADED, 'clone.readyState'); + assert_not_equals(clone.track, elm.track, 'clone.track and elm.track'); + assert_not_equals(clone.track.cues, elm.track.cues, 'clone.track.cues and elm.track.cues'); + assert_equals(clone.track.cues.length, 1, 'clone.track.cues.length'); + assert_not_equals(clone.track.cues[0], elm.track.cues[0], 'cues[0]'); + assert_equals(clone.track.cues[0].startTime, 0, 'clone.track.cues[0].startTime'); + assert_equals(clone.track.cues[0].endTime, 1, 'clone.track.cues[0].endTime'); + assert_equals(clone.track.cues[0].text, 'foo', 'clone.track.cues[0].text'); + this.done(); + }); + clone.onerror = this.step_func(function() { assert_unreached('clone got error'); }); + }); + elm.onerror = this.step_func(function() { assert_unreached('elm got error'); }); +}, document.title+', loaded'); + +async_test(function(t) { + var elm = document.createElement('track'); + var video = document.createElement('video'); + video.appendChild(elm); + elm.track.mode = 'showing'; + elm.onerror = t.step_func(function() { + assert_equals(elm.readyState, elm.ERROR, 'elm.readyState in onerror'); + var clone = elm.cloneNode(true); + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after element creation'); + video.appendChild(clone); + clone.track.mode = 'showing'; + assert_equals(clone.readyState, clone.NONE, 'clone.readyState after appending to video and setting mode'); + assert_not_equals(clone.track, elm.track, 'clone.track and elm.track'); + clone.onerror = t.step_func_done(); + }); + elm.src = 'javascript:"network error"'; +}, document.title+', failed to load'); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html new file mode 100644 index 0000000000..4236df29b9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: No CORS, same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html new file mode 100644 index 0000000000..4f86d011a3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: No CORS, same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html new file mode 100644 index 0000000000..e6a693400c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html new file mode 100644 index 0000000000..351b97d677 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html new file mode 100644 index 0000000000..4ccc6b66ac --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html new file mode 100644 index 0000000000..0444a83085 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html new file mode 100644 index 0000000000..dd62232755 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: No CORS, not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html new file mode 100644 index 0000000000..d75d6f4d6d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html new file mode 100644 index 0000000000..6d0fae6de7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html new file mode 100644 index 0000000000..110497b494 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html new file mode 100644 index 0000000000..d2a9ddb193 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html new file mode 100644 index 0000000000..a1d6a8b295 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: No CORS, same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html new file mode 100644 index 0000000000..2850a24e17 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: No CORS, same-origin, with headers, redirects to same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html new file mode 100644 index 0000000000..5cd5a85d43 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html new file mode 100644 index 0000000000..0ec5bc3291 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html new file mode 100644 index 0000000000..f639d043a3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html new file mode 100644 index 0000000000..45e1291c92 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, with headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html new file mode 100644 index 0000000000..e1153b6813 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'no'}]}; // redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html new file mode 100644 index 0000000000..ec2e9d8bb4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, with headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'no'}, {cors:'null', cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html new file mode 100644 index 0000000000..e8fb0c3d43 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, with headers, redirects to same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:origin, cookie:'no'}, {cors:'null', cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html new file mode 100644 index 0000000000..ac9bb35465 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'yes'}]}; // redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html new file mode 100644 index 0000000000..302340022d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, with headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'yes'}, {cors:'null', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html new file mode 100644 index 0000000000..5cbe8528e2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, with headers, redirects to same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:origin, cookie:'yes'}, {cors:'null', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html new file mode 100644 index 0000000000..c8386ffff3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: No CORS, same-origin, with headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}]}; // redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html new file mode 100644 index 0000000000..5fe4760e66 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html new file mode 100644 index 0000000000..6019d37b63 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, with headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html new file mode 100644 index 0000000000..7fa85456de --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers, redirects to not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html new file mode 100644 index 0000000000..f7abf3b1ed --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, with headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html new file mode 100644 index 0000000000..d709d0bc42 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, no headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'no'}]}; // redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html new file mode 100644 index 0000000000..62b1008a41 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, with headers, redirects to not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'no'}, {cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html new file mode 100644 index 0000000000..215cae2419 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, not same-origin, with headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:origin, cookie:'no'}, {cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html new file mode 100644 index 0000000000..bebb43ba8c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, no headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'yes'}]}; // redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html new file mode 100644 index 0000000000..a17fb7dfc1 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, with headers, redirects to not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:origin, cookie:'yes'}, {cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html new file mode 100644 index 0000000000..52411177ea --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, not same-origin, with headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:origin, cookie:'yes'}, {cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html new file mode 100644 index 0000000000..675b913a13 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to not same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}]}; // second redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html new file mode 100644 index 0000000000..a29b2bdead --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, with headers, redirects to not same-origin, with headers, redirects to same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}, {cors:'null', cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html new file mode 100644 index 0000000000..fcd4871ddb --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to not same-origin, with headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}, {cors:'null', cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html new file mode 100644 index 0000000000..3c819684c4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers, redirects to not same-origin, no headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}]}; // second redirect not followed +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html new file mode 100644 index 0000000000..f0f81953fc --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, with headers, redirects to not same-origin, with headers, redirects to same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}, {cors:'null', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html new file mode 100644 index 0000000000..c1ffa5f1ea --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers, redirects to not same-origin, with headers, redirects to same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}, {cors:'null', cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html new file mode 100644 index 0000000000..09072a9895 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to same-origin, no headers, redirects to not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html new file mode 100644 index 0000000000..0d4a9fefbd --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Anonymous, same-origin, no headers, redirects to same-origin, no headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}, {cors:origin, cookie:'no'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html new file mode 100644 index 0000000000..7151364f9c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers, redirects to same-origin, no headers, redirects to not same-origin, no headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'error', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html new file mode 100644 index 0000000000..e286462814 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>track CORS: Use Credentials, same-origin, no headers, redirects to same-origin, no headers, redirects to not same-origin, with headers</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script src=/common/utils.js></script> +<script src=support/common.js?pipe=sub></script> +<script> +var expected = {event:'load', requests:[{cors:'no', cookie:'yes'}, {cors:'no', cookie:'yes'}, {cors:origin, cookie:'yes'}]}; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js new file mode 100644 index 0000000000..e30c627149 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js @@ -0,0 +1,144 @@ +setup(function(){ + window.id = token(); + var p = document.createElement('p'); + p.innerHTML = 'Test id: <samp>'+id+'</samp>'; + document.body.appendChild(p); + window.actual = {event:null, requests:[]}; + window.errors = []; + window.origin = location.protocol+'//'+location.host; + window.escapedOrigin = encodeURIComponent(origin); + window.sameOriginURL = "http://{{domains[]}}:{{ports[http][0]}}" + location.pathname.replace(/\/[^\/]+$/, '/'); + window.otherOriginURL = "http://{{domains[www1]}}:{{ports[http][0]}}" + location.pathname.replace(/\/[^\/]+$/, '/'); +}, {timeout:10000, explicit_done:true}); + +onload = function() { + (async_test()).step(function() { + // fail early if track isn't supported + assert_true('HTMLTrackElement' in window, 'track not supported'); + window.corsMode = document.title.match(/^track CORS: (No CORS|Anonymous|Use Credentials)/)[1]; + var requests_tmp = document.title.substr(('track CORS: '+corsMode+', ').length).split(/, redirects to /g); + window.requests = []; + requests_tmp.forEach(function(r) { + var parts = r.split(', '); + requests.push({sameOrigin:parts[0] == 'same-origin', withHeaders:parts[1] == 'with headers'}); + }); + if (document.title.indexOf('not same-origin') > -1) { + window.hasCrossDomainCookie = true; + this.step(setCrossDomainCookie); + } else { + window.hasCrossDomainCookie = false; + this.step(loadTrack); + } + }); + done(); +}; + +function setCrossDomainCookie() { + var iframe = document.createElement('iframe'); + iframe.onload = this.step_func(loadTrack); + iframe.src = otherOriginURL + 'support/set-cookie.html#'+id; + document.body.appendChild(iframe); +} + +function loadTrack() { + var video = document.createElement('video'); + window.track = document.createElement('track'); + if (corsMode == 'Anonymous') + video.setAttribute('crossorigin', 'anonymous'); + else if (corsMode == 'Use Credentials') + video.setAttribute('crossorigin', 'use-credentials'); + // else No CORS, omit the crossorigin attribute + video.appendChild(track); + document.body.appendChild(video); + track.track.mode = 'showing'; + document.cookie = id+'=yes;path=/;max-age=10'; + var url = ''; + var r; + while (r = requests.pop()) { + url = (r.sameOrigin ? sameOriginURL : otherOriginURL) + + 'support/cors-tester.py?id=' + id + + (r.withHeaders ? '&origin=' + escapedOrigin : '') + + (url === '' ? '' : '&redirect=' + encodeURIComponent(url)); + } + track.src = url; + track.onerror = track.onload = this.step_func(function(e) { + actual.event = e.type; + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'support/cors-tester.py?read=true&id=' + id, true); + xhr.onload = this.step_func(function() { + if (xhr.status == 200) { + var lines = xhr.responseText.split('\n'); + lines.forEach(function(line) { + var chunks = line.split(' | '); + var current = {}; + actual.requests.push(current); + chunks.forEach(function(chunk) { + var nameval = chunk.split(' = '); + var name = nameval[0]; + var value = nameval[1]; + current[name] = value; + }); + }); + } else if (xhr.status == 404) { + //No stash was found + } else { + errors.push('got unexpected xhr status: '+xhr.status); + } + this.step(removeCookies); + }); + xhr.onerror = this.step_func(function() { + errors.push('got xhr error'); + this.step(removeCookies); + }); + xhr.send(); + }); +} + +function removeCookies() { + document.cookie = id+'=;path=/;max-age=0'; + var nextStep = checkData; + if (hasCrossDomainCookie) { + var iframe = document.createElement('iframe'); + iframe.onload = this.step_func(nextStep); + iframe.src = otherOriginURL + 'support/cors-tester.py?delete-cookie&id=' + id; + document.body.appendChild(iframe); + } else { + this.step(nextStep); + } +} + +function removeLog() { + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'support/cors-tester.py?cleanup&id='+id, true); + xhr.onload = this.step_func(function() { + assert_equals(xhr.responseText, 'OK', 'failed to clean up log: '+id); + this.step(checkData); + }); + xhr.onerror = this.step_func(function() { + assert_unreached('failed to clean up log: '+id); + }); + xhr.send(); +} + +function checkData() { + assert_equals(errors.length, 0, errors); + try { + if (actual.event == 'load' && expected.event == 'error') + assert_unreached('Security problem: got load event but expected error event'); + assert_object_equals(actual, expected); + } catch(ex) { + var style = document.createElement('style'); + style.textContent = '.json-diffs td { vertical-align:top } .json-diffs pre { margin:0 }'; + document.head.appendChild(style); + var table = document.createElement('table'); + table.border = ""; + table.className = 'json-diffs'; + table.innerHTML = '<tr><th>Actual<th>Expected<tr><td><pre></pre><td><pre></pre>'; + table.getElementsByTagName('pre')[0].textContent = JSON.stringify(actual, null, 2); + table.getElementsByTagName('pre')[1].textContent = JSON.stringify(expected, null, 2); + document.body.insertBefore(table, document.getElementById('log')); + throw ex; + } + assert_equals(track.track.cues.length, expected.event == 'load' ? 1 : 0, 'track.track.cues.length'); + this.done(); +} diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py new file mode 100644 index 0000000000..ad1cce1922 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py @@ -0,0 +1,50 @@ +from wptserve.handlers import HTTPException + +def main(request, response): + if request.method != u"GET": + raise HTTPException(400, message=u"Method was not GET") + + if not b"id" in request.GET: + raise HTTPException(400, message=u"No id") + + id = request.GET[b'id'] + if b"read" in request.GET: + data = request.server.stash.take(id) + if data is None: + response.set_error(404, u"Tried to read data not yet set") + return + return [(b"Content-Type", b"text/plain")], data + + elif b"cleanup" in request.GET: + request.server.stash.take(id) + return b"OK" + + elif b"delete-cookie" in request.GET: + response.delete_cookie(id) + return [(b"Content-Type", b"text/plain")], b"OK" + + if b"origin" in request.GET: + response.headers.set(b'Access-Control-Allow-Origin', request.GET[b'origin']) + response.headers.set(b'Access-Control-Allow-Credentials', b'true') + + cors = request.headers.get(b"origin", b"no") + + cookie = request.cookies.first(id, None) + cookie_value = cookie.value if cookie is not None else b"no" + + line = b'cors = ' + cors + b' | cookie = ' + cookie_value + + data = request.server.stash.take(id) + if data is not None: + line = data + b"\n" + line + + request.server.stash.put(id, line) + + if b"redirect" in request.GET: + response.status = 302 + response.headers.set(b'Location', request.GET[b'redirect']) + else: + return b"""WEBVTT + +00:00:00.000 --> 00:00:10.000 +Test""" diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html new file mode 100644 index 0000000000..00430e3f0e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html @@ -0,0 +1,6 @@ +<!doctype html> +<title>Remove cookie from location.hash</title> +<script> +if (location.hash) + document.cookie = decodeURIComponent(location.hash.substr(1))+'=yes;path=/;max-age=0'; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html new file mode 100644 index 0000000000..cc1c926386 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html @@ -0,0 +1,6 @@ +<!doctype html> +<title>Set cookie from location.hash</title> +<script> +if (location.hash) + document.cookie = decodeURIComponent(location.hash.substr(1))+'=yes;path=/;max-age=15'; +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/crashtests/track-element-src-aborted-load-onerror-crash.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/crashtests/track-element-src-aborted-load-onerror-crash.html new file mode 100644 index 0000000000..9db5ef0748 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/crashtests/track-element-src-aborted-load-onerror-crash.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>HTMLTrackElement 'src' attribute changed, load pending, 'error' handler mutates</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#start-the-track-processing-model"> +<link rel="help" href="https://crbug.com/1374341"> +<video></video> +<script> + const video = document.querySelector('video'); + video.style.visibility = 'collapse'; + video.setAttribute('crossorigin', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); + const track = document.createElement('track'); + track.src = 'x'; + track.track.mode = 'hidden'; + video.appendChild(track); + track.onerror = () => { + for (let i = 0; i < 10; ++i) + video.setAttribute('foo' + i, 'bar'); + }; + setTimeout(() => { + track.src = 'y'; + }, 0); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/no-cuechange-before-play.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/no-cuechange-before-play.html new file mode 100644 index 0000000000..cd53914ecd --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/no-cuechange-before-play.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>Ensure that the 'cuechange' event is not fired before video playback has begun.</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +promise_test(function(t) { + let video = document.createElement('video'); + video.src = getVideoURI('/media/movie_5'); + video.preload = 'auto'; + + // Create a track element. The 'cuechange' event should not be fired. + let track = document.createElement('track'); + track.oncuechange = t.unreached_func('The \`cuechange\` event should not be fired'); + + let videoWatcher = new EventWatcher(t, video, 'canplaythrough'); + let trackWatcher = new EventWatcher(t, track, ['cuechange', 'load']) + + track.src = 'resources/captions-fast.vtt'; + track.kind = 'captions'; + track.default = true; + track.track.mode = 'showing'; + video.appendChild(track); + + return Promise.all([videoWatcher.wait_for('canplaythrough'), trackWatcher.wait_for('load')]); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt new file mode 100644 index 0000000000..ff4c3fb5cd --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt @@ -0,0 +1,20 @@ +WEBVTT +Either one or both of positioning and alignment values are invalid. + +1 +00:00:00.000 --> 00:00:30.500 position:10% align: start +Bear is Coming!!!!! +Positioning on the left bottom, middle aligned, +because the alignment is mistyped. + +2 +00:00:31.000 --> 00:00:45.500 position:200% align:middle +I said Bear is coming!!!! +Positioning on the bottom middle, middle aligned, +because the positioning is off. + +3 +00:01:01.000 --> 00:02:00.500 position:-80% align:ends +I said Bear is coming now!!!! +Positioning on the bottom middle, middle aligned, +because both the alignment and positioning don't apply. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt new file mode 100644 index 0000000000..a6e6af2ef9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt @@ -0,0 +1,20 @@ +WEBVTT +Cues should position at different horizontal positions with different alignments. + +1 +00:00:00.000 --> 00:00:30.500 position:10% align:start +Bear is Coming!!!!! +Positioning on the left bottom, start aligned, and +first character rendering position is at 10% of width. + +2 +00:00:31.000 --> 00:00:45.500 position:20% align:middle +I said Bear is coming!!!! +Positioning on the bottom left, middle aligned, and +middle character rendering position of each line is at 20% of width. + +3 +00:01:01.000 --> 00:02:00.500 align:end position:80% +I said Bear is coming now!!!! +Positioning on the bottom right, end aligned, and +last character rendering position of each line is at 80% of width. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt new file mode 100644 index 0000000000..b196f13a20 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt @@ -0,0 +1,21 @@ +WEBVTT +One or more of line/text positioning and alignment values are invalid (settings are ignored). + +1 +00:00:00.000 --> 00:00:30.500 position: 0% align: start line: 0% +Bear is Coming!!!!! +None of the cue settings will be applied, just the default. + +2 +00:00:31.000 --> 00:00:01.500 position:0% align:end line:-30% +I said Bear is coming!!!! +The line position setting is ignored. +No text is visible though because it's off-screen at position +0 and the last character is at position 0%. + +3 +00:01:01.000 --> 00:01:30.000 line:-3 align:middler position:60% +I said Bear is coming now!!!! +Positioning on line 3 from the viewport bottom, middle aligned, +with middle character of cue at 60% width. +The alignment is ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt new file mode 100644 index 0000000000..dd3a6debb8 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt @@ -0,0 +1,28 @@ +WEBVTT +Cues with valid alignment, line and text position settings. + +1 +00:00:00.000 --> 00:00:15.000 position:10% align:start line:0% +Bear is Coming!!!!! +Positioning on the top of the viewport at 10% horizontally, +start aligned. + +00:00:15.500 --> 00:00:30.500 line:0 align:start +Bear is Coming!!!!! +This is line 0, middle aligned, first character at 50% width. + +2 +00:00:31.000 --> 00:00:45.500 position:80% line:80% +I said Bear is coming!!!! +Middle aligned, middle of cue's character is at 80% width and 80% height. + +00:00:46.000 --> 00:01:00.500 line:5 align:end position:30% +I said Bear is coming!!!! +This is line 6 from the top of the video viewport, +end aligned with last character at 30% of viewport width. + +3 +00:01:01.000 --> 00:01:30.000 line:-3 align:middle position:60% +I said Bear is coming now!!!! +Positioning on line 3 from the viewport bottom, middle aligned, +with middle character of cue at 60% width. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt new file mode 100644 index 0000000000..5beb376f45 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue alignment may only be start, middle, or end. These are all misspelled and so will default to middle. + +1 +00:00:00.000 --> 00:00:30.500 align:starta +Bear is Coming!!!!! +Erroneous alignment value -> middle. + +2 +00:00:31.000 --> 00:01:00.500 align:-start +I said Bear is coming!!!! +Erroneous alignment value --> middle. + +3 +00:01:01.000 --> 00:02:00.500 align: end +I said Bear is coming now!!!! +Erroneous alignment value with surplus whitespace --> middle. + +4 +00:02:01.000 --> 100:20:00.500 align:piugjk +I said Bear is coming now!!!! +Erroneous alignment value -> middle. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt new file mode 100644 index 0000000000..673b29ac85 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue alignment may be start, middle, or end (default is middle). + +1 +00:00:00.000 --> 00:00:30.500 align:start +الدب قادم!!!!! +بدء محاذاته. + +2 +00:00:31.000 --> 00:01:00.500 align:middle +قلت الدب قادم!! +محاذاة الوسط. + +3 +00:01:01.000 --> 00:02:00.500 align:end +قلت الدب قادم الآن!! +محاذاة الغاية. + +4 +00:02:01.000 --> 100:20:00.500 +قلت الدب قادم الآن!! +الافتراضية هي محاذاة الوسط.
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt new file mode 100644 index 0000000000..ad7792f772 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue alignment may be start, middle, or end (default is middle). + +1 +00:00:00.000 --> 00:00:30.500 align:start +Bear is Coming!!!!! +Start align. + +2 +00:00:31.000 --> 00:01:00.500 align:middle +I said Bear is coming!!!! +Middle align. + +3 +00:01:01.000 --> 00:02:00.500 align:end +I said Bear is coming now!!!! +End align. + +4 +00:02:01.000 --> 100:20:00.500 +I said Bear is coming now!!!! +Default is middle alignment.
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt new file mode 100644 index 0000000000..0c8de32bcb --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt @@ -0,0 +1,10 @@ +WEBVTT FILE +A BOM character at the start of a file should be ignored. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt new file mode 100644 index 0000000000..7fe5b1241a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt @@ -0,0 +1,13 @@ +WEBVTT + +1 +00:00:00.000 --> 00:00:00.300 +Lorem + +2 +00:00:00.300 --> 00:00:01.300 +ipsum + +3 +00:00:01.800 --> 00:00:02.800 +dolor diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt new file mode 100644 index 0000000000..44c74665c2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt @@ -0,0 +1,18 @@ +WEBVTT + +1 +00:00:01.000 --> 00:00:02.000 +Lorem ipsum dolor sit amet, + +2 +00:00:03.000 --> 00:00:04.000 +consectetuer adipiscing elit, + +3 +00:00:05.000 --> 00:00:06.000 +sed diam nonummy nibh euismod tincidunt + +4 +00:00:07.000 --> 00:00:08.000 +ut laoreet dolore magna aliquam erat volutpat. + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt new file mode 100644 index 0000000000..0730f8bc40 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt @@ -0,0 +1,18 @@ +WEBVTT + +1 +00:00:00.000 --> 00:00:01.000 +Lorem <b>ipsum</b> <u>dolor</u> <i.sit>sit</i> amet, + +2 +00:00:03.000 --> 00:00:04.000 +consectetuer adipiscing elit, + +3 +00:00:05.000 --> 00:00:06.000 +sed diam nonummy nibh euismod tincidunt + +4 +00:00:07.000 --> 00:00:08.000 +ut laoreet dolore magna aliquam erat volutpat. + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt new file mode 100644 index 0000000000..787c430868 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt @@ -0,0 +1,18 @@ +WEBVTT + +1 +00:00:00.000 --> 00:00:01.000 +Lorem + +2 +00:00:01.000 --> 00:00:02.000 +ipsum + +3 +00:00:02.000 --> 00:00:03.000 +dolor + +4 +00:00:03.000 --> 00:00:04.000 +sit + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt new file mode 100644 index 0000000000..650ea2c496 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid <c> class markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<c .black>Bear is Coming!!!!!</c> +The space signified an annotation start. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<c.red&large>I said Bear is coming!!!!</c> +Probably should only allow characters that CSS allows in class names. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <c.9red.upper+case>Bear is coming now</c>!!!! +Probably should only allow characters that CSS allows in class names. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt new file mode 100644 index 0000000000..ea3ef623f5 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cue text fragment with <c> class markup is mapped to HTML <span> element with CSS classes. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<c.black>Bear is Coming!!!!!</c> + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<c.green>I said Bear is coming!!!!</c> + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <c.red.uppercase>Bear is coming now</c>!!!! diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt new file mode 100644 index 0000000000..2b5db0c1da --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cue identifiers cannot contain the string "-->". + +-->random_id +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +another random identifier--> +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +identifier-->too +00:01:01.000 --> 00:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt new file mode 100644 index 0000000000..3902118620 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt @@ -0,0 +1,18 @@ +WEBVTT +Random text is accepted for cue identifiers. + +random_id +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +another random identifier +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +identifier--too +00:01:01.000 --> 00:02:00.500 +I said Bear is coming now!!!! + +identifier--too +00:02:01.000 --> 00:03:00.500 +Duplicate identifier
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt new file mode 100644 index 0000000000..111bae6344 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cue identifiers cannot contain "-->". Whole cue is ignored. + +--> +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +--> +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +--> +00:01:01.000 --> 00:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt new file mode 100644 index 0000000000..0d52a70ee4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt @@ -0,0 +1,11 @@ +WEBVTT +Cues don't have to have identifiers. + +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +00:01:01.000 --> 00:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt new file mode 100644 index 0000000000..88f56cceca --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt @@ -0,0 +1,6 @@ +WEBVTT + +00:00.000 --> 00:01.000 +Valid cue 1 +00:02.000 --> 00:03.000 +Valid cue 2 diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt new file mode 100644 index 0000000000..205955e3e4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt @@ -0,0 +1,6 @@ +WEBVTT +00:00.000 --> 00:01.000 +Valid cue 1 + +00:02.000 --> 00:03.000 +Valid cue 2 diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt new file mode 100644 index 0000000000..56defcc48b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt @@ -0,0 +1,9 @@ +WEBVTT + +00:00.000 --> 00:01.000 +Valid cue 1 + +NOTE about something +NOTE or something else - maybe an identifier +00:02.000 --> 00:03.000 +Valid cue 2 diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt new file mode 100644 index 0000000000..5e4a61a5e4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt @@ -0,0 +1,18 @@ +WEBVTT +Either size or alignment are invalid. + +1 +00:00:00.000 --> 00:00:30.500 size:100% align:@start +Bear is Coming!!!!! +Box for the cue is 100% of the video viewport width, alignment is ignored. + +2 +00:00:31.000 --> 00:01:00.500 size:-10% align:end +I said Bear is coming!!!! +Box for the cue is as big as the text, no line wrapping, +(except if viewport is too small) and end aligned. + +3 +00:01:01.000 --> 00:02:00.500 size:110% align:@end +I said Bear is coming now!!!! +Both cue size and alignment are ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt new file mode 100644 index 0000000000..6d36536539 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt @@ -0,0 +1,19 @@ +WEBVTT +Valid cue size with alignment settings. + +1 +00:00:00.000 --> 00:00:30.500 size:100% align:start +Bear is Coming!!!!! +Box for the cue is 100% of the video viewport width +and because of the start align, all text is left aligned on the video viewport. + +2 +00:00:31.000 --> 00:01:00.500 size:10% align:end +I said Bear is coming!!!! +Box for the cue is 10% of the video viewport width, which will mean that automatic line wrapping will happen +and the text is aligned to the end. + +3 +00:01:01.000 --> 00:02:00.500 size:0% align:middle +I said Bear is coming now!!!! +Cue text box size of 0 is acceptable, even if not visible. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt new file mode 100644 index 0000000000..700600d7a7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid cue sizes (all settings are ignored). + +1 +00:00:00.000 --> 00:00:30.500 size: 50% +Bear is Coming!!!!! +Cue size setting doesn't parse and is ignored. + +2 +00:00:31.000 --> 00:01:00.500 size:-10% +I said Bear is coming!!!! +Negative cue size setting is not acceptable and is ignored. + +3 +00:01:01.000 --> 00:02:00.500 size:4000% +I said Bear is coming now!!!! +Cue size beyond 100% is not acceptable and is ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt new file mode 100644 index 0000000000..017d59a18b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt @@ -0,0 +1,19 @@ +WEBVTT +Valid cue size values. + +1 +00:00:00.000 --> 00:00:30.500 size:100% +Bear is Coming!!!!! +Box for the cue is 100% of the video viewport width, +exemplified through background color, +even if the text needs less. + +2 +00:00:31.000 --> 00:01:00.500 size:10% +I said Bear is coming!!!! +Box for the cue is 10% of the video viewport width, which will mean that automatic line wrapping will happen. + +3 +00:01:01.000 --> 00:02:00.500 size:0% +I said Bear is coming now!!!! +Cue text box size of 0 is acceptable, even if not visible. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt new file mode 100644 index 0000000000..fd6d484f88 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cues that have overlapping time ranges. + +1 +00:00:01.000 --> 00:00:02.000 +Bear is Coming!!!!! + +2 +00:00:02.500 --> 00:00:03.500 +I said Bear is coming!!!! + +3 +00:00:04.000 --> 00:00:05.000 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt new file mode 100644 index 0000000000..9062c67ede --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt @@ -0,0 +1,11 @@ +WEBVTT +Cues must be separated by at least one blank line, otherwise treated like one big cue. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! +2 +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! +00:01:01.000 --> 100:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt new file mode 100644 index 0000000000..3f035d331f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt @@ -0,0 +1,14 @@ +WEBVTT +Cues that have overlapping time ranges. + +1 +00:00:01.000 --> 00:00:06.000 +Bear is Coming!!!!! + +2 +00:00:01.500 --> 00:00:05.000 +I said Bear is coming!!!! + +3 +00:00:02.000 --> 00:00:05.000 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt new file mode 100644 index 0000000000..125ed66785 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt @@ -0,0 +1,17 @@ +WEBVTT +Cues may be separated by one or more blank lines. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + + +2 +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + + + +3 +00:01:01.000 --> 100:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt new file mode 100644 index 0000000000..d890ca3f71 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt @@ -0,0 +1,19 @@ +WEBVTT + +COMMENT--> +this is a comment, that will parse as part of the header; +the STYLE and DEFAULTS below are parsed as invalid cues + +STYLE--> +::cue(.narration) { color: blue; } + +DEFAULTS --> +line:-1 align:middle size:50% + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt new file mode 100644 index 0000000000..c04390420f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt @@ -0,0 +1,5 @@ +WEBVTT + +00:00.000 --> 00:01.000 +00:02.000 --> 00:03.000 +00:04.000 --> 00:05.000 diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt new file mode 100644 index 0000000000..dbfde34b69 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt @@ -0,0 +1,11 @@ +WEBVTT +Empty cues should not be discarded. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt new file mode 100644 index 0000000000..f45fee4793 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt @@ -0,0 +1,15 @@ +WEBVTT +Invalid use of < and > characters. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +This cue has a less than < character. +It turns everything from there on into an annotation +for an empty tag and ends only at the next > or & character. + + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +This cue has a greater than > character. +Since it's not related to a < character, +it's just interpreted as text. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt new file mode 100644 index 0000000000..a8817954a6 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt @@ -0,0 +1,30 @@ +WEBVTT +Cue content with escape characters for &, <, >, LRM, RLM and non-breaking space. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +This cue has an ampersand & character. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +This cue has a less than < character. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +This cue has a greater than > character. + +4 +00:02:01.000 --> 00:02:30.500 align:start position:20% +This cue has a Left-to-Right Mark ‎. + +5 +00:02:31.000 --> 00:03:00.500 align:start position:20% +This cue has a Right-to-Left Mark ‏. + +6 +00:03:01.000 --> 00:03:30.500 align:start position:20% +This cue has a non-breaking space . + +7 +00:03:31.000 --> 00:04:00.500 +This & is parsed to the same as &. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt new file mode 100644 index 0000000000..c825ab32e2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt @@ -0,0 +1,9 @@ +WEBVTT + +00:00.000 --> 00:01.000 +First + +Stray Id or other non-cue content + +00:02.000 --> 00:03.000 +Second diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt new file mode 100644 index 0000000000..10a1624386 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt @@ -0,0 +1,10 @@ +WEBVTT FILE +Different encodings (iconv) should not be recognized as WebVTT a file. + +1 +00:00:00.000 --> 00:00:30.500 +$B7J5$H=CG(B + +2 +00:00:31.000 --> 00:20:00.500 +$BEENOITB-(B diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt new file mode 100644 index 0000000000..e6c18ce3bd --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt @@ -0,0 +1,5 @@ +WEBVTT + +1 +1234567:00:00.000 --> 1234567890:00:00.000 +A very long cue. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt new file mode 100644 index 0000000000..3d52175729 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt @@ -0,0 +1,30 @@ +WEBVTT +Invalid positioning values (all settings are ignored). + +1 +00:00:00.000 --> 00:00:15.000 line:-0% +Bear is Coming!!!!! +Negative percentages are not allowed. +Line position is ignored. + +2 +00:00:31.000 --> 00:00:45.500 line:+50% +I said Bear is coming!!!! +Non-numbers are not allowed. +Line position is ignored. + +00:00:46.000 --> 00:01:00.500 line:+5 +I said Bear is coming!!!! +Plus sign is not allowed. +Line position is ignored. + +3 +00:01:01.000 --> 00:01:30.000 line:10%0% +I said Bear is coming now!!!! +Doesn't parse into a percentage. +Line position is ignored. + +00:01:31.000 --> 00:02:00.500 line:-10l +I said Bear is coming now!!!! +Doesn't parse into a number. +Line position is ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt new file mode 100644 index 0000000000..82f7e2a523 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt @@ -0,0 +1,37 @@ +WEBVTT +Cues with valid vertical line positioning values. + +1 +00:00:00.000 --> 00:00:15.000 line:0% +Bear is Coming!!!!! +Positioning on the top of the viewport, in the middle. + +00:00:15.500 --> 00:00:30.500 line:0 +Bear is Coming!!!!! +This is line 0. +Positioning on the top of the viewport, in the middle. + +2 +00:00:31.000 --> 00:00:45.500 line:50% +I said Bear is coming!!!! +Positioning on the center of the video. + + +00:00:46.000 --> 00:01:00.500 line:5 +I said Bear is coming!!!! +This is line 6 from the top of the video viewport. + +3 +00:01:01.000 --> 00:01:30.000 line:100% +I said Bear is coming now!!!! +Positioning on the bottom middle. + +00:01:31.000 --> 00:02:00.500 line:-1 +I said Bear is coming now!!!! +This is the first line at the bottom of the video viewport. +Positioning on the bottom middle. Only 1 line shows. + +00:02:01.000 --> 00:02:30.000 line:500 +I said Bear is coming now!!!! +This is legal, +even though the line will likely not be within the video viewport. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt new file mode 100644 index 0000000000..4ff7add2d7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cue text has invalid markup of <b>, <i>, <u>, <rt> and <ruby>. Has a bad effect on the remainder of the cue. + +1 +00:00:00.000 --> 00:00:15.000 align:start position:20% +The following bear starts bold but end is broken: +<b>Bear</ b> is Coming!!!!! + +00:00:15.500 --> 00:00:30.500 align:start position:20% +The following bear is not in italics but the markup is removed: +< i>Bear</i> is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +The following bear is not underlined and markup is removed: +I said < u >Bear</u> is coming!!!! + +3 +00:01:01.000 --> 00:01:30.000 align:start position:20% +The following bear is not ruby annotated and markup is removed: +I said <ru by>Bear<rt>bear with me</rt></ruby> is coming!!!! + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt new file mode 100644 index 0000000000..252a599b5f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt @@ -0,0 +1,22 @@ +WEBVTT +Cues with <b>, <i>, <u>, <rt> and <ruby> tags (all valid). + +1 +00:00:00.000 --> 00:00:15.000 align:start position:20% +The following bear is bold: +<b>Bear</b> is Coming!!!!! + +00:00:15.500 --> 00:00:30.500 align:start position:20% +The following bear is in italics and has a class of "larger": +<i.larger>Bear</i> is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +The following bear is underlined even though the element has a blank: +I said <u >Bear</u> is coming!!!! + +3 +00:01:01.000 --> 00:01:30.000 align:start position:20% +The following bear is ruby annotated: +I said <ruby>Bear<rt>bear with me</rt></ruby> is coming!!!! + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt new file mode 100644 index 0000000000..255298aeb0 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt @@ -0,0 +1,14 @@ +WEBVTT +This is where metadata would go and these lines should be skipped. +author = silviapf@google.com +COMMENT--> +this is a comment, that will parse as part of the header; +the STYLE and DEFAULTS below are parsed as invalid cues + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt new file mode 100644 index 0000000000..03d8cf4a1c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt @@ -0,0 +1,38 @@ +WEBVTT + +00:00:00.000 --> 00:00:01.000 +Lorem ipsum dolor sit amet, + +00:00:02.000 --> 00:00:03.000 +consectetuer adipiscing elit, + +00:00:04.000 --> 00:00:05.000 +sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. + +00:00:06.000 --> 00:00:07.000 +Ut wisi enim ad minim veniam, + +00:00:08.000 --> 00:00:09.000 +quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. + +00:00:10.000 --> 00:00:11.000 +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, + +00:00:12.000 --> 00:00:13.000 +vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio + +00:00:14.000 --> 00:00:15.000 +dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. + +00:00:16.000 --> 00:00:17.000 +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id + +00:00:18.000 --> 00:00:19.000 +quod mazim placerat facer possim assum. + +00:00:20.000 --> 00:00:21.000 +Typi non habent claritatem insitam; + +00:00:22.000 --> 00:00:23.000 +est usus legentis in iis qui facit eorum claritatem. + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt new file mode 100644 index 0000000000..36e8366e90 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt @@ -0,0 +1,31 @@ +WEBVTT +Events should be triggered for missed (skipped) cues during normal playback. + +1 +00:00:00.000 --> 00:00:01.500 align:start position:20% +Bear is Coming!!!!! +And what kind of a bear it is - just have look. + +2 +00:00:02.000 --> 00:00:02.500 align:start position:20% +I said Bear is coming!!!! + +3 +00:00:05.500 --> 00:00:05.501 align:start position:20% +I said Bear is coming now!!!! + +4 +00:00:05.700 --> 00:00:05.701 align:start position:20% +This is the second missed cue in the test. + +5 +00:00:05.800 --> 00:00:05.800 align:start position:20% +Third missed cue - zero-length cue. + +6 +00:00:05.850 --> 00:00:05.851 align:start position:20% +Fourth missed cue. + +7 +00:00:05.950 --> 00:00:01.100 +Negative length cue. Should be treated correctly. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt new file mode 100644 index 0000000000..49e4e9051a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt @@ -0,0 +1,6 @@ +WEBVTT +A file with no line terminator at the end should be fine (last cue should be recognized). + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt new file mode 100644 index 0000000000..4cb85b6df2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt @@ -0,0 +1,13 @@ +WEBVTT +Cues without timings are ignored. + +1 +00:00:00.000 +Bear is Coming!!!!! + +2 +00h:00m:31s.000ms +I said Bear is coming!!!! + +3 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt new file mode 100644 index 0000000000..12053b2703 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt @@ -0,0 +1,10 @@ +AWEBVTT FILE +A file with wrong file header should not be recognized as a webvtt file. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt new file mode 100644 index 0000000000..58ca6792be --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt @@ -0,0 +1,39 @@ +WEBVTT +Invalid horizontal positioning values (all settings are ignored). + +1 +00:00:00.000 --> 00:00:15.500 position:-5% +Bear is Coming!!!!! +This would be off screen -> ignored. + +00:00:16.000 --> 00:00:30.500 position:150% +Bear is Coming!!!!! +This would be off screen -> ignored. + +2 +00:00:31.000 --> 00:00:45.500 position:50 +I said Bear is coming!!!! +Missing percent sign -> ignored. + +2 +00:00:46.000 --> 00:01:00.500 position:50a% +I said Bear is coming!!!! +Surplus character between number and percent sign -> ignored. + +3 +00:01:01.000 --> 00:01:30.500 position:100%-fj +I said Bear is coming now!!!! +Surplus characters after percent sign -> ignored. + + +00:01:31.000 --> 00:02:00.500 position:100asdf +I said Bear is coming now!!!! +Surplus characters and no percent sign -> ignored. + +00:02:01.000 --> 00:02:02.000 position:e50% +I said Bear is coming now!!!! +Surplus characters at beginning of size string -> ignored. + +00:02:02.100 --> 00:02:02.500 position:5g0% +I said Bear is coming now!!!! +Surplus characters in middle of size string -> ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt new file mode 100644 index 0000000000..b23a7446b7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt @@ -0,0 +1,21 @@ +WEBVTT +Valid horizontal positioning values. + +1 +00:00:00.000 --> 00:00:30.500 position:0% +الدب قادم!!!!! +تحديد المواقع في أسفل اليمين. + +2 +00:00:31.000 --> 00:00:45.500 position:50% +قلت الدب قادم!! +تحديد المواقع في منتصف القاع. + +00:00:46.000 --> 00:01:00.500 +قلت الدب قادم!! +المواقع الافتراضية على منتصف أسفل تزال قائمة. + +3 +00:01:01.000 --> 00:02:00.500 position:100% +قلت الدب قادم الآن!! +غادر لتحديد المواقع في القاع. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt new file mode 100644 index 0000000000..ccf6024da0 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt @@ -0,0 +1,21 @@ +WEBVTT +Valid horizontal positioning values. + +1 +00:00:00.000 --> 00:00:30.500 position:0% +Bear is Coming!!!!! +Positioning on the left bottom. + +2 +00:00:31.000 --> 00:00:45.500 position:50% +I said Bear is coming!!!! +Positioning on the bottom middle. + +00:00:46.000 --> 00:01:00.500 +I said Bear is coming!!!! +Default positioning on the bottom middle still. + +3 +00:01:01.000 --> 00:02:00.500 position:100% +I said Bear is coming now!!!! +Positioning on the bottom right. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt new file mode 100644 index 0000000000..cbfe6ea6e9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt @@ -0,0 +1,20 @@ +WEBVTT +Cues settings may only be separated by spaces or tabs, but illegal characters +between settings are ignored. + +1 +00:00:00.000 --> 00:00:30.500 - line:43% position:10% - +Bear is Coming!!!!! Bad separator ignored. + +2 +00:00:31.000 --> 00:01:00.500 --> position:50% Vertical:lr align:end +I said Bear is coming!!!! Bad separator and setting ignored. + +3 +00:01:01.000 --> 00:02:00.500 <align:end> <position:90%> +I said Bear is coming now!!!! Bad setting markup. Not ignored because the settings are +not delimited by spaces or tabs. + +4 +00:02:01.000 --> 100:20:00.500 / vertical:lr | position:90% +I said Bear is coming now!!!! Bad separator ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt new file mode 100644 index 0000000000..dd6b02296a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt @@ -0,0 +1,18 @@ +WEBVTT +Cue settings may be separated by spaces or tabs. + +1 +00:00:00.000 --> 00:00:30.500 line:100% align:start +Bear is Coming!!!!! One blank. + +2 +00:00:31.000 --> 00:01:00.500 position:40% vertical:rl line:15% +I said Bear is coming!!!! Several blanks. + +3 +00:01:01.000 --> 00:02:00.500 align:middle position:10% +I said Bear is coming now!!!! Tab separator. + +4 +00:02:01.000 --> 100:20:00.500 line:95% vertical:lr align:end +I said Bear is coming now!!!! Tab separators.
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt new file mode 100644 index 0000000000..9815b111da --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt @@ -0,0 +1,17 @@ +WEBVTT + +0 +00:00:04.000 --> 00:00:04.500 +First cue + +1 +00:00:04.500 --> 00:00:05.000 +Lorem + +2 +00:00:05.000 --> 00:00:05.500 +ipsum + +3 +00:00:05.500 --> 00:00:05.501 +Missed cue with pause-on-exit diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt new file mode 100644 index 0000000000..438ea6abf9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt @@ -0,0 +1,34 @@ +WEBVTT +Enter and exit events should be dispatched in a sorted order according to their times. + +0 +00:00:04.000 --> 00:00:04.500 +Missed cue that should not be considered because of seeking. + +1 +00:00:05.100 --> 00:00:05.800 align:start position:20% +Bear is Coming!!!!! + +2 +00:00:05.100 --> 00:00:05.101 +Missed cue 1 + +3 +00:00:05.100 --> 00:00:05.301 +And what kind of a bear it is - just have look. + +4 +00:00:05.100 --> 00:00:05.101 +Missed Cue 2 + +5 +00:00:05.300 --> 00:00:05.800 align:start position:20% +I said Bear is coming!!!! + +6 +00:00:05.990 --> 00:00:05.993 align:start position:20% +I said Bear is coming now!!!! + +7 +00:00:05.994 --> 00:00:05.998 align:start position:20% +Bear is already here diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt new file mode 100644 index 0000000000..4479cdb722 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid <timestamp> markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +This <00:00:05.000>cue <00:00:10.000>is <00:00:12.000>painted <00:00:08.000>on. +But since the last two timestamps are out of order, they are ignored. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +I <00:00:20.000>said <00:00:22.000>Bear <00:00:24.000>is <00:00:26.000>coming!!!! +All of these timestamps are before the start of the cue, so get ignored. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I <00:02:05.000>said <00:02:10.000>Bear <00:02:15.000>is <00:02:20.000>coming <00:02:25.000>now!!!! +All of these timestamps are after the end of the cue, so get ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt new file mode 100644 index 0000000000..17d464bfed --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt @@ -0,0 +1,14 @@ +WEBVTT +Paint-on text in cues with <timestamp> markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +This <00:00:05.000>cue <00:00:10.000>is <00:00:15.000>painted <00:00:20.000>on. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +I <00:00:35.000>said <00:00:40.000>Bear <00:00:45.000>is <00:00:50.000>coming!!!! + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I <00:01:05.000>said <00:01:10.000>Bear <00:01:15.000>is <00:01:20.000>coming <00:01:25.000>now!!!! diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt new file mode 100644 index 0000000000..c33f8a96c3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt @@ -0,0 +1,22 @@ +WEBVTT +These timings all have errors and all cues should be ignored. + +1 +00:00.00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00:500 +I said Bear is coming!!!! + +3 +00:01:01.000 --> 00:120:00.500 +I said Bear is coming now!!!! + +4 +00:02:01.000 - 00:03:00.500 +I said Bear is coming now!!!! + +5 +00h:03m:01s.000ms --> 00h:03m:00s.500ms +I said Bear is coming now!!!! diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt new file mode 100644 index 0000000000..b708b83338 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt @@ -0,0 +1,14 @@ +WEBVTT +Timings can optionally contain an hour. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:01:00.500 +I said Bear is coming!!!! + +3 +00:01:01.000 --> 100:20:00.500 +I said Bear is coming now!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt new file mode 100644 index 0000000000..e4bf27d4e6 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt @@ -0,0 +1,22 @@ +WEBVTT +These timings all have errors and all cues should be ignored. + +1 +00.00.000 --> 00:30.500 +Bear is Coming!!!!! + +2 +00:31.000 --> 01:00:500 +I said Bear is coming!!!! + +3 +01:01.000 --> 120:00.500 +I said Bear is coming now!!!! + +4 +01:01.000 - 02:00.500 +I said Bear is coming now!!!! + +5 +02:01.000 --> 03m:00.500 +I said Bear is coming now!!!! diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt new file mode 100644 index 0000000000..745c34ff9f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt @@ -0,0 +1,18 @@ +WEBVTT +The hour of a timestamp is optional. + +1 +00:00.000 --> 00:30.500 +Bear is Coming!!!!! + +2 +00:31.000 --> 01:00.500 +I said Bear is coming!!!! + +3 +01:01.000 --> 02:00.500 +I said Bear is coming now!!!! + +4 +02:01.000 --> 03:00.500 +tab separators
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt new file mode 100644 index 0000000000..9d9ac9a38a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt @@ -0,0 +1,51 @@ +WEBVTT +Whitespace (U+0020, U+0009, U+000C) surrounding cue-timings separator ("-->") is optional + +1 +00:00:00.100 -->00:00:01.500 +Single U+0020 SPACE left of cue-timings separator + +2 +00:00:00.100--> 00:00:01.500 +Single U+0020 SPACE right of cue-timings separator + +3 +00:00:00.100 -->00:00:01.500 +Single U+0009 TAB left of cue-timings separator + +4 +00:00:00.100--> 00:00:01.500 +Single U+0009 TAB right of cue-timings separator + +5 +00:00:00.100-->00:00:01.500 +Single U+000C FORM FEED left of cue-timings separator + +6 +00:00:00.100-->00:00:01.500 +Single U+000C FORM FEED right of cue-timings separator + +7 +00:00:00.100 -->00:00:01.500 +Several U+0020 SPACE left of cue-timings separator + +8 +00:00:00.100--> 00:00:01.500 +Several U+0020 SPACE right of cue-timings separator + +9 +00:00:00.100 -->00:00:01.500 +Several U+0009 TAB left of cue-timings separator + +10 +00:00:00.100--> 00:00:01.500 +Several U+0009 TAB right of cue-timings separator + +11 +00:00:00.100-->00:00:01.500 +Several U+000C FORM FEED left of cue-timings separator + +12 +00:00:00.100-->00:00:01.500 +Several U+000C FORM FEED right of cue-timings separator + diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.de.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.de.vtt new file mode 100644 index 0000000000..9eaf3d31e4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.de.vtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:01.000 +German diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.en.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.en.vtt new file mode 100644 index 0000000000..4241f35b56 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.en.vtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:01.000 +English diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.fr.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.fr.vtt new file mode 100644 index 0000000000..5523224e0d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.fr.vtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:01.000 +french diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.vtt new file mode 100644 index 0000000000..c916c0983b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.vtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:01.000 +test diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt new file mode 100644 index 0000000000..b4ea7ea09b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt @@ -0,0 +1,23 @@ +WEBVTT +Any HTML markup that is not supported should be ignored. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<h1>Bear is Coming!!!!!</h1> +<p>And what kind of a bear it is - just have <a href="webpage.html">look</a>.</p> + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<ul> + <li>I said Bear is coming!!!!</li> + <li>I said Bear is still coming!!!!</li> +</ul> + + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +<ol> + <li>I said Bear is coming now!!!!</li> + <li><img src="bear.png" alt="mighty bear"></li> + <li><video src="bear_ad.webm" controls></video></li> +</ol>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt new file mode 100644 index 0000000000..8dd8f27948 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt @@ -0,0 +1,10 @@ +WEBVTT +UTF-8 encoded characters should be recognized. + +1 +00:00:00.000 --> 00:00:30.500 +景気判断 + +2 +00:00:31.000 --> 00:20:00.500 +電力不足
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt new file mode 100644 index 0000000000..8e7b3b738d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid vertical direction settings (all settings are ignored). + +1 +00:00:00.000 --> 00:00:30.500 vertical:#vertical +Bear is Coming!!!!! +Normal rendering - direction setting is ignored. + +2 +00:00:31.000 --> 00:01:00.500 vertical:verticallr +I said Bear is coming!!!! +Normal rendering - direction setting is ignored. + +3 +00:01:01.000 --> 00:02:00.500 vertical:vertical-rl +I said Bear is coming now!!!! +Normal rendering - direction setting is ignored. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt new file mode 100644 index 0000000000..74838369d2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt @@ -0,0 +1,20 @@ +WEBVTT +Valid vertical direction settings. + +1 +00:00:00.000 --> 00:00:30.500 vertical:rl +الدب قادم!!!!! +يجعل على الجانب الأيمن من المعاينة الفيديو والمتوسطة الانحياز ، +أسفل إلى أعلى، وتزايد اليسار. + +2 +00:00:31.000 --> 00:01:00.500 vertical:lr +قلت الدب قادم!! +يجعل على الجانب الأيسر من المعاينة الفيديو والمتوسطة الانحياز ، +أسفل إلى أعلى، وتنامي اليمين. + +3 +00:01:01.000 --> 00:02:00.500 vertical:rl align:start position:0% +قلت الدب قادم الآن!! +يجعل على الجانب الأيمن من المعاينة الفيديو ، على حد سواء أسفل محاذاة +لمربع جديلة والنص داخل النص ، من أسفل إلى أعلى، وتزايد اليسار. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt new file mode 100644 index 0000000000..f757a365e3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt @@ -0,0 +1,20 @@ +WEBVTT +Valid vertical direction settings. + +1 +00:00:00.000 --> 00:00:30.500 vertical:rl +Bear is Coming!!!!! +Renders on the right side of the video viewport, middle aligned, +top to bottom, growing left. + +2 +00:00:31.000 --> 00:01:00.500 vertical:lr +I said Bear is coming!!!! +Renders on the left side of the video viewport, middle aligned, +top to bottom, growing right. + +3 +00:01:01.000 --> 00:02:00.500 vertical:rl align:start position:0% +I said Bear is coming now!!!! +Renders on the right side of the video viewport, top aligned both +for the cue box and the text within, text from top to bottom, growing left. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt new file mode 100644 index 0000000000..12ffdeb82e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt @@ -0,0 +1,17 @@ +WEBVTT +Invalid <v> voice markup. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +< v Speaker>Bear is Coming!!!!!</v> +This is two annotations for an empty tag. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<v&Doe Hunter>I said Bear is coming!!!!</v> +This does not parse as a voice tag. + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <v-Speaker>Bear is coming now</v>!!!! +This does not parse as a voice tag. diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt new file mode 100644 index 0000000000..d6cfc6887f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt @@ -0,0 +1,15 @@ +WEBVTT +Cue text fragment with <v> voice markup mapped to HTML <q> element with @title for annotation. + +1 +00:00:00.000 --> 00:00:30.500 align:start position:20% +<v.blue Speaker>Bear is Coming!!!!!</v> +Text span with a class and an annotation. + +2 +00:00:31.000 --> 00:01:00.500 align:start position:20% +<v Doe Hunter>I said Bear is coming!!!!</v> + +3 +00:01:01.000 --> 00:02:00.500 align:start position:20% +I said <v.blue Speaker>Bear is coming now</v>!!!! diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm Binary files differnew file mode 100644 index 0000000000..c626f86e33 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt new file mode 100644 index 0000000000..0c1a5fb158 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt @@ -0,0 +1,9 @@ +WEBVTT FILE + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt new file mode 100644 index 0000000000..dacc215409 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt @@ -0,0 +1,10 @@ +WEBVTT asdfasdfauhio +Rubbish after the WEBVTT header should be ignored. + +1 +00:00:00.000 --> 00:00:30.500 +Bear is Coming!!!!! + +2 +00:00:31.000 --> 00:20:00.500 +I said Bear is coming!!!!
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues.html new file mode 100644 index 0000000000..3ba8c9db88 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues.html @@ -0,0 +1,52 @@ +<!doctype html> +<title>track element changing "track URL" and clearing cues</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +(async_test(document.title+', set mode, add cue, set src')).step(function(){ + var track = document.createElement('track'); + var c = new VTTCue(0, 1, 'foo'); + c.id = 'id'; + track.track.addCue(c); + assert_equals(track.track.cues, null, 'cues before setting src or mode'); + track.track.mode = 'showing'; + assert_equals(track.track.cues.length, 1, 'cues after setting mode'); + var cues = track.track.cues; + track.src = 'data:,a'; + assert_equals(track.track.cues.length, 0, 'cues.length after setting src'); + assert_equals(track.track.cues, cues, 'track.track.cues sameness after setting src'); + assert_equals(c.id, 'id', 'liveness of removed cue'); + this.done(); +}); + +(async_test(document.title+', set mode, set src, add cue, change src')).step(function(){ + var track = document.createElement('track'); + track.track.mode = 'showing'; + track.src = 'data:,a'; + var c = new VTTCue(0, 1, 'foo'); + c.id = 'id'; + track.track.addCue(c); + assert_equals(track.track.cues.length, 1, 'cues.length before changing src'); + var cues = track.track.cues; + track.src = 'data:,b'; + assert_equals(track.track.cues.length, 0, 'cues.length after changing src'); + assert_equals(track.track.cues, cues, 'track.track.cues sameness after changing src'); + assert_equals(c.id, 'id', 'liveness of removed cue'); + this.done(); +}); + +(async_test(document.title+', set mode, add cue, change mode to disabled, set src')).step(function(){ + var track = document.createElement('track'); + track.track.mode = 'showing'; + var c = new VTTCue(0, 1, 'foo'); + c.id = 'id'; + track.track.addCue(c); + var cues = track.track.cues; + track.track.mode = 'disabled'; + track.src = 'data:,a'; + assert_equals(cues.length, 0, 'cues.length after changing src'); + assert_equals(c.id, 'id', 'liveness of removed cue'); + this.done(); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html new file mode 100644 index 0000000000..27c76b6be4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>Setting HTMLTrackElement.src to the empty string fires 'error' and sets readyState to ERROR</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video></video> +<script> +async_test(t => { + let track = document.createElement("track"); + track.src = ''; + track.default = true; + track.onerror = t.step_func_done(() => { + assert_equals(track.readyState, HTMLTrackElement.ERROR); + }); + track.onload = t.unreached_func('fired load'); + + assert_equals(track.readyState, HTMLTrackElement.NONE); + + document.querySelector('video').appendChild(track); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html new file mode 100644 index 0000000000..a7c08a2e3e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>Ensure that no text track cues are active after the video is unloaded</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var eventCount = 0; + + function eventCallback() { + eventCount++; + if (eventCount == 3) { + assert_equals(trackElement.track.activeCues.length, 1); + video.src = ''; + } + } + + var video = document.createElement('video'); + video.src = getVideoURI('/media/movie_5'); + // uanset media element's `show-poster` flag in order to run `time marches on` + // when we add new cues into media element's cues list. + video.play(); + var trackElement = document.createElement('track'); + + trackElement.onload = t.step_func(eventCallback); + trackElement.oncuechange = t.step_func(eventCallback); + video.oncanplaythrough = t.step_func(eventCallback); + + video.onerror = t.step_func_done(function(event) { + assert_equals(event.target, video); + assert_not_equals(video.error, null); + assert_equals(video.error.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED); + assert_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE); + assert_equals(trackElement.track.activeCues.length, 0); + }); + + trackElement.src = 'resources/captions-fast.vtt'; + trackElement.kind = 'captions'; + trackElement.default = true; + video.appendChild(trackElement); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html new file mode 100644 index 0000000000..e738964001 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html @@ -0,0 +1,92 @@ +<!DOCTYPE html> +<title>TextTrack's addCue and removeCue</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement("video"); + var trackElement = document.createElement("track"); + + trackElement.onload = t.step_func_done(function() { + var cues = trackElement.track.cues; + // Test cues loaded from the file. + assert_equals(cues.length, 4); + assert_equals(cues.getCueById("1").startTime, 0); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 61); + assert_equals(cues.getCueById("4").startTime, 121); + assert_equals(cues.getCueById("junk"), null); + + // Create a new cue, check values. + var textCue = new VTTCue(33, 3.4, "Sausage?"); + assert_equals(textCue.track, null); + assert_equals(textCue.id, ""); + assert_equals(textCue.startTime, 33); + assert_equals(textCue.endTime, 3.4); + assert_equals(textCue.pauseOnExit, false); + assert_equals(textCue.vertical, ""); + assert_equals(textCue.snapToLines, true); + assert_equals(textCue.line, "auto"); + assert_equals(textCue.position, "auto"); + assert_equals(textCue.size, 100); + assert_equals(textCue.align, "center"); + + // Remove the unadded track, make sure it throws correctly. + assert_throws_dom("NotFoundError", function() { trackElement.track.removeCue(textCue); }); + + // Add the new cue to a track, make sure it is inserted correctly. + trackElement.track.addCue(textCue); + assert_equals(textCue.track, trackElement.track); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 33); + assert_equals(cues[3].startTime, 61); + + // create a new cue and add it to a track created with + // video.addTextTrack, make sure it is inserted correctly. + var newTrack = video.addTextTrack("subtitles", "French subtitles", "fr"); + newTrack.mode = "showing"; + var newCue = new VTTCue(0, 1, "Test!"); + newTrack.addCue(newCue); + assert_equals(newCue, newTrack.cues[0]) + assert_equals(newCue.track, newTrack); + assert_equals(newCue.id, ""); + assert_equals(newCue.startTime, 0); + assert_equals(newCue.endTime, 1); + assert_equals(newCue.pauseOnExit, false); + assert_equals(newCue.vertical, ""); + assert_equals(newCue.snapToLines, true); + assert_equals(newCue.line, "auto"); + assert_equals(newCue.position, "auto"); + assert_equals(newCue.size, 100); + assert_equals(newCue.align, "center"); + + trackElement.track.removeCue(textCue); + assert_equals(textCue.track, null); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 61); + + // Remove a cue added from the WebVTT file. + textCue = cues[2]; + trackElement.track.removeCue(textCue); + assert_equals(textCue.track, null); + assert_equals(cues[1].startTime, 31); + assert_equals(cues[2].startTime, 121); + + // Try to remove the cue again. + assert_throws_dom("NotFoundError", function() { trackElement.track.removeCue(textCue); }); + + // Add a cue before all the existing cues. + trackElement.track.addCue(new VTTCue(0, 31, "I am first")); + assert_equals(cues[0].startTime, 0); + assert_equals(cues[0].endTime, 31); + assert_equals(cues[1].startTime, 0); + assert_equals(cues[1].endTime, 30.5); + assert_equals(cues[2].startTime, 31); + }); + + trackElement.src = "resources/settings.vtt"; + trackElement.kind = "captions"; + trackElement.default = true; + video.appendChild(trackElement); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html new file mode 100644 index 0000000000..c924c92da9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>'addtrack' event is fired when a TextTrack is created</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement('video'); + + var trackElement = document.createElement('track'); + video.appendChild(trackElement); + var tracks = []; + tracks.push(trackElement.track); + + // Register the 'addtrack' listener after creating the element + // to make sure the event is dispatched asynchronously. + video.textTracks.onaddtrack = t.step_func(function(event) { + assert_equals(event.target, video.textTracks); + assert_true(event instanceof TrackEvent, 'instanceof'); + assert_equals(event.track, tracks[video.textTracks.length - 1]); + + if (video.textTracks.length == 1) { + tracks.push(video.addTextTrack('captions', 'Caption Track', 'en')); + assert_equals(video.textTracks.length, 2); + } else { + t.done(); + } + }); + + trackElement.src = 'resources/webvtt-file.vtt'; + trackElement.track.mode = 'hidden'; + assert_equals(video.textTracks.length, 1); + assert_equals(trackElement.readyState, HTMLTrackElement.NONE); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html new file mode 100644 index 0000000000..d058bf2987 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>addTextTrack() only accepts known "kind" values</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + var trackCount = 0; + + function addTrack(type) { + video.addTextTrack(type); + assert_equals(video.textTracks.length, ++trackCount); + } + + var video = document.createElement("video"); + assert_equals(video.textTracks.length, 0); + assert_throws_js(TypeError, function() { video.addTextTrack("kaptions"); }); + assert_equals(video.textTracks.length, 0); + + addTrack("subtitles"); + addTrack("captions"); + addTrack("descriptions"); + addTrack("chapters"); + addTrack("metadata"); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-api-texttracks.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-api-texttracks.html new file mode 100644 index 0000000000..b2840d235a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-api-texttracks.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML> +<html> +<head> +<title>Track element - text tracks API test</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#text-track-api"> +<link rel="author" title="Hyunjin Cho"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<h1>Track element and API Test</h1> +<div style="display:none;"> + <video id="tracktest" src="/media/movie_300.mp4"> + <track kind="subtitles" src="resources/track.en.vtt" srclang="en" label="English"> + <track kind="captions" src="resources/track.en.vtt" srclang="en" label="English with Captions"> + <track id="french" kind="subtitles" src="resources/track.fr.vtt" srclang="fr" label="Francais"> + <track kind="subtitles" src="resources/track.de.vtt" srclang="de" label="Deutsch"> + </video> +</div> +<div id="log"></div> +<script> +test(function() { + var t1 = document.getElementById('tracktest').textTracks; + assert_not_equals(t1, undefined, "textTracks member should not be undefined"); +}, "Check the track elements"); +test(function() { + var t2 = document.getElementById('tracktest').textTracks.getTrackById("french"); + assert_not_equals(t2, undefined, "textTracks member should not be undefined"); +}, "Check getTrackById method"); +test(function() { + var t3 = document.getElementById('tracktest').textTracks.length; + assert_equals(t3, 4, "textTracks List should be 4"); +}, "Count track list"); +</script> +</body> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html new file mode 100644 index 0000000000..7a17dee2a7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>A 'change' event is fired when a TextTrack's mode changes</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement('video'); + var track = video.addTextTrack('subtitles', 'test', 'en'); + + // addTextTrack() defaults to "hidden", so settings + // mode to "showing" should trigger a "change" event. + track.mode = 'showing'; + assert_equals(video.textTracks.length, 1); + + video.textTracks.onchange = t.step_func_done(function(event) { + assert_equals(event.target, video.textTracks); + assert_true(event instanceof Event, 'instanceof'); + assert_false(event.hasOwnProperty('track'), 'unexpected property found: "track"'); + }); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html new file mode 100644 index 0000000000..d18f8b55cd --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +:cue { color: red; } +:cue(i) { color: red; } +</style> +<script> +test(function() { + assert_equals(document.styleSheets[0].cssRules.length, 0); +}, ":cue pseudo-class is not supported and dropped during parsing"); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html new file mode 100644 index 0000000000..59f8fc6c7b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Invoke getCueAsHTML() on an empty cue</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + var emptyCue = new VTTCue(0, 0, ""); + var fragment = emptyCue.getCueAsHTML(); + + // The getCueAsHTML() method should return a document fragment. + assert_true(fragment instanceof DocumentFragment); + + // The document fragment should have one child, an empty Text node. + assert_equals(fragment.childNodes.length, 1); + assert_equals(fragment.childNodes[0].constructor.name, Text.name); + assert_equals(fragment.childNodes[0].length, 0); + assert_equals(fragment.childNodes[0].data, ""); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html new file mode 100644 index 0000000000..3b4c3542a9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Add a track and change its mode through JS</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <source src="/media/test.mp4" type="video/mp4"> + <source src="/media/test.ogv" type="video/ogg"> +</video> +<script> +test(function() { + var video = document.querySelector('video'); + var track = video.addTextTrack('captions', 'English', 'en'); + track.addCue(new VTTCue(0.0, 10.0, 'wow wow')); + track.mode = 'showing'; +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html new file mode 100644 index 0000000000..713e781996 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<title>Cue fragment is mutable</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +p, div { display: none; } +</style> +<video> + <track src="resources/captions-html.vtt" kind="captions" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.oncanplaythrough = t.step_func(testMutability); + testTrack.onload = t.step_func(testMutability); + + var fragment; + var eventCount = 0; + function testMutability() { + eventCount++; + if (eventCount != 2) + return; + + var testCue = testTrack.track.cues[0]; + + // Test initial cue contents. + assert_equals(testCue.text, "Lorem <b>ipsum</b> <u>dolor</u> <i.sit>sit</i> amet,"); + + // Cue getCueAsHTML() should return a correct fragment. + createExpectedFragment(document.createDocumentFragment()); + assert_true(fragment.isEqualNode(testCue.getCueAsHTML())); + + // Appending getCuesAsHTML() twice to the DOM should be succesful. + document.getElementsByTagName("div")[0].appendChild(testCue.getCueAsHTML()); + document.getElementsByTagName("div")[1].appendChild(testCue.getCueAsHTML()); + + createExpectedFragment(document.createElement("div")); + assert_true(fragment.isEqualNode(document.getElementsByTagName("div")[0])); + assert_true(fragment.isEqualNode(document.getElementsByTagName("div")[1])); + + // The fragment returned by getCuesAsHTML() should be independently mutable. + document.getElementsByTagName("div")[0].firstChild.textContent = "Different text "; + assert_false(fragment.isEqualNode(document.getElementsByTagName("div")[0])); + assert_true(fragment.isEqualNode(document.getElementsByTagName("div")[1])); + + // Calling twice getCueAsHTML() should not return the same fragment. + assert_not_equals(testCue.getCueAsHTML(), testCue.getCueAsHTML()); + + t.done(); + } + + function createExpectedFragment(rootNode) { + fragment = rootNode; + fragment.appendChild(document.createTextNode("Lorem ")); + + var bold = document.createElement("b"); + bold.appendChild(document.createTextNode("ipsum")); + fragment.appendChild(bold); + + fragment.appendChild(document.createTextNode(" ")); + + var underline = document.createElement("u"); + underline.appendChild(document.createTextNode("dolor")); + fragment.appendChild(underline); + + fragment.appendChild(document.createTextNode(" ")); + + var italics = document.createElement("i"); + italics.className = "sit"; + italics.appendChild(document.createTextNode("sit")); + fragment.appendChild(italics); + + fragment.appendChild(document.createTextNode(" amet,")); + } + + video.src = getVideoURI("/media/counting"); + }); + </script> +</video> +<p>Fragment 1</p> +<div></div> +<p>Fragment 2</p> +<div></div>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html new file mode 100644 index 0000000000..26a6b84f8a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html @@ -0,0 +1,99 @@ +<!DOCTYPE html> +<title>Modifying attributes of a VTTCue</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track id="captions" src="resources/captions.vtt" kind="captions" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + var cues = track.track.cues; + + // Test initial values. + textCue = cues.getCueById("1"); + + assert_equals(textCue.startTime, 0); + assert_equals(textCue.endTime, 1.0); + assert_equals(textCue.pauseOnExit, false); + assert_equals(textCue.vertical, ""); + assert_equals(textCue.snapToLines, true); + assert_equals(textCue.line, "auto"); + assert_equals(textCue.position, "auto"); + assert_equals(textCue.size, 100); + assert_equals(textCue.align, "center"); + + // Modify cue values. + textCue.startTime = 1.1; + assert_equals(textCue.startTime, 1.1); + + textCue.endTime = 3.9; + assert_equals(textCue.endTime, 3.9); + + textCue.pauseOnExit = true; + assert_equals(textCue.pauseOnExit, true); + + // http://dev.w3.org/html5/webvtt/#dfn-dom-vttcue-vertical + // On setting, the text track cue writing direction must be + // set to the value given in the first cell of the row in + // the table above whose second cell is a case-sensitive + // match for the new value. + textCue.vertical = "RL"; + assert_equals(textCue.vertical, ""); + textCue.vertical = "rl"; + assert_equals(textCue.vertical, "rl"); + + textCue.snapToLines = false; + assert_equals(textCue.snapToLines, false); + + // http://dev.w3.org/html5/webvtt/#dfn-vttcue-line + // On setting, the text track cue line position must be set + // to the new value; if the new value is the string "auto", + // then it must be interpreted as the special value auto. + assert_equals(textCue.line, "auto"); + assert_throws_js(TypeError, function() { textCue.line = "gazonk"; }); + assert_equals(textCue.line, "auto"); + textCue.line = 42; + assert_equals(textCue.line, 42); + textCue.line = -2; + assert_equals(textCue.line, -2); + textCue.line = 102; + assert_equals(textCue.line, 102); + textCue.snapToLines = true; + textCue.line = -2; + assert_equals(textCue.line, -2); + textCue.line = 102; + assert_equals(textCue.line, 102); + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-line + // On setting, if the new value is negative or greater than 100, + // then throw an IndexSizeError exception. + // Otherwise, set the text track cue text position to the new value. + assert_throws_dom("IndexSizeError", function() { textCue.position = -200; }); + assert_throws_dom("IndexSizeError", function() { textCue.position = 110; }); + textCue.position = 11; + assert_equals(textCue.position, 11); + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-texttrackcue-size + // On setting, if the new value is negative or greater than 100, + // then throw an IndexSizeError exception. + // Otherwise, set the text track cue size to the new value. + assert_throws_dom("IndexSizeError", function() { textCue.size = -200 }); + assert_throws_dom("IndexSizeError", function() { textCue.size = 110 }); + textCue.size = 57; + assert_equals(textCue.size, 57); + + // http://dev.w3.org/html5/webvtt/#dfn-dom-vttcue-align + // On setting, the text track cue text alignment must be + // set to the value given in the first cell of the row + // in the table above whose second cell is a case-sensitive + // match for the new value. + textCue.align = "End"; + assert_equals(textCue.align, "center"); + textCue.align = "end"; + assert_equals(textCue.align, "end"); + }); + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html new file mode 100644 index 0000000000..e2f78900a7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<title>Enter, Exit events for a cue with negative duration</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = video.addTextTrack("subtitles"); + + // Add a cue with negative duration. + var cue = new VTTCue(1, -10, "Sausage?"); + track.addCue(cue); + assert_equals(track.cues.length, 1); + + // Verify that enter and exit events are fired. + var enterEvent = false; + cue.onenter = t.step_func(function() { + enterEvent = true; + }); + cue.onexit = t.step_func_done(function() { + assert_true(enterEvent); + }); + + video.src = getVideoURI("/media/test"); + video.play(); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html new file mode 100644 index 0000000000..ebd7877f78 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<title>Enter, Exit events for cues with negative timestamps</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = video.addTextTrack("subtitles"); + + // Add cue with negative startTime. + var cue = new VTTCue(-10, 1, "Sausage?"); + track.addCue(cue); + assert_equals(track.cues.length, 1); + cue.onenter = t.step_func(function() { + cue.onexit = t.step_func_done(); + }); + + // Add cue with negative startTime and negative endTime. + // This cue should never be active. + var missedCue = new VTTCue(-110, -3.4, "Pepperoni?"); + track.addCue(missedCue); + assert_equals(track.cues.length, 2); + missedCue.onenter = t.unreached_func(); + missedCue.onexit = t.unreached_func(); + + video.src = getVideoURI("/media/test"); + video.play(); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html new file mode 100644 index 0000000000..5dc54ed25b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>Negative timestamps</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/settings.vtt" default> + <script> + async_test(function(t) { + var testTrack = document.querySelector("track"); + + testTrack.onload = t.step_func_done(function() { + var cues = testTrack.track.cues; + assert_equals(testTrack.track.cues.length, 4); + // Add cue with negative startTime. + var cue = new VTTCue(-3439332606, 3.4, "Sausage?"); + testTrack.track.addCue(cue); + assert_equals(cues.length, 5); + + // Add cue with negative startTime and negative endTime. + cue = new VTTCue(-110, -3.4, "Pepperoni?"); + testTrack.track.addCue(cue); + assert_equals(cues.length, 6); + + // Set startTime and endTime to negative values. + var testCue = cues[2]; + assert_equals(testCue.startTime, 0); + testCue.startTime = -5; + assert_equals(testCue.startTime, -5); + assert_equals(testCue.endTime, 30.5); + testCue.endTime = -3439332606; + assert_equals(testCue.endTime, -3439332606); + + // Check negative cues ordering. + testCue = cues[3]; + assert_equals(testCue.startTime, 31); + testCue.startTime = -200; + // Verify that this cue is moved to 2nd position. + assert_equals(cues[1].startTime, -200); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html new file mode 100644 index 0000000000..58e11ebe70 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html @@ -0,0 +1,83 @@ +<!DOCTYPE html> +<title>Text track cue order</title> +<link rel="help" href="https://html.spec.whatwg.org/#text-track-cue-order"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +function concat_cuetext(cues) { + return Array.prototype.reduce.call(cues, function(acc, value) { + return acc + value.text; + }, ""); +} + +setup(function() { + window.video = document.createElement('video'); +}); + +test(function() { + let track = video.addTextTrack('subtitles'); + track.addCue(new VTTCue(8, 9, '1')); + track.addCue(new VTTCue(4, 5, '2')); + track.addCue(new VTTCue(2, 3, '3')); + assert_equals(concat_cuetext(track.cues), '321'); +}, document.title + ', decreasing start times.'); + +test(function() { + let track = video.addTextTrack('subtitles'); + track.addCue(new VTTCue(2, 9, '1')); + track.addCue(new VTTCue(2, 3, '2')); + track.addCue(new VTTCue(2, 5, '3')); + assert_equals(concat_cuetext(track.cues), '132'); +}, document.title + ', equal start times varying end times.'); + +test(function() { + let track = video.addTextTrack('subtitles'); + track.addCue(new VTTCue(2, 3, '1')); + track.addCue(new VTTCue(2, 3, '2')); + track.addCue(new VTTCue(2, 3, '3')); + assert_equals(concat_cuetext(track.cues), '123'); +}, document.title + ', equal start and end times.'); + +test(function() { + let track = video.addTextTrack('subtitles'); + track.addCue(new VTTCue(2, 5, '1')); + track.addCue(new VTTCue(2, 5, '2')); + track.addCue(new VTTCue(2, 5, '3')); + assert_equals(concat_cuetext(track.cues), '123', 'initial order'); + + let cue = track.cues[0]; + track.removeCue(cue); + assert_equals(concat_cuetext(track.cues), '23', '"1" removed'); + + track.addCue(cue); + assert_equals(concat_cuetext(track.cues), '231', '"1" reinserted'); +}, document.title + ', after re-insertion.'); + +test(function() { + let track = video.addTextTrack('subtitles'); + track.addCue(new VTTCue(2, 5, '1')); + track.addCue(new VTTCue(2, 5, '2')); + track.addCue(new VTTCue(2, 5, '3')); + assert_equals(concat_cuetext(track.cues), '123', 'initial order'); + + track.cues[0].startTime = 4; + assert_equals(concat_cuetext(track.cues), '231', '"1" moved last'); + + track.cues[2].startTime = 2; + assert_equals(concat_cuetext(track.cues), '123', '"1" moved first'); +}, document.title + ', equal start and end times with startTime mutations.'); + +test(function() { + let track = video.addTextTrack('subtitles'); + track.addCue(new VTTCue(2, 5, '1')); + track.addCue(new VTTCue(2, 5, '2')); + track.addCue(new VTTCue(2, 5, '3')); + assert_equals(concat_cuetext(track.cues), '123', 'initial order'); + + track.cues[2].endTime = 9; + assert_equals(concat_cuetext(track.cues), '312', '"3" moved first'); + + track.cues[1].endTime = 3; + assert_equals(concat_cuetext(track.cues), '321', '"1" moved last'); +}, document.title + ', equal start and end times with endTime mutations.'); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html new file mode 100644 index 0000000000..bd43c462dd --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-ref.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<title>Text track cue layout after controls are added (reference)</title> +<style> +::cue { + font-size: 50px; +} + +/* Video width should be large enough to display all of the media controls. */ +video { + border: 1px solid gray; + width: 500px; +} +</style> +<video controls onloadeddata="this.onloadeddata = null; takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a single cue at line -2, where it would be if there were controls visible +// at the bottom. (This assumes that those controls are less than 50px high.) +// cue at line -1. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 1, "text"); +cue.line = -2; +track.addCue(cue); +track.mode = "showing"; +</script> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html new file mode 100644 index 0000000000..23c27e418e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<link rel="match" href="track-cue-rendering-after-controls-added-ref.html"> +<title>Text track cue layout after controls are added</title> +<style> +::cue { + font-size: 50px; +} +</style> +<!-- Width should be large enough to display all of the media controls. --> +<video style="border:1px solid gray; width: 500px;"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a cue that will overlap with the video controls. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +track.addCue(new VTTCue(0, 1, "text")); +track.mode = "showing"; + +video.onloadeddata = function() { + // Double nesting of requestAnimationFrame to + // make sure cue layout and paint happens. + window.requestAnimationFrame(function() { + window.requestAnimationFrame(function() { + video.controls = true; + // Wait for the relayout before screenshot. + window.requestAnimationFrame(function() { + takeScreenshot(); + }); + }); + }); +}; +</script> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html new file mode 100644 index 0000000000..96afaef346 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-ref.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<title>Text track cue layout after controls are removed (reference)</title> +<style> +::cue { + font-size: 50px; +} + +video { + border: 1px solid gray; +} +</style> +<video onloadeddata="this.onloadeddata = null; takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a single cue at line -2, where it would be if there were controls visible +// at the bottom. (This assumes that those controls are less than 50px high.) +// cue at line -1. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 1, "text"); +cue.line = -2; +track.addCue(cue); +track.mode = "showing"; +</script> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html new file mode 100644 index 0000000000..76019c9b41 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<link rel="match" href="track-cue-rendering-after-controls-removed-ref.html"> +<title>Text track cue layout after controls are removed</title> +<style> +::cue { + font-size: 50px; +} +</style> +<video controls style="border:1px solid gray"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a cue that will overlap with the video controls. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +track.addCue(new VTTCue(0, 1, "text")); +track.mode = "showing"; + +video.onloadeddata = function() { + // Double nesting of requestAnimationFrame to + // make sure cue layout and paint happens. + window.requestAnimationFrame(function() { + window.requestAnimationFrame(function() { + // Remove the controls. The cue should not move. + video.controls = false; + takeScreenshot(); + }); + }); +}; +</script> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html new file mode 100644 index 0000000000..427189f6fc --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Empty cues</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement("video"); + video.src = getVideoURI("/media/test"); + video.addTextTrack("captions", "regular captions track", "en"); + video.textTracks[0].addCue(new VTTCue(0, 4, "")); + + video.onplaying = t.step_func_done(); + video.play(); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-ref.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-ref.html new file mode 100644 index 0000000000..8354041eb2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-ref.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<style> +.container { + position: relative; + display: inline-block; + width: 320px; + height: 240px; +} +.cue { + position: absolute; + top: 0; + left: 0; + right: 0; + overflow: hidden; +} +.cue > span { + font-family: sans-serif; + background: green; + color: green; + font-size: 120px; + padding: 2px; +} +</style> +<div class="container"> + <video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> + </video> + <div class="cue"><span>PAS</span></div> +</div> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html new file mode 100644 index 0000000000..d3dcee1037 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<link rel="match" href="track-cue-rendering-line-doesnt-fit-ref.html"> +<script> +function addCue(track, cueData) { + var cue = new VTTCue(0, 10, 'XXX'); + for (var prop in cueData) + cue[prop] = cueData[prop]; + track.addCue(cue); +} +</script> +<style> +video::cue { + font-size: 120px; + color: green; + background-color: green; +} +</style> +<video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> + <script> + var video = document.querySelector("video"); + var track = video.addTextTrack('subtitles'); + addCue(track, { line: 0, align: 'start', text: 'PAS' }); + // This cue will not fit, and will not be displayed. + addCue(track, { line: 1, align: 'start', text: 'FAI' }); + track.mode = 'showing'; + </script> +</video> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-ref.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-ref.html new file mode 100644 index 0000000000..39461350b0 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-ref.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<style> +.container { + transform: translate(1px, 0px); + position: relative; + display: inline-block; + width: 320px; + height: 240px; +} +.cue { + position: absolute; + top: 0; + left: 0; + right: 0; + overflow: hidden; + text-align: start; +} +.cue > span { + font-family: sans-serif; + background: green; + color: green; + font-size: 50px; + padding: 2px; +} +</style> +<div class="container"> + <video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> + </video> + <div class="cue"><span>XXX</span></div> +</div> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html new file mode 100644 index 0000000000..69ca92e845 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<script src="/common/reftest-wait.js"></script> +<link rel="match" href="track-cue-rendering-transformed-video-ref.html"> +<style> +video { + transform: translate(1px, 0px); +} +video::cue { + font-size: 50px; + color: green; + background-color: green; +} +</style> +<video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> + <script> + var video = document.querySelector('video'); + var track = video.addTextTrack('subtitles'); + var cue = new VTTCue(0, 10, 'XXX'); + cue.align = 'start'; + cue.line = 0; + track.addCue(cue); + track.mode = 'showing'; + </script> +</video> +</html>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange-dynamically-created-track-element.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange-dynamically-created-track-element.html new file mode 100644 index 0000000000..f990bc8c72 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange-dynamically-created-track-element.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>'cuechange' event on dynamically created track element</title> +<meta name="timeout" content="long"> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> +<script> +/** + * 'cuechange' event should be correctly dispatched on the dynamically created + * track element. + */ +promise_test(function(t) { + const video = document.querySelector("video"); + const track = document.createElement("track"); + track.src = "resources/cues-chrono-order.vtt"; + track.track.mode = "hidden"; + video.appendChild(track); + + const cueChangedPromise = new Promise(r => track.oncuechange = r); + video.src = getVideoURI("/media/test"); + // 'TimeMarchesOn' algorithm will be run after calling 'play()', from which + // the 'cuechange' event would be dispatched. + video.play(); + return cueChangedPromise; +}); +</script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html new file mode 100644 index 0000000000..2593401771 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<title>TextTrack's cues are indexed and updated in order during video playback</title> +<meta name="timeout" content="long"> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/cues-chrono-order.vtt" kind="captions" default> + <script> + // Use the cuechange event on TextTrack. + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/test"); + video.oncanplaythrough = t.step_func(attemptTests); + + function attemptTests() { + assert_equals(testTrack.track.cues.length, 3); + testTrack.oncuechange = t.step_func(cueChangedFromTrackElement); + video.play(); + } + + var currentCueIndex; + var cueChangeCount = 0; + function cueChangedFromTrackElement() { + currentCueIndex = Math.floor(cueChangeCount / 2); + currentCue = event.target.track.cues[currentCueIndex]; + if (cueChangeCount % 2 == 0) { + // Cue entered. + assert_equals(currentCue, testTrack.track.activeCues[0]); + assert_equals(currentCue.id, (currentCueIndex + 1).toString()); + } + + ++cueChangeCount; + if (cueChangeCount == testTrack.track.cues.length * 2) + t.done(); + } + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html new file mode 100644 index 0000000000..2d49c21178 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>TextTrack's cues are indexed and updated in order during video playback</title> +<meta name="timeout" content="long"> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/cues-chrono-order.vtt" kind="captions" default> + <script> + // Use the enter and exit events on TextTrackCue. + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/test"); + + video.oncanplaythrough = t.step_func(attemptTests); + + function attemptTests() { + assert_equals(testTrack.track.cues.length, 3); + for (var i = 0; i < testTrack.track.cues.length; i++) { + testTrack.track.cues[i].onenter = t.step_func(cueEntered); + testTrack.track.cues[i].onexit = t.step_func(cueExited); + } + video.play(); + } + + var cueCount = 0; + function cueEntered(event) { + var currentCue = event.target; + + // This cue is the currently active cue. + assert_equals(currentCue, testTrack.track.activeCues[0]); + assert_equals(currentCue.id, (cueCount + 1).toString()); + } + + function cueExited() { + ++cueCount; + if (cueCount == testTrack.track.cues.length) + t.done(); + } + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-seeking.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-seeking.html new file mode 100644 index 0000000000..ae56e16205 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-seeking.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<title>TextTrack's cue onenter handler called when seeked onto</title> +<meta name="timeout" content="long"> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/cues-chrono-order.vtt" kind="captions" default> + <script> + // Check that the onenter event is called for the right cue when seeking on the video element. + // Based on the spec step 4 [1], after a seek happens, the missed cues should be empty, + // so any cues before the target time should not receive enter event. + // [1] https://html.spec.whatwg.org/multipage/media.html#time-marches-on + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/test"); + + video.oncanplaythrough = t.step_func(attemptTests); + + function attemptTests() { + assert_equals(testTrack.track.cues.length, 3); + const targetTime = 4.0000000004; + + for (let cue of testTrack.track.cues) { + if (cue.endTime > targetTime) { + cue.onenter = t.step_func(_=>t.done()); + } else { + cue.onenter = t.unreached_func("onenter called for wrong cue"); + } + } + + video.currentTime = targetTime; + } + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html new file mode 100644 index 0000000000..2acae212d2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<title>Events are triggered for missed (skipped) cues during normal playback</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/missed-cues.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/test"); + + video.onended = t.step_func_done(); + + video.oncanplaythrough = t.step_func(function() { + video.oncanplaythrough = null; + video.currentTime = 5.00; + runTests(); + }); + + testTrack.onload = t.step_func(runTests); + + var cueCount; + var eventCount = 0; + function runTests() { + eventCount++; + + if(eventCount != 2) + return; + + assert_equals(testTrack.track.cues.length, 7); + + for (cueCount = 2; cueCount < testTrack.track.cues.length; cueCount++) { + var cue = testTrack.track.cues[cueCount]; + + cue.onenter = t.step_func(cueEnteredOrExited); + cue.onexit = t.step_func(cueEnteredOrExited); + } + + // Test events for missed cues, which are cues with ids + // from 3 to 7 in the file resources/missed-cues.vtt. + cueCount = 3; + video.play(); + } + + function cueEnteredOrExited(event) { + var currentCue = event.target; + assert_equals(testTrack.track.cues.getCueById(cueCount).text, currentCue.text); + assert_equals(currentCue.id, cueCount.toString()); + + if (event.type == "exit") + cueCount++; + } + + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html new file mode 100644 index 0000000000..eaf7e2a1d4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Video is paused after cues having pause-on-exit flag are processed</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/simple-captions.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + track.onload = t.step_func(function() { + assert_equals(track.track.cues.length, 4); + for (var i = 0; i < track.track.cues.length; ++i) { + var cue = track.track.cues[i]; + if (i % 2 == 0) { + cue.pauseOnExit = true; + cue.onexit = t.step_func(function(event) { + assert_true(video.paused); + + video.play(); + + if (event.target.id == 2) + t.done(); + }); + } + } + video.src = getVideoURI("/media/test"); + video.currentTime = 4.00; + video.play(); + assert_false(video.paused); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html new file mode 100644 index 0000000000..99cd2d550e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>TextTrack's activeCues are indexed and updated during video playback</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/cues-overlapping.vtt" kind="subtitles" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + track.onload = t.step_func(function() { + assert_equals(track.track.cues.length, 3); + video.src = getVideoURI("/media/test"); + video.currentTime = 0.5; + }); + + var seekedCount = 0; + video.onseeked = t.step_func(function() { + ++seekedCount; + + assert_equals(video.currentTime, seekedCount * 0.5); + assert_equals(track.track.activeCues.length, seekedCount - 1); + video.currentTime = (seekedCount + 1) * 0.5; + + if (seekedCount == 4) + t.done(); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html new file mode 100644 index 0000000000..edc202f435 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<title>All events are triggered in chronological order</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/sorted-dispatch.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + video.src = getVideoURI("/media/test"); + var track = document.querySelector("track"); + + track.onload = t.step_func(function() { + var cues = track.track.cues; + assert_equals(cues.length, 8); + + for (var i = 0; i < cues.length; ++i) { + cues[i].onenter = t.step_func(cueEnteredOrExited); + cues[i].onexit = t.step_func(cueEnteredOrExited); + } + + video.play(); + }); + + var cueTimings = []; + function cueEnteredOrExited(event) { + var currentCue = event.target; + + if (event.type == "exit") + cueTimings.push(currentCue.endTime); + else + cueTimings.push(currentCue.startTime); + } + + video.onended = t.step_func_done(function() { + assert_equals(cueTimings.length, 14); + var time = 0; + for (var i = 0; i < cueTimings.length; ++i) { + assert_less_than_equal(time, cueTimings[i], "cueTimings[" + i + "]"); + time = cueTimings[i]; + } + }); + + video.currentTime = 5; + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html new file mode 100644 index 0000000000..26ff90d56d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html @@ -0,0 +1,30 @@ +<!doctype html> +<title>track element data: URL</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +[null, "anonymous", "use-credentials"].forEach(function(crossOriginValue) { + async_test(function() { + var video = document.createElement('video'); + if (crossOriginValue !== null) { + video.setAttribute('crossorigin', crossOriginValue); + } + document.body.appendChild(video); + var t = document.createElement('track'); + t.onload = this.step_func_done(function() { + assert_equals(t.track.cues.length, 1); + assert_equals(t.track.cues[0].startTime, 1); + assert_equals(t.track.cues[0].endTime, 2); + assert_equals(t.track.cues[0].id, 'x'); + assert_equals(t.track.cues[0].text, 'test'); + }); + t.onerror = this.step_func(function() { + assert_unreached('got error event'); + }); + t.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\nx\n00:00:01.000 --> 00:00:02.000\ntest\n\n'); + t.track.mode = 'showing'; + video.appendChild(t); + }, document.title + ' ' + (crossOriginValue ? crossOriginValue : 'No CORS')); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html new file mode 100644 index 0000000000..3e8c547fc3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>A track with the "default" attribute loads automatically</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="captions" src="resources/default-styles.vtt"> + <track kind="captions" src="resources/metadata-area.vtt"> + <track kind="captions" src="resources/webvtt-file.vtt" id="default" default> + <script> + async_test(function(t) { + var timer = null; + var tracks = document.querySelectorAll("track"); + for (var track of tracks) { + track.onload = t.step_func(function() { + assert_equals(event.target.readyState, HTMLTrackElement.LOADED); + assert_equals(event.target.id, "default"); + assert_true(event.target.default); + // End the test after a brief pause so we allow other tracks to load if they will. + if (timer) + clearTimeout(timer); + timer = t.step_timeout(t.step_func_done(), 200); + }); + } + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html new file mode 100644 index 0000000000..ce9f73335a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<title>Track deletion during setup</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/metadata.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + t.step_timeout(function() { + video.parentNode.removeChild(video); + }, 61); + + track.onload = t.step_func(function() { + var track2 = document.createElement("track"); + video.appendChild(track2); + t.step_timeout(t.step_func_done(), 100); + }); + + assert_equals(track.readyState, HTMLTrackElement.NONE); + assert_equals(track.track.mode, "disabled"); + track.track.mode = "hidden"; + + video.src = getVideoURI("/media/test"); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html new file mode 100644 index 0000000000..038e6f6ba7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Adding cues to a disabled text track</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var cueDuration = 0.1; + var video = document.createElement("video"); + var track = video.addTextTrack("subtitles"); + track.mode = "disabled"; + + for (var i = 0; i < 10; ++i) { + var start = i * cueDuration; + var end = start + cueDuration; + track.addCue(new VTTCue(start, end, "Test Cue " + i)); + } + + // Waiting for 2 cue durations to elapse. + video.ontimeupdate = t.step_func(function(event) { + if (event.target.currentTime < (2 * cueDuration)) + return; + + // End test after at least 2 cueDurations to make sure the test + // would have gone through the period where the first 2 cues would + // have been rendered if the track was not disabled. + t.done(); + }); + + video.src = getVideoURI("/media/test"); + video.play(); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html new file mode 100644 index 0000000000..d517b9d12c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>Disabling a track</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="subtitles" src="resources/captions.vtt"/> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + video.textTracks[0].mode = "disabled"; + + // Waiting for the duration of the first cue to elapse. + video.ontimeupdate = t.step_func(function (event) { + if (event.target.currentTime < 1) + return; + + // End test after the duration of the first cue to make sure + // the test would have gone through the period where this cue + // would have been rendered if the track was not disabled. + t.done(); + }); + + video.src = getVideoURI("/media/test"); + video.play(); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html new file mode 100644 index 0000000000..ff447f33f2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Simple DOM mutations with track element</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() { + var video = document.createElement("video"); + var testTrack = document.createElement("track"); + + // Append the track element to the video element. + video.appendChild(testTrack); + + // Set the mode of the text track to "showing". + testTrack.track.mode = "showing"; +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-aborted-load.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-aborted-load.html new file mode 100644 index 0000000000..234e087313 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-aborted-load.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>HTMLTrackElement 'src' attribute changed, load pending</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#start-the-track-processing-model"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video></video> +<script> +async_test(t => { + const track = document.createElement('track'); + track.onload = t.unreached_func('first source should not load'); + track.onerror = t.step_func_done(); + track.src = 'resources/settings.vtt?pipe=trickle(d3600)'; + track.track.mode = 'hidden'; + document.querySelector('video').appendChild(track); + t.step_timeout(() => { + track.src = 'resources/entities.vtt'; + }, 0); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html new file mode 100644 index 0000000000..dd97d0522d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<title>HTMLTrackElement 'src' attribute mutations</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/settings.vtt" default> + <script> + async_test(function(t) { + var cues = null; + var testTrack = document.querySelector("track"); + var stage = 0; + var timer = null; + function step_onLoad() { + switch (stage) { + case 0: + cues = testTrack.track.cues; + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after first loading of the track"); + assert_equals(cues.length, 4, "Number of cues after first loading of the track"); + ++stage; + testTrack.src = "resources/non-existing-file.vtt"; // this should fail + break; + case 1: + case 3: + case 4: + assert_unreached("'error' event did not fire, stage = " + stage); + break; + case 2: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after loading of the second track"); + assert_equals(cues.length, 4, "Number of cues after loading of the second track"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + ++stage; + testTrack.src = ""; // this should fail + assert_equals(cues.length, 0, "cues list is reset immediately after 'src' mutation with the new URL"); + // This should raise onError event. If no, we'll know about this after some time. + timer = t.step_timeout(t.unreached_func("'error' event is not fired when an empty URL is set"), 100); + break; + default: + assert_unreached("unexpected stage number = " + stage); + break; + } + } + + function step_onError() { + switch (stage) { + case 0: + case 2: + assert_unreached("'error' event fired, stage = " + stage); + break; + case 1: + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 0, "Number of cues after trying to load non-existing url"); + assert_equals(testTrack.readyState, HTMLTrackElement.ERROR, "readyState after trying to load non-existing url"); + ++stage; + testTrack.src = "resources/settings.vtt"; + break; + case 3: + clearTimeout(timer); + assert_equals(testTrack.readyState, HTMLTrackElement.ERROR, "readyState after setting an empty URL"); + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 0, "Number of cues with an empty URL set"); + ++stage; + testTrack.src = "resources/settings.vtt"; + // error should happen when we remove `src` during loading, so we have to wait a task because loading starts asynchronously. + t.step_timeout(() => { + testTrack.removeAttribute('src'); + // This should raise onError event, so we'll wait for it for some time + timer = t.step_timeout(t.unreached_func("'error' event is not fired when an empty URL is set"), 100); + }, 0); + break; + case 4: + clearTimeout(timer); + assert_equals(testTrack.readyState, HTMLTrackElement.ERROR, "readyState after removing 'src' attr"); + assert_equals(cues.length, 0, "Number of cues after removing 'src' attr"); + t.done(); + break; + default: + assert_unreached("unexpected stage number = " + stage); + break; + } + } + + testTrack.onload = t.step_func(step_onLoad); + testTrack.onerror = t.step_func(step_onError); + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html new file mode 100644 index 0000000000..f3c78668b4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<title>HTMLTrackElement 'src' attribute mutations</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/settings.vtt" default> + <script> + async_test(function(t) { + var cues = null; + var testTrack = document.querySelector("track"); + var stage = 0; + function step_onLoad() { + switch (stage) { + case 0: + cues = testTrack.track.cues; + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after first loading of the track"); + assert_equals(cues.length, 4, "Number of cues after first loading of the track"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + ++stage; + testTrack.src = "resources/entities.vtt"; + assert_equals(cues.length, 0, "cues list is reset immediately after 'src' mutation with the new URL"); + break; + case 1: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED), "readyState after loading of the second track"; + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 7, "Number of cues after loading of the second track"); + assert_equals(cues[cues.length-1].text, 'This & is parsed to the same as &.', "Last cue content check"); + ++stage; + testTrack.src = "resources/settings.vtt"; + break; + case 2: + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after after loading of the first track again"); + assert_equals(cues[cues.length-1].text, 'I said Bear is coming now!!!! Tab separators.', "Last cue content check"); + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 4, "Number of cues after loading of the first track"); + ++stage; + testTrack.src = "resources/settings.vtt"; + // This should not raise onLoad or onError event, so we'll wait for it for some time + t.step_timeout(t.step_func_done(function() { + assert_equals(testTrack.readyState, HTMLTrackElement.LOADED, "readyState after changing 'src' to the same value"); + assert_equals(cues, testTrack.track.cues, ".cues object are the same after 'src' attr mutation"); + assert_equals(cues.length, 4, "Number of cues after changing 'src' to the same value"); + }, 100)); + break; + case 3: + assert_unreached("'load' event should not fire, stage = " + stage); + break; + } + } + + testTrack.onload = t.step_func(step_onLoad); + testTrack.onerror = t.unreached_func("'error' event should not fire"); + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js new file mode 100644 index 0000000000..09c85dd7bc --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js @@ -0,0 +1,83 @@ +function enableAllTextTracks(textTracks) { + for (var i = 0; i < textTracks.length; i++) { + var track = textTracks[i]; + if (track.mode == "disabled") + track.mode = "hidden"; + } +} + +function assert_cues_equal(cues, expected) { + assert_equals(cues.length, expected.length); + for (var i = 0; i < cues.length; i++) { + assert_equals(cues[i].id, expected[i].id); + assert_equals(cues[i].startTime, expected[i].startTime); + assert_equals(cues[i].endTime, expected[i].endTime); + assert_equals(cues[i].text, expected[i].text); + } +} + +function assert_cues_match(cues, expected) { + assert_equals(cues.length, expected.length); + for (var i = 0; i < cues.length; i++) { + var cue = cues[i]; + var expectedItem = expected[i]; + for (var property of Object.getOwnPropertyNames(expectedItem)) + assert_equals(cue[property], expectedItem[property]); + } +} + +function assert_cues_html_content(cues, expected) { + assert_equals(cues.length, expected.length); + for (var i = 0; i < cues.length; i++) { + var expectedItem = expected[i]; + var property = Object.getOwnPropertyNames(expectedItem)[0]; + var propertyValue = expectedItem[property]; + assert_equals(propertyValue(cues[i]), expectedItem.expected); + } +} + +function check_cues_from_track(src, func) { + async_test(function(t) { + var video = document.createElement("video"); + var trackElement = document.createElement("track"); + trackElement.src = src; + trackElement.default = true; + video.appendChild(trackElement); + + trackElement.onload = t.step_func_done(function() { + func(trackElement.track); + }); + }, "Check cues from " + src); +} + +function assert_cue_fragment(cue, children) { + var fragment = createFragment(children); + assert_true(fragment.isEqualNode(cue.getCueAsHTML())); +} + +function assert_cue_fragment_as_textcontent(cue, children) { + var fragment = createFragment(children); + assert_equals(cue.getCueAsHTML().textContent, fragment.textContent); +} + +function createFragment(children) { + var fragment = document.createDocumentFragment(); + cloneChildrenToFragment(fragment, children); + return fragment; +} + +function cloneChildrenToFragment(root, children) { + for (var child of children) { + var childElement; + if (child.type == "text") { + childElement = document.createTextNode(child.value); + } else { + childElement = document.createElement(child.type); + var styles = child.style || {}; + for (var attr of Object.getOwnPropertyNames(styles)) + childElement[attr] = styles[attr]; + cloneChildrenToFragment(childElement, child.value); + } + root.appendChild(childElement); + } +}
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html new file mode 100644 index 0000000000..f0223fda64 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>TextTrack "id" attribute</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track id="LoremIpsum" src="resources/captions-fast.vtt" default> + <script> + test(function() { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + var textTrack = track.track; + + // Test default attribute value. + assert_equals(textTrack.id, "LoremIpsum"); + assert_equals(video.textTracks[0].id, "LoremIpsum"); + + // Make sure we can look up tracks by id. + assert_equals(video.textTracks.getTrackById("LoremIpsum"), textTrack); + + // Test that it's readonly. + textTrack.id = "newvalue"; + assert_equals(textTrack.id, "LoremIpsum"); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html new file mode 100644 index 0000000000..28b4f82688 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<title>Inserting a track element immediately after video load</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +async_test(function(t) { + var video = document.createElement('video'); + video.src = getVideoURI('/media/test'); + video.load(); + video.appendChild(document.createElement('track')); + video.onloadedmetadata = t.step_func_done(); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html new file mode 100644 index 0000000000..bae1852cf8 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Very large timestamp is parsed correctly</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/large-timestamp.vtt" default> + <script> + async_test(function(t) { + var testTrack = document.querySelector("track"); + testTrack.onload = t.step_func_done(function() { + assert_equals(testTrack.track.cues.length, 1); + var cue = testTrack.track.cues[0]; + assert_equals(parseInt(cue.id), 1); + assert_equals(cue.startTime / 3600, 1234567); + assert_equals(cue.endTime / 3600, 1234567890); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html new file mode 100644 index 0000000000..8e232bff53 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Error event on HTMLTrackElement and ERROR readyState on TextTrack</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="junk" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + track.onerror = t.step_func_done(function() { + assert_equals(track.readyState, HTMLTrackElement.ERROR); + }); + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html new file mode 100644 index 0000000000..62a68f6543 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set on the element</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/webvtt-file.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + track.onload = t.step_func_done(function() { + assert_equals(track.readyState, HTMLTrackElement.LOADED); + }); + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html new file mode 100644 index 0000000000..e569eeb96f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<title>Load event on HTMLTrackElement and LOADED readyState on TextTrack when src is set from JavaScript</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track> +</video> +<script> +async_test(function(t) { + var track = document.querySelector("track"); + assert_equals(track.readyState, HTMLTrackElement.NONE); + + track.onload = t.step_func_done(function() { + assert_equals(track.readyState, HTMLTrackElement.LOADED); + }); + + track.src = "resources/webvtt-file.vtt"; + track.track.mode = "hidden"; +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html new file mode 100644 index 0000000000..6b46bf4e34 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Cues are properly removed from the active cue list when their track changes mode to disabled</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/captions-gaps.vtt" kind="captions" default > + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var testTrack = document.querySelector("track"); + + video.src = getVideoURI("/media/counting"); + video.oncanplaythrough = t.step_func(startTest); + video.onseeked = t.step_func_done(seeked); + + function startTest() { + // Set the mode of the text track to "showing". + testTrack.track.mode = "showing"; + // Seek to a time with a caption. + video.currentTime = 1.5; + } + + function seeked() { + // Set the mode of the text track to "hidden", then to "showing" again. + testTrack.track.mode = "hidden"; + testTrack.track.mode = "showing"; + + // Set the mode of the text track to "disabled". + testTrack.track.mode = "disabled"; + } + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html new file mode 100644 index 0000000000..3ec47a39e2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<title>A track appended after the initial track configuration does not change other tracks</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="metadata" src="resources/metadata.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector('video'); + + var track1 = document.querySelectorAll('track')[0]; + assert_equals(track1.readyState, HTMLTrackElement.NONE); + assert_equals(track1.track.mode, 'disabled'); + + video.src = getVideoURI('/media/test'); + video.oncanplaythrough = t.step_func(canplaythrough); + track1.onload = t.step_func(metadataTrackLoaded); + + function canplaythrough() { + // check initial metadata track state. + assert_equals(track1.readyState, HTMLTrackElement.NONE); + assert_equals(track1.track.mode, 'disabled'); + assert_equals(track1.track.cues, null); + track1.track.mode = 'hidden'; + } + + function metadataTrackLoaded() { + // check metadata track state. + assert_equals(track1.readyState, HTMLTrackElement.LOADED); + assert_equals(track1.track.mode, 'hidden'); + assert_equals(track1.track.cues.length, 12); + assert_equals(track1.track.cues[11].startTime, 22); + + // Add a caption track, and explicitly enable it. + track2 = document.createElement('track'); + track2.setAttribute('kind', 'captions'); + track2.setAttribute('default', 'default'); + track2.setAttribute('src', 'resources/webvtt-file.vtt'); + track2.track.mode = 'showing'; + track2.onload = t.step_func(captionsTrackLoaded); + video.appendChild(track2); + } + + function captionsTrackLoaded() { + // Check that metadata track state has not changed. + assert_equals(track1.readyState, HTMLTrackElement.LOADED); + assert_equals(track1.track.mode, 'hidden'); + // and that the caption track state is correct. + assert_equals(track2.readyState, HTMLTrackElement.LOADED); + assert_equals(track2.track.mode, 'showing'); + + video.textTracks.onaddtrack = t.step_func_done(trackAdded); + // add a subtitle track with video.addTextTrack(). + track3 = video.addTextTrack('subtitles', 'Subtitle Track', 'en'); + track3.mode = 'showing'; + } + + function trackAdded(event) { + // Check that metadata track state has not changed. + assert_equals(track1.readyState, HTMLTrackElement.LOADED); + assert_equals(track1.track.mode, 'hidden'); + // and that the caption track state has not changed. + assert_equals(track2.readyState, HTMLTrackElement.LOADED); + assert_equals(track2.track.mode, 'showing'); + // and that the subtitle track state is correct. + assert_equals(event.target, video.textTracks); + assert_true(event instanceof window.TrackEvent); + assert_equals(event.track, video.textTracks[video.textTracks.length - 1]); + assert_equals(track3.mode, 'showing'); + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html new file mode 100644 index 0000000000..2e29d70469 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>A "metadata" track does not load automatically, but it does load when the mode is changed</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="metadata" src="resources/metadata.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + // Check initial metadata track state. + var track = document.querySelectorAll("track")[0]; + assert_equals(track.readyState, HTMLTrackElement.NONE); + assert_equals(video.textTracks[0].mode, "disabled"); + + video.src = getVideoURI("/media/test"); + video.oncanplaythrough = t.step_func(canplaythrough); + track.onload = t.step_func_done(trackLoaded); + + function trackLoaded() { + assert_equals(track.readyState, HTMLTrackElement.LOADED); + assert_equals(track.track.mode, "hidden"); + assert_equals(video.textTracks[0].cues.length, 12); + assert_equals(video.textTracks[0].cues[11].startTime, 22); + } + + function canplaythrough() { + assert_equals(track.readyState, HTMLTrackElement.NONE); + assert_equals(video.textTracks[0].mode, "disabled"); + assert_equals(video.textTracks[0].cues, null); + // Change metadata track mode so it loads. + video.textTracks[0].mode = "hidden"; + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html new file mode 100644 index 0000000000..206ac9968f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<title>TextTrack mode attribute</title> +<meta name="timeout" content="long"> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/captions-fast.vtt" default> + <script> + async_test(function(t) { + var video = document.querySelector("video"); + var track = document.querySelector("track"); + if (track.readyState != HTMLTrackElement.LOADED) { + assert_not_equals(track.readyState, HTMLTrackElement.ERROR, + "track failed to load resource."); + track.onload = t.step_func(trackLoaded); + } else { + trackLoaded(); + } + + var cueCount = 0; + var textTrack; + function trackLoaded() { + textTrack = track.track; + // Test default attribute value. + assert_equals(textTrack.mode, "showing"); + assert_equals(video.textTracks[0].mode, "showing"); + // Set to bogus value, should return default. + var value = "bogus"; + textTrack.mode = value; + assert_equals(textTrack.mode, "showing"); + assert_equals(video.textTracks[0].mode, "showing"); + + // Set to numeric value (no longer supported), should return default. + textTrack.mode = 2; + assert_equals(textTrack.mode, "showing"); + assert_equals(video.textTracks[0].mode, "showing"); + + // Set to known values. + setModeAndCheck("disabled"); + + video.src = getVideoURI("/media/test"); + video.play(); + + // Wait for end of first cue (no events should fire while track is disabled). + video.ontimeupdate = () => { + if (video.currentTime > 0.4) { + testHiddenAndShowing(); + video.ontimeupdate = null; + } + } + } + + track.oncuechange = t.step_func(function(event) { + cueCount++; + // As the 'enter' and the 'exit' event would be fired for the second + // and the third cue, so there would be 4 times 'oncuechange' event. + if (cueCount == 4) + t.done(); + }); + + function setModeAndCheck(value) { + textTrack.mode = value; + assert_equals(textTrack.mode, value); + assert_equals(video.textTracks[0].mode, value); + if (value == "disabled") + assert_equals(textTrack.cues, null); + } + + function testHiddenAndShowing() { + setModeAndCheck("hidden"); + setModeAndCheck("showing"); + } + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html new file mode 100644 index 0000000000..2708879424 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>Add and remove track node</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +test(function() { + var video = document.createElement('video'); + var tracka = document.createElement('track'); + video.appendChild(tracka); + var trackb = document.createElement('track'); + video.appendChild(trackb); + + // Adding tracks outside the DOM tree. + assert_array_equals(video.textTracks, [tracka.track, trackb.track]); + + // Inserting the parent video element into the document. + document.body.appendChild(video); + assert_array_equals(video.textTracks, [tracka.track, trackb.track]); + + // Inserting and removing another track in the document. + var trackc = document.createElement('track'); + video.appendChild(trackc); + assert_array_equals(video.textTracks, [tracka.track, trackb.track, trackc.track]); + + trackb.parentNode.removeChild(trackb); + assert_array_equals(video.textTracks, [tracka.track, trackc.track]); + + // Removing the video from the document. + document.body.removeChild(video); + assert_array_equals(video.textTracks, [tracka.track, trackc.track]); + + tracka.parentNode.removeChild(tracka); + assert_array_equals(video.textTracks, [trackc.track]); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html new file mode 100644 index 0000000000..176e0065c5 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Removing an active cue</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video></video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + video.src = getVideoURI("/media/test"); + + // Add a text track to the video element. + video.addTextTrack("captions", "regular captions track", "en"); + + // Add a cue to the track with enter event listener. + var cue = new VTTCue(0, 4, "Random"); + cue.onenter = t.step_func_done(removeActiveCue); + + var track = video.textTracks[0]; + track.addCue(cue); + + function removeActiveCue() { + assert_equals(track.activeCues.length, 1); + + // Remove the cue while it is active. + track.removeCue(track.activeCues[0]); + + // No crash. PASS. + } + + // Play the video and remove cue when it becomes active. + video.play(); + track.mode = "showing"; +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html new file mode 100644 index 0000000000..95929bc83f --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>Removing a track by setting video.innerHTML doesn't crash</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track default src="resources/captions-gaps.vtt"> + <script> + // https://bugs.webkit.org/show_bug.cgi?id=100981 + async_test(function(t) { + var firstSeek = true; + var video = document.querySelector('video'); + video.onseeked = t.step_func(function() { + if (!firstSeek) { + t.done(); + return; + } + + // Remove the text track + video.innerHTML = ''; + + // Seek again to force a repaint. + video.currentTime = 7.9; + firstSeek = false; + }); + + video.currentTime = 0.5; + video.src = getVideoURI('/media/counting'); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html new file mode 100644 index 0000000000..1c854aca0e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<title>Attaching a media element again to the document, having a child track that failed loading doesn't block video from playing</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/no-webvtt.vtt" kind="captions" default> + <script> + async_test(function(t) { + var video = document.querySelector('video'); + video.src = getVideoURI('/media/test'); + video.oncanplaythrough = t.step_func(canplaythrough); + + function canplaythrough() { + video.oncanplaythrough = null; + var track = document.querySelector('track'); + + // Track should have error as ready state. + assert_equals(track.readyState, HTMLTrackElement.ERROR); + + // Remove the video element from body. + document.body.removeChild(video); + + // Reset the video src attribute to re-trigger resource selection for tracks. + video.src = getVideoURI('/media/test'); + + // Append the video element back to the body. + document.body.appendChild(video); + + assert_equals(track.readyState, HTMLTrackElement.ERROR); + + video.onplaying = t.step_func_done(); + video.play(); + // The video should start playing. + } + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html new file mode 100644 index 0000000000..4be040c5f8 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<title>Removing a track element before it has been processed doesn't crash</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="video_container"></div> +<script> +var mediaFile = getVideoURI("/media/test"); +document.getElementById("video_container").innerHTML = "<video src='" + mediaFile + "' controls ><track kind='captions' src='resources/simple-captions.vtt' default ></video>"; +test(function() { +// https://bugs.webkit.org/show_bug.cgi?id=85095 +// Test passes if it doesn't crash. +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html new file mode 100644 index 0000000000..7dcfe68318 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html @@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <script src="/common/media.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + async_test(function(test) + { + var video = document.createElement("video"); + + // Create an out-of-band text track by adding a track element. + var trackElement = document.createElement('track'); + + trackElement.addEventListener("error", test.step_func(function() + { + assert_unreached("'error' event on track element should not fire.") + })); + + video.appendChild(trackElement); + trackElement.src = 'resources/webvtt-file.vtt'; + trackElement.track.mode = 'hidden'; + + assert_equals(video.textTracks.length, 1); + var outOfBandTrack = video.textTracks[0]; + + // Load a media file with an inband text track. + var inbandTrack = null; + var url = "resources/vp8-vorbis-webvtt.webm" + + var firstAddTrackHandler = test.step_func(function() + { + assert_equals(event.target, video.textTracks); + assert_equals(event instanceof window.TrackEvent, true); + if (event.track == outOfBandTrack) { + return; + } + + assert_equals(inbandTrack, null); + assert_equals(video.textTracks.length, 2); + assert_equals(event.track, video.textTracks[1]); + inbandTrack = event.track; + + video.textTracks.removeEventListener("addtrack", firstAddTrackHandler); + + // Clear .src to force the inband track to get destroyed. + video.src = ""; + + // Verify that the inband track was removed. + assert_not_equals(inbandTrack, null); + assert_equals(video.textTracks.length, 1); + assert_equals(video.textTracks[0], outOfBandTrack); + + // Load the URL again to trigger another 'addtrack' event to make sure + // no 'removetrack' event was queued. + video.src = url; + video.textTracks.addEventListener("addtrack", test.step_func(function() + { + assert_equals(video.textTracks.length, 2); + test.done(); + })); + }); + video.textTracks.addEventListener("addtrack", firstAddTrackHandler); + + video.textTracks.addEventListener("removetrack", test.step_func(function() + { + assert_unreached("'removetrack' event should not fire.") + })); + + video.src = url; + }, "Tests that the 'removetrack' event is NOT fired for inband TextTrack on a failed load."); + + </script> + </body> +</html> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html new file mode 100644 index 0000000000..d5695cd302 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <script src="/common/media.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + async_test(function(test) + { + var video = document.createElement("video"); + var track; + + function trackRemoved() + { + assert_equals(event.target, video.textTracks); + assert_equals(event instanceof window.TrackEvent, true); + assert_equals(event.track, track); + test.done(); + } + + var trackElement = document.createElement('track'); + video.appendChild(trackElement); + + trackElement.src = 'resources/webvtt-file.vtt'; + trackElement.track.mode = 'hidden'; + + assert_equals(video.textTracks.length, 1); + + track = video.textTracks[0]; + video.removeChild(trackElement); + video.textTracks.addEventListener("removetrack", test.step_func(trackRemoved)); + }, "Tests that the 'removetrack' event is fired when an out-of-band TextTrack is removed."); + </script> + </body> +</html> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html new file mode 100644 index 0000000000..c4d88a35f0 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Multiple 'metadata' tracks with 'default'</title> +<script src="/common/media.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="metadata" src="resources/default-styles.vtt" id="t1"> + <track kind="metadata" src="resources/class.vtt" default id="t2hidden"> + <track kind="metadata" src="resources/metadata-area.vtt" id="t3"> + <track kind="metadata" src="resources/webvtt-file.vtt" default id="t4hidden"> +</video> +<script> +async_test(function() { + var video = document.querySelector('video'); + video.onloadstart = this.step_func_done(function() { + assert_equals(video.textTracks.length, 4); + for (var track of video.textTracks) { + assert_equals(track.kind, 'metadata'); + + var trackElement = document.getElementById(track.id); + if (track.id.indexOf('hidden') != -1) { + assert_true(trackElement.default); + assert_equals(track.mode, 'hidden'); + } else { + assert_false(trackElement.default); + assert_equals(track.mode, 'disabled'); + } + } + }); + + video.src = getVideoURI("/media/test"); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-task-order.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-task-order.html new file mode 100644 index 0000000000..522d067adf --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-task-order.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>HTMLTrackElement Text Track Selection Task Order</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +/** + * This test is used to ensure that we queue 'honor user preferences for automatic + * text track selection' as a macro task, not a micro task. In this test, we + * trigger a media event before queuing a text track selection task, and check + * the text track's mode to know whether the text track selection runs after the + * task for media event. + */ +async_test(function(t) { + let video = document.createElement("video"); + video.play(); + video.onplay = t.step_func(startedPlay); + + // When we create a text track element, it queue a task to run automatic + // text track selection later. + let track = document.createElement("track"); + track.default = true; + video.appendChild(track); + assert_equals(track.track.mode, "disabled", "Text track's mode is disabled by default."); + + function startedPlay() { + assert_equals(track.track.mode, "disabled", "Text track selection hasn't started yet."); + track.onerror = t.step_func_done(trackError); + } + + function trackError() { + assert_equals(track.track.mode, "showing", "Text track selection modified track's mode."); + t.done(); + } +}); + +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html new file mode 100644 index 0000000000..73241ce0d4 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<title>TextTrackCueList functionality: length, operator[], and getCueById()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/settings.vtt" kind="captions" default> + <script> + async_test(function(t) { + var testTrack = document.querySelector("track"); + + testTrack.onload = t.step_func_done(function() { + var cues = testTrack.track.cues; + + // Testing TextTrackCueList length. + assert_equals(cues.length, 4); + + // Testing TextTrackCueList [] operator. + assert_equals(cues[0].id, "1"); + assert_equals(cues[3].id, "4"); + assert_equals(cues[4], undefined); + + // Testing TextTrackCueList getCueById(). + assert_equals(cues.getCueById("1").startTime, 0); + assert_equals(cues.getCueById("4").startTime, 121); + assert_equals(cues.getCueById("junk"), null); + }); + }); + </script> +</video> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html new file mode 100644 index 0000000000..4d006fcefb --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>TextTracks in a TextTrackList are kept in the correct order</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track kind="captions" src="resources/webvtt-file.vtt"> +</video> +<script> +test(function() { + var video = document.querySelector("video"); + + // Add a track with video.addTextTrack(). + video.addTextTrack("descriptions", "Descriptions Track", "en"); + + // Add a track element with DOM API. + var trackElement = document.createElement("track"); + trackElement.setAttribute("kind", "chapters"); + video.appendChild(trackElement); + + // Verify track order. + assert_equals(video.textTracks.length, 3); + assert_equals(video.textTracks[0].kind, "captions"); + assert_equals(video.textTracks[1].kind, "chapters"); + assert_equals(video.textTracks[2].kind, "descriptions"); + + // Verify the default parameters of the text track object + // returned by addTextTrack(). + assert_equals(video.textTracks[2].mode, "hidden"); + assert_not_equals(video.textTracks[2].cues, null); + assert_equals(video.textTracks[2].cues.length, 0); + + // Add another track element, it should insert + // before the addTextTrack() track. + trackElement = document.createElement("track"); + trackElement.setAttribute("kind", "metadata"); + video.appendChild(trackElement); + + assert_equals(video.textTracks.length, 4); + assert_equals(video.textTracks[0].kind, "captions"); + assert_equals(video.textTracks[1].kind, "chapters"); + assert_equals(video.textTracks[2].kind, "metadata"); + assert_equals(video.textTracks[3].kind, "descriptions"); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html new file mode 100644 index 0000000000..07ebfd622b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<title>Cue text position and alignment from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/align-positioning.vtt"> + <track src="resources/align-positioning-bad.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + assert_equals(trackElements.length, video.textTracks.length); + for (var i = 0; i < trackElements.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrackError(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { position : 10, align : "start" }, + { position : 20, align : "center" }, + { position : 80, align : "end" } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + var expected = [ + { position : 10, align : "center" }, + { position : "auto", align : "center" }, + { position : "auto", align : "center" } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html new file mode 100644 index 0000000000..deb389916a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<title>Cue alignment, line and text position from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/align-text-line-position.vtt"> + <track src="resources/align-text-line-position-bad.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + assert_equals(trackElements.length, video.textTracks.length); + for (var i = 0; i < trackElements.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrackError(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { align : "start", position : 10, line : 0, snapToLines : false }, + { align : "start", position : "auto", line : 0, snapToLines : true }, + { align : "center", position : 80, line : 80, snapToLines : false }, + { align : "end", position : 30, line : 5, snapToLines : true }, + { align : "center", position : 60, line : -3, snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + var expected = [ + { align : "center", position : "auto", line : "auto", snapToLines : true }, + { align : "end", position : 0, line : "auto", snapToLines : true }, + { align : "center", position : 60, line : -3, snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html new file mode 100644 index 0000000000..e8f47e876a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<title>Cue alignment from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/alignment.vtt", testTrack); +check_cues_from_track("resources/alignment-ltr.vtt", testTrack); + +check_cues_from_track("resources/alignment-bad.vtt", function(track) { + var expected = [ + { align: "center" }, + { align: "center" }, + { align: "center" }, + { align: "center" } + ]; + + assert_cues_match(track.cues, expected); +}); + +function testTrack(track) { + var expected = [ + { align: "start" }, + { align: "center" }, + { align: "end" }, + { align: "center" } + ]; + + assert_cues_match(track.cues, expected); +} +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html new file mode 100644 index 0000000000..114aebc38c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>Cues are affected neither by multiple newlines \n, \r, and \r\n nor by the absence of a seperating line</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cues.vtt", function(track) { + var expected = [ + { id: "1", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "2", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "3", startTime: 61, endTime: 361200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cues-no-separation.vtt", function(track) { + var expected = [ + { id: "1", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!\n2" }, + { id: "", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "", startTime: 61, endTime: 361200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html new file mode 100644 index 0000000000..c138f96af5 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Parser properly ignores a UTF-8 BOM character at the beginning of a file and all other cues are properly parsed</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/bom.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "I said Bear is coming!!!!" + } + ]; + + var cues = track.track.cues; + assert_equals(cues.length, 2); + assert_cues_equal(cues, expected); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html new file mode 100644 index 0000000000..ecc5a57497 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<title>Tests cues with class markup <c>.</title> +<meta name="timeout" content="long"> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/class.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "span", style: { className: "black" }, + value: [ { type: "text", value: "Bear is Coming!!!!!" } ] } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "span", style: { className: "green" }, + value: [ { type: "text", value: "I said Bear is coming!!!!" } ] } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "span", style: { className: "red uppercase" }, + value: [ { type: "text", value: "Bear is coming now" } ] }, + { type: "text", value: "!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); +}); + +check_cues_from_track("resources/class-bad.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "span", value: [ { type: "text", value: "Bear is Coming!!!!!" } ] }, + { type: "text", value: "\nThe space signified an annotation start." } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "span", style: { className: "red&large" }, + value: [ { type: "text", value: "I said Bear is coming!!!!" } ] }, + { type: "text", value: "\nProbably should only allow characters that CSS allows in class names." } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "span", style: { className: "9red upper+case" }, + value: [ { type: "text", value: "Bear is coming now" } ] }, + { type: "text", value: "!!!!\nProbably should only allow characters that CSS allows in class names." } + ]; + assert_cue_fragment(track.cues[2], children); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html new file mode 100644 index 0000000000..02b0a15187 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>Any text other than "-->" is recognized as optional cue identifier</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-id.vtt", function(track) { + var expected = [ + { id: "random_id", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "another random identifier", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "identifier--too", startTime: 61, endTime: 120.5, text: "I said Bear is coming now!!!!" }, + { id: "identifier--too", startTime: 121, endTime: 180.5, text: "Duplicate identifier" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cue-id-error.vtt", function(track) { + var expected = [ + { id: "", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "", startTime: 61, endTime: 1200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html new file mode 100644 index 0000000000..b2f4b77083 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Empty cue identifiers, but having "-->" leads to discarded cue</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-no-id.vtt", testTrack); +check_cues_from_track("resources/cue-no-id-error.vtt", testTrack); + +function testTrack(track) { + var expected = [ + { id: "", startTime: 0, endTime: 30.5, text: "Bear is Coming!!!!!" }, + { id: "", startTime: 31, endTime: 60.5, text: "I said Bear is coming!!!!" }, + { id: "", startTime: 61, endTime: 1200.5, text: "I said Bear is coming now!!!!" } + ]; + + assert_cues_match(track.cues, expected); +} +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html new file mode 100644 index 0000000000..6a104916b7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>A cue is recovered when a line with a "-->" is encountered without blank line separator</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-recovery-header.vtt", testTrack); +check_cues_from_track("resources/cue-recovery-note.vtt", testTrack); +check_cues_from_track("resources/cue-recovery-cuetext.vtt", testTrack); + +function testTrack(track) { + var expected = [ + { startTime: 0, endTime: 1, text: "Valid cue 1" }, + { startTime: 2, endTime: 3, text: "Valid cue 2" } + ]; + + assert_cues_match(track.cues, expected); +} +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html new file mode 100644 index 0000000000..a1243a95e7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>Cue size and alignment from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-size-align.vtt", function(track) { + var expected = [ + { size: 100, align: "start" }, + { size: 10, align: "end" }, + { size: 0, align: "center" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cue-size-align-bad.vtt", function(track) { + var expected = [ + { size: 100, align: "center" }, + { size: 100, align: "end" }, + { size: 100, align: "center" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html new file mode 100644 index 0000000000..d8e03edce7 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>Cue size from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/cue-size.vtt", function(track) { + var expected = [ + { size: 100 }, + { size: 10 }, + { size: 0 } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/cue-size-bad.vtt", function(track) { + var expected = [ + { size: 100 }, + { size: 100 }, + { size: 100 } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html new file mode 100644 index 0000000000..8d2569993c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Degenerate cues without separating blank lines</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/degenerate-cues.vtt", function(track) { + var expected = [ + { startTime: 0, endTime: 1, text: "" }, + { startTime: 2, endTime: 3, text: "" }, + { startTime: 4, endTime: 5, text: "" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html new file mode 100644 index 0000000000..e1f5570250 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Empty cues should not be discarded</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/empty-cue.vtt", function(track) { + assert_equals(track.cues.length, 3); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html new file mode 100644 index 0000000000..a5295795ef --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>Entities in the cue text</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +var getCueAsHTMLContent = function(cue) { + return cue.getCueAsHTML().textContent; +}; + +check_cues_from_track("resources/entities.vtt", function(track) { + var expected = [ + { innerHTML: getCueAsHTMLContent, + expected: "This cue has an ampersand & character." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a less than < character." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a greater than > character." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a Left-to-Right Mark \u200e." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a Right-to-Left Mark \u200f." }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a non-breaking space \u00a0." }, + { innerHTML: getCueAsHTMLContent, + expected: "This & is parsed to the same as &." } + ]; + + assert_cues_html_content(track.cues, expected); +}); + +check_cues_from_track("resources/entities-wrong.vtt", function(track) { + var expected = [ + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a less than ", }, + { innerHTML: getCueAsHTMLContent, + expected: "This cue has a greater than > character.\nSince it's not related to a < character,\nit's just interpreted as text.", } + ]; + + assert_cues_html_content(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html new file mode 100644 index 0000000000..f9b35576f3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<title>Optional comment area under the "WEBVTT" file header is properly ignored and also, default settings and styling are currently ignored (treated as faulty cues)</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/default-styles.vtt"> + <track src="resources/metadata-area.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrack(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "I said Bear is coming!!!!" + } + ]; + + assert_cues_equal(video.textTracks[index].cues, expected); + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html new file mode 100644 index 0000000000..2287cc2830 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>An empty line after an identifier line discards the current cue and restarts the cue loop</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/interspersed-non-cue.vtt", function(track) { + var expected = [ + { text: "First" }, + { text: "Second" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html new file mode 100644 index 0000000000..bea4acb917 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<title>Cue line position from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/line-position.vtt"> + <track src="resources/line-position-bad.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + assert_equals(trackElements.length, video.textTracks.length); + for (var i = 0; i < trackElements.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack(0); + testTrackError(1); + t.done(); + } + + function testTrack(index) { + var expected = [ + { line : 0, snapToLines : false }, + { line : 0, snapToLines : true }, + { line : 50, snapToLines : false }, + { line : 5, snapToLines : true }, + { line : 100, snapToLines : false }, + { line : -1, snapToLines : true }, + { line : 500, snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + var expected = [ + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true }, + { line : "auto", snapToLines : true } + ]; + + assert_cues_match(video.textTracks[index].cues, expected); + } +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html new file mode 100644 index 0000000000..ff4637a8a5 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<title>Magic file header "WEBVTT" leads to the file properly recognized as a WebVTT file</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/webvtt-file.vtt"> + <track src="resources/webvtt-rubbish.vtt"> + <track src="resources/no-webvtt.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + trackElements[0].onload = t.step_func(trackLoaded); + trackElements[1].onload = t.step_func(trackLoaded); + trackElements[2].onerror = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 3) + return; + + testTrack(0); + testTrack(1); + testTrackError(2); + t.done(); + } + + function testTrack(index) { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "I said Bear is coming!!!!" + } + ]; + + assert_cues_equal(video.textTracks[index].cues, expected); + } + + function testTrackError(index) { + assert_cues_equal(video.textTracks[index].cues, []); + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html new file mode 100644 index 0000000000..ceb05dd450 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html @@ -0,0 +1,90 @@ +<!DOCTYPE html> +<title>Cues with <b>, <i>, <u>, <rt> and <ruby> tags</title> +<meta name="timeout" content="long"> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/markup.vtt", function(track) { + assert_equals(track.cues.length, 4); + + var children = [ + { type: "text", value: "The following bear is bold:\n" }, + { type: "b", value: [ { type: "text", value: "Bear" } ] }, + { type: "text", value: " is Coming!!!!!" } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "text", value: "The following bear is in italics and has a class of \"larger\":\n" }, + { type: "i", value: [ { type: "text", value: "Bear" } ] }, + { type: "text", value: " is Coming!!!!!" } + ]; + + var fragment = createFragment(children); + fragment.querySelector("i").className = "larger"; + assert_true(fragment.isEqualNode(track.cues[1].getCueAsHTML())); + + children = [ + { type: "text", value: "The following bear is underlined even though the element has a blank:\nI said " }, + { type: "u", value: [ { type: "text", value: "Bear" } ] }, + { type: "text", value: " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); + + children = [ + { type: "text", value: "The following bear is ruby annotated:\nI said " }, + { + type: "ruby", + value: [ + { type: "text", value: "Bear" }, + { + type: "rt", + value: [ { type: "text", value: "bear with me" } ] + } + ] + }, + { type: "text", value: " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[3], children); +}); + +check_cues_from_track("resources/markup-bad.vtt", function(track) { + assert_equals(track.cues.length, 4); + + var children = [ + { type: "text", value: "The following bear starts bold but end is broken:\n" }, + { + type: "b", + value: + [ + { type: "text", value: "Bear" }, + { type: "text", value: " is Coming!!!!!" } + ] + } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "text", value: "The following bear is not in italics but the markup is removed:\n" }, + { type: "text", value: "Bear" }, + { type: "text", value: " is Coming!!!!!" } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "The following bear is not underlined and markup is removed:\nI said " }, + { type: "text", value : "Bear" }, + { type: "text", value : " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); + + children = [ + { type: "text", value: "The following bear is not ruby annotated and markup is removed:\nI said " }, + { type: "text", value: "Bear" }, + { type: "text", value: "bear with me" }, + { type: "text", value: " is coming!!!!" } + ]; + assert_cue_fragment(track.cues[3], children); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html new file mode 100644 index 0000000000..4da7e6b1b9 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>A cue with no newline at eof is parsed properly</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/no-newline-at-eof.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + } + ]; + + assert_cues_equal(track.track.cues, expected); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html new file mode 100644 index 0000000000..a39a2c37aa --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<title>Cue without timings are ignored</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/no-timings.vtt" default> + <script> + async_test(function(t) { + var track = document.querySelector("track"); + + track.onload = t.step_func_done(function() { + assert_cues_equal(track.track.cues, []); + }); + }); + </script> +</video>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html new file mode 100644 index 0000000000..137a9334f2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-ref.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Reference test for track-webvtt-non-snap-to-lines.html</title> +<script src="/common/reftest-wait.js"></script> +<script src="/common/media.js"></script> +<style> +.container { + position: relative; + display: inline-block; +} +.cue { + position: absolute; + top: 30px; + left: 0px; + font-family: sans-serif; + background: green; + color: rgba(255, 255, 255, 1); + font-size: 7.5px; +} +</style> +<div class="container"> + <video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"> + <script> + document.currentScript.parentNode.src = getVideoURI("/media/test"); + </script> + </video> + <span class="cue">Bear is Coming!!!!!</span> +</div> +</html> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html new file mode 100644 index 0000000000..ec350ff44d --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Position is not adjusted for non snap-to-lines cues</title> +<link rel="match" href="track-webvtt-non-snap-to-lines-ref.html"> +<script src="/common/reftest-wait.js"></script> +<script src="/common/media.js"></script> +<style> +::cue { + background: green; +} +</style> +<video autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();"></video> +<script> +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 1, "Bear is Coming!!!!!"); +cue.snapToLines = false; +cue.line = 20; +cue.align = "left"; +track.addCue(cue); +track.mode = "showing"; +video.src = getVideoURI("/media/test"); +</script> +</html> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html new file mode 100644 index 0000000000..d14a5768d3 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<title>Cue text position from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/positioning.vtt", testTrack); +check_cues_from_track("resources/positioning-ltr.vtt", testTrack); + +check_cues_from_track("resources/positioning-bad.vtt", function(track) { + var expected = [ + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" }, + { position: "auto" } + ]; + + assert_cues_match(track.cues, expected); +}); + +function testTrack(track) { + var expected = [ + { position: 0 }, + { position: 50 }, + { position: "auto" }, + { position: 100 } + ]; + + assert_cues_match(track.cues, expected); +} +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html new file mode 100644 index 0000000000..9ad98ffa1a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>WebVTT settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/settings.vtt", function(track) { + var expected = [ + { line: 100, position: "auto", align: "start", vertical: "" }, + { line: 15, position: 40, align: "center", vertical: "rl" }, + { line: "auto", position: 10, align: "center", vertical: "" }, + { line: 95, position: "auto", align: "end", vertical: "lr" } + ]; + + assert_cues_match(track.cues, expected); +}); + +check_cues_from_track("resources/settings-bad-separation.vtt", function(track) { + var expected = [ + { line: 43, position: 10, align: "center", vertical: "" }, + { line: "auto", position: 50, align: "end", vertical: "" }, + { line: "auto", position: "auto", align: "center", vertical: "" }, + { line: "auto", position: 90, align: "center", vertical: "lr" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html new file mode 100644 index 0000000000..e311f121f2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<title>Cues with <timestamps> tags</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/timestamp.vtt", function(track) { + assert_equals(track.cues.length, 3); + + // TODO(srirama.m): Timestamps are handled as ProcessingInstructions, + // but because ProcessingInstructions are used in XML and not HTML, + // they are ignored here. This should later be tested with oncuechange events. + + var children = [ { type: "text", value: "This cue is painted on." } ]; + assert_cue_fragment_as_textcontent(track.cues[0], children); + + children = [ { type: "text", value: "I said Bear is coming!!!!" } ]; + assert_cue_fragment_as_textcontent(track.cues[1], children); + + children = [ { type: "text", value: "I said Bear is coming now!!!!" } ]; + assert_cue_fragment_as_textcontent(track.cues[2], children); +}); + +check_cues_from_track("resources/timestamp-bad.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ { type: "text", value: "This cue is painted on.\nBut since the last two timestamps are out of order, they are ignored." } ]; + assert_cue_fragment_as_textcontent(track.cues[0], children); + + children = [ { type: "text", value: "I said Bear is coming!!!!\nAll of these timestamps are before the start of the cue, so get ignored." } ]; + assert_cue_fragment_as_textcontent(track.cues[1], children); + + children = [ { type: "text", value: "I said Bear is coming now!!!!\nAll of these timestamps are after the end of the cue, so get ignored." } ]; + assert_cue_fragment_as_textcontent(track.cues[2], children); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html new file mode 100644 index 0000000000..c03e182c79 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<title>Cue timings and various syntax errors in timings, with hours</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/timings-hour.vtt"> + <track src="resources/timings-hour-error.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack0(); + testTrack1(); + t.done(); + } + + function testTrack0() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 60.5, + text : "I said Bear is coming!!!!" + }, + { + id : "3", + startTime : 61, + endTime : 361200.5, + text : "I said Bear is coming now!!!!" + } + ]; + + assert_cues_equal(video.textTracks[0].cues, expected); + } + + function testTrack1() { + // Test that all the cues are ignored. + assert_cues_equal(video.textTracks[1].cues, []); + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html new file mode 100644 index 0000000000..e81ae03cc2 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<title>Cue timings and various syntax errors in timings, without hours</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/timings-no-hour.vtt"> + <track src="resources/timings-no-hour-errors.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack0(); + testTrack1(); + t.done(); + } + + function testTrack0() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "Bear is Coming!!!!!" + }, + { + id : "2", + startTime : 31, + endTime : 60.5, + text : "I said Bear is coming!!!!" + }, + { + id : "3", + startTime : 61, + endTime : 120.5, + text : "I said Bear is coming now!!!!" + }, + { + id : "4", + startTime : 121, + endTime : 180.5, + text : "tab separators" + } + ]; + + assert_cues_equal(video.textTracks[0].cues, expected); + } + + function testTrack1() { + // Test that all the cues are ignored. + assert_cues_equal(video.textTracks[1].cues, []); + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html new file mode 100644 index 0000000000..db1346d23a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>"Skip whitespace" step around cue-timings separator</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/timings-whitespace.vtt", function(track) { + var expected = [ + { id: "1", startTime: 0.1, endTime: 1.5, text: "Single U+0020 SPACE left of cue-timings separator" }, + { id: "2", startTime: 0.1, endTime: 1.5, text: "Single U+0020 SPACE right of cue-timings separator" }, + { id: "3", startTime: 0.1, endTime: 1.5, text: "Single U+0009 TAB left of cue-timings separator" }, + { id: "4", startTime: 0.1, endTime: 1.5, text: "Single U+0009 TAB right of cue-timings separator" }, + { id: "5", startTime: 0.1, endTime: 1.5, text: "Single U+000C FORM FEED left of cue-timings separator" }, + { id: "6", startTime: 0.1, endTime: 1.5, text: "Single U+000C FORM FEED right of cue-timings separator" }, + { id: "7", startTime: 0.1, endTime: 1.5, text: "Several U+0020 SPACE left of cue-timings separator" }, + { id: "8", startTime: 0.1, endTime: 1.5, text: "Several U+0020 SPACE right of cue-timings separator" }, + { id: "9", startTime: 0.1, endTime: 1.5, text: "Several U+0009 TAB left of cue-timings separator" }, + { id: "10", startTime: 0.1, endTime: 1.5, text: "Several U+0009 TAB right of cue-timings separator" }, + { id: "11", startTime: 0.1, endTime: 1.5, text: "Several U+000C FORM FEED left of cue-timings separator" }, + { id: "12", startTime: 0.1, endTime: 1.5, text: "Several U+000C FORM FEED right of cue-timings separator" } + ]; + + assert_cues_match(track.cues, expected); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html new file mode 100644 index 0000000000..1c8f751c2c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>WebVTT two-cue layout after the first cue has ended (reference)</title> +<script src="/common/reftest-wait.js"></script> +<video style="border:1px solid gray"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add a single cue at line -2, where it would be if there was a first +// cue at line -1. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +var cue = new VTTCue(0, 3, "cue 2"); +cue.line = -2; +track.addCue(cue); +track.mode = "showing"; +video.play(); +video.onplaying = function() { + video.onplaying=null; + video.pause(); + takeScreenshot(); +}; +</script> +</html> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html new file mode 100644 index 0000000000..df816ffe2b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>WebVTT two-cue layout after the first cue has ended</title> +<link rel="match" href="track-webvtt-two-cue-layout-after-first-end-ref.html"> +<script src="/common/reftest-wait.js"></script> +<video style="border:1px solid gray"> + <source src="/media/white.webm" type="video/webm"> + <source src="/media/white.mp4" type="video/mp4"> +</video> +<script> +// Add two cues, where the first cue ends before the second. +var video = document.querySelector("video"); +var track = video.addTextTrack("captions"); +let cue1 = new VTTCue(-1, 1, "cue 1"); +track.addCue(cue1); +// As video's duration is 10s, it ensures that this cue would always be displayed. +track.addCue(new VTTCue(0, 10, "cue 2")); +track.mode = "showing"; +video.play(); +cue1.onexit = () => { + cue1.onexit = null; + video.pause(); + takeScreenshot(); +}; +</script> +</html> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html new file mode 100644 index 0000000000..ed3107f89b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<title>Unsupported markup is properly ignored</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +var getCueAsHTMLContent = function(cue) { + return cue.getCueAsHTML().textContent; +}; + +check_cues_from_track("resources/unsupported-markup.vtt", function(track) { + var expected = [ + { + innerHTML: getCueAsHTMLContent, + expected: "Bear is Coming!!!!!\nAnd what kind of a bear it is - just have look." + }, + { + innerHTML: getCueAsHTMLContent, + expected: "\n I said Bear is coming!!!!\n I said Bear is still coming!!!!\n", + }, + { + innerHTML: getCueAsHTMLContent, + expected: "\n I said Bear is coming now!!!!\n \n \n", + } + ]; + + assert_cues_html_content(track.cues, expected); + + var expected_text = [ + { text: "<h1>Bear is Coming!!!!!</h1>\n<p>And what kind of a bear it is - just have <a href=\"webpage.html\">look</a>.</p>" }, + { text: "<ul>\n <li>I said Bear is coming!!!!</li>\n <li>I said Bear is still coming!!!!</li>\n</ul>" }, + { text: "<ol>\n <li>I said Bear is coming now!!!!</li>\n <li><img src=\"bear.png\" alt=\"mighty bear\"></li>\n <li><video src=\"bear_ad.webm\" controls></video></li>\n</ol>" } + ]; + + assert_cues_match(track.cues, expected_text); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html new file mode 100644 index 0000000000..eb44c85ba8 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>UTF-8 encoded characters are recognized properly and different encodings (iconv) are not recognized as a WebVTT file</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video> + <track src="resources/utf8.vtt"> + <track src="resources/iso2022jp3.vtt"> +</video> +<script> +async_test(function(t) { + var video = document.querySelector("video"); + + var trackElements = document.querySelectorAll("track"); + for (var i = 0; i < video.textTracks.length; i++) + trackElements[i].onload = t.step_func(trackLoaded); + + enableAllTextTracks(video.textTracks); + + var numberOfTracksLoaded = 0; + function trackLoaded() { + numberOfTracksLoaded++; + if (numberOfTracksLoaded != 2) + return; + + testTrack0(); + testTrack1(); + t.done(); + } + + function testTrack0() { + var expected = [ + { + id : "1", + startTime : 0, + endTime : 30.5, + text : "景気判断" + }, + { + id : "2", + startTime : 31, + endTime : 1200.5, + text : "電力不足" + } + ]; + + var cues = video.textTracks[0].cues; + assert_equals(cues.length, 2); + assert_cues_equal(cues, expected); + } + + function testTrack1() { + assert_equals(video.textTracks[1].cues.length, 2); + } +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html new file mode 100644 index 0000000000..ace0760740 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>Cue vertical alignment (direction) from settings</title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/valign.vtt", testTrack); +check_cues_from_track("resources/valign-ltr.vtt", testTrack); +check_cues_from_track("resources/valign-bad.vtt", function(track) { + var expected = [ + { vertical: "" }, + { vertical: "" }, + { vertical: "" } + ]; + + assert_cues_match(track.cues, expected); +}); + +function testTrack(track) { + var expected = [ + { vertical: "rl", align: "center", position: "auto" }, + { vertical: "lr", align: "center", position: "auto" }, + { vertical: "rl", align: "start", position: 0 } + ]; + + assert_cues_match(track.cues, expected); +} +</script> diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html new file mode 100644 index 0000000000..5df8b4057a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<title>Cues with voice markup <v></title> +<script src="track-helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +check_cues_from_track("resources/voice.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "span", style: { className: "blue", title: "Speaker" }, + value: [ { type: "text", value: "Bear is Coming!!!!!" } ] }, + { type: "text", value: "\nText span with a class and an annotation." } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "span", style: { title: "Doe Hunter" }, + value: [ { type: "text", value: "I said Bear is coming!!!!" } ] } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "span", style: { className: "blue", title: "Speaker" }, + value: [ { type: "text", value: "Bear is coming now" } ] }, + { type: "text", value: "!!!!" } + ]; + assert_cue_fragment(track.cues[2], children); +}); + +check_cues_from_track("resources/voice-bad.vtt", function(track) { + assert_equals(track.cues.length, 3); + + var children = [ + { type: "text", value: "Bear is Coming!!!!!" }, + { type: "text", value: "\nThis is two annotations for an empty tag." } + ]; + assert_cue_fragment(track.cues[0], children); + + children = [ + { type: "text", value: "I said Bear is coming!!!!" }, + { type: "text", value: "\nThis does not parse as a voice tag." } + ]; + assert_cue_fragment(track.cues[1], children); + + children = [ + { type: "text", value: "I said " }, + { type: "text", value: "Bear is coming now" }, + { type: "text", value: "!!!!\nThis does not parse as a voice tag." } + ]; + assert_cue_fragment(track.cues[2], children); +}); +</script>
\ No newline at end of file diff --git a/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html new file mode 100644 index 0000000000..9cb5824279 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>Float precision of VTTCue attributes line, position and size</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +test(function() { + var cue = new VTTCue(0, 1, 'text'); + + // Assign a value which is exactly representable as double but not float. + var doubleValue = 1.000000000000004; + cue.line = doubleValue; + assert_equals(cue.line, doubleValue); + cue.position = doubleValue; + assert_equals(cue.position, doubleValue); + cue.size = doubleValue; + assert_equals(cue.size, doubleValue); + + // Assign a value which is exactly representable as float but is non-integral. + var floatValue = 1.5; + cue.line = floatValue; + assert_equals(cue.line, floatValue); + cue.position = floatValue; + assert_equals(cue.position, floatValue); + cue.size = floatValue; + assert_equals(cue.size, floatValue); +}, document.title+', stored as floats'); +</script> |