Title: [149749] trunk
Revision
149749
Author
[email protected]
Date
2013-05-08 10:16:21 -0700 (Wed, 08 May 2013)

Log Message

Prevent crash when track is deleted during video element deletion.
https://bugs.webkit.org/show_bug.cgi?id=106183

Reviewed by Dean Jackson.

Source/WebCore:

Test: media/track/track-remove-crash.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::removedFrom): Set m_inActiveDocument to false so we
    do not process text track cues or dispatch related events.

LayoutTests:

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

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (149748 => 149749)


--- trunk/LayoutTests/ChangeLog	2013-05-08 17:03:25 UTC (rev 149748)
+++ trunk/LayoutTests/ChangeLog	2013-05-08 17:16:21 UTC (rev 149749)
@@ -1,3 +1,13 @@
+2013-05-08  Eric Carlson  <[email protected]>
+
+        Prevent crash when track is deleted during video element deletion.
+        https://bugs.webkit.org/show_bug.cgi?id=106183
+
+        Reviewed by Dean Jackson.
+
+        * media/track/track-remove-crash-expected.txt: Added.
+        * media/track/track-remove-crash.html: Added.
+
 2013-05-08  David Kilzer  <[email protected]>
 
         Remove chromium test results added in r149743

Added: trunk/LayoutTests/media/track/track-remove-crash-expected.txt (0 => 149749)


--- trunk/LayoutTests/media/track/track-remove-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-remove-crash-expected.txt	2013-05-08 17:16:21 UTC (rev 149749)
@@ -0,0 +1,7 @@
+Tests that removing a track while its parent is being deleted does not crash.
+
+
+No crash. PASS.
+
+END OF TEST
+

Added: trunk/LayoutTests/media/track/track-remove-crash.html (0 => 149749)


--- trunk/LayoutTests/media/track/track-remove-crash.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-remove-crash.html	2013-05-08 17:16:21 UTC (rev 149749)
@@ -0,0 +1,60 @@
+<!DOCTYPE  html>
+<html>
+    <head>
+        <script src=""
+
+        <script>
+            function logEvent(evt)
+            {
+                consoleWrite("EVENT(" + evt.type + ")");
+            }
+
+            function startTest()
+            {
+                track1 = document.getElementsByTagName('track')[0]
+                track1.track.mode  =  'showing';
+                track1.addEventListener('removetrack', logEvent);
+
+                track2 = document.getElementsByTagName('track')[1]
+                track2.track.mode  =  'showing';
+                track2.addEventListener('removetrack', logEvent);
+
+                video = document.getElementsByTagName('video')[0];
+
+                setTimeout("attemptCrash()", 0);
+            }
+            document.addEventListener("DOMContentLoaded", startTest, false);
+
+            function ForceGC()
+            {
+                try { gc(); } catch(e) {}
+
+                consoleWrite("");
+                consoleWrite("No crash. PASS.");
+                consoleWrite("");
+
+                endTest();
+            }
+
+            function attemptCrash()
+            {
+                newDocument  =  document.implementation.createDocument("",  null);
+                newDocument.appendChild(video);
+                delete newDocument;
+
+                setTimeout(ForceGC, 0);
+            }
+        </script>
+    </head>
+
+    <body>
+        <p>Tests that removing a track while its parent is being deleted does not crash.</p>
+        <video autoplay controls >
+            <source src="" type="video/ogg" >
+            <source src="" type="video/mp4" >
+            <track src=""
+            <track src=""
+        </video>
+        </label>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (149748 => 149749)


--- trunk/Source/WebCore/ChangeLog	2013-05-08 17:03:25 UTC (rev 149748)
+++ trunk/Source/WebCore/ChangeLog	2013-05-08 17:16:21 UTC (rev 149749)
@@ -1,5 +1,18 @@
 2013-05-08  Eric Carlson  <[email protected]>
 
+        Prevent crash when track is deleted during video element deletion.
+        https://bugs.webkit.org/show_bug.cgi?id=106183
+
+        Reviewed by Dean Jackson.
+
+        Test: media/track/track-remove-crash.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::removedFrom): Set m_inActiveDocument to false so we
+            do not process text track cues or dispatch related events.
+
+2013-05-08  Eric Carlson  <[email protected]>
+
         [Mac] Unreviewed buildfix after r149741.
 
         * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (149748 => 149749)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2013-05-08 17:03:25 UTC (rev 149748)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2013-05-08 17:16:21 UTC (rev 149749)
@@ -587,8 +587,10 @@
 
 void HTMLMediaElement::removedFrom(ContainerNode* insertionPoint)
 {
+    m_inActiveDocument = false;
+
     if (insertionPoint->inDocument()) {
-        LOG(Media, "HTMLMediaElement::removedFromDocument");
+        LOG(Media, "HTMLMediaElement::removedFrom");
         configureMediaControls();
         if (m_networkState > NETWORK_EMPTY)
             pause();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to