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