Title: [87761] branches/chromium/742
- Revision
- 87761
- Author
- [email protected]
- Date
- 2011-05-31 16:37:48 -0700 (Tue, 31 May 2011)
Log Message
Merge 87743
BUG=84452
Review URL: http://codereview.chromium.org/7057049
Modified Paths
Added Paths
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