Title: [123822] trunk
Revision
123822
Author
[email protected]
Date
2012-07-26 17:48:15 -0700 (Thu, 26 Jul 2012)

Log Message

[Chromium] Regression: Global-buffer-overflow in WebCore::mediaControlElementType
https://bugs.webkit.org/show_bug.cgi?id=91333

Patch by Silvia Pfeiffer <[email protected]> on 2012-07-26
Reviewed by Eric Seidel.

Source/WebCore:

MediaControlChromiumEnclosureElement now is a subclass of MediaControlElement, which
fixes the broken cast detected in the bug.
The displayType() of MediaControlChromiumEnclosureElement is set to 'MediaControlsPanel',
since the Panel element is sufficiently close in functionality to the Enclosure element.
By reusing this type, we do not need to introduce a Chromium-specific constant into
the generally used MediaControlElementType.

Test: accessibility/media-controls.html

* html/shadow/MediaControlRootElementChromium.cpp:
(WebCore::MediaControlChromiumEnclosureElement::MediaControlChromiumEnclosureElement):
Subclass MediaControlChromiumEnclosureElement from MediaControlElement.
(WebCore::MediaControlChromiumEnclosureElement::displayType):
Give the enclosure the MediaPanels type.
* html/shadow/MediaControlRootElementChromium.h:
Add the MediaControlElement.h header file.
(MediaControlChromiumEnclosureElement):
Subclass MediaControlChromiumEnclosureElement from MediaControlElement.

LayoutTests:

This new test assures that the creation of a audio element with controls does not
break when accessibility is turned on.

* accessibility/media-controls-expected.txt: Added.
* accessibility/media-controls.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (123821 => 123822)


--- trunk/LayoutTests/ChangeLog	2012-07-27 00:41:55 UTC (rev 123821)
+++ trunk/LayoutTests/ChangeLog	2012-07-27 00:48:15 UTC (rev 123822)
@@ -1,3 +1,16 @@
+2012-07-26  Silvia Pfeiffer  <[email protected]>
+
+        [Chromium] Regression: Global-buffer-overflow in WebCore::mediaControlElementType
+        https://bugs.webkit.org/show_bug.cgi?id=91333
+
+        Reviewed by Eric Seidel.
+
+        This new test assures that the creation of a audio element with controls does not
+        break when accessibility is turned on.
+
+        * accessibility/media-controls-expected.txt: Added.
+        * accessibility/media-controls.html: Added.
+
 2012-07-26  Max Vujovic  <[email protected]>
 
         Added binding and updated chromium tests.

Added: trunk/LayoutTests/accessibility/media-controls-expected.txt (0 => 123822)


--- trunk/LayoutTests/accessibility/media-controls-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/media-controls-expected.txt	2012-07-27 00:48:15 UTC (rev 123822)
@@ -0,0 +1,9 @@
+This tests that the script creation of an audio element with controls works when accessibility is enabled and does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/accessibility/media-controls.html (0 => 123822)


--- trunk/LayoutTests/accessibility/media-controls.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/media-controls.html	2012-07-27 00:48:15 UTC (rev 123822)
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html>
+  <body>
+    <script src=""
+    <script>
+      description("This tests that the script creation of an audio element with controls works when accessibility is enabled and does not crash.");
+
+      if (window.testRunner && window.accessibilityController) {
+          function createAudio() {
+              var audio = document.createElement('audio');
+              audio.setAttribute('controls', 'controls');
+              document.documentElement.appendChild(audio);
+          }
+          window._onload_ = createAudio;
+      }
+    </script>
+    <script src=""
+  </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (123821 => 123822)


--- trunk/Source/WebCore/ChangeLog	2012-07-27 00:41:55 UTC (rev 123821)
+++ trunk/Source/WebCore/ChangeLog	2012-07-27 00:48:15 UTC (rev 123822)
@@ -1,3 +1,29 @@
+2012-07-26  Silvia Pfeiffer  <[email protected]>
+
+        [Chromium] Regression: Global-buffer-overflow in WebCore::mediaControlElementType
+        https://bugs.webkit.org/show_bug.cgi?id=91333
+
+        Reviewed by Eric Seidel.
+
+        MediaControlChromiumEnclosureElement now is a subclass of MediaControlElement, which
+        fixes the broken cast detected in the bug.
+        The displayType() of MediaControlChromiumEnclosureElement is set to 'MediaControlsPanel',
+        since the Panel element is sufficiently close in functionality to the Enclosure element.
+        By reusing this type, we do not need to introduce a Chromium-specific constant into
+        the generally used MediaControlElementType.
+
+        Test: accessibility/media-controls.html
+
+        * html/shadow/MediaControlRootElementChromium.cpp:
+        (WebCore::MediaControlChromiumEnclosureElement::MediaControlChromiumEnclosureElement):
+        Subclass MediaControlChromiumEnclosureElement from MediaControlElement.
+        (WebCore::MediaControlChromiumEnclosureElement::displayType):
+        Give the enclosure the MediaPanels type.
+        * html/shadow/MediaControlRootElementChromium.h:
+        Add the MediaControlElement.h header file.
+        (MediaControlChromiumEnclosureElement):
+        Subclass MediaControlChromiumEnclosureElement from MediaControlElement.
+
 2012-07-26  Arnaud Renevier  <[email protected]>
 
         [GTK] avoid unneeded object creation when calling Vector::append

Modified: trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp (123821 => 123822)


--- trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp	2012-07-27 00:41:55 UTC (rev 123821)
+++ trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp	2012-07-27 00:48:15 UTC (rev 123822)
@@ -49,8 +49,7 @@
 static const double timeWithoutMouseMovementBeforeHidingControls = 2;
 
 MediaControlChromiumEnclosureElement::MediaControlChromiumEnclosureElement(Document* document)
-    : HTMLDivElement(HTMLNames::divTag, document->document())
-    , m_mediaController(0)
+    : MediaControlElement(document)
 {
 }
 
@@ -59,6 +58,13 @@
     return adoptRef(new MediaControlChromiumEnclosureElement(document));
 }
 
+MediaControlElementType MediaControlChromiumEnclosureElement::displayType() const
+{
+    // Mapping onto same MediaControlElementType as panel element, since it has similar properties.
+    return MediaControlsPanel;
+}
+
+
 const AtomicString& MediaControlChromiumEnclosureElement::shadowPseudoId() const
 {
     DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-enclosure"));

Modified: trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h (123821 => 123822)


--- trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h	2012-07-27 00:41:55 UTC (rev 123821)
+++ trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h	2012-07-27 00:48:15 UTC (rev 123822)
@@ -29,6 +29,7 @@
 
 #if ENABLE(VIDEO)
 
+#include "MediaControlElements.h"
 #include "MediaControls.h"
 #include <wtf/RefPtr.h>
 
@@ -61,22 +62,15 @@
 class MediaControlTextTrackDisplayElement;
 #endif
 
-class MediaControlChromiumEnclosureElement : public HTMLDivElement {
+class MediaControlChromiumEnclosureElement : public MediaControlElement {
 public:
     static PassRefPtr<MediaControlChromiumEnclosureElement> create(Document*);
 
-    virtual const AtomicString& shadowPseudoId() const;
-
-    void setMediaController(MediaControllerInterface* controller) { m_mediaController = controller; }
-    MediaControllerInterface* mediaController() const { return m_mediaController; }
-
-protected:
-    MediaControlChromiumEnclosureElement(Document*);
-
 private:
-    virtual bool isMediaControlElement() const { return true; }
+    explicit MediaControlChromiumEnclosureElement(Document*);
 
-    MediaControllerInterface* m_mediaController;
+    virtual MediaControlElementType displayType() const;
+    virtual const AtomicString& shadowPseudoId() const;
 };
 
 class MediaControlRootElementChromium : public MediaControls {
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to