Title: [87761] branches/chromium/742

Diff

Copied: branches/chromium/742/LayoutTests/media/media-controls-clone-crash-expected.txt (from rev 87743, trunk/LayoutTests/media/media-controls-clone-crash-expected.txt) (0 => 87761)


--- branches/chromium/742/LayoutTests/media/media-controls-clone-crash-expected.txt	                        (rev 0)
+++ branches/chromium/742/LayoutTests/media/media-controls-clone-crash-expected.txt	2011-05-31 23:37:48 UTC (rev 87761)
@@ -0,0 +1 @@
+Test passes if it does not crash.

Copied: branches/chromium/742/LayoutTests/media/media-controls-clone-crash.html (from rev 87743, trunk/LayoutTests/media/media-controls-clone-crash.html) (0 => 87761)


--- branches/chromium/742/LayoutTests/media/media-controls-clone-crash.html	                        (rev 0)
+++ branches/chromium/742/LayoutTests/media/media-controls-clone-crash.html	2011-05-31 23:37:48 UTC (rev 87761)
@@ -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: branches/chromium/742/Source/WebCore/dom/Node.h (87760 => 87761)


--- branches/chromium/742/Source/WebCore/dom/Node.h	2011-05-31 23:35:34 UTC (rev 87760)
+++ branches/chromium/742/Source/WebCore/dom/Node.h	2011-05-31 23:37:48 UTC (rev 87761)
@@ -206,6 +206,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: branches/chromium/742/Source/WebCore/html/HTMLMediaElement.cpp (87760 => 87761)


--- branches/chromium/742/Source/WebCore/html/HTMLMediaElement.cpp	2011-05-31 23:35:34 UTC (rev 87760)
+++ branches/chromium/742/Source/WebCore/html/HTMLMediaElement.cpp	2011-05-31 23:37:48 UTC (rev 87761)
@@ -2655,17 +2655,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: branches/chromium/742/Source/WebCore/html/shadow/MediaControls.h (87760 => 87761)


--- branches/chromium/742/Source/WebCore/html/shadow/MediaControls.h	2011-05-31 23:35:34 UTC (rev 87760)
+++ branches/chromium/742/Source/WebCore/html/shadow/MediaControls.h	2011-05-31 23:37:48 UTC (rev 87761)
@@ -73,10 +73,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