Title: [87743] trunk
Revision
87743
Author
[email protected]
Date
2011-05-31 11:16:13 -0700 (Tue, 31 May 2011)

Log Message

2011-05-31  Abhishek Arya  <[email protected]>

        Reviewed by Dimitri Glazkov.

        Improve hasMediaControls logic to check that node has
        media controls. This can be false when cloning nodes.
        https://bugs.webkit.org/show_bug.cgi?id=61765

        Test: media/media-controls-clone-crash.html

        * dom/Node.h:
        (WebCore::Node::isMediaControls):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/shadow/MediaControls.h:
        (WebCore::MediaControls::isMediaControls):
        (WebCore::toMediaControls):
2011-05-31  Abhishek Arya  <[email protected]>

        Reviewed by Dimitri Glazkov.

        Tests that cloning an audio element with media controls does
        not result in crash.
        https://bugs.webkit.org/show_bug.cgi?id=61765

        * media/media-controls-clone-crash-expected.txt: Added.
        * media/media-controls-clone-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (87742 => 87743)


--- trunk/LayoutTests/ChangeLog	2011-05-31 18:14:24 UTC (rev 87742)
+++ trunk/LayoutTests/ChangeLog	2011-05-31 18:16:13 UTC (rev 87743)
@@ -1,3 +1,14 @@
+2011-05-31  Abhishek Arya  <[email protected]>
+
+        Reviewed by Dimitri Glazkov.
+
+        Tests that cloning an audio element with media controls does
+        not result in crash.
+        https://bugs.webkit.org/show_bug.cgi?id=61765
+
+        * media/media-controls-clone-crash-expected.txt: Added.
+        * media/media-controls-clone-crash.html: Added.
+
 2011-05-31  Andreas Kling  <[email protected]>
 
         Unreviewed. Rebaseline Mac after JSC/Canvas bindings changes.

Added: trunk/LayoutTests/media/media-controls-clone-crash-expected.txt (0 => 87743)


--- trunk/LayoutTests/media/media-controls-clone-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/media-controls-clone-crash-expected.txt	2011-05-31 18:16:13 UTC (rev 87743)
@@ -0,0 +1 @@
+Test passes if it does not crash.

Added: trunk/LayoutTests/media/media-controls-clone-crash.html (0 => 87743)


--- trunk/LayoutTests/media/media-controls-clone-crash.html	                        (rev 0)
+++ trunk/LayoutTests/media/media-controls-clone-crash.html	2011-05-31 18:16:13 UTC (rev 87743)
@@ -0,0 +1,25 @@
+<html>
+    <body _onload_="runTest();">
+        Test passes if it does not crash.
+        <script>
+            if (window.layoutTestController)
+            {
+                layoutTestController.dumpAsText();
+                layoutTestController.waitUntilDone();
+            }
+
+            function runTest() {
+                node = document.createElement('audio');
+                node.setAttribute('src', 'foo');
+                node.setAttribute('controls', 'foo');
+                node.style.fontWeight = '100';
+                var clone = node.cloneNode(false);
+                clone.load();
+ 
+                if (window.layoutTestController)
+                    setTimeout("layoutTestController.notifyDone()", 0);
+            }
+        </script>
+    </body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (87742 => 87743)


--- trunk/Source/WebCore/ChangeLog	2011-05-31 18:14:24 UTC (rev 87742)
+++ trunk/Source/WebCore/ChangeLog	2011-05-31 18:16:13 UTC (rev 87743)
@@ -1,3 +1,22 @@
+2011-05-31  Abhishek Arya  <[email protected]>
+
+        Reviewed by Dimitri Glazkov.
+
+        Improve hasMediaControls logic to check that node has
+        media controls. This can be false when cloning nodes.
+        https://bugs.webkit.org/show_bug.cgi?id=61765
+
+        Test: media/media-controls-clone-crash.html
+
+        * dom/Node.h:
+        (WebCore::Node::isMediaControls):
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::mediaControls):
+        (WebCore::HTMLMediaElement::hasMediaControls):
+        * html/shadow/MediaControls.h:
+        (WebCore::MediaControls::isMediaControls):
+        (WebCore::toMediaControls):
+
 2011-05-31  Xan Lopez  <[email protected]>
 
         Reviewed by Martin Robinson.

Modified: trunk/Source/WebCore/dom/Node.h (87742 => 87743)


--- trunk/Source/WebCore/dom/Node.h	2011-05-31 18:14:24 UTC (rev 87742)
+++ trunk/Source/WebCore/dom/Node.h	2011-05-31 18:16:13 UTC (rev 87743)
@@ -203,6 +203,7 @@
 #endif
 
     virtual bool isMediaControlElement() const { return false; }
+    virtual bool isMediaControls() const { return false; }
     bool isStyledElement() const { return getFlag(IsStyledElementFlag); }
     virtual bool isFrameOwnerElement() const { return false; }
     virtual bool isAttributeNode() const { return false; }

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (87742 => 87743)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2011-05-31 18:14:24 UTC (rev 87742)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2011-05-31 18:16:13 UTC (rev 87743)
@@ -2680,17 +2680,16 @@
 
 MediaControls* HTMLMediaElement::mediaControls()
 {
-    if (!shadowRoot())
-        return 0;
-
-    Node* node = shadowRoot()->firstChild();
-    ASSERT(node->isHTMLElement());
-    return static_cast<MediaControls*>(node);
+    return toMediaControls(shadowRoot()->firstChild());
 }
 
 bool HTMLMediaElement::hasMediaControls()
 {
-    return shadowRoot();
+    if (!shadowRoot())
+        return false;
+
+    Node* node = shadowRoot()->firstChild();
+    return node && node->isMediaControls();
 }
 
 void HTMLMediaElement::ensureMediaControls()

Modified: trunk/Source/WebCore/html/shadow/MediaControls.h (87742 => 87743)


--- trunk/Source/WebCore/html/shadow/MediaControls.h	2011-05-31 18:14:24 UTC (rev 87742)
+++ trunk/Source/WebCore/html/shadow/MediaControls.h	2011-05-31 18:16:13 UTC (rev 87743)
@@ -75,10 +75,21 @@
 
 private:
     MediaControls();
+
+    virtual bool isMediaControls() const { return true; }
 };
 
+inline MediaControls* toMediaControls(Node* node)
+{
+    ASSERT(!node || node->isMediaControls());
+    return static_cast<MediaControls*>(node);
 }
 
+// This will catch anyone doing an unneccessary cast.
+void toMediaControls(const Node*);
+
+}
+
 #endif
 
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to