Title: [151796] trunk
Revision
151796
Author
[email protected]
Date
2013-06-20 13:14:03 -0700 (Thu, 20 Jun 2013)

Log Message

ASSERT removing then adding a <track> element
https://bugs.webkit.org/show_bug.cgi?id=117814

Reviewed by Jer Noble.

Source/WebCore:

Test: media/track/add-and-remove-track.html

* html/HTMLTrackElement.cpp:
(WebCore::HTMLTrackElement::insertedInto): Always call ensureTrack before adding the track
    to the parent <video> element.
(WebCore::HTMLTrackElement::ensureTrack): Call m_track->setTrackElement() in case the
    parent was cleared after m_track was created.

* html/track/LoadableTextTrack.cpp:
(WebCore::LoadableTextTrack::setTrackElement): New, set m_trackElement.
* html/track/LoadableTextTrack.h:

LayoutTests:

* media/track/add-and-remove-track-expected.txt: Added.
* media/track/add-and-remove-track.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (151795 => 151796)


--- trunk/LayoutTests/ChangeLog	2013-06-20 20:12:35 UTC (rev 151795)
+++ trunk/LayoutTests/ChangeLog	2013-06-20 20:14:03 UTC (rev 151796)
@@ -1,3 +1,13 @@
+2013-06-20  Eric Carlson  <[email protected]>
+
+        ASSERT removing then adding a <track> element
+        https://bugs.webkit.org/show_bug.cgi?id=117814
+
+        Reviewed by Jer Noble.
+
+        * media/track/add-and-remove-track-expected.txt: Added.
+        * media/track/add-and-remove-track.html: Added.
+
 2013-06-20  Benjamin Poulain  <[email protected]>
 
         Mark compositing/repaint/positioned-movement.html as flaky on Mountain Lion Debug

Added: trunk/LayoutTests/media/track/add-and-remove-track-expected.txt (0 => 151796)


--- trunk/LayoutTests/media/track/add-and-remove-track-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/add-and-remove-track-expected.txt	2013-06-20 20:14:03 UTC (rev 151796)
@@ -0,0 +1,6 @@
+Tests that removing a <track> element and adding it again does not crash.
+
+If this test does not crash, it passes.
+
+END OF TEST
+

Added: trunk/LayoutTests/media/track/add-and-remove-track.html (0 => 151796)


--- trunk/LayoutTests/media/track/add-and-remove-track.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/add-and-remove-track.html	2013-06-20 20:14:03 UTC (rev 151796)
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <script src=""
+        <script>
+            function test()
+            {
+                findMediaElement();
+
+                var tracks = document.querySelectorAll('track');
+                for (var ndx = 0; ndx < tracks.length; ++ndx)
+                    video.removeChild(tracks[ndx]);
+                for (var ndx = 0; ndx < tracks.length; ++ndx)
+                    video.appendChild(tracks[ndx]);
+
+                endTest();
+            }
+
+        </script>
+    </head>
+    <body _onload_="test()">
+        <p>Tests that removing a &lt;track&gt; element and adding it again does not crash.</p>
+        <p>If this test does not crash, it passes.</p>
+        <video width="500" height="300" controls>
+            <track src="" >
+            <track src="" >
+            <track src="" >
+            <track src="" >
+        </video>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (151795 => 151796)


--- trunk/Source/WebCore/ChangeLog	2013-06-20 20:12:35 UTC (rev 151795)
+++ trunk/Source/WebCore/ChangeLog	2013-06-20 20:14:03 UTC (rev 151796)
@@ -1,3 +1,22 @@
+2013-06-20  Eric Carlson  <[email protected]>
+
+        ASSERT removing then adding a <track> element
+        https://bugs.webkit.org/show_bug.cgi?id=117814
+
+        Reviewed by Jer Noble.
+
+        Test: media/track/add-and-remove-track.html
+
+        * html/HTMLTrackElement.cpp:
+        (WebCore::HTMLTrackElement::insertedInto): Always call ensureTrack before adding the track
+            to the parent <video> element.
+        (WebCore::HTMLTrackElement::ensureTrack): Call m_track->setTrackElement() in case the
+            parent was cleared after m_track was created.
+
+        * html/track/LoadableTextTrack.cpp:
+        (WebCore::LoadableTextTrack::setTrackElement): New, set m_trackElement.
+        * html/track/LoadableTextTrack.h:
+
 2013-06-20  Roger Fong  <[email protected]>
 
         Unreviewed. Build fix for Apple Windows port.

Modified: trunk/Source/WebCore/html/HTMLTrackElement.cpp (151795 => 151796)


--- trunk/Source/WebCore/html/HTMLTrackElement.cpp	2013-06-20 20:12:35 UTC (rev 151795)
+++ trunk/Source/WebCore/html/HTMLTrackElement.cpp	2013-06-20 20:14:03 UTC (rev 151796)
@@ -79,8 +79,10 @@
 
     HTMLElement::insertedInto(insertionPoint);
     HTMLMediaElement* parent = mediaElement();
-    if (insertionPoint == parent)
+    if (insertionPoint == parent) {
+        ensureTrack();
         parent->didAddTextTrack(this);
+    }
     return InsertionDone;
 }
 
@@ -173,7 +175,9 @@
         if (!TextTrack::isValidKindKeyword(kind))
             kind = TextTrack::subtitlesKeyword();
         m_track = LoadableTextTrack::create(this, kind, label(), srclang());
-    }
+    } else
+        m_track->setTrackElement(this);
+
     return m_track.get();
 }
 

Modified: trunk/Source/WebCore/html/track/LoadableTextTrack.cpp (151795 => 151796)


--- trunk/Source/WebCore/html/track/LoadableTextTrack.cpp	2013-06-20 20:12:35 UTC (rev 151795)
+++ trunk/Source/WebCore/html/track/LoadableTextTrack.cpp	2013-06-20 20:14:03 UTC (rev 151796)
@@ -76,6 +76,12 @@
 {
     return m_trackElement;
 }
+    
+void LoadableTextTrack::setTrackElement(HTMLTrackElement* element)
+{
+    ASSERT(!m_trackElement || m_trackElement == element);
+    m_trackElement = element;
+}
 
 void LoadableTextTrack::loadTimerFired(Timer<LoadableTextTrack>*)
 {

Modified: trunk/Source/WebCore/html/track/LoadableTextTrack.h (151795 => 151796)


--- trunk/Source/WebCore/html/track/LoadableTextTrack.h	2013-06-20 20:12:35 UTC (rev 151795)
+++ trunk/Source/WebCore/html/track/LoadableTextTrack.h	2013-06-20 20:14:03 UTC (rev 151796)
@@ -60,6 +60,7 @@
 
     size_t trackElementIndex();
     HTMLTrackElement* trackElement() { return m_trackElement; }
+    void setTrackElement(HTMLTrackElement*);
     virtual Element* element() OVERRIDE;
 
     virtual bool isDefault() const OVERRIDE { return m_isDefault; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to