Title: [89762] trunk
Revision
89762
Author
[email protected]
Date
2011-06-25 21:33:36 -0700 (Sat, 25 Jun 2011)

Log Message

2011-06-25  Dimitri Glazkov  <[email protected]>

        Reviewed by Adam Barth.

        Crash in frameless document with media element.
        https://bugs.webkit.org/show_bug.cgi?id=63393

        * fast/dom/shadow/frameless-media-element-crash.html: Added.
        * fast/dom/shadow/frameless-media-element-crash-expected.txt: Added.
2011-06-25  Dimitri Glazkov  <[email protected]>

        Reviewed by Adam Barth.

        Crash in frameless document with media element.
        https://bugs.webkit.org/show_bug.cgi?id=63393

        Since MediaControls::create can return 0 (and does for frameless documents), we must anticipate it
        in the calling code.

        Test: fast/dom/shadow/frameless-media-element-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): Changed to bail out if controls weren't successfully created.
        (WebCore::HTMLMediaElement::createMediaControls): Renamed to better reflect the purpose, changed to handle failure of creation.
        (WebCore::HTMLMediaElement::preDispatchEventHandler): Changed to bail out if controls weren't successfully created.
        * html/HTMLMediaElement.h: Adjusted def.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (89761 => 89762)


--- trunk/LayoutTests/ChangeLog	2011-06-26 04:09:40 UTC (rev 89761)
+++ trunk/LayoutTests/ChangeLog	2011-06-26 04:33:36 UTC (rev 89762)
@@ -1,3 +1,13 @@
+2011-06-25  Dimitri Glazkov  <[email protected]>
+
+        Reviewed by Adam Barth.
+
+        Crash in frameless document with media element.
+        https://bugs.webkit.org/show_bug.cgi?id=63393
+
+        * fast/dom/shadow/frameless-media-element-crash.html: Added.
+        * fast/dom/shadow/frameless-media-element-crash-expected.txt: Added.
+
 2011-06-25  Dirk Schulze  <[email protected]>
 
         Reviewed by Nikolas Zimmermann.

Added: trunk/LayoutTests/fast/dom/shadow/frameless-media-element-crash-expected.txt (0 => 89762)


--- trunk/LayoutTests/fast/dom/shadow/frameless-media-element-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/shadow/frameless-media-element-crash-expected.txt	2011-06-26 04:33:36 UTC (rev 89762)
@@ -0,0 +1,3 @@
+Creating a video element in a frameless document should not crash WebKit.
+
+This test passes if it does not crash.

Added: trunk/LayoutTests/fast/dom/shadow/frameless-media-element-crash.html (0 => 89762)


--- trunk/LayoutTests/fast/dom/shadow/frameless-media-element-crash.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/shadow/frameless-media-element-crash.html	2011-06-26 04:33:36 UTC (rev 89762)
@@ -0,0 +1,12 @@
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+var doc = document.implementation.createHTMLDocument();
+doc.open();
+doc.write('<video controls></video>');
+doc.close();
+
+</script>
+<p>Creating a video element in a frameless document should not crash WebKit.
+<p>This test passes if it does not crash.
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (89761 => 89762)


--- trunk/Source/WebCore/ChangeLog	2011-06-26 04:09:40 UTC (rev 89761)
+++ trunk/Source/WebCore/ChangeLog	2011-06-26 04:33:36 UTC (rev 89762)
@@ -1,3 +1,21 @@
+2011-06-25  Dimitri Glazkov  <[email protected]>
+
+        Reviewed by Adam Barth.
+
+        Crash in frameless document with media element.
+        https://bugs.webkit.org/show_bug.cgi?id=63393
+
+        Since MediaControls::create can return 0 (and does for frameless documents), we must anticipate it
+        in the calling code.
+
+        Test: fast/dom/shadow/frameless-media-element-crash.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::attributeChanged): Changed to bail out if controls weren't successfully created.
+        (WebCore::HTMLMediaElement::createMediaControls): Renamed to better reflect the purpose, changed to handle failure of creation.
+        (WebCore::HTMLMediaElement::preDispatchEventHandler): Changed to bail out if controls weren't successfully created.
+        * html/HTMLMediaElement.h: Adjusted def.
+
 2011-06-25  Joseph Pecoraro  <[email protected]>
 
         Reviewed by Darin Adler.

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (89761 => 89762)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2011-06-26 04:09:40 UTC (rev 89761)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2011-06-26 04:33:36 UTC (rev 89762)
@@ -232,7 +232,9 @@
 #if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
         if (controls()) {
             if (!hasMediaControls()) {
-                ensureMediaControls();
+                if (!createMediaControls())
+                    return;
+
                 mediaControls()->reset();
             }
             mediaControls()->show();
@@ -2755,13 +2757,18 @@
     return node && node->isMediaControls();
 }
 
-void HTMLMediaElement::ensureMediaControls()
+bool HTMLMediaElement::createMediaControls()
 {
     if (hasMediaControls())
-        return;
+        return true;
 
     ExceptionCode ec;
-    ensureShadowRoot()->appendChild(MediaControls::create(this), ec);
+    RefPtr<MediaControls> controls = MediaControls::create(this);
+    if (!controls)
+        return false;
+
+    ensureShadowRoot()->appendChild(controls, ec);
+    return true;
 }
 
 void* HTMLMediaElement::preDispatchEventHandler(Event* event)
@@ -2769,7 +2776,9 @@
     if (event && event->type() == eventNames().webkitfullscreenchangeEvent) {
         if (controls()) {
             if (!hasMediaControls()) {
-                ensureMediaControls();
+                if (!createMediaControls())
+                    return 0;
+
                 mediaControls()->reset();
             }
             mediaControls()->show();

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (89761 => 89762)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2011-06-26 04:09:40 UTC (rev 89761)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2011-06-26 04:33:36 UTC (rev 89762)
@@ -338,7 +338,7 @@
     void refreshCachedTime() const;
 
     bool hasMediaControls();
-    void ensureMediaControls();
+    bool createMediaControls();
 
     virtual void* preDispatchEventHandler(Event*);
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to