WebKit Bugzilla
Attachment 362274 Details for
Bug 194770
: Update WPT tests for embedded content
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch - trying with only media elements
0001-Update-WPT-tests-for-media-elements.patch (text/plain), 733.43 KB, created by
Frédéric Wang (:fredw)
on 2019-02-18 02:19:34 PST
(
hide
)
Description:
Patch - trying with only media elements
Filename:
MIME Type:
Creator:
Frédéric Wang (:fredw)
Created:
2019-02-18 02:19:34 PST
Size:
733.43 KB
patch
obsolete
>From 6e3e40197f49ca23957c35b504937b584de6ca31 Mon Sep 17 00:00:00 2001 >From: Frederic Wang <fwang@igalia.com> >Date: Mon, 18 Feb 2019 11:13:19 +0100 >Subject: [PATCH xserver] Update WPT tests for media elements > >--- > .../w3c/resources/import-expectations.json | 1 + > .../w3c/resources/resource-files.json | 2 + > .../media-elements/audio_loop_base.html | 42 +++++ > ...-attribute-redirect-on-load.https.sub.html | 35 +++++ > ...by-feature-policy-attribute.https.sub.html | 34 +++++ > ...y-allowed-by-feature-policy.https.sub.html | 39 +++++ > ...d-by-feature-policy.https.sub.html.headers | 1 + > ...play-default-feature-policy.https.sub.html | 39 +++++ > ...-disabled-by-feature-policy.https.sub.html | 39 +++++ > ...d-by-feature-policy.https.sub.html.headers | 1 + > .../autoplay-supported-by-feature-policy.html | 11 ++ > .../autoplay-with-broken-track.html | 34 +++++ > .../media-elements/error-codes/error.html | 40 +++++ > .../media-elements/error-codes/w3c-import.log | 17 +++ > .../media-elements/event_canplay.html | 4 +- > .../event_canplay_noautoplay.html | 4 +- > .../media-elements/event_canplaythrough.html | 4 +- > .../event_canplaythrough_noautoplay.html | 4 +- > .../media-elements/event_loadeddata.html | 4 +- > .../event_loadeddata_noautoplay.html | 4 +- > .../media-elements/event_loadedmetadata.html | 4 +- > .../event_loadedmetadata_noautoplay.html | 4 +- > .../media-elements/event_loadstart.html | 4 +- > .../event_loadstart_noautoplay.html | 4 +- > .../event_order_canplay_canplaythrough.html | 4 +- > .../event_order_canplay_playing.html | 4 +- > ...event_order_loadedmetadata_loadeddata.html | 4 +- > .../event_order_loadstart_progress.html | 4 +- > .../media-elements/event_pause.html | 4 +- > .../event_pause_noautoplay.html | 18 ++- > .../media-elements/event_play.html | 4 +- > .../media-elements/event_play_noautoplay.html | 24 +-- > .../media-elements/event_playing.html | 4 +- > .../event_playing_noautoplay.html | 4 +- > .../media-elements/event_progress.html | 4 +- > .../event_progress_noautoplay.html | 4 +- > .../media-elements/event_timeupdate.html | 4 +- > .../event_timeupdate_noautoplay.html | 4 +- > .../HTMLMediaElement/crossOrigin.html | 60 ++++++++ > .../HTMLMediaElement/w3c-import.log | 3 +- > .../HTMLTrackElement/w3c-import.log | 2 +- > .../interfaces/TextTrack/activeCues.html | 8 +- > .../interfaces/TextTrack/addCue.html | 2 +- > .../interfaces/TextTrack/removeCue.html | 2 +- > .../interfaces/TextTrack/w3c-import.log | 2 +- > .../interfaces/TextTrackCue/constructor.html | 23 +++ > .../interfaces/TextTrackCue/w3c-import.log | 3 +- > .../TextTrackCueList/w3c-import.log | 2 +- > .../interfaces/TextTrackList/w3c-import.log | 2 +- > .../interfaces/TrackEvent/w3c-import.log | 2 +- > .../autoplay-overrides-preload.html | 29 ++++ > .../load-events-networkState.html | 69 +++++++++ > .../load-removes-queued-error-event.html | 44 ++++++ > ...rce-selection-candidate-insert-before.html | 29 ++++ > .../resource-selection-candidate-moved.html | 21 +++ > ...ion-candidate-remove-addEventListener.html | 26 ++++ > ...election-candidate-remove-no-listener.html | 26 ++++ > ...ce-selection-candidate-remove-onerror.html | 26 ++++ > ...ction-invoke-audio-constructor-no-src.html | 13 ++ > ...ce-selection-invoke-audio-constructor.html | 12 ++ > ...source-selection-invoke-in-sync-event.html | 32 ++++ > ...-invoke-insert-fragment-into-document.html | 22 +++ > ...selection-invoke-insert-into-document.html | 12 ++ > ...e-selection-invoke-insert-into-iframe.html | 23 +++ > ...on-invoke-insert-parent-into-document.html | 19 +++ > ...selection-invoke-insert-source-in-div.html | 14 ++ > ...ion-invoke-insert-source-in-namespace.html | 14 ++ > ...ion-invoke-insert-source-networkState.html | 38 +++++ > ...-invoke-insert-source-not-in-document.html | 13 ++ > ...source-selection-invoke-insert-source.html | 14 ++ > .../resource-selection-invoke-load.html | 20 +++ > ...e-selection-invoke-pause-networkState.html | 28 ++++ > .../resource-selection-invoke-pause.html | 20 +++ > .../resource-selection-invoke-play.html | 20 +++ > ...oke-remove-from-document-networkState.html | 29 ++++ > ...selection-invoke-remove-from-document.html | 21 +++ > .../resource-selection-invoke-remove-src.html | 22 +++ > ...selection-invoke-set-src-in-namespace.html | 14 ++ > ...selection-invoke-set-src-networkState.html | 16 ++ > ...ection-invoke-set-src-not-in-document.html | 13 ++ > .../resource-selection-invoke-set-src.html | 14 ++ > .../resource-selection-pointer-control.html | 26 ++++ > .../resource-selection-pointer-insert-br.html | 33 ++++ > ...ource-selection-pointer-insert-source.html | 44 ++++++ > ...esource-selection-pointer-insert-text.html | 33 ++++ > ...selection-pointer-remove-source-after.html | 56 +++++++ > ...ource-selection-pointer-remove-source.html | 43 ++++++ > ...esource-selection-pointer-remove-text.html | 33 ++++ > .../resource-selection-remove-source.html | 24 +++ > .../resource-selection-remove-src.html | 22 +++ > .../resource-selection-source-media.html | 14 ++ > .../resources/delayed-broken-video.py | 5 + > .../resources/w3c-import.log | 17 +++ > .../loading-the-media-resource/w3c-import.log | 57 +++++++ > .../currentSrc.html | 44 ++++++ > .../w3c-import.log | 17 +++ > .../media-elements/mime-types/w3c-import.log | 2 +- > .../networkState_during_loadstart.html | 4 +- > .../networkState_during_progress.html | 42 +++++ > .../currentTime.html | 32 ++++ > .../w3c-import.log | 3 +- > .../paused_false_during_play.html | 4 +- > .../paused_true_during_pause.html | 10 +- > ...use-remove-from-document-networkState.html | 21 +++ > .../play-in-detached-document.html | 24 +++ > .../playing-the-media-resource/w3c-import.log | 4 +- > .../autoplay-hidden.optional.html | 35 +++++ > .../media-elements/ready-states/autoplay.html | 73 +++++++++ > .../ready-states/w3c-import.log | 4 +- > .../readyState_during_canplay.html | 4 +- > .../readyState_during_canplaythrough.html | 4 +- > .../readyState_during_loadeddata.html | 4 +- > .../readyState_during_loadedmetadata.html | 4 +- > .../readyState_during_playing.html | 4 +- > .../seeking/seek-to-currentTime.html | 33 ++++ > .../seeking/seek-to-max-value.htm | 23 +++ > .../seeking/seek-to-negative-time.htm | 23 +++ > .../media-elements/seeking/w3c-import.log | 19 +++ > .../track/track-element/cors/003.html | 10 ++ > .../track/track-element/cors/004.html | 10 ++ > .../track/track-element/cors/005.html | 10 ++ > .../track/track-element/cors/006.html | 10 ++ > .../track/track-element/cors/007.html | 10 ++ > .../track/track-element/cors/008.html | 10 ++ > .../track/track-element/cors/009.html | 10 ++ > .../track/track-element/cors/010.html | 10 ++ > .../track/track-element/cors/011.html | 10 ++ > .../track/track-element/cors/012.html | 10 ++ > .../track/track-element/cors/013.html | 10 ++ > .../track/track-element/cors/014.html | 10 ++ > .../track/track-element/cors/015.html | 10 ++ > .../track/track-element/cors/016.html | 10 ++ > .../track/track-element/cors/017.html | 10 ++ > .../track/track-element/cors/018.html | 10 ++ > .../track/track-element/cors/019.html | 10 ++ > .../track/track-element/cors/020.html | 10 ++ > .../track/track-element/cors/021.html | 10 ++ > .../track/track-element/cors/022.html | 10 ++ > .../track/track-element/cors/023.html | 10 ++ > .../track/track-element/cors/024.html | 10 ++ > .../track/track-element/cors/025.html | 10 ++ > .../track/track-element/cors/026.html | 10 ++ > .../track/track-element/cors/027.html | 10 ++ > .../track/track-element/cors/028.html | 10 ++ > .../track/track-element/cors/029.html | 10 ++ > .../track/track-element/cors/030.html | 10 ++ > .../track/track-element/cors/031.html | 10 ++ > .../track/track-element/cors/032.html | 10 ++ > .../track/track-element/cors/033.html | 10 ++ > .../track/track-element/cors/034.html | 10 ++ > .../track/track-element/cors/035.html | 10 ++ > .../track/track-element/cors/036.html | 10 ++ > .../track/track-element/cors/037.html | 10 ++ > .../track/track-element/cors/038.html | 10 ++ > .../track/track-element/cors/039.html | 10 ++ > .../track/track-element/cors/040.html | 10 ++ > .../track/track-element/cors/041.html | 10 ++ > .../track/track-element/cors/042.html | 10 ++ > .../track/track-element/cors/043.html | 10 ++ > .../track/track-element/cors/044.html | 10 ++ > .../track/track-element/cors/045.html | 10 ++ > .../track/track-element/cors/046.html | 10 ++ > .../track-element/cors/support/common.js | 144 ++++++++++++++++++ > .../track-element/cors/support/cors-tester.py | 51 +++++++ > .../cors/support/remove-cookie.html | 6 + > .../cors/support/set-cookie.html | 6 + > .../track-element/cors/support/w3c-import.log | 20 +++ > .../track/track-element/cors/w3c-import.log | 60 ++++++++ > .../resources/align-positioning-bad.vtt | 20 +++ > .../resources/align-positioning.vtt | 20 +++ > .../align-text-line-position-bad.vtt | 21 +++ > .../resources/align-text-line-position.vtt | 28 ++++ > .../track-element/resources/alignment-bad.vtt | 22 +++ > .../track-element/resources/alignment-ltr.vtt | 22 +++ > .../track-element/resources/alignment.vtt | 22 +++ > .../track/track-element/resources/bom.vtt | 10 ++ > .../track-element/resources/captions-fast.vtt | 13 ++ > .../track-element/resources/captions-gaps.vtt | 18 +++ > .../track-element/resources/captions-html.vtt | 18 +++ > .../track-element/resources/captions.vtt | 18 +++ > .../track-element/resources/class-bad.vtt | 17 +++ > .../track/track-element/resources/class.vtt | 14 ++ > .../track-element/resources/cue-id-error.vtt | 14 ++ > .../track/track-element/resources/cue-id.vtt | 18 +++ > .../resources/cue-no-id-error.vtt | 14 ++ > .../track-element/resources/cue-no-id.vtt | 11 ++ > .../resources/cue-recovery-cuetext.vtt | 6 + > .../resources/cue-recovery-header.vtt | 6 + > .../resources/cue-recovery-note.vtt | 9 ++ > .../resources/cue-size-align-bad.vtt | 18 +++ > .../resources/cue-size-align.vtt | 19 +++ > .../track-element/resources/cue-size-bad.vtt | 17 +++ > .../track-element/resources/cue-size.vtt | 19 +++ > .../resources/cues-chrono-order.vtt | 14 ++ > .../resources/cues-no-separation.vtt | 11 ++ > .../resources/cues-overlapping.vtt | 14 ++ > .../track/track-element/resources/cues.vtt | 17 +++ > .../resources/default-styles.vtt | 19 +++ > .../resources/degenerate-cues.vtt | 5 + > .../track-element/resources/empty-cue.vtt | 11 ++ > .../resources/entities-wrong.vtt | 15 ++ > .../track-element/resources/entities.vtt | 30 ++++ > .../resources/interspersed-non-cue.vtt | 9 ++ > .../track-element/resources/iso2022jp3.vtt | 10 ++ > .../resources/large-timestamp.vtt | 5 + > .../resources/line-position-bad.vtt | 30 ++++ > .../track-element/resources/line-position.vtt | 37 +++++ > .../track-element/resources/markup-bad.vtt | 22 +++ > .../track/track-element/resources/markup.vtt | 22 +++ > .../track-element/resources/metadata-area.vtt | 14 ++ > .../track-element/resources/metadata.vtt | 38 +++++ > .../track-element/resources/missed-cues.vtt | 31 ++++ > .../resources/no-newline-at-eof.vtt | 6 + > .../track-element/resources/no-timings.vtt | 13 ++ > .../track-element/resources/no-webvtt.vtt | 10 ++ > .../resources/positioning-bad.vtt | 39 +++++ > .../resources/positioning-ltr.vtt | 21 +++ > .../track-element/resources/positioning.vtt | 21 +++ > .../resources/settings-bad-separation.vtt | 20 +++ > .../track-element/resources/settings.vtt | 18 +++ > .../resources/simple-captions.vtt | 17 +++ > .../resources/sorted-dispatch.vtt | 34 +++++ > .../track-element/resources/timestamp-bad.vtt | 17 +++ > .../track-element/resources/timestamp.vtt | 14 ++ > .../resources/timings-hour-error.vtt | 22 +++ > .../track-element/resources/timings-hour.vtt | 14 ++ > .../resources/timings-no-hour-errors.vtt | 22 +++ > .../resources/timings-no-hour.vtt | 18 +++ > .../resources/timings-whitespace.vtt | 51 +++++++ > .../resources/unsupported-markup.vtt | 23 +++ > .../track/track-element/resources/utf8.vtt | 10 ++ > .../track-element/resources/valign-bad.vtt | 17 +++ > .../track-element/resources/valign-ltr.vtt | 20 +++ > .../track/track-element/resources/valign.vtt | 20 +++ > .../track-element/resources/voice-bad.vtt | 17 +++ > .../track/track-element/resources/voice.vtt | 15 ++ > .../resources/vp8-vorbis-webvtt.webm | Bin 0 -> 143662 bytes > .../track-element/resources/w3c-import.log | 73 ++++++++- > .../track-element/resources/webvtt-file.vtt | 9 ++ > .../resources/webvtt-rubbish.vtt | 10 ++ > .../track/track-element/src-empty-string.html | 21 +++ > .../track-element/track-active-cues.html | 39 +++++ > .../track-element/track-add-remove-cue.html | 92 +++++++++++ > .../track/track-element/track-add-track.html | 34 +++++ > .../track-element/track-addtrack-kind.html | 25 +++ > .../track-element/track-change-event.html | 21 +++ > .../track-css-cue-pseudo-class.html | 12 ++ > .../track/track-element/track-cue-empty.html | 19 +++ > .../track/track-element/track-cue-inline.html | 16 ++ > .../track-cue-mutable-fragment.html | 85 +++++++++++ > .../track-element/track-cue-mutable.html | 99 ++++++++++++ > .../track-cue-negative-duration.html | 30 ++++ > .../track-cue-negative-timestamp-events.html | 32 ++++ > .../track-cue-negative-timestamp.html | 42 +++++ > ...ndering-after-controls-added-expected.html | 31 ++++ > ...ck-cue-rendering-after-controls-added.html | 37 +++++ > ...ering-after-controls-removed-expected.html | 29 ++++ > ...-cue-rendering-after-controls-removed.html | 34 +++++ > .../track-cue-rendering-empty-cue.html | 16 ++ > ...ue-rendering-line-doesnt-fit-expected.html | 32 ++++ > .../track-cue-rendering-line-doesnt-fit.html | 32 ++++ > ...-rendering-transformed-video-expected.html | 35 +++++ > ...track-cue-rendering-transformed-video.html | 28 ++++ > .../track-element/track-cues-cuechange.html | 40 +++++ > .../track-element/track-cues-enter-exit.html | 43 ++++++ > .../track-element/track-cues-missed.html | 59 +++++++ > .../track-cues-pause-on-exit.html | 35 +++++ > .../track-element/track-cues-seeking.html | 31 ++++ > .../track-cues-sorted-before-dispatch.html | 48 ++++++ > .../track-default-attribute.html | 26 ++++ > .../track-delete-during-setup.html | 29 ++++ > .../track-element/track-disabled-addcue.html | 33 ++++ > .../track/track-element/track-disabled.html | 28 ++++ > .../track-element-dom-change.html | 16 ++ > .../track-element-src-change-error.html | 92 +++++++++++ > .../track-element-src-change.html | 57 +++++++ > .../track/track-element/track-helpers.js | 83 ++++++++++ > .../track/track-element/track-id.html | 25 +++ > .../track-insert-after-load.html | 14 ++ > .../track-element/track-large-timestamp.html | 19 +++ > .../track-load-error-readyState.html | 15 ++ > .../track-load-from-element-readyState.html | 15 ++ > .../track-load-from-src-readyState.html | 20 +++ > .../track-element/track-mode-disabled.html | 34 +++++ > .../track-mode-not-changed-by-new-track.html | 73 +++++++++ > .../track-mode-triggers-loading.html | 37 +++++ > .../track/track-element/track-mode.html | 61 ++++++++ > .../track-element/track-node-add-remove.html | 36 +++++ > .../track-remove-active-cue.html | 35 +++++ > .../track-remove-by-setting-innerHTML.html | 31 ++++ > .../track-remove-insert-ready-state.html | 38 +++++ > .../track-element/track-remove-quickly.html | 14 ++ > .../track-remove-track-inband.html | 79 ++++++++++ > .../track-element/track-remove-track.html | 39 +++++ > .../track-selection-metadata.html | 33 ++++ > .../track-text-track-cue-list.html | 29 ++++ > .../track/track-element/track-texttracks.html | 44 ++++++ > .../track-webvtt-align-positioning.html | 52 +++++++ > ...track-webvtt-align-text-line-position.html | 54 +++++++ > .../track-element/track-webvtt-alignment.html | 31 ++++ > .../track-webvtt-blank-lines.html | 26 ++++ > .../track/track-element/track-webvtt-bom.html | 34 +++++ > .../track-webvtt-class-markup.html | 55 +++++++ > .../track-webvtt-cue-identifiers.html | 27 ++++ > .../track-element/track-webvtt-cue-no-id.html | 19 +++ > .../track-webvtt-cue-recovery.html | 19 +++ > .../track-webvtt-cue-size-align.html | 26 ++++ > .../track-element/track-webvtt-cue-size.html | 26 ++++ > .../track-webvtt-degenerate-cues.html | 16 ++ > .../track-element/track-webvtt-empty-cue.html | 10 ++ > .../track-element/track-webvtt-entities.html | 42 +++++ > .../track-webvtt-header-comment.html | 50 ++++++ > .../track-webvtt-interspersed-non-cue.html | 15 ++ > .../track-webvtt-line-position.html | 58 +++++++ > .../track-webvtt-magic-header.html | 57 +++++++ > .../track-element/track-webvtt-markup.html | 89 +++++++++++ > .../track-element/track-webvtt-newlines.html | 26 ++++ > .../track-webvtt-no-timings.html | 17 +++ > ...ack-webvtt-non-snap-to-lines-expected.html | 29 ++++ > .../track-webvtt-non-snap-to-lines.html | 24 +++ > .../track-webvtt-positioning.html | 35 +++++ > .../track-element/track-webvtt-settings.html | 28 ++++ > .../track-element/track-webvtt-timestamp.html | 36 +++++ > .../track-webvtt-timings-hour.html | 61 ++++++++ > .../track-webvtt-timings-no-hours.html | 67 ++++++++ > .../track-webvtt-timings-whitespace.html | 25 +++ > ...o-cue-layout-after-first-end-expected.html | 23 +++ > ...webvtt-two-cue-layout-after-first-end.html | 30 ++++ > .../track-webvtt-unsupported-markup.html | 37 +++++ > .../track-element/track-webvtt-utf8.html | 57 +++++++ > .../track-element/track-webvtt-valign.html | 28 ++++ > .../track-element/track-webvtt-voice.html | 54 +++++++ > .../vtt-cue-float-precision.html | 28 ++++ > .../track/track-element/w3c-import.log | 95 +++++++++++- > .../user-interface/w3c-import.log | 2 +- > .../media-elements/video_loop_base.html | 40 +++++ > .../media-elements/w3c-import.log | 14 +- > 337 files changed, 7710 insertions(+), 103 deletions(-) > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_base.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/error.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/autoplay-overrides-preload.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-moved.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-addEventListener.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-no-listener.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-onerror.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-fragment-into-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-parent-into-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-div.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-namespace.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-in-namespace.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/delayed-broken-video.py > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_progress.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-max-value.htm > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-negative-time.htm > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/w3c-import.log > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-expected.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-expected.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-expected.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-expected.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-expected.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-expected.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html > create mode 100644 LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html > >diff --git a/LayoutTests/imported/w3c/resources/import-expectations.json b/LayoutTests/imported/w3c/resources/import-expectations.json >index 70adea5cea7..632766a79e9 100644 >--- a/LayoutTests/imported/w3c/resources/import-expectations.json >+++ b/LayoutTests/imported/w3c/resources/import-expectations.json >@@ -197,6 +197,7 @@ > "web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh": "import", > "web-platform-tests/html/semantics/embedded-content-0": "skip", > "web-platform-tests/html/semantics/embedded-content/image-maps/image-map-processing-model": "skip", >+ "web-platform-tests/html/semantics/embedded-content/media-elements": "import", > "web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_base.html": "skip", > "web-platform-tests/html/semantics/embedded-content/media-elements/error-codes": "skip", > "web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource": "skip", >diff --git a/LayoutTests/imported/w3c/resources/resource-files.json b/LayoutTests/imported/w3c/resources/resource-files.json >index 232467142d5..921f274169a 100644 >--- a/LayoutTests/imported/w3c/resources/resource-files.json >+++ b/LayoutTests/imported/w3c/resources/resource-files.json >@@ -998,6 +998,8 @@ > "web-platform-tests/html/dom/dynamic-markup-insertion/opening-the-input-stream/document.open-03-frame.html", > "web-platform-tests/html/semantics/document-metadata/the-base-element/example.html", > "web-platform-tests/html/semantics/document-metadata/the-base-element/example2.html", >+ "web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html", >+ "web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html", > "web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-iframe.html", > "web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-subdocument.html", > "web-platform-tests/html/semantics/embedded-content/the-iframe-element/change_child.html", >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_base.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_base.html >new file mode 100644 >index 00000000000..418e1b19c38 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_base.html >@@ -0,0 +1,42 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Audio Test: audio_loop_base</title> >+ <link rel="author" title="Intel" href="http://www.intel.com" /> >+ <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-media-loop" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Check if audio.loop is set to true that expecting the seeking event is fired more than once" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/media.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <audio id="m" controls>The user agent doesn't support media element.</audio> >+ <script type="text/javascript"> >+ var media = document.getElementById("m"); >+ var name = document.getElementsByName("assert")[0].content; >+ var t = async_test(name); >+ >+ var looped = false; >+ >+ function startTest() { >+ if (looped) { >+ t.step(function() { >+ assert_true(true, "looped"); >+ }); >+ t.done(); >+ media.pause(); >+ } >+ >+ looped = true; >+ } >+ >+ media.addEventListener("error", t.unreached_func()); >+ media.addEventListener("seeking", startTest, false); >+ media.loop = true; >+ media.src = getAudioURI("/media/sound_0") + "?" + new Date() + Math.random(); >+ media.play(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html >new file mode 100644 >index 00000000000..6f11f8995b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<body> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/resources/testdriver.js></script> >+ <script src=/resources/testdriver-vendor.js></script> >+ <script src=/common/media.js></script> >+ <script src=/feature-policy/resources/featurepolicy.js></script> >+ <script src=/feature-policy/resources/autoplay.js></script> >+ <script> >+ 'use strict'; >+ const relative_path = '/feature-policy/resources/feature-policy-autoplay.html'; >+ const base_src = '/feature-policy/resources/redirect-on-load.html#'; >+ const same_origin_src = base_src + relative_path; >+ const cross_origin_src = base_src + 'https://{{domains[www]}}:{{ports[https][0]}}' + >+ relative_path; >+ const header = 'Feature-Policy allow="autoplay"'; >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability( >+ 'autoplay', t, same_origin_src, >+ expect_feature_available_default, 'autoplay'); >+ }); >+ }, header + ' allows same-origin navigation in an iframe.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability( >+ 'autoplay', t, cross_origin_src, >+ expect_feature_unavailable_default, 'autoplay'); >+ }); >+ }, header + ' disallows cross-origin navigation in an iframe.'); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html >new file mode 100644 >index 00000000000..59b33d7c4d2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<body> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/resources/testdriver.js></script> >+ <script src=/resources/testdriver-vendor.js></script> >+ <script src=/common/media.js></script> >+ <script src=/feature-policy/resources/featurepolicy.js></script> >+ <script src=/feature-policy/resources/autoplay.js></script> >+ <script> >+ 'use strict'; >+ const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html'; >+ const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + >+ same_origin_src; >+ const feature_name = 'Feature policy "autoplay"'; >+ const header = 'allow="autoplay" attribute'; >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability( >+ 'autoplay', t, same_origin_src, >+ expect_feature_available_default, 'autoplay'); >+ }); >+ }, feature_name + ' can be enabled in same-origin iframe using ' + header); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability( >+ 'autoplay', t, cross_origin_src, >+ expect_feature_available_default, 'autoplay'); >+ }); >+ }, feature_name + ' can be enabled in cross-origin iframe using ' + header); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html >new file mode 100644 >index 00000000000..63479c0cb6f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<body> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/resources/testdriver.js></script> >+ <script src=/resources/testdriver-vendor.js></script> >+ <script src=/common/media.js></script> >+ <script src=/feature-policy/resources/featurepolicy.js></script> >+ <script src=/feature-policy/resources/autoplay.js></script> >+ <script> >+ 'use strict'; >+ const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html'; >+ const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + >+ same_origin_src; >+ const header = 'Feature-Policy header: autoplay *'; >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ isAutoplayAllowed().then(t.step_func_done((result) => { >+ assert_true(result); >+ })); >+ }); >+ }, header + ' allows the top-level document.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability('autoplay', t, same_origin_src, >+ expect_feature_available_default); >+ }); >+ }, header + ' allows same-origin iframes.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability('autoplay', t, cross_origin_src, >+ expect_feature_available_default); >+ }); >+ }, header + ' allows cross-origin iframes.'); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers >new file mode 100644 >index 00000000000..08461fadc28 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers >@@ -0,0 +1 @@ >+Feature-Policy: autoplay * >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html >new file mode 100644 >index 00000000000..763073e437d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<body> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/resources/testdriver.js></script> >+ <script src=/resources/testdriver-vendor.js></script> >+ <script src=/common/media.js></script> >+ <script src=/feature-policy/resources/featurepolicy.js></script> >+ <script src=/feature-policy/resources/autoplay.js></script> >+ <script> >+ 'use strict'; >+ const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html'; >+ const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + >+ same_origin_src; >+ const header = 'Default "autoplay" feature policy ["self"]'; >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ isAutoplayAllowed().then(t.step_func_done((result) => { >+ assert_true(result); >+ })); >+ }); >+ }, header + ' allows the top-level document.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability('autoplay', t, same_origin_src, >+ expect_feature_available_default); >+ }); >+ }, header + ' allows same-origin iframes.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability('autoplay', t, cross_origin_src, >+ expect_feature_unavailable_default,); >+ }); >+ }, header + ' disallows cross-origin iframes.'); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html >new file mode 100644 >index 00000000000..3dd3afbf771 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<body> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/resources/testdriver.js></script> >+ <script src=/resources/testdriver-vendor.js></script> >+ <script src=/common/media.js></script> >+ <script src=/feature-policy/resources/featurepolicy.js></script> >+ <script src=/feature-policy/resources/autoplay.js></script> >+ <script> >+ 'use strict'; >+ const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html'; >+ const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + >+ same_origin_src; >+ const header = 'Feature-Policy header: autoplay "none"'; >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ isAutoplayAllowed().then(t.step_func_done((result) => { >+ assert_true(result); >+ })); >+ }); >+ }, header + ' has no effect on the top level document.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability('autoplay', t, same_origin_src, >+ expect_feature_unavailable_default); >+ }); >+ }, header + ' disallows same-origin iframes.'); >+ >+ async_test(t => { >+ simulateGesture(t, () => { >+ test_feature_availability('autoplay', t, cross_origin_src, >+ expect_feature_unavailable_default,); >+ }); >+ }, header + ' disallows cross-origin iframes.'); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers >new file mode 100644 >index 00000000000..69ce436270a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers >@@ -0,0 +1 @@ >+Feature-Policy: autoplay 'none' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html >new file mode 100644 >index 00000000000..af4de6bf89d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<title>Test that autoplay is advertised in the feature list</title> >+<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/infrastructure.html#policy-controlled-features"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+test(() => { >+ assert_in_array('autoplay', document.featurePolicy.features()); >+}, 'document.featurePolicy.features should advertise autoplay.'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html >new file mode 100644 >index 00000000000..f687edf198d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#text-track-model"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id="log"></div> >+<script> >+// Media elements have a "list of pending text tracks" which should be populated >+// with text tracks with readyState "loading". When the text track src is >+// invalid or points to a non-existent resource, it shouldn't be possible to >+// block the media element's readyState indefinitely. >+function t(trackSrc) { >+ const track = document.createElement('track'); >+ track.src = trackSrc; >+ track.default = true; >+ async_test(t => { >+ const video = document.createElement('video'); >+ video.autoplay = true; >+ video.controls = true; // for visual inspection, not part of test >+ video.src = getVideoURI('/media/movie_5'); >+ video.appendChild(track); >+ document.body.appendChild(video); >+ // The playing event isn't used because it's fired in Safari even when the >+ // playback doesn't actually start. >+ video.ontimeupdate = t.step_func(() => { >+ if (video.currentTime > 0) >+ t.done(); >+ }); >+ }, `<video autoplay> with ${track.outerHTML} child`); >+} >+t("invalid://url"); >+t("404"); >+t(""); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/error.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/error.html >new file mode 100644 >index 00000000000..42d86e49b0e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/error.html >@@ -0,0 +1,40 @@ >+<!doctype html> >+<title>error</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id="log"></div> >+<script> >+function error_test(tagName, src) { >+ test(function() { >+ assert_equals(document.createElement(tagName).error, null); >+ }, tagName + '.error initial value'); >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ e.onerror = t.unreached_func(); >+ e.onloadeddata = t.step_func(function() { >+ assert_equals(e.error, null); >+ t.done(); >+ }); >+ }, tagName + '.error after successful load'); >+ >+ // TODO: MEDIA_ERR_ABORTED, MEDIA_ERR_NETWORK, MEDIA_ERR_DECODE >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = ''; >+ e.onerror = t.step_func(function() { >+ assert_true(e.error instanceof MediaError); >+ assert_equals(e.error.code, 4); >+ assert_equals(e.error.code, e.error.MEDIA_ERR_SRC_NOT_SUPPORTED); >+ assert_equals(typeof e.error.message, 'string', 'error.message type'); >+ t.done(); >+ }); >+ }, tagName + '.error after setting src to the empty string'); >+} >+ >+error_test('audio', getAudioURI('/media/sound_5')); >+error_test('video', getVideoURI('/media/movie_5')); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/w3c-import.log >new file mode 100644 >index 00000000000..8f6d5484657 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/error-codes/error.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay.html >index e79c5d1c76d..e5c632bc17b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger canplay event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger canplay event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("canplay", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - canplay"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger canplay event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger canplay event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("canplay", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay_noautoplay.html >index 811f220d0dd..b43f8d052ab 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function () { >- var t = async_test("setting src attribute on non-autoplay audio should trigger canplay event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay audio should trigger canplay event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("canplay", t.step_func_done(), false); >@@ -23,7 +23,7 @@ test(function () { > }, "audio events - canplay"); > > test(function () { >- var t = async_test("setting src attribute on non-autoplay video should trigger canplay event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay video should trigger canplay event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("canplay", t.step_func_done(), false); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough.html >index 9c5a7625d82..b0895a97c28 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger canplaythrough event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger canplaythrough event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("canplaythrough", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - canplaythrough"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger canplaythrough event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger canplaythrough event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("canplaythrough", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough_noautoplay.html >index 8384c01da50..195b464f012 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplaythrough_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on non-autoplay audio should trigger canplaythrough event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay audio should trigger canplaythrough event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("canplaythrough", t.step_func_done(), false); >@@ -23,7 +23,7 @@ test(function() { > }, "audio events - canplaythrough"); > > test(function() { >- var t = async_test("setting src attribute on non-autoplay video should trigger canplaythrough event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay video should trigger canplaythrough event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("canplaythrough", t.step_func_done(), false); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata.html >index 281719af021..f502c595e67 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger loadeddata event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger loadeddata event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("loadeddata", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - loadeddata"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger loadeddata event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger loadeddata event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("loadeddata", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html >index cc40a147940..08b2f2f86e2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadeddata_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on non-autoplay audio should trigger loadeddata event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay audio should trigger loadeddata event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("loadeddata", t.step_func_done(), false); >@@ -23,7 +23,7 @@ test(function() { > }, "audio events - loadeddata"); > > test(function() { >- var t = async_test("setting src attribute on non-autoplay video should trigger loadeddata event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay video should trigger loadeddata event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("loadeddata", t.step_func_done(), false); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata.html >index c7e9c93e213..5a0731e811e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger loadedmetadata event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger loadedmetadata event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("loadedmetadata", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - loadedmetadata"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger loadedmetadata event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger loadedmetadata event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("loadedmetadata", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html >index 95ec10d3c65..b460317f8c5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadedmetadata_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on non-autoplay audio should trigger loadedmetadata event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay audio should trigger loadedmetadata event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("loadedmetadata", t.step_func_done(), false); >@@ -23,7 +23,7 @@ test(function() { > }, "audio events - loadedmetadata"); > > test(function() { >- var t = async_test("setting src attribute on non-autoplay video should trigger loadedmetadata event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay video should trigger loadedmetadata event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("loadedmetadata", t.step_func_done(), false); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart.html >index de45682125c..192821a961a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger loadstart event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger loadstart event"); > var a = document.getElementById("a"); > a.addEventListener("loadstart", function() { > t.done(); >@@ -25,7 +25,7 @@ test(function() { > }, "audio events - loadstart"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger loadstart event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger loadstart event"); > var v = document.getElementById("v"); > v.addEventListener("loadstart", function() { > t.done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart_noautoplay.html >index b575e7ac87c..10af32afcbc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_loadstart_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on non-autoplay audio should trigger loadstart event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay audio should trigger loadstart event"); > var a = document.getElementById("a"); > a.addEventListener("loadstart", function() { > t.done(); >@@ -24,7 +24,7 @@ test(function() { > }, "audio events - loadstart"); > > test(function() { >- var t = async_test("setting src attribute on non-autoplay video should trigger loadstart event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay video should trigger loadstart event"); > var v = document.getElementById("v"); > v.addEventListener("loadstart", function() { > t.done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_canplaythrough.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_canplaythrough.html >index ceaa9aaa7ed..e1bae90ed0e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_canplaythrough.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_canplaythrough.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger canplay then canplaythrough event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger canplay then canplaythrough event"); > var a = document.getElementById("a"); > var found_canplay = false; > a.addEventListener("error", t.unreached_func()); >@@ -31,7 +31,7 @@ test(function() { > }, "audio events - canplay, then canplaythrough"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger canplay then canplaythrough event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger canplay then canplaythrough event"); > var v = document.getElementById("v"); > var found_canplay = false; > v.addEventListener("error", t.unreached_func()); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_playing.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_playing.html >index e498f58cec4..3571e5151ca 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_playing.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_canplay_playing.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger canplay then playing event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger canplay then playing event"); > var a = document.getElementById("a"); > var found_canplay = false; > a.addEventListener("error", t.unreached_func()); >@@ -31,7 +31,7 @@ test(function() { > }, "audio events - canplay, then playing"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger canplay then playing event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger canplay then playing event"); > var v = document.getElementById("v"); > var found_canplay = false; > v.addEventListener("error", t.unreached_func()); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html >index 4c0054c241d..71aeca50c13 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadedmetadata_loadeddata.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger loadedmetadata then loadeddata event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger loadedmetadata then loadeddata event"); > var a = document.getElementById("a"); > var found_loadedmetadata = false; > a.addEventListener("error", t.unreached_func()); >@@ -31,7 +31,7 @@ test(function() { > }, "audio events - loadedmetadata, then loadeddata"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger loadedmetadata then loadeddata event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger loadedmetadata then loadeddata event"); > var v = document.getElementById("v"); > var found_loadedmetadata = false; > v.addEventListener("error", t.unreached_func()); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadstart_progress.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadstart_progress.html >index 889336f9d92..c6e1dbe07a0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadstart_progress.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_order_loadstart_progress.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger loadstart then progress event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger loadstart then progress event"); > var a = document.getElementById("a"); > var found_loadstart = false; > a.addEventListener("error", t.unreached_func()); >@@ -31,7 +31,7 @@ test(function() { > }, "audio events - loadstart, then progress"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger loadstart then progress event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger loadstart then progress event"); > var v = document.getElementById("v"); > var found_loadstart = false; > v.addEventListener("error", t.unreached_func()); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause.html >index 7a5d171c84f..841e124d5b9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("calling pause() on autoplay audio should trigger pause event", {timeout:5000}); >+ var t = async_test("calling pause() on autoplay audio should trigger pause event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("pause", t.step_func_done(), false); >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - pause"); > > test(function() { >- var t = async_test("calling pause() on autoplay video should trigger pause event", {timeout:5000}); >+ var t = async_test("calling pause() on autoplay video should trigger pause event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("pause", t.step_func_done(), false); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause_noautoplay.html >index 55482348387..6fe5b2771d9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_pause_noautoplay.html >@@ -14,26 +14,28 @@ > </video> > <div id="log"></div> > <script> >-test(function() { >- var t = async_test("calling play() then pause() on non-autoplay audio should trigger pause event", {timeout:5000}); >+promise_test(function(t) { >+ var async_t = async_test("calling play() then pause() on non-autoplay audio should trigger pause event"); > var a = document.getElementById("a"); > a.addEventListener("pause", function() { >- t.done(); >+ async_t.done(); > }, false); > a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random(); >- a.play(); >+ var play_promise = a.play(); > a.pause(); >+ return promise_rejects(t, "AbortError", play_promise, "pause() should reject all pending play Promises"); > }, "audio events - pause"); > >-test(function() { >- var t = async_test("calling play() then pause() on non-autoplay video should trigger pause event", {timeout:5000}); >+promise_test(function(t) { >+ var async_t = async_test("calling play() then pause() on non-autoplay video should trigger pause event"); > var v = document.getElementById("v"); > v.addEventListener("pause", function() { >- t.done(); >+ async_t.done(); > }, false); > v.src = getVideoURI("/media/movie_5") + "?" + new Date() + Math.random(); >- v.play(); >+ var play_promise = v.play() > v.pause(); >+ return promise_rejects(t, "AbortError", play_promise, "pause() should reject all pending play Promises"); > }, "video events - pause"); > </script> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play.html >index acc7f81a858..f96c35113b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger play event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger play event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("play", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - play"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger play event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger play event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("play", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play_noautoplay.html >index 67285a95abd..45b6d33f824 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_play_noautoplay.html >@@ -14,26 +14,26 @@ > </video> > <div id="log"></div> > <script> >-test(function() { >- var t = async_test("calling play() on audio should trigger play event", {timeout:5000}); >+promise_test(function(t) { >+ var async_t = async_test("calling play() on audio should trigger play event"); > var a = document.getElementById("a"); >- a.addEventListener("play", function() { >- t.done(); >+ a.addEventListener("play", async_t.step_func(function() { > a.pause(); >- }, false); >+ async_t.done(); >+ }), false); > a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random(); >- a.play(); >+ return promise_rejects(t, "AbortError", a.play(), "pause() should reject all pending play Promises"); > }, "audio events - play"); > >-test(function() { >- var t = async_test("calling play() on video should trigger play event", {timeout:5000}); >+promise_test(function(t) { >+ var async_t = async_test("calling play() on video should trigger play event"); > var v = document.getElementById("v"); >- v.addEventListener("play", function() { >- t.done(); >+ v.addEventListener("play", async_t.step_func(function() { > v.pause(); >- }, false); >+ async_t.done(); >+ }), false); > v.src = getVideoURI("/media/movie_5") + "?" + new Date() + Math.random(); >- v.play(); >+ return promise_rejects(t, "AbortError", v.play(), "pause() should reject all pending play Promises"); > }, "video events - play"); > </script> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing.html >index e652607ef39..18204c457a8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger playing event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger playing event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("playing", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - playing"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger playing event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger playing event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("playing", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing_noautoplay.html >index f750085ed2b..e9714d7ec52 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_playing_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("calling play() on audio should trigger playing event", {timeout:5000}); >+ var t = async_test("calling play() on audio should trigger playing event"); > var a = document.getElementById("a"); > a.addEventListener("playing", function() { > t.done(); >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - playing"); > > test(function() { >- var t = async_test("calling play() on video should trigger playing event", {timeout:5000}); >+ var t = async_test("calling play() on video should trigger playing event"); > var v = document.getElementById("v"); > v.addEventListener("playing", function() { > t.done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress.html >index b29c65ccf5c..ae4496c99fb 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on autoplay audio should trigger progress event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay audio should trigger progress event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("progress", t.step_func(function() { >@@ -26,7 +26,7 @@ test(function() { > }, "audio events - progress"); > > test(function() { >- var t = async_test("setting src attribute on autoplay video should trigger progress event", {timeout:5000}); >+ var t = async_test("setting src attribute on autoplay video should trigger progress event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("progress", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress_noautoplay.html >index cb54dac7199..8b32448b9fd 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_progress_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("setting src attribute on non-autoplay audio should trigger progress event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay audio should trigger progress event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("progress", t.step_func_done(), false); >@@ -23,7 +23,7 @@ test(function() { > }, "audio events - progress"); > > test(function() { >- var t = async_test("setting src attribute on non-autoplay video should trigger progress event", {timeout:5000}); >+ var t = async_test("setting src attribute on non-autoplay video should trigger progress event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("progress", t.step_func_done(), false); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate.html >index cc0a17fe2e5..0909c864e30 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate.html >@@ -14,7 +14,7 @@ > </video> > <div id="log"></div> > <script> >-var ta = async_test("setting src attribute on a sufficiently long autoplay audio should trigger timeupdate event", {timeout:5000}); >+var ta = async_test("setting src attribute on a sufficiently long autoplay audio should trigger timeupdate event"); > var a = document.getElementById("a"); > a.addEventListener("timeupdate", function() { > ta.done(); >@@ -22,7 +22,7 @@ a.addEventListener("timeupdate", function() { > }, false); > a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random(); > >-var tv = async_test("setting src attribute on a sufficiently long autoplay video should trigger timeupdate event", {timeout:5000}); >+var tv = async_test("setting src attribute on a sufficiently long autoplay video should trigger timeupdate event"); > var v = document.getElementById("v"); > v.addEventListener("timeupdate", function() { > tv.done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html >index eadd84e2038..2738a3b4ac6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("calling play() on a sufficiently long audio should trigger timeupdate event", {timeout:5000}); >+ var t = async_test("calling play() on a sufficiently long audio should trigger timeupdate event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("timeupdate", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - timeupdate"); > > test(function() { >- var t = async_test("calling play() on a sufficiently long video should trigger timeupdate event", {timeout:5000}); >+ var t = async_test("calling play() on a sufficiently long video should trigger timeupdate event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("timeupdate", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html >new file mode 100644 >index 00000000000..e29f2b0fbcd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html >@@ -0,0 +1,60 @@ >+<!doctype html> >+<title>HTMLMediaElement.crossOrigin</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id=log></div> >+<script> >+test(function(){ >+ var video = document.createElement('video'); >+ assert_true('crossOrigin' in video); >+}); >+test(function(){ >+ var video = document.createElement('video'); >+ assert_equals(video.crossOrigin, null); >+}, document.title+', content attribute missing'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.setAttribute('crossorigin', 'foo'); >+ assert_equals(video.crossOrigin, 'anonymous'); >+}, document.title+', content attribute invalid value'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.setAttribute('crossorigin', ''); >+ assert_equals(video.crossOrigin, 'anonymous'); >+}, document.title+', content attribute empty string'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.setAttribute('crossorigin', 'ANONYMOUS'); >+ assert_equals(video.crossOrigin, 'anonymous'); >+}, document.title+', content attribute uppercase ANONYMOUS'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.setAttribute('crossorigin', 'use-credentials'); >+ assert_equals(video.crossOrigin, 'use-credentials'); >+}, document.title+', content attribute use-credentials'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.crossOrigin = ''; >+ assert_equals(video.getAttribute('crossorigin'), ''); >+}, document.title+', setting to empty string'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.crossOrigin = null; >+ assert_false(video.hasAttribute('crossorigin')); >+}, document.title+', setting to null'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.crossOrigin = 'foo'; >+ assert_equals(video.getAttribute('crossorigin'), 'foo'); >+}, document.title+', setting to invalid value'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.crossOrigin = 'ANONYMOUS'; >+ assert_equals(video.getAttribute('crossorigin'), 'ANONYMOUS'); >+}, document.title+', setting to uppercase ANONYMOUS'); >+test(function(){ >+ var video = document.createElement('video'); >+ video.crossOrigin = 'use-credentials'; >+ assert_equals(video.getAttribute('crossorigin'), 'use-credentials'); >+}, document.title+', setting to use-credentials'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/w3c-import.log >index dede51deb03..c66db5e0dc4 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -15,4 +15,5 @@ None > ------------------------------------------------------------------------ > List of files: > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/crossOrigin.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/textTracks.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/w3c-import.log >index 3056437c42a..fdaba8639dc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html >index de66d5cb0eb..ac0f56f7d54 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html >@@ -18,7 +18,7 @@ setup(function(){ > document.body.appendChild(video); > if (!t1) > throw new Error('t1 was undefined') >-}, {timeout:25000}); >+}); > function smoke_test() { > assert_true('HTMLTrackElement' in window, 'track not supported'); > } >@@ -56,9 +56,9 @@ test(function(){ > }, document.title+', different modes'); > > // ok now let's load in a video >-var test1 = async_test(document.title+', video loading', {timeout:20000}); >-var test2 = async_test(document.title+', video playing', {timeout:20000}); >-var test3 = async_test(document.title+', adding cue during playback', {timeout:20000}); >+var test1 = async_test(document.title+', video loading'); >+var test2 = async_test(document.title+', video playing'); >+var test3 = async_test(document.title+', adding cue during playback'); > test1.step(smoke_test); > test2.step(smoke_test); > test3.step(smoke_test); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/addCue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/addCue.html >index 2679413348c..622ec4abfd5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/addCue.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/addCue.html >@@ -7,7 +7,7 @@ > setup(function(){ > window.video = document.createElement('video'); > document.body.appendChild(video); >-}, {timeout:5000}); >+}); > test(function() { > var t1 = video.addTextTrack('subtitles'); > var t2 = video.addTextTrack('subtitles'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/removeCue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/removeCue.html >index 3623f44bbc0..a05c0b17442 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/removeCue.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/removeCue.html >@@ -7,7 +7,7 @@ > setup(function(){ > window.video = document.createElement('video'); > document.body.appendChild(video); >-}, {timeout:5000}); >+}); > test(function() { > var t1 = video.addTextTrack('subtitles'); > var t2 = video.addTextTrack('subtitles'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/w3c-import.log >index 751bcdf6637..b1159d1c820 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrack/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html >new file mode 100644 >index 00000000000..c066f60399b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>TextTrackCue constructor</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <script> >+ test(function() >+ { >+ assert_not_equals(TextTrackCue, VTTCue); >+ }, "TextTrackCue and VTTCue are separate interfaces"); >+ test(function() >+ { >+ assert_throws(new TypeError(), function() >+ { >+ new TextTrackCue(0, 0, ""); >+ }); >+ }, "TextTrackCue constructor should not be supported"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/w3c-import.log >index 3c863a666da..202a261bc97 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/constructor.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/endTime.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/id.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onenter.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/w3c-import.log >index dd1327abcd3..1c0969dd518 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackCueList/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackList/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackList/w3c-import.log >index f5269234e66..c653b3af209 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackList/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TextTrackList/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/w3c-import.log >index 2ea7275349b..d031fcc5f76 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/autoplay-overrides-preload.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/autoplay-overrides-preload.html >new file mode 100644 >index 00000000000..332184d55ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/autoplay-overrides-preload.html >@@ -0,0 +1,29 @@ >+<!DOCTYPE HTML> >+<title>autoplay overrides preload</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id=log></div> >+<script> >+['none', 'metadata'].forEach(function(preload) { >+ ['first', 'last'].forEach(function(order) { >+ async_test(function(t) { >+ var a = document.createElement('audio'); >+ a.src = getAudioURI('/media/sound_5'); >+ if (order == 'first') { >+ a.autoplay = true; >+ a.preload = preload; >+ } else { >+ a.preload = preload; >+ a.autoplay = true; >+ } >+ a.addEventListener('error', t.unreached_func()); >+ a.addEventListener('playing', t.step_func(function() { >+ assert_equals(a.readyState, a.HAVE_ENOUGH_DATA); >+ assert_false(a.paused); >+ t.done(); >+ })); >+ }, 'autoplay (set ' + order + ') overrides preload "' + preload + '"'); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html >new file mode 100644 >index 00000000000..c6eac703dd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html >@@ -0,0 +1,69 @@ >+<!doctype html> >+<title>load() fires abort/emptied events when networkState is not NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id=log></div> >+<script> >+function load_test(t, v) { >+ assert_not_equals(v.networkState, v.NETWORK_EMPTY); >+ >+ var expected_events = []; >+ if (v.networkState == v.NETWORK_LOADING || v.networkState == v.NETWORK_IDLE) { >+ expected_events.push('abort'); >+ } >+ if (v.networkState != v.NETWORK_EMPTY) { >+ expected_events.push('emptied'); >+ } >+ >+ var actual_events = []; >+ v.onabort = v.onemptied = t.step_func(function(e) { >+ actual_events.push(e.type); >+ }); >+ >+ v.onloadstart = t.step_func(function() { >+ assert_array_equals(actual_events, expected_events); >+ t.done(); >+ }); >+ >+ v.load(); >+ >+ assert_array_equals(actual_events, [], 'events should be fired in queued tasks'); >+} >+ >+async_test(function(t) { >+ var v = document.createElement('video'); >+ // suspend is fired optionally "if the user agent intends to not attempt to >+ // fetch the resource" or "once the entire media resource has been fetched" >+ v.preload = 'none'; >+ v.src = getAudioURI('/media/sound_5'); >+ v.onerror = t.unreached_func(); >+ v.onsuspend = t.step_func(function() { >+ v.onsuspend = null; >+ assert_equals(v.networkState, v.NETWORK_IDLE); >+ load_test(t, v); >+ }); >+}, 'NETWORK_IDLE'); >+ >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = 'resources/delayed-broken-video.py'; >+ v.onerror = t.unreached_func(); >+ v.onloadstart = t.step_func(function() { >+ v.onloadstart = null; >+ assert_equals(v.networkState, v.NETWORK_LOADING); >+ load_test(t, v); >+ }); >+}, 'NETWORK_LOADING'); >+ >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = 'data:,'; >+ v.onerror = t.step_func(function() { >+ v.onerror = null; >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE); >+ load_test(t, v); >+ }); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE); >+}, 'NETWORK_NO_SOURCE'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event.html >new file mode 100644 >index 00000000000..54d5c28dad5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event.html >@@ -0,0 +1,44 @@ >+<!doctype html> >+<title>load() removes queued error event</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+// The loadstart and error event firing tasks are queued in the synchronous >+// section of the resource selection algorithm, so no tasks can come between >+// them. Calling load() in the loadstart event handler removes the queued error >+// event task at very latest opportunity, failing any implementation that fires >+// the events in the same task. >+ >+async_test(function(t) { >+ var v = document.createElement('video'); >+ var events = []; >+ v.onloadstart = v.onerror = t.step_func(function(e) { >+ events.push(e.type); >+ if (events.length == 1) { >+ v.load(); >+ } else if (events.length == 3) { >+ assert_array_equals(events, ['loadstart', 'loadstart', 'error']); >+ t.done(); >+ } >+ }); >+ v.src = ''; >+}, 'video error event'); >+ >+async_test(function(t) { >+ var v = document.createElement('video'); >+ var s = document.createElement('source'); >+ var events = []; >+ v.onloadstart = s.onerror = t.step_func(function(e) { >+ events.push(e.type); >+ if (events.length == 1) { >+ v.load(); >+ } else if (events.length == 3) { >+ assert_array_equals(events, ['loadstart', 'loadstart', 'error']); >+ t.done(); >+ } >+ }); >+ v.onerror = t.step_func(function() { assert_unreached(); }); >+ v.appendChild(s); >+}, 'source error event'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html >new file mode 100644 >index 00000000000..39c98875052 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html >@@ -0,0 +1,29 @@ >+<!doctype html> >+<title>inserting another source before the candidate</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+function createSource(src) { >+ var source = document.createElement('source'); >+ source.src = src; >+ return source; >+} >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.addEventListener('loadstart', t.step_func(function() { >+ assert_equals(v.currentSrc.substr(v.currentSrc.lastIndexOf('#')), '#a'); >+ t.done(); >+ }), false); >+ v.appendChild(createSource('#a')); // invokes resource selection >+}); >+</script> >+<!-- now resource selection algorithm will continue its sync section (the </script> tag below provides a stable state) --> >+<!-- #a is candidate --> >+<!-- pointer is between #a and the end of the list --> >+<script> >+t.step(function() { >+ v.insertBefore(createSource('#b'), v.firstChild); // pointer is unchanged, #a is still candidate >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-moved.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-moved.html >new file mode 100644 >index 00000000000..f59452e0d85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-moved.html >@@ -0,0 +1,21 @@ >+<!doctype html> >+<title>moving the candidate source</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var s; >+var t = async_test(function(t) { >+ var v = document.createElement('video'); >+ s = document.createElement('source'); >+ s.src = 'resources/delayed-broken-video.py'; >+ s.onerror = t.step_func(function() { t.done(); }); >+ v.appendChild(s); // invokes resource selection >+ onload = t.step_func(function() { assert_unreached(); }); >+}); >+</script> >+<script> >+t.step(function() { >+ document.body.appendChild(s); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-addEventListener.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-addEventListener.html >new file mode 100644 >index 00000000000..0c1e6f0ad8f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-addEventListener.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<title>removing the candidate source, addEventListener</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+function createSource(src) { >+ var source = document.createElement('source'); >+ source.src = src; >+ return source; >+} >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.appendChild(createSource('resources/delayed-broken-video.py')); // invokes resource selection >+ v.firstChild.addEventListener('error', t.step_func(function() { t.done(); }), false); >+}); >+</script> >+<!-- now resource selection algorithm will continue its sync section (the </script> tag below provides a stable state) --> >+<!-- the <source> is candidate --> >+<!-- pointer is between the <source> and the end of the list --> >+<script> >+t.step(function() { >+ v.removeChild(v.firstChild); // tests that we fire 'error' on it despite being removed >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-no-listener.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-no-listener.html >new file mode 100644 >index 00000000000..f384eb31215 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-no-listener.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<title>removing the candidate source, no listener</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+function createSource(src) { >+ var source = document.createElement('source'); >+ source.src = src; >+ return source; >+} >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.appendChild(createSource('resources/delayed-broken-video.py')); // invokes resource selection >+}); >+</script> >+<!-- now resource selection algorithm will continue its sync section (the </script> tag below provides a stable state) --> >+<!-- the <source> is candidate --> >+<!-- pointer is between the <source> and the end of the list --> >+<script> >+t.step(function() { >+ v.removeChild(v.firstChild); // just tests that we don't crash >+ onload = t.step_func(function() { t.done(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-onerror.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-onerror.html >new file mode 100644 >index 00000000000..c295c85bfcd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-onerror.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<title>removing the candidate source, onerror</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+function createSource(src) { >+ var source = document.createElement('source'); >+ source.src = src; >+ return source; >+} >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.appendChild(createSource('resources/delayed-broken-video.py')); // invokes resource selection >+ v.firstChild.onerror = t.step_func(function() { t.done(); }); >+}); >+</script> >+<!-- now resource selection algorithm will continue its sync section (the </script> tag below provides a stable state) --> >+<!-- the <source> is candidate --> >+<!-- pointer is between the <source> and the end of the list --> >+<script> >+t.step(function() { >+ v.removeChild(v.firstChild); // tests that we fire 'error' on it despite being removed >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html >new file mode 100644 >index 00000000000..cb2a5795979 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<title>NOT invoking resource selection with new Audio() sans src</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var a = new Audio(); >+ assert_equals(a.networkState, a.NETWORK_EMPTY); >+ a.onloadstart = t.step_func(function() { assert_unreached(); }); >+ window.onload = t.step_func(function() { t.done(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html >new file mode 100644 >index 00000000000..662129756f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<title>invoking resource selection with new Audio(src)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var a = new Audio(''); >+ a.onloadstart = t.step_func(function() { t.done(); }); >+ window.onload = t.step_func(function() { assert_unreached(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html >new file mode 100644 >index 00000000000..55fc7c20d3a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html >@@ -0,0 +1,32 @@ >+<!doctype html> >+<title>await a stable state and sync event handlers</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.querySelector('video'); >+ var a = document.createElement('a'); >+ a.onclick = t.step_func(function() { >+ v.setAttribute('src', '#'); // invokes media load which invokes resource selection >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState in onclick handler'); >+ }); >+ a.click(); // sync fires click, so sets src >+ // now we should still await a stable state because the script hasn't >+ // finished, the event handler has just returned >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after click()'); >+ v.removeAttribute('src'); >+}); >+</script> >+<script> >+t.step(function() { >+ // now the sync section of resource selection should have run and should >+ // have found no src="" or <source> thus networkState being set to NETWORK_EMPTY. >+ // if the sync section was run when onclick returned, then networkState >+ // would be either NETWORK_LOADING or NETWORK_NO_SOURCE. >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in separate script'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-fragment-into-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-fragment-into-document.html >new file mode 100644 >index 00000000000..5d4c32f670e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-fragment-into-document.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting document fragment into a document</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ var fragment = document.createDocumentFragment(); >+ fragment.appendChild(v); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after fragment.appendChild(v)'); >+ document.body.appendChild(fragment); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after document.body.appendChild(fragment)'); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in separate script'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-document.html >new file mode 100644 >index 00000000000..2f9ec978a55 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-document.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting into a document</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+test(function(t) { >+ var v = document.createElement('video'); >+ document.body.appendChild(v); >+ assert_equals(v.networkState, v.NETWORK_EMPTY); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html >new file mode 100644 >index 00000000000..45d133d8788 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html >@@ -0,0 +1,23 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting into other document with src set</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<iframe hidden></iframe> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = 'data:,'; >+ v.onerror = t.step_func(function() { >+ assert_equals(v.readyState, v.HAVE_NOTHING); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE); >+ var iframe = document.querySelector('iframe'); >+ iframe.contentDocument.body.appendChild(v); >+ v.onloadstart = t.step_func(function() { assert_unreached(); }); >+ // wait for an event after the above >+ var v2 = document.createElement('video'); >+ v2.src = 'data:,'; >+ v2.onloadstart = t.step_func(function() { t.done(); }); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-parent-into-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-parent-into-document.html >new file mode 100644 >index 00000000000..6da34344fd1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-parent-into-document.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting parent into a document</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ var div = document.createElement('div'); >+ div.appendChild(v); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after div.appendChild(v)'); >+ document.body.appendChild(div); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after document.body.appendChild(div)'); >+ window.onload = t.step_func(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in window.onload'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-div.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-div.html >new file mode 100644 >index 00000000000..b79bea52f1a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-div.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting <source> in <div> in <video></title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video><div></div></video> >+<script> >+async_test(function(t) { >+ var v = document.querySelector('video'); >+ v.onloadstart = t.step_func(function() { assert_unreached(); }); >+ v.firstChild.appendChild(document.createElement('source')); >+ window.onload = t.step_func(function() { t.done(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-namespace.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-namespace.html >new file mode 100644 >index 00000000000..b73f229ecc6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-namespace.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting <source> in the wrong namespace</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+async_test(function(t) { >+ var v = document.querySelector('video'); >+ v.onloadstart = t.step_func(function() { assert_unreached(); }); >+ v.appendChild(document.createElementNS('bogus','source')); >+ window.onload = t.step_func(function() { t.done(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html >new file mode 100644 >index 00000000000..5ef6e4cb3ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html >@@ -0,0 +1,38 @@ >+<!doctype html> >+<title>NOT invoking resource selection by inserting <source> when networkState is not NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var loadstartCount = 0; >+var s1ErrorCount = 0; >+var s2ErrorCount = 0; >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.onloadstart = function() { loadstartCount++; }; >+ var s1 = document.createElement('source'); >+ s1.src = 'resources/delayed-broken-video.py'; >+ s1.onerror = function() { s1ErrorCount++; }; >+ v.appendChild(s1); // invokes resource selection >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState in first script'); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_LOADING, 'networkState in second script'); >+ assert_equals(s1ErrorCount, 0, 's1ErrorCount in second script'); >+ var s2 = document.createElement('source'); >+ s2.onerror = t.step_func(function() { >+ s2ErrorCount++; >+ assert_equals(s1ErrorCount, 1, 's1ErrorCount in s2.onerror'); >+ }); >+ v.appendChild(s2); >+ onload = t.step_func(function() { >+ assert_equals(s2ErrorCount, 1, 's2ErrorCount in window.onload'); >+ assert_equals(loadstartCount, 1, 'loadstartCount in window.onload'); // reliable if https://www.w3.org/Bugs/Public/show_bug.cgi?id=24353 is fixed >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState in window.onload'); // See Waiting step >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html >new file mode 100644 >index 00000000000..2007b2e8b3c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<title>invoking resource selection by inserting <source> in video not in a document</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.onloadstart = t.step_func(function() { t.done(); }); >+ v.appendChild(document.createElement('source')); >+ window.onload = t.step_func(function() { assert_unreached(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html >new file mode 100644 >index 00000000000..969daad6231 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<title>invoking resource selection by inserting <source></title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+async_test(function(t) { >+ var v = document.querySelector('video'); >+ v.onloadstart = t.step_func(function() { t.done(); }); >+ v.appendChild(document.createElement('source')); >+ window.onload = t.step_func(function() { assert_unreached(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html >new file mode 100644 >index 00000000000..909c72cd150 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<title>invoking resource selection with load()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after creating v'); >+ v.load(); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after v.load()'); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in separate script'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html >new file mode 100644 >index 00000000000..18561a2649a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html >@@ -0,0 +1,28 @@ >+<!doctype html> >+<title>NOT invoking resource selection with pause() when networkState is not NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.querySelector('video'); >+ v.src = 'data:,'; >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after setting src'); >+ var errorCount = 0; >+ v.onerror = t.step_func(function() { >+ errorCount++; >+ if (errorCount == 1) { >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState in onerror'); >+ v.pause(); // should not invoke RSA. if it does, error will be fired again. >+ } else { >+ assert_unreached(); >+ } >+ }); >+ onload = t.step_func(function() { >+ assert_equals(errorCount, 1, 'errorCount'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause.html >new file mode 100644 >index 00000000000..4f1bca74dd1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<title>invoking resource selection with pause()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after creating v'); >+ v.pause(); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after v.pause()'); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in separate script'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html >new file mode 100644 >index 00000000000..64a440080c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<title>invoking resource selection with play()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after creating v'); >+ v.play(); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after v.play()'); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in separate script'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html >new file mode 100644 >index 00000000000..1eed276b20f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html >@@ -0,0 +1,29 @@ >+<!doctype html> >+<title>NOT invoking resource selection with implicit pause() when networkState is not NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.querySelector('video'); >+ v.src = 'data:,'; >+ document.body.appendChild(v); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after setting src'); >+ var errorCount = 0; >+ v.onerror = t.step_func(function() { >+ errorCount++; >+ if (errorCount == 1) { >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState in onerror'); >+ document.body.removeChild(v); // invokes pause() which should not invoke RSA. if it does, error will be fired again. >+ } else { >+ assert_unreached(); >+ } >+ }); >+ onload = t.step_func(function() { >+ assert_equals(errorCount, 1, 'errorCount'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document.html >new file mode 100644 >index 00000000000..23e7104cab8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document.html >@@ -0,0 +1,21 @@ >+<!doctype html> >+<title>NOT invoking resource selection by removing from document with NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ document.body.appendChild(v); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after appending v to document'); >+ v.parentNode.removeChild(v); // search for "When a media element is removed from a Document," >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after removing v'); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState in separate script'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html >new file mode 100644 >index 00000000000..6302ffeacf2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<title>NOT invoking media load or resource selection when removing the src attribute</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.setAttribute('src', ''); // invokes media load >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after setting src'); >+ var s = document.createElement('source'); >+ s.onerror = this.step_func(function() { assert_unreached(); }); >+ v.appendChild(s); // src is present so nothing happens here >+ onload = this.step_func(function() { t.done(); }); >+}); >+</script> >+<script> >+t.step(function() { >+ v.removeAttribute('src'); // nothing should happen >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-in-namespace.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-in-namespace.html >new file mode 100644 >index 00000000000..438db124d23 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-in-namespace.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<title>NOT invoking load by setting src in the wrong namespace</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+async_test(function(t) { >+ var v = document.querySelector('video'); >+ v.onloadstart = t.step_func(function() { assert_unreached(); }); >+ v.setAttributeNS('bogus','src', ''); >+ window.onload = t.step_func(function() { t.done(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html >new file mode 100644 >index 00000000000..ed86dbe0c57 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html >@@ -0,0 +1,16 @@ >+<!doctype html> >+<title>invoking load by setting src when networkState is not NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+test(function(t) { >+ var v = document.createElement('video'); >+ v.play().catch(() => {}); // invokes resource selection and sets .paused to false >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState'); >+ assert_false(v.paused, 'paused'); >+ v.setAttribute('src', ''); // invokes media load which sets .paused to true >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after setting src'); >+ assert_true(v.paused, 'paused after setting src'); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html >new file mode 100644 >index 00000000000..f6c4f2406a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<title>invoking load by setting src on video not in a document</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.onloadstart = t.step_func(function() { t.done(); }); >+ v.setAttribute('src',''); >+ window.onload = t.step_func(function() { assert_unreached(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html >new file mode 100644 >index 00000000000..e04b1b0580f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<title>invoking load by setting src</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video></video> >+<script> >+async_test(function(t) { >+ var v = document.querySelector('video'); >+ v.onloadstart = t.step_func(function() { t.done(); }); >+ v.setAttribute('src', ''); >+ window.onload = t.step_func(function() { assert_unreached(); }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html >new file mode 100644 >index 00000000000..dad5e5fd008 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<title>pointer updates (control test)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+</script> >+<video >+ ><source onerror=a++ >+ ><source onerror=b++ src='resources/delayed-broken-video.py' >+ ><source onerror=c++ >+ ></video >+> >+<script> >+async_test(function(t) { >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html >new file mode 100644 >index 00000000000..3ee141e3069 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html >@@ -0,0 +1,33 @@ >+<!doctype html> >+<title>pointer updates (adding br elements)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+</script> >+<video >+ ><source onerror=a++ >+ ><source onerror=b++ src='resources/delayed-broken-video.py' >+ ><source onerror=c++ >+ ></video >+> >+<script> >+async_test(function(t) { >+ var video = document.querySelector('video'); >+ // add br elements >+ var br = document.createElement('br'); >+ video.insertBefore(br, video.querySelector('[onerror="a++"]')); >+ video.insertBefore(br.cloneNode(false), video.querySelector('[onerror="b++"]')); >+ video.insertBefore(br.cloneNode(false), video.querySelector('[onerror="c++"]')); >+ video.appendChild(br.cloneNode(false)); >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html >new file mode 100644 >index 00000000000..2d32e6fca05 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html >@@ -0,0 +1,44 @@ >+<!doctype html> >+<title>pointer updates (adding source elements)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+var x1 = 0; >+var x2 = 0; >+var x3 = 0; >+var x4 = 0; >+</script> >+<video >+ ><source onerror=a++ >+ ><source onerror=b++ src='resources/delayed-broken-video.py' >+ ><source onerror=c++ >+ ></video >+> >+<script> >+async_test(function(t) { >+ var video = document.querySelector('video'); >+ // add source elements >+ var source1 = document.createElement('source'); source1.onerror = function() { x1++; }; >+ var source2 = document.createElement('source'); source2.onerror = function() { x2++; }; >+ var source3 = document.createElement('source'); source3.onerror = function() { x3++; }; >+ var source4 = document.createElement('source'); source4.onerror = function() { x4++; }; >+ video.insertBefore(source1, video.querySelector('[onerror="a++"]')); >+ video.insertBefore(source2, video.querySelector('[onerror="b++"]')); >+ video.insertBefore(source3, video.querySelector('[onerror="c++"]')); >+ video.appendChild(source4); >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ assert_equals(x1, 0, 'error events on x1'); >+ assert_equals(x2, 0, 'error events on x2'); >+ assert_equals(x3, 1, 'error events on x3'); >+ assert_equals(x4, 1, 'error events on x4'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html >new file mode 100644 >index 00000000000..15a4e4be064 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html >@@ -0,0 +1,33 @@ >+<!doctype html> >+<title>pointer updates (adding text nodes)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+</script> >+<video >+ ><source onerror=a++ >+ ><source onerror=b++ src='resources/delayed-broken-video.py' >+ ><source onerror=c++ >+ ></video >+> >+<script> >+async_test(function(t) { >+ var video = document.querySelector('video'); >+ // add text nodes >+ var text = document.createTextNode('x'); >+ video.insertBefore(text, video.querySelector('[onerror="a++"]')); >+ video.insertBefore(text.cloneNode(false), video.querySelector('[onerror="b++"]')); >+ video.insertBefore(text.cloneNode(false), video.querySelector('[onerror="c++"]')); >+ video.appendChild(text.cloneNode(false)); >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html >new file mode 100644 >index 00000000000..0d1c940375c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html >@@ -0,0 +1,56 @@ >+<!doctype html> >+<title>pointer updates (removing source element after pointer)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+var x1 = 0; >+var x2 = 0; >+var x3 = 0; >+var x4 = 0; >+</script> >+<video >+ ><source onerror=a++ >+ ><source onerror=b++ src='resources/delayed-broken-video.py' >+ ><source onerror=x1++ >+ ><source onerror=x2++ >+ ><source onerror=x3++ >+ ><source onerror=x4++ >+ ><source onerror=c++ >+ ></video >+> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.querySelector('video'); >+ v.removeChild(document.querySelector('[onerror="x1++"]')); >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ assert_equals(x1, 0, 'error events on x1'); >+ assert_equals(x2, 0, 'error events on x2'); >+ assert_equals(x3, 0, 'error events on x3'); >+ assert_equals(x4, 0, 'error events on x4'); >+ t.done(); >+ }); >+}); >+</script> >+<script> >+t.step(function() { >+ v.removeChild(document.querySelector('[onerror="x2++"]')); >+}); >+</script> >+<script> >+t.step(function() { >+ v.removeChild(document.querySelector('[onerror="x3++"]')); >+}); >+</script> >+<script> >+t.step(function() { >+ v.removeChild(document.querySelector('[onerror="x4++"]')); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html >new file mode 100644 >index 00000000000..191f9b5e21f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html >@@ -0,0 +1,43 @@ >+<!doctype html> >+<title>pointer updates (removing source elements)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+var x1 = 0; >+var x2 = 0; >+var x3 = 0; >+var x4 = 0; >+</script> >+<video >+ ><source onerror=x1++ >+ ><source onerror=a++ >+ ><source onerror=x2++ >+ ><source onerror=b++ src='resources/delayed-broken-video.py' >+ ><source onerror=x3++ >+ ><source onerror=c++ >+ ><source onerror=x4++ >+ ></video >+> >+<script> >+async_test(function(t) { >+ var video = document.querySelector('video'); >+ // remove the xn elements >+ [].forEach.call(document.querySelectorAll('[onerror^="x"]'), function(elm) { >+ video.removeChild(elm); >+ }); >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ assert_equals(x1, 1, 'error events on x1'); >+ assert_equals(x2, 1, 'error events on x2'); >+ assert_equals(x3, 0, 'error events on x3'); >+ assert_equals(x4, 0, 'error events on x4'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html >new file mode 100644 >index 00000000000..f0fe5da909c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html >@@ -0,0 +1,33 @@ >+<!doctype html> >+<title>pointer updates (removing text nodes)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var a = 0; >+var b = 0; >+var c = 0; >+</script> >+<video >+ >x<source onerror=a++ >+ >x<source onerror=b++ src='resources/delayed-broken-video.py' >+ >x<source onerror=c++ >+ >x</video >+> >+<script> >+async_test(function(t) { >+ var video = document.querySelector('video'); >+ // remove the text nodes >+ [].forEach.call(video.childNodes, function(node) { >+ if (node.nodeType == node.TEXT_NODE) { >+ video.removeChild(node); >+ } >+ }); >+ window.onload = t.step_func(function() { >+ assert_equals(a, 1, 'error events on a'); >+ assert_equals(b, 1, 'error events on b'); >+ assert_equals(c, 1, 'error events on c'); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html >new file mode 100644 >index 00000000000..fbeead01915 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html >@@ -0,0 +1,24 @@ >+<!doctype html> >+<title>Changes to networkState when inserting and removing a <source></title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState when creating the element'); >+ v.appendChild(document.createElement('source')); // runs resource selection algorithm >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState when inserting a source element'); >+ v.removeChild(v.firstChild); >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE, 'networkState after removing the source element'); >+}); >+</script> >+<!-- now resource selection will continue its sync section (the </script> tag below provides a stable state) --> >+<!-- will find neither src nor source, so sets networkState to NETWORK_EMPTY --> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, 'networkState after letting the sync section of resource selection run'); >+ t.done(); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html >new file mode 100644 >index 00000000000..4d788718237 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<title>invoking resource selection by setting src; await stable state</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+var v; >+var t = async_test(function(t) { >+ v = document.createElement('video'); >+ v.onloadstart = t.step_func(function() { assert_unreached(); }); >+ v.setAttribute('src', ''); // runs resource selection algorithm, but it will wait running the sync section until this script has finished >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE); >+ v.removeAttribute('src'); // will make resource selection algorithm revert to NETWORK_EMPTY and abort (in the sync section) >+ assert_equals(v.networkState, v.NETWORK_NO_SOURCE); >+ window.onload = t.step_func(function() { t.done(); }); >+}); >+</script> >+<script> >+t.step(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html >new file mode 100644 >index 00000000000..6332f0890db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<title>the <source> media attribute has no effect</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<video><source src="resources/delayed-broken-video.py" media="none"></video> >+<script> >+test(function() { >+ var v = document.querySelector('video'); >+ var s = document.querySelector('source'); >+ assert_equals(v.networkState, v.NETWORK_LOADING); >+ assert_equals(v.currentSrc, s.src); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/delayed-broken-video.py b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/delayed-broken-video.py >new file mode 100644 >index 00000000000..88e5027947c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/delayed-broken-video.py >@@ -0,0 +1,5 @@ >+import time >+ >+def main(request, response): >+ time.sleep(0.1) >+ return [("Content-Type", "text/plain")], "FAIL" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/w3c-import.log >new file mode 100644 >index 00000000000..5c644a79620 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/delayed-broken-video.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/w3c-import.log >new file mode 100644 >index 00000000000..97e75a36a4d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/w3c-import.log >@@ -0,0 +1,57 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/autoplay-overrides-preload.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-events-networkState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-moved.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-addEventListener.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-no-listener.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-remove-onerror.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor-no-src.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-fragment-into-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-parent-into-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-div.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-in-namespace.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document-networkState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-from-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-in-namespace.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-not-in-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html >new file mode 100644 >index 00000000000..cd1ebb9e492 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html >@@ -0,0 +1,44 @@ >+<!doctype html> >+<title>currentSrc</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+['audio', 'video'].forEach(function(tagName) { >+ test(function() { >+ assert_equals(document.createElement(tagName).currentSrc, ''); >+ }, tagName + '.currentSrc initial value'); >+ >+ ['', '.', ' ', 'data:,'].forEach(function(src) { >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ assert_equals(e.currentSrc, ''); >+ t.step_timeout(function() { >+ if (src == '') { >+ assert_equals(e.currentSrc, ''); >+ } else { >+ assert_equals(e.currentSrc, e.src); >+ } >+ t.done(); >+ }, 0); >+ }, tagName + '.currentSrc after setting src attribute "' + src + '"'); >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ var s = document.createElement('source'); >+ s.src = src; >+ e.appendChild(s); >+ assert_equals(e.currentSrc, ''); >+ t.step_timeout(function() { >+ if (src == '') { >+ assert_equals(e.currentSrc, ''); >+ } else { >+ assert_equals(e.currentSrc, s.src); >+ } >+ t.done(); >+ }, 0); >+ }, tagName + '.currentSrc after adding source element with src attribute "' + src + '"'); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/w3c-import.log >new file mode 100644 >index 00000000000..dc4e6553d3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/w3c-import.log >index c06fe0d8d89..ea71b389b77 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/mime-types/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_loadstart.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_loadstart.html >index 8f0fffc612a..e0e1f510190 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_loadstart.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_loadstart.html >@@ -14,7 +14,7 @@ > </video> > <div id="log"></div> > <script> >-var ta = async_test("audioElement.networkState should be NETWORK_LOADING during loadstart event", {timeout:5000}); >+var ta = async_test("audioElement.networkState should be NETWORK_LOADING during loadstart event"); > var a = document.getElementById("a"); > a.addEventListener("loadstart", function() { > ta.step(function() { >@@ -26,7 +26,7 @@ a.addEventListener("loadstart", function() { > }, false); > a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random(); > >-var tv = async_test("videoElement.networkState should be NETWORK_LOADING during loadstart event", {timeout:5000}); >+var tv = async_test("videoElement.networkState should be NETWORK_LOADING during loadstart event"); > var v = document.getElementById("v"); > v.addEventListener("loadstart", function() { > tv.step(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_progress.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_progress.html >new file mode 100644 >index 00000000000..db9df23cb65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_progress.html >@@ -0,0 +1,42 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>{audio,video}.networkState - NETWORK_LOADING</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/media.js"></script> >+ </head> >+ <body> >+ <p><a href="https://html.spec.whatwg.org/multipage/#dom-media-networkstate">spec reference</a></p> >+ <audio id="a" autoplay controls> >+ </audio> >+ <video id="v" autoplay controls> >+ </video> >+ <div id="log"></div> >+ <script> >+test(function() { >+ var ta = async_test("audioElement.networkState should be NETWORK_LOADING during progress event"); >+ var a = document.getElementById("a"); >+ a.addEventListener("error", ta.unreached_func()); >+ a.addEventListener("progress", ta.step_func(function() { >+ assert_equals(a.networkState, a.NETWORK_LOADING); >+ ta.done(); >+ a.pause(); >+ }), false); >+ a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random(); >+}, "audio events - networkState during progress"); >+ >+test(function() { >+ var tv = async_test("videoElement.networkState should be NETWORK_LOADING during progress event"); >+ var v = document.getElementById("v"); >+ v.addEventListener("error", tv.unreached_func()); >+ v.addEventListener("progress", tv.step_func(function() { >+ assert_equals(v.networkState, v.NETWORK_LOADING); >+ tv.done(); >+ v.pause(); >+ }), false); >+ v.src = getVideoURI("/media/movie_5") + "?" + new Date() + Math.random(); >+}, "video events - networkState during progress"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html >new file mode 100644 >index 00000000000..e9b65899412 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html >@@ -0,0 +1,32 @@ >+<!doctype html> >+<title>currentTime</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id=log></div> >+<script> >+test(function() { >+ var v = document.createElement('video'); >+ assert_equals(v.currentTime, 0); >+}, 'currentTime initial value'); >+ >+test(function() { >+ var v = document.createElement('video'); >+ assert_equals(v.readyState, v.HAVE_NOTHING); >+ v.currentTime = Number.MAX_VALUE; >+ assert_equals(v.currentTime, Number.MAX_VALUE); >+ assert_false(v.seeking); >+}, 'setting currentTime when readyState is HAVE_NOTHING'); >+ >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = getVideoURI('/media/movie_5'); >+ v.onloadedmetadata = t.step_func(function() { >+ assert_greater_than(v.readyState, v.HAVE_NOTHING); >+ assert_false(v.seeking); >+ v.currentTime = 1; >+ assert_true(v.seeking); >+ t.done(); >+ }); >+}, 'setting currentTime when readyState is greater than HAVE_NOTHING'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/w3c-import.log >index 5bbe8fc626a..fed315525e8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -14,4 +14,5 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/currentTime.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/offsets-into-the-media-resource/duration.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_false_during_play.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_false_during_play.html >index b5d3071388a..946deecf433 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_false_during_play.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_false_during_play.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.paused should be false during play event", {timeout:5000}); >+ var t = async_test("audio.paused should be false during play event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("play", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - paused property"); > > test(function() { >- var t = async_test("video.paused should be false during play event", {timeout:5000}); >+ var t = async_test("video.paused should be false during play event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("play", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause.html >index 6c4eb7c0c09..817615c5cb5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause.html >@@ -15,30 +15,32 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.paused should be true during pause event", {timeout:5000}); >+ var t = async_test("audio.paused should be true during pause event"); > var a = document.getElementById("a"); > a.addEventListener("pause", function() { > t.step(function() { > assert_true(a.paused); > }); >+ > t.done(); > }, false); > a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random(); >- a.play(); >+ a.play().catch(() => {}); > a.pause(); > }, "audio events - paused property"); > > test(function() { >- var t = async_test("video.paused should be true during pause event", {timeout:5000}); >+ var t = async_test("video.paused should be true during pause event"); > var v = document.getElementById("v"); > v.addEventListener("pause", function() { > t.step(function() { > assert_true(v.paused); > }); >+ > t.done(); > }, false); > v.src = getVideoURI("/media/movie_5") + "?" + new Date() + Math.random(); >- v.play(); >+ v.play().catch(() => {}); > v.pause(); > }, "video events - paused property"); > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html >new file mode 100644 >index 00000000000..c2180f5fba5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html >@@ -0,0 +1,21 @@ >+<!doctype html> >+<title>paused state when removing from a document when networkState is NETWORK_EMPTY</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<video hidden></video> >+<script> >+// Negative test for the specified behavior prior to HTML r8447. >+async_test(function(t) { >+ var v = document.querySelector('video'); >+ v.play(); >+ t.step_timeout(function() { >+ assert_equals(v.networkState, v.NETWORK_EMPTY, >+ 'networkState after stable state'); >+ assert_false(v.paused, 'paused after stable state'); >+ v.parentNode.removeChild(v); >+ assert_false(v.paused, 'paused after removing'); >+ v.onpause = t.step_func_done(); >+ }, 0); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html >new file mode 100644 >index 00000000000..8e9a7843b73 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html >@@ -0,0 +1,24 @@ >+<!doctype html> >+<title>play() in detached document</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id="log"></div> >+<script> >+// Negative test for failure to play in a detached document. >+async_test(function(t) >+{ >+ var doc = document.implementation.createHTMLDocument(""); >+ var v = doc.createElement("video"); >+ doc.body.appendChild(v); >+ v.src = getVideoURI("/media/movie_5"); >+ v.play().catch(() => {}); >+ >+ v.addEventListener("timeupdate", t.step_func(function() { >+ assert_false(v.paused); >+ if (v.currentTime > 0) { >+ t.done(); >+ } >+ })); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/w3c-import.log >index c9a283f8b43..13985c8a2d3 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -16,5 +16,7 @@ None > List of files: > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/playing-the-media-resource/playbackRate.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html >new file mode 100644 >index 00000000000..c009f55bfca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html >@@ -0,0 +1,35 @@ >+<!doctype html> >+<title>autoplay hidden</title> >+<link rel="author" title="Intel" href="http://www.intel.com"> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#ready-states"/> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id="log"></div> >+<script> >+ >+promise_test(async t => { >+ let video = document.createElement("video"); >+ video.src = getVideoURI("/media/movie_5"); >+ video.autoplay = true; >+ // In Safari and Chrome, the video needs to be muted in order to be paused when >+ // hidden. They decided to do this in order to save resources when a video >+ // goes out of view and isn't expected to make any sound. >+ video.muted = true; >+ video.loop = true; >+ let watcher = new EventWatcher(t, video, ["playing", "pause"]); >+ document.body.appendChild(video); >+ >+ await watcher.wait_for("playing"); >+ assert_false(video.paused, "paused when video is display"); >+ video.hidden = true; >+ >+ await watcher.wait_for("pause"); >+ assert_true(video.paused, "paused when video is hidden"); >+ video.hidden = false; >+ >+ await watcher.wait_for("playing"); >+ assert_false(video.paused, "paused when video is display"); >+}, "Allow delaying autoplay until video elements become visible"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay.html >new file mode 100644 >index 00000000000..b60b58a4217 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay.html >@@ -0,0 +1,73 @@ >+<!doctype html> >+<title>autoplay</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id="log"></div> >+<script> >+function autoplay_test(tagName, src) { >+ function expect_events(t, e, expected_events) { >+ var actual_events = []; >+ var callback = t.step_func(function(ev) { >+ actual_events.push(ev.type); >+ assert_array_equals(actual_events, >+ expected_events.slice(0, actual_events.length)); >+ if (expected_events.length == actual_events.length) { >+ t.done(); >+ } >+ }); >+ ['canplay', 'canplaythrough', >+ 'pause', 'play', 'playing', 'error'].forEach(function(type) { >+ e.addEventListener(type, callback); >+ }); >+ } >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ e.autoplay = true; >+ expect_events(t, e, ['canplay', 'play', 'playing', 'canplaythrough']); >+ }, tagName + '.autoplay'); >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ e.autoplay = true; >+ e.pause(); // sets the autoplaying flag to false >+ e.load(); // sets the autoplaying flag to true >+ expect_events(t, e, ['canplay', 'play', 'playing', 'canplaythrough']); >+ }, tagName + '.autoplay and load()'); >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ e.autoplay = true; >+ e.play(); // sets the autoplaying flag to false >+ // play() also sets the paused attribute to false; there is no way for the >+ // autoplaying flag to be true when the paused attribute is false. >+ assert_equals(e.paused, false); >+ expect_events(t, e, ['play', 'canplay', 'playing', 'canplaythrough']); >+ }, tagName + '.autoplay and play()'); >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ e.autoplay = true; >+ e.pause(); // sets the autoplaying flag to false >+ expect_events(t, e, ['canplay', 'canplaythrough']); >+ }, tagName + '.autoplay and pause()'); >+ >+ async_test(function(t) { >+ var e = document.createElement(tagName); >+ e.src = src; >+ e.autoplay = true; >+ document.body.appendChild(e); >+ document.body.removeChild(e); >+ // in stable state, internal pause steps sets the autoplaying flag to false >+ expect_events(t, e, ['canplay', 'canplaythrough']); >+ }, tagName + '.autoplay and internal pause steps'); >+} >+ >+autoplay_test('audio', getAudioURI('/media/sound_5')); >+autoplay_test('video', getVideoURI('/media/movie_5')); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/w3c-import.log >index 0110e3081fd..b584a1bb13d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -14,4 +14,6 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplay.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplay.html >index 5ab3f881b40..358a87fe216 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplay.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplay.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.readyState should be >= HAVE_FUTURE_DATA during canplay event", {timeout:5000}); >+ var t = async_test("audio.readyState should be >= HAVE_FUTURE_DATA during canplay event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("canplay", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - readyState property during canplay"); > > test(function() { >- var t = async_test("video.readyState should be >= HAVE_FUTURE_DATA during canplay event", {timeout:5000}); >+ var t = async_test("video.readyState should be >= HAVE_FUTURE_DATA during canplay event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("canplay", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplaythrough.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplaythrough.html >index 2b1910dfd82..2721d186336 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplaythrough.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_canplaythrough.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.readyState should be HAVE_ENOUGH_DATA during canplaythrough event", {timeout:5000}); >+ var t = async_test("audio.readyState should be HAVE_ENOUGH_DATA during canplaythrough event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("canplaythrough", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - readyState property during canplaythrough"); > > test(function() { >- var t = async_test("video.readyState should be HAVE_ENOUGH_DATA during canplaythrough event", {timeout:5000}); >+ var t = async_test("video.readyState should be HAVE_ENOUGH_DATA during canplaythrough event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("canplaythrough", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html >index 7c5838381bb..f237b1fbd33 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadeddata.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.readyState should be >= HAVE_CURRENT_DATA during loadeddata event", {timeout:5000}); >+ var t = async_test("audio.readyState should be >= HAVE_CURRENT_DATA during loadeddata event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("loadeddata", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - readyState property during loadeddata"); > > test(function() { >- var t = async_test("video.readyState should be >= HAVE_CURRENT_DATA during loadeddata event", {timeout:5000}); >+ var t = async_test("video.readyState should be >= HAVE_CURRENT_DATA during loadeddata event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("loadeddata", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html >index 752d79cdcb4..73f33f0b98b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_loadedmetadata.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.readyState should be >= HAVE_METADATA during loadedmetadata event", {timeout:5000}); >+ var t = async_test("audio.readyState should be >= HAVE_METADATA during loadedmetadata event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("loadedmetadata", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - readyState property during loadedmetadata"); > > test(function() { >- var t = async_test("video.readyState should be >= HAVE_METADATA during loadedmetadata event", {timeout:5000}); >+ var t = async_test("video.readyState should be >= HAVE_METADATA during loadedmetadata event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("loadedmetadata", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_playing.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_playing.html >index 5e8809851ec..663bad701b0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_playing.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_during_playing.html >@@ -15,7 +15,7 @@ > <div id="log"></div> > <script> > test(function() { >- var t = async_test("audio.readyState should be >= HAVE_FUTURE_DATA during playing event", {timeout:5000}); >+ var t = async_test("audio.readyState should be >= HAVE_FUTURE_DATA during playing event"); > var a = document.getElementById("a"); > a.addEventListener("error", t.unreached_func()); > a.addEventListener("playing", t.step_func(function() { >@@ -27,7 +27,7 @@ test(function() { > }, "audio events - readyState property during playing"); > > test(function() { >- var t = async_test("video.readyState should be >= HAVE_FUTURE_DATA during playing event", {timeout:5000}); >+ var t = async_test("video.readyState should be >= HAVE_FUTURE_DATA during playing event"); > var v = document.getElementById("v"); > v.addEventListener("error", t.unreached_func()); > v.addEventListener("playing", t.step_func(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html >new file mode 100644 >index 00000000000..3d577dac97f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html >@@ -0,0 +1,33 @@ >+<!doctype html> >+<title>seek to currentTime</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = getVideoURI('/media/movie_5'); >+ v.onloadedmetadata = t.step_func(function() { >+ assert_greater_than(v.readyState, v.HAVE_NOTHING, 'readyState'); >+ assert_greater_than(v.seekable.length, 0, 'seekable ranges'); >+ assert_false(v.seeking, 'seeking before setting currentTime'); >+ v.currentTime = v.currentTime; >+ assert_true(v.seeking, 'seeking after setting currentTime'); >+ var events = []; >+ v.onseeking = v.ontimeupdate = v.onseeked = t.step_func(function(e) { >+ events.push(e.type); >+ // v.seeking can be true or false in the seeking event, see >+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=24774 >+ if (e.type != 'seeking') { >+ assert_equals(v.seeking, false, 'seeking in ' + e.type + ' event'); >+ } >+ if (e.type == 'seeked') { >+ assert_array_equals(events, ['seeking', 'timeupdate', 'seeked'], >+ 'fired events'); >+ t.done(); >+ } >+ }); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-max-value.htm b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-max-value.htm >new file mode 100644 >index 00000000000..a31f6c07ab0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-max-value.htm >@@ -0,0 +1,23 @@ >+<!doctype html> >+<title>seek to Number.MAX_VALUE</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = getVideoURI('/media/movie_5'); >+ v.onloadedmetadata = t.step_func(function() { >+ assert_equals(v.seekable.length, 1); >+ v.currentTime = Number.MAX_VALUE; >+ assert_true(v.seeking, 'seeking after setting'); >+ assert_equals(v.currentTime, v.seekable.end(0), 'currentTime after setting'); >+ v.onseeked = t.step_func(function(e) { >+ assert_false(v.seeking, 'seeking in seeked event'); >+ assert_equals(v.currentTime, v.seekable.end(0), 'currentTime in seeked event'); >+ t.done(); >+ }); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-negative-time.htm b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-negative-time.htm >new file mode 100644 >index 00000000000..56a99028deb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-negative-time.htm >@@ -0,0 +1,23 @@ >+<!doctype html> >+<title>seek to negative time</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/media.js"></script> >+<div id=log></div> >+<script> >+async_test(function(t) { >+ var v = document.createElement('video'); >+ v.src = getVideoURI('/media/movie_5'); >+ v.onloadedmetadata = t.step_func(function() { >+ assert_equals(v.seekable.start(0), 0, 'earliest seekable time'); >+ v.currentTime = -1; >+ assert_true(v.seeking, 'seeking after setting'); >+ assert_equals(v.currentTime, 0, 'currentTime after setting'); >+ v.onseeked = t.step_func(function(e) { >+ assert_false(v.seeking, 'seeking in seeked event'); >+ assert_equals(v.currentTime, 0, 'currentTime in seeked event'); >+ t.done(); >+ }); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/w3c-import.log >new file mode 100644 >index 00000000000..350bdf1a71d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-currentTime.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-max-value.htm >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/seeking/seek-to-negative-time.htm >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html >new file mode 100644 >index 00000000000..4236df29b91 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html >new file mode 100644 >index 00000000000..4f86d011a30 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html >new file mode 100644 >index 00000000000..e6a693400c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html >new file mode 100644 >index 00000000000..351b97d6775 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html >new file mode 100644 >index 00000000000..4ccc6b66ac9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html >new file mode 100644 >index 00000000000..0444a83085f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html >new file mode 100644 >index 00000000000..dd622327554 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html >new file mode 100644 >index 00000000000..d75d6f4d6da >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html >new file mode 100644 >index 00000000000..6d0fae6de73 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html >new file mode 100644 >index 00000000000..110497b494b >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html >new file mode 100644 >index 00000000000..d2a9ddb193f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html >new file mode 100644 >index 00000000000..a1d6a8b2957 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html >new file mode 100644 >index 00000000000..2850a24e17e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html >new file mode 100644 >index 00000000000..5cd5a85d431 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html >new file mode 100644 >index 00000000000..0ec5bc32910 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html >new file mode 100644 >index 00000000000..f639d043a31 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html >new file mode 100644 >index 00000000000..45e1291c923 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html >new file mode 100644 >index 00000000000..e1153b6813e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html >new file mode 100644 >index 00000000000..ec2e9d8bb41 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html >new file mode 100644 >index 00000000000..e8fb0c3d438 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html >new file mode 100644 >index 00000000000..ac9bb354655 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html >new file mode 100644 >index 00000000000..302340022d3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html >new file mode 100644 >index 00000000000..5cbe8528e26 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html >new file mode 100644 >index 00000000000..c8386ffff3e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html >new file mode 100644 >index 00000000000..5fe4760e66c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html >new file mode 100644 >index 00000000000..6019d37b63d >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html >new file mode 100644 >index 00000000000..7fa85456de5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html >new file mode 100644 >index 00000000000..f7abf3b1ed4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html >new file mode 100644 >index 00000000000..d709d0bc426 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html >new file mode 100644 >index 00000000000..62b1008a417 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html >new file mode 100644 >index 00000000000..215cae24193 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html >new file mode 100644 >index 00000000000..bebb43ba8c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html >new file mode 100644 >index 00000000000..a17fb7dfc1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html >new file mode 100644 >index 00000000000..52411177ea5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html >new file mode 100644 >index 00000000000..675b913a135 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html >new file mode 100644 >index 00000000000..a29b2bdeade >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html >new file mode 100644 >index 00000000000..fcd4871ddb4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html >new file mode 100644 >index 00000000000..3c819684c43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html >new file mode 100644 >index 00000000000..f0f81953fca >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html >new file mode 100644 >index 00000000000..c1ffa5f1ea8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html >new file mode 100644 >index 00000000000..09072a9895d >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html >new file mode 100644 >index 00000000000..0d4a9fefbd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html >new file mode 100644 >index 00000000000..7151364f9c8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html >new file mode 100644 >index 00000000000..e2864628144 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js >new file mode 100644 >index 00000000000..e30c6271496 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py >new file mode 100644 >index 00000000000..1c27a0d14bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py >@@ -0,0 +1,51 @@ >+from wptserve.handlers import HTTPException >+import urllib >+ >+def main(request, response): >+ if request.method != "GET": >+ raise HTTPException(400, message="Method was not GET") >+ >+ if not "id" in request.GET: >+ raise HTTPException(400, message="No id") >+ >+ id = request.GET['id'] >+ >+ if "read" in request.GET: >+ data = request.server.stash.take(id) >+ if data is None: >+ response.set_error(404, "Tried to read data not yet set") >+ return >+ return [("Content-Type", "text/plain")], data >+ >+ elif "cleanup" in request.GET: >+ request.server.stash.take(id) >+ return "OK" >+ >+ elif "delete-cookie" in request.GET: >+ response.delete_cookie(id) >+ return [("Content-Type", "text/plain")], "OK" >+ >+ if "origin" in request.GET: >+ response.headers.set('Access-Control-Allow-Origin', request.GET['origin']) >+ response.headers.set('Access-Control-Allow-Credentials', 'true') >+ >+ cors = request.headers.get("origin", "no") >+ >+ cookie = request.cookies.first(id, "no") >+ >+ line = 'cors = ' + cors + ' | cookie = ' + cookie.value; >+ >+ data = request.server.stash.take(id) >+ if data is not None: >+ line = data + "\n" + line >+ >+ request.server.stash.put(id, line) >+ >+ if "redirect" in request.GET: >+ response.status = 302 >+ response.headers.set('Location', request.GET['redirect']) >+ else: >+ return """WEBVTT >+ >+00:00:00.000 --> 00:00:10.000 >+Test""" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html >new file mode 100644 >index 00000000000..00430e3f0e3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html >new file mode 100644 >index 00000000000..cc1c9263860 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/w3c-import.log >new file mode 100644 >index 00000000000..aee01f824af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/w3c-import.log >@@ -0,0 +1,20 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/common.js >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/cors-tester.py >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/remove-cookie.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/support/set-cookie.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/w3c-import.log >new file mode 100644 >index 00000000000..bd61f9e90c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/w3c-import.log >@@ -0,0 +1,60 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/003.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/004.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/005.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/006.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/007.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/008.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/009.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/010.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/011.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/012.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/013.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/014.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/015.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/016.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/017.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/018.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/019.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/020.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/021.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/022.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/023.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/024.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/025.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/026.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/027.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/028.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/029.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/030.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/031.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/032.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/033.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/034.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/035.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/036.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/037.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/038.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/039.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/040.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/041.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/042.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/043.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/044.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/045.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cors/046.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt >new file mode 100644 >index 00000000000..ff4c3fb5cd4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt >new file mode 100644 >index 00000000000..a6e6af2ef96 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt >new file mode 100644 >index 00000000000..b196f13a207 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt >new file mode 100644 >index 00000000000..dd3a6debb89 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt >new file mode 100644 >index 00000000000..5beb376f450 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt >new file mode 100644 >index 00000000000..673b29ac851 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt >new file mode 100644 >index 00000000000..ad7792f7724 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt >new file mode 100644 >index 00000000000..0c8de32bcb7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt >new file mode 100644 >index 00000000000..cd138fd32af >--- /dev/null >+++ b/LayoutTests/imported/w3c/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:00.700 >+ipsum >+ >+3 >+00:00:01.200 --> 00:00:01.500 >+dolor >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt >new file mode 100644 >index 00000000000..44c74665c25 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt >new file mode 100644 >index 00000000000..0730f8bc40b >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt >new file mode 100644 >index 00000000000..787c4308687 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt >new file mode 100644 >index 00000000000..650ea2c4960 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt >new file mode 100644 >index 00000000000..ea3ef623f59 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt >new file mode 100644 >index 00000000000..2b5db0c1da4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt >new file mode 100644 >index 00000000000..39021186208 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt >new file mode 100644 >index 00000000000..111bae6344b >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt >new file mode 100644 >index 00000000000..0d52a70ee4b >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt >new file mode 100644 >index 00000000000..88f56cceca8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt >new file mode 100644 >index 00000000000..205955e3e49 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt >new file mode 100644 >index 00000000000..56defcc48b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt >new file mode 100644 >index 00000000000..5e4a61a5e40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt >new file mode 100644 >index 00000000000..6d365365396 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt >new file mode 100644 >index 00000000000..700600d7a79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt >new file mode 100644 >index 00000000000..017d59a18bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt >new file mode 100644 >index 00000000000..fd6d484f888 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt >new file mode 100644 >index 00000000000..9062c67edee >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt >new file mode 100644 >index 00000000000..3f035d331f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt >new file mode 100644 >index 00000000000..125ed667855 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt >new file mode 100644 >index 00000000000..d890ca3f71a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt >new file mode 100644 >index 00000000000..c04390420f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt >new file mode 100644 >index 00000000000..dbfde34b697 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt >new file mode 100644 >index 00000000000..f45fee4793f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt >new file mode 100644 >index 00000000000..a8817954a60 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt >new file mode 100644 >index 00000000000..c825ab32e2e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt >new file mode 100644 >index 00000000000..10a16243864 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt >new file mode 100644 >index 00000000000..e6c18ce3bd6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt >new file mode 100644 >index 00000000000..3d52175729d >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt >new file mode 100644 >index 00000000000..82f7e2a5234 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt >new file mode 100644 >index 00000000000..4ff7add2d72 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt >new file mode 100644 >index 00000000000..252a599b5fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt >new file mode 100644 >index 00000000000..255298aeb01 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt >new file mode 100644 >index 00000000000..03d8cf4a1c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt >new file mode 100644 >index 00000000000..36e8366e908 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt >new file mode 100644 >index 00000000000..49e4e9051a2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt >new file mode 100644 >index 00000000000..4cb85b6df27 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt >new file mode 100644 >index 00000000000..12053b2703c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt >new file mode 100644 >index 00000000000..58ca6792be7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt >new file mode 100644 >index 00000000000..b23a7446b7f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt >new file mode 100644 >index 00000000000..ccf6024da06 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt >new file mode 100644 >index 00000000000..cbfe6ea6e92 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt >new file mode 100644 >index 00000000000..dd6b02296af >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt >new file mode 100644 >index 00000000000..9815b111da5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt >new file mode 100644 >index 00000000000..438ea6abf99 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt >new file mode 100644 >index 00000000000..4479cdb722f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt >new file mode 100644 >index 00000000000..17d464bfedf >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt >new file mode 100644 >index 00000000000..c33f8a96c3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt >new file mode 100644 >index 00000000000..b708b83338a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt >new file mode 100644 >index 00000000000..e4bf27d4e6c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt >new file mode 100644 >index 00000000000..745c34ff9fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt >new file mode 100644 >index 00000000000..9d9ac9a38a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt >new file mode 100644 >index 00000000000..b4ea7ea09b5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt >new file mode 100644 >index 00000000000..8dd8f279488 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt >new file mode 100644 >index 00000000000..8e7b3b738dc >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt >new file mode 100644 >index 00000000000..74838369d23 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt >new file mode 100644 >index 00000000000..f757a365e36 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt >new file mode 100644 >index 00000000000..12ffdeb82ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt >new file mode 100644 >index 00000000000..d6cfc6887ff >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm >new file mode 100644 >index 0000000000000000000000000000000000000000..c626f86e3366c9705307c9794b4e6eeb067e5c08 >GIT binary patch >literal 143662 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%0D>Ub-!<7 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/w3c-import.log >index 64c5c83c16d..12a5de16bbe 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -14,7 +14,78 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/align-text-line-position.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment-ltr.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/alignment.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/bom.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-fast.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-html.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/captions.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/class.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id-error.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-id.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id-error.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-no-id.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-cuetext.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-header.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-recovery-note.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-align.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cue-size.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-chrono-order.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-no-separation.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues-overlapping.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/cues.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/default-styles.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/degenerate-cues.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/empty-cue.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities-wrong.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/entities.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/interspersed-non-cue.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/iso2022jp3.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/large-timestamp.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/line-position.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/markup.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata-area.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/metadata.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/missed-cues.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-newline-at-eof.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-timings.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/no-webvtt.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning-ltr.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/positioning.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings-bad-separation.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/settings.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/sorted-dispatch.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timestamp.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour-error.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-hour.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour-errors.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-no-hour.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/timings-whitespace.vtt > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.de.vtt > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.en.vtt > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.fr.vtt > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/track.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/unsupported-markup.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/utf8.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign-ltr.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/valign.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice-bad.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/voice.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-file.vtt >new file mode 100644 >index 00000000000..0c1a5fb158c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/resources/webvtt-rubbish.vtt >new file mode 100644 >index 00000000000..dacc215409c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html >new file mode 100644 >index 00000000000..27c76b6be47 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html >new file mode 100644 >index 00000000000..67ab3bdb138 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html >@@ -0,0 +1,39 @@ >+<!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'); >+ 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() { >+ 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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html >new file mode 100644 >index 00000000000..1e6c557fb60 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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_object_equals(cues.getCueById("junk"), undefined); >+ >+ // 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("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("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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html >new file mode 100644 >index 00000000000..7f8ee2fdd47 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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() { >+ 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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html >new file mode 100644 >index 00000000000..4503a06bb2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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(new 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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html >new file mode 100644 >index 00000000000..a9cd73435a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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() { >+ 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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html >new file mode 100644 >index 00000000000..d18f8b55cd4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html >new file mode 100644 >index 00000000000..59f8fc6c7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html >new file mode 100644 >index 00000000000..3b4c3542a92 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html >new file mode 100644 >index 00000000000..713e7819962 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html >new file mode 100644 >index 00000000000..63c3018aa99 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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(new 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("IndexSizeError", function() { textCue.position = -200; }); >+ assert_throws("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("IndexSizeError", function() { textCue.size = -200 }); >+ assert_throws("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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html >new file mode 100644 >index 00000000000..e2f78900a75 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html >new file mode 100644 >index 00000000000..ebd7877f78a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html >new file mode 100644 >index 00000000000..5dc54ed25bf >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-expected.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-expected.html >new file mode 100644 >index 00000000000..bd43c462ddb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-expected.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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html >new file mode 100644 >index 00000000000..23c27e418ec >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-expected.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-expected.html >new file mode 100644 >index 00000000000..96afaef3463 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-expected.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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html >new file mode 100644 >index 00000000000..76019c9b41e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html >new file mode 100644 >index 00000000000..427189f6fc7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-expected.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-expected.html >new file mode 100644 >index 00000000000..8354041eb2a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-expected.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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html >new file mode 100644 >index 00000000000..d3dcee10373 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-expected.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-expected.html >new file mode 100644 >index 00000000000..39461350b08 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-expected.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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html >new file mode 100644 >index 00000000000..69ca92e845b >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html >new file mode 100644 >index 00000000000..b9c8412bab0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<title>TextTrack's cues are indexed and updated in order 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-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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html >new file mode 100644 >index 00000000000..970666793a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<title>TextTrack's cues are indexed and updated in order 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-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() { >+ 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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html >new file mode 100644 >index 00000000000..043c941b123 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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() { >+ 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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html >new file mode 100644 >index 00000000000..eaf7e2a1d4f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html >new file mode 100644 >index 00000000000..99cd2d550e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html >new file mode 100644 >index 00000000000..edc202f4358 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html >new file mode 100644 >index 00000000000..3e8c547fc32 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html >new file mode 100644 >index 00000000000..ce9f73335a9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html >new file mode 100644 >index 00000000000..038e6f6ba71 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html >new file mode 100644 >index 00000000000..d517b9d12c7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html >new file mode 100644 >index 00000000000..ff447f33f2e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html >new file mode 100644 >index 00000000000..ffc8ec0682d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html >@@ -0,0 +1,92 @@ >+<!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 5: >+ 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 >+ // CuesList will be cleared in the next tick. Spec claims that this should happen immediately, >+ // but all implementations are doing this asynchronously. >+ assert_equals(cues.length, 4, "Number of cues immediately after 'src' mutation with the empty 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; >+ case 4: >+ 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.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); >+ break; >+ default: >+ assert_unreached("unexpected stage number = " + stage); >+ break; >+ } >+ } >+ >+ function step_onError() { >+ switch (stage) { >+ case 0: >+ case 2: >+ case 4: >+ 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"; >+ break; >+ case 5: >+ 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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html >new file mode 100644 >index 00000000000..34a53d15319 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html >@@ -0,0 +1,57 @@ >+<!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"; >+ // CuesList will be cleared in a microtask. Spec claims that this should happen immediately, >+ // but all known implementations are doing this asynchronously. >+ assert_equals(cues.length, 4, "Number of cues 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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js >new file mode 100644 >index 00000000000..09c85dd7bc1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html >new file mode 100644 >index 00000000000..f0223fda643 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html >new file mode 100644 >index 00000000000..28b4f826887 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html >new file mode 100644 >index 00000000000..bae1852cf83 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html >new file mode 100644 >index 00000000000..8e232bff537 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html >new file mode 100644 >index 00000000000..62a68f65439 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html >new file mode 100644 >index 00000000000..e569eeb96fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html >new file mode 100644 >index 00000000000..6b46bf4e344 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html b/LayoutTests/imported/w3c/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 00000000000..2902ba90bc9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html >@@ -0,0 +1,73 @@ >+<!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, configured to load automatically. >+ track2 = document.createElement('track'); >+ track2.setAttribute('kind', 'captions'); >+ track2.setAttribute('default', 'default'); >+ track2.setAttribute('src', 'resources/webvtt-file.vtt'); >+ 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() { >+ // 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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html >new file mode 100644 >index 00000000000..2e29d704690 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html >new file mode 100644 >index 00000000000..29208a33c21 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<title>TextTrack mode attribute</title> >+<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"); >+ track.onload = t.step_func(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). >+ t.step_timeout(testHiddenAndShowing, 400); >+ } >+ >+ track.oncuechange = t.step_func(function(event) { >+ cueCount++; >+ if (cueCount == textTrack.cues.length) >+ 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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html >new file mode 100644 >index 00000000000..2708879424a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html >new file mode 100644 >index 00000000000..176e0065c59 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html >new file mode 100644 >index 00000000000..95929bc83fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html >new file mode 100644 >index 00000000000..1c854aca0ed >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html >new file mode 100644 >index 00000000000..4be040c5f87 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html >new file mode 100644 >index 00000000000..7dcfe68318a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html >new file mode 100644 >index 00000000000..d5695cd302d >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html >new file mode 100644 >index 00000000000..1f7df3b6823 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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"> >+ <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> >+</video> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html >new file mode 100644 >index 00000000000..5b11bfdea4c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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_object_equals(cues[4], undefined); >+ >+ // Testing TextTrackCueList getCueById(). >+ assert_equals(cues.getCueById("1").startTime, 0); >+ assert_equals(cues.getCueById("4").startTime, 121); >+ assert_object_equals(cues.getCueById("junk"), undefined); >+ }); >+ }); >+ </script> >+</video> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html >new file mode 100644 >index 00000000000..4d006fcefb4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html >new file mode 100644 >index 00000000000..07ebfd622b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html >new file mode 100644 >index 00000000000..deb389916ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html >new file mode 100644 >index 00000000000..e8f47e876a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html >new file mode 100644 >index 00000000000..114aebc38c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html >new file mode 100644 >index 00000000000..c138f96af57 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html >new file mode 100644 >index 00000000000..fe3c868c587 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html >@@ -0,0 +1,55 @@ >+<!DOCTYPE html> >+<title>Tests cues with class markup <c>.</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/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html >new file mode 100644 >index 00000000000..02b0a15187a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html >new file mode 100644 >index 00000000000..b2f4b770831 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html >new file mode 100644 >index 00000000000..6a104916b7c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html >new file mode 100644 >index 00000000000..a1243a95e7d >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html >new file mode 100644 >index 00000000000..d8e03edce7f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html >new file mode 100644 >index 00000000000..8d2569993c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html >new file mode 100644 >index 00000000000..e1f55702500 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html >new file mode 100644 >index 00000000000..a5295795ef0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html >new file mode 100644 >index 00000000000..f9b35576f34 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html >new file mode 100644 >index 00000000000..2287cc2830e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html >new file mode 100644 >index 00000000000..bea4acb917a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html >new file mode 100644 >index 00000000000..ff4637a8a5f >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html >new file mode 100644 >index 00000000000..2b044379f14 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html >@@ -0,0 +1,89 @@ >+<!DOCTYPE html> >+<title>Cues with <b>, <i>, <u>, <rt> and <ruby> 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/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html >new file mode 100644 >index 00000000000..4da7e6b1b9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html >new file mode 100644 >index 00000000000..a39a2c37aa5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-expected.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-expected.html >new file mode 100644 >index 00000000000..92c1e9fedf9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-expected.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: 48px; >+ font-family: sans-serif; >+ background: green; >+ color: rgba(255, 255, 255, 1); >+ font-size: 12px; >+ padding: 0px 2px; >+} >+</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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html >new file mode 100644 >index 00000000000..0da8c6f83d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html >new file mode 100644 >index 00000000000..d14a5768d3a >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html >new file mode 100644 >index 00000000000..9ad98ffa1aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html >new file mode 100644 >index 00000000000..e311f121f25 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html >new file mode 100644 >index 00000000000..c03e182c79e >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html >new file mode 100644 >index 00000000000..e81ae03cc24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html >new file mode 100644 >index 00000000000..db1346d23ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-expected.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-expected.html >new file mode 100644 >index 00000000000..c0415367cc1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-expected.html >@@ -0,0 +1,23 @@ >+<!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.onloadeddata = function() { >+ takeScreenshot(); >+}; >+</script> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html b/LayoutTests/imported/w3c/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 00000000000..c90313c887c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html >@@ -0,0 +1,30 @@ >+<!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"); >+track.addCue(new VTTCue(0, 1, "cue 1")); >+track.addCue(new VTTCue(0, 3, "cue 2")); >+track.mode = "showing"; >+ >+video.onloadeddata = function() { >+ // Double nesting of requestAnimationFrame to >+ // make sure cue layout and paint happens. >+ window.requestAnimationFrame(function() { >+ window.requestAnimationFrame(function() { >+ // Seek past the end of the first cue. The second cue should not move. >+ video.currentTime = 2; >+ video.onseeked = function() { takeScreenshot(); }; >+ }); >+ }); >+}; >+</script> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html >new file mode 100644 >index 00000000000..ed3107f89b2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html >new file mode 100644 >index 00000000000..eb44c85ba83 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html >new file mode 100644 >index 00000000000..ace07607400 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html >new file mode 100644 >index 00000000000..5df8b4057ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/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/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html >new file mode 100644 >index 00000000000..9cb58242792 >--- /dev/null >+++ b/LayoutTests/imported/w3c/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> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/w3c-import.log >index c408a2d2055..98041676327 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -16,6 +16,99 @@ None > List of files: > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/cloneNode.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/src-empty-string.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-remove-cue.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-add-track.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-addtrack-kind.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-api-texttracks.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-empty.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-inline.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-removed.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-line-doesnt-fit.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-transformed-video.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-seeking.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-default-attribute.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-delete-during-setup.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-dom-change.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-helpers.js >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-id.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-insert-after-load.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-large-timestamp.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-error-readyState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-element-readyState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-load-from-src-readyState.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-triggers-loading.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-node-add-remove.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-selection-metadata.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-text-track-cue-list.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-texttracks.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-positioning.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-align-text-line-position.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-alignment.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-blank-lines.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-bom.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-class-markup.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-identifiers.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-no-id.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-recovery.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size-align.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-cue-size.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-degenerate-cues.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-empty-cue.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-entities.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-header-comment.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-interspersed-non-cue.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-line-position.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-magic-header.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-markup.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-newlines.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-no-timings.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-non-snap-to-lines.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-positioning.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-settings.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timestamp.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-hour.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-no-hours.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-timings-whitespace.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-two-cue-layout-after-first-end.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-unsupported-markup.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-utf8.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-valign.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-webvtt-voice.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/vtt-cue-float-precision.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/user-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/user-interface/w3c-import.log >index bed95612b20..7a5d80e0c89 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/user-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/user-interface/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html >new file mode 100644 >index 00000000000..9b5d69b31a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Video Test: video_loop_base</title> >+ <link rel="author" title="Intel" href="http://www.intel.com" /> >+ <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-media-loop" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Check if video.loop is set to true that expecting the seeking event is fired more than once" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/media.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <video id="m" controls>The user agent doesn't support media element.</video> >+ <script type="text/javascript"> >+ var media = document.getElementById("m"); >+ var name = document.getElementsByName("assert")[0].content; >+ var t = async_test(name); >+ var looped = false; >+ >+ function startTest() { >+ if (looped) { >+ t.step(function() { >+ assert_true(true, "looped"); >+ }); >+ t.done(); >+ media.pause(); >+ } >+ >+ looped = true; >+ } >+ >+ media.addEventListener("seeking", startTest, false); >+ media.loop = true; >+ media.src = getVideoURI("/media/2x2-green") + "?" + new Date() + Math.random(); >+ media.play(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/w3c-import.log >index f9b2ab1135f..34209341484 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/w3c-import.log >@@ -1,7 +1,7 @@ > The tests in this directory were imported from the W3C repository. > Do NOT modify these tests directly in WebKit. > Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >+ https://github.com/web-platform-tests/wpt > > Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport > >@@ -14,7 +14,17 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/audio_loop_base.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/audio_volume_check.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/contains.json > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_canplay_noautoplay.html >@@ -43,6 +53,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/event_volumechange.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/historical.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_loadstart.html >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_during_progress.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/networkState_initial.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_false_during_play.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause.html >@@ -55,5 +66,6 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/readyState_initial.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/src_reflects_attribute_not_source_elements.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_008.htm >+/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_volume_check.html > /LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/volume_nonfinite.html >-- >2.20.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194770
:
362269
|
362272
|
362274
|
362280
|
362284
|
362285
|
362286
|
362292
|
363091
|
363742
|
363749
|
363754
|
363774