Upstream track-remove* tests

Upstream the below tests from media/track/ to wpt
1. track-remove-active-cue-crash.html
2. track-remove-by-setting-innerHTML.html
3. track-remove-insert-ready-state.html
4. track-remove-quickly.html
5. track-remove-track.html

Bug: 782555
Change-Id: I6a6155430edc8397db80fee1372bdc455cf989b8
Reviewed-on: https://chromium-review.googlesource.com/842325
Commit-Queue: srirama chandra sekhar <srirama.m@samsung.com>
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#526187}
diff --git a/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt b/html/semantics/embedded-content/media-elements/track/track-element/resources/captions-gaps.vtt
new file mode 100644
index 0000000..44c7466
--- /dev/null
+++ b/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/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt b/html/semantics/embedded-content/media-elements/track/track-element/resources/simple-captions.vtt
new file mode 100644
index 0000000..9815b11
--- /dev/null
+++ b/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/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm b/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm
new file mode 100644
index 0000000..c626f86
--- /dev/null
+++ b/html/semantics/embedded-content/media-elements/track/track-element/resources/vp8-vorbis-webvtt.webm
Binary files differ
diff --git a/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html b/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html
new file mode 100644
index 0000000..176e006
--- /dev/null
+++ b/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/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html b/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html
new file mode 100644
index 0000000..95929bc
--- /dev/null
+++ b/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/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html b/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html
new file mode 100644
index 0000000..1c854ac
--- /dev/null
+++ b/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/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html b/html/semantics/embedded-content/media-elements/track/track-element/track-remove-quickly.html
new file mode 100644
index 0000000..4be040c
--- /dev/null
+++ b/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/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html b/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html
new file mode 100644
index 0000000..29938e3
--- /dev/null
+++ b/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track.html
@@ -0,0 +1,105 @@
+<!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.");
+
+            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/media/counting.mp4 b/media/counting.mp4
new file mode 100644
index 0000000..5fbd6d9
--- /dev/null
+++ b/media/counting.mp4
Binary files differ
diff --git a/media/counting.ogv b/media/counting.ogv
new file mode 100644
index 0000000..ce03c19
--- /dev/null
+++ b/media/counting.ogv
Binary files differ
diff --git a/media/test.mp4 b/media/test.mp4
new file mode 100644
index 0000000..d278c8a
--- /dev/null
+++ b/media/test.mp4
Binary files differ
diff --git a/media/test.ogv b/media/test.ogv
new file mode 100644
index 0000000..0c55f6c
--- /dev/null
+++ b/media/test.ogv
Binary files differ