Title: [120040] trunk
Revision
120040
Author
commit-qu...@webkit.org
Date
2012-06-11 22:40:04 -0700 (Mon, 11 Jun 2012)

Log Message

Introduce an Enclosure Element for Chromium video controls.
https://bugs.webkit.org/show_bug.cgi?id=87683

Patch by Silvia Pfeiffer <silvi...@chromium.org> on 2012-06-11
Reviewed by Eric Carlson.

Source/WebCore:

Updated tests.

The Chrome video controls are receiving a visual update. A new enclosure div is required
to provide for a offset space from the video's boundaries. The visual update itself is in
a separate patch.

* css/mediaControlsChromium.css:
(video::-webkit-media-controls-enclosure):
Introduce CSS for enclosure div so it doesn't show yet.
* html/shadow/MediaControlRootElementChromium.cpp:
(WebCore::MediaControlChromiumEnclosureElement::MediaControlChromiumEnclosureElement):
Definition of the new enclosure element.
(WebCore::MediaControlChromiumEnclosureElement::create):
Definition of a create operator for the new enclosure element.
(WebCore::MediaControlChromiumEnclosureElement::shadowPseudoId):
Definition of the shadowPseudoId of -webkit-media-controls-enclosure for the enclosure div.
(WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium):
Initialize member element for enclosure div.
(WebCore::MediaControlRootElementChromium::create):
Instantiate enclosure div and add into DOM between controls and panel elements.
(WebCore::MediaControlRootElementChromium::setMediaController):
Set media controller for enclosure div.
(WebCore::MediaControlRootElementChromium::createTextTrackDisplay):
Insert text track display container to enclosure rather than panel.
* html/shadow/MediaControlRootElementChromium.h:
(WebCore):
(MediaControlChromiumEnclosureElement):
(WebCore::MediaControlChromiumEnclosureElement::setMediaController):
(WebCore::MediaControlChromiumEnclosureElement::mediaController):
(WebCore::MediaControlChromiumEnclosureElement::isMediaControlElement):
Add declaration of the new enclosure element and its member functions.
(MediaControlRootElementChromium):
Add member variable to controls root element to hold the enclosure element.

LayoutTests:

Change fullscreen/video-controls-override.html, media/media-controls-invalid-url.html and
media/track/track-cue-rendering-snap-to-lines-not-set.html to deal with the new enclosure
div in Chromium controls and use the mediaControlsElement() helper function to find elements
inside the controls.
Fail video controls tests in test expectations.

* fullscreen/video-controls-override-expected.txt: Updated.
* fullscreen/video-controls-override.html: Use mediaControlsElement helper function.
* media/media-controls-invalid-url.html: Use mediaControlsElement helper function.
* media/track/track-cue-rendering-snap-to-lines-not-set.html: Height is provided by enclosure element.
* platform/chromium/TestExpectations: Fail video controls tests.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (120039 => 120040)


--- trunk/LayoutTests/ChangeLog	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/LayoutTests/ChangeLog	2012-06-12 05:40:04 UTC (rev 120040)
@@ -1,3 +1,22 @@
+2012-06-11  Silvia Pfeiffer  <silvi...@chromium.org>
+
+        Introduce an Enclosure Element for Chromium video controls.
+        https://bugs.webkit.org/show_bug.cgi?id=87683
+
+        Reviewed by Eric Carlson.
+
+        Change fullscreen/video-controls-override.html, media/media-controls-invalid-url.html and
+        media/track/track-cue-rendering-snap-to-lines-not-set.html to deal with the new enclosure
+        div in Chromium controls and use the mediaControlsElement() helper function to find elements
+        inside the controls.
+        Fail video controls tests in test expectations.
+
+        * fullscreen/video-controls-override-expected.txt: Updated.
+        * fullscreen/video-controls-override.html: Use mediaControlsElement helper function.
+        * media/media-controls-invalid-url.html: Use mediaControlsElement helper function.
+        * media/track/track-cue-rendering-snap-to-lines-not-set.html: Height is provided by enclosure element.
+        * platform/chromium/TestExpectations: Fail video controls tests.
+
 2012-06-11  Dominic Cooney  <domin...@chromium.org>
 
         [Chromium] Unreviewed: Expectations for track-cues-cuechange.html

Modified: trunk/LayoutTests/fullscreen/video-controls-override-expected.txt (120039 => 120040)


--- trunk/LayoutTests/fullscreen/video-controls-override-expected.txt	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/LayoutTests/fullscreen/video-controls-override-expected.txt	2012-06-12 05:40:04 UTC (rev 120040)
@@ -2,7 +2,7 @@
 
 EVENT(webkitfullscreenchange)
 EXPECTED (shadowRoot = internals.shadowRoot(video) != 'null') OK
-EXPECTED (panel = shadowRoot.firstChild.firstChild != 'null') OK
+EXPECTED (panel = mediaControlsElement(shadowRoot.firstChild, '-webkit-media-controls-panel') != 'null') OK
 EXPECTED (internals.shadowPseudoId(panel) == '-webkit-media-controls-panel') OK
 EXPECTED (document.defaultView.getComputedStyle(panel)['display'] != 'none') OK
 EXPECTED (document.defaultView.getComputedStyle(panel)['height'] >= '20px') OK

Modified: trunk/LayoutTests/fullscreen/video-controls-override.html (120039 => 120040)


--- trunk/LayoutTests/fullscreen/video-controls-override.html	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/LayoutTests/fullscreen/video-controls-override.html	2012-06-12 05:40:04 UTC (rev 120040)
@@ -2,6 +2,7 @@
     <p>This tests that the video element's "controls" attribute is overridden in full screen mode, and that the controls are correctly hidden upon exiting full screen.  Press any key to continue.</p>
     <video id="video" width="300"></video>
     <script src=""
+    <script src=""
     <script>
         var callback;
         var shadowRoot;
@@ -19,7 +20,7 @@
         var videoEnteredFullScreen = function() {
             if (window.internals) {
                 testExpected("shadowRoot = internals.shadowRoot(video)", null, "!=");
-                testExpected("panel = shadowRoot.firstChild.firstChild", null, "!=");
+                testExpected("panel = mediaControlsElement(shadowRoot.firstChild, '-webkit-media-controls-panel')", null, "!=");
                 testExpected("internals.shadowPseudoId(panel)", "-webkit-media-controls-panel");
                 testExpected("document.defaultView.getComputedStyle(panel)['display']", 'none', "!=");
                 testExpected("document.defaultView.getComputedStyle(panel)['height']", '20px', ">=");

Modified: trunk/LayoutTests/media/media-controls-invalid-url.html (120039 => 120040)


--- trunk/LayoutTests/media/media-controls-invalid-url.html	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/LayoutTests/media/media-controls-invalid-url.html	2012-06-12 05:40:04 UTC (rev 120040)
@@ -3,6 +3,7 @@
     <head>
         <script src=""
         <script src=""
+        <script src=""
         <script>
             var video;
 
@@ -18,29 +19,15 @@
 
             function getTimeLineValue()
             {
-                var timelineContainer;
-                var timelineValue;
+                var timeline;
+                var shadowRoot = internals.shadowRoot(video);
 
-                var controlsShadow = internals.shadowRoot(video).firstChild.firstChild;
-                for (child = controlsShadow.firstChild; child; child = child.nextSibling)
-                    if (internals.shadowPseudoId(child) == "-webkit-media-controls-timeline-container") {
-                        timelineContainer = child;
-                        break;
-                    }
+                timeline = mediaControlsElement(shadowRoot.firstChild.firstChild, '-webkit-media-controls-timeline');
 
-                if(!timelineContainer)
-                    throw "Faild to find -webkit-media-controls-timeline-container";
-
-                for (child = timelineContainer.firstChild; child; child = child.nextSibling)
-                    if (internals.shadowPseudoId(child) == "-webkit-media-controls-timeline") {
-                        timelineValue = child.value;
-                        break;
-                    }
-
-                if(!timelineContainer)
+                if(!timeline)
                     throw "Faild to find -webkit-media-controls-timeline";
 
-                return timelineValue;
+                return timeline.value;
             }
 
             function error()

Modified: trunk/LayoutTests/media/track/track-cue-rendering-snap-to-lines-not-set.html (120039 => 120040)


--- trunk/LayoutTests/media/track/track-cue-rendering-snap-to-lines-not-set.html	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/LayoutTests/media/track/track-cue-rendering-snap-to-lines-not-set.html	2012-06-12 05:40:04 UTC (rev 120040)
@@ -89,8 +89,11 @@
             findMediaElement();
             testTrack = document.querySelector('track');
             video.src = "" '../content/test');
-            controlsPanelElement = mediaControlsElement(internals.shadowRoot(video).firstChild, '-webkit-media-controls-panel');
 
+            // In Chromium it is the enclosure element, which provides the controls height, otherwise the panel;
+            // both are the second child in the shadow DOM.
+            controlsPanelElement = internals.shadowRoot(video).firstChild.firstChild;
+
             waitForEvent('canplaythrough', function() {
                 cueDisplayContainer = textTrackDisplayElement(video);
                 testInitialContainer();

Modified: trunk/LayoutTests/platform/chromium/TestExpectations (120039 => 120040)


--- trunk/LayoutTests/platform/chromium/TestExpectations	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/LayoutTests/platform/chromium/TestExpectations	2012-06-12 05:40:04 UTC (rev 120040)
@@ -2970,6 +2970,26 @@
 BUGWK81402 WIN : media/track/track-active-cues.html = PASS TIMEOUT
 BUGWK83882 : media/track/track-mode.html = PASS TEXT TIMEOUT
 
+// Need rebaseline.
+BUGWK87683 : fast/layers/video-layer.html = FAIL
+BUGWK87683 : media/audio-controls-rendering.html = FAIL
+BUGWK87683 : media/audio-repaint.html = FAIL
+BUGWK87683 : media/controls-after-reload.html = FAIL
+BUGWK87683 : media/controls-strict.html = FAIL
+BUGWK87683 : media/controls-styling.html = FAIL
+BUGWK87683 : media/controls-without-preload.html = FAIL
+BUGWK87683 : media/media-controls-clone.html = FAIL
+BUGWK87683 : media/media-document-audio-repaint.html = FAIL
+BUGWK87683 : media/video-controls-rendering.html = FAIL
+BUGWK87683 : media/video-display-toggle.html = FAIL
+BUGWK87683 : media/video-empty-source.html = FAIL
+BUGWK87683 : media/video-no-audio.html = FAIL
+BUGWK87683 : media/video-playing-and-pause.html = FAIL
+BUGWK87683 : media/video-zoom-controls.html = FAIL
+BUGWK87683 : media/video-volume-slider.html = FAIL
+
+BUGWK72271 SNOWLEOPARD DEBUG : fast/dom/node-iterator-reference-node-moved-crash.html = PASS CRASH
+
 BUGWK72376 WIN : fast/forms/file/input-file-label.html = TEXT PASS
 
 // Animations tests use an inherently-flaky timer-based design.

Modified: trunk/Source/WebCore/ChangeLog (120039 => 120040)


--- trunk/Source/WebCore/ChangeLog	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/Source/WebCore/ChangeLog	2012-06-12 05:40:04 UTC (rev 120040)
@@ -1,3 +1,44 @@
+2012-06-11  Silvia Pfeiffer  <silvi...@chromium.org>
+
+        Introduce an Enclosure Element for Chromium video controls.
+        https://bugs.webkit.org/show_bug.cgi?id=87683
+
+        Reviewed by Eric Carlson.
+
+        Updated tests.
+
+        The Chrome video controls are receiving a visual update. A new enclosure div is required
+        to provide for a offset space from the video's boundaries. The visual update itself is in
+        a separate patch.
+
+        * css/mediaControlsChromium.css:
+        (video::-webkit-media-controls-enclosure):
+        Introduce CSS for enclosure div so it doesn't show yet.
+        * html/shadow/MediaControlRootElementChromium.cpp:
+        (WebCore::MediaControlChromiumEnclosureElement::MediaControlChromiumEnclosureElement):
+        Definition of the new enclosure element.
+        (WebCore::MediaControlChromiumEnclosureElement::create):
+        Definition of a create operator for the new enclosure element.
+        (WebCore::MediaControlChromiumEnclosureElement::shadowPseudoId):
+        Definition of the shadowPseudoId of -webkit-media-controls-enclosure for the enclosure div.
+        (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium):
+        Initialize member element for enclosure div.
+        (WebCore::MediaControlRootElementChromium::create):
+        Instantiate enclosure div and add into DOM between controls and panel elements.
+        (WebCore::MediaControlRootElementChromium::setMediaController):
+        Set media controller for enclosure div.
+        (WebCore::MediaControlRootElementChromium::createTextTrackDisplay):
+        Insert text track display container to enclosure rather than panel.
+        * html/shadow/MediaControlRootElementChromium.h:
+        (WebCore):
+        (MediaControlChromiumEnclosureElement):
+        (WebCore::MediaControlChromiumEnclosureElement::setMediaController):
+        (WebCore::MediaControlChromiumEnclosureElement::mediaController):
+        (WebCore::MediaControlChromiumEnclosureElement::isMediaControlElement):
+        Add declaration of the new enclosure element and its member functions.
+        (MediaControlRootElementChromium):
+        Add member variable to controls root element to hold the enclosure element.
+
 2012-06-11  Elliott Sprehn  <espr...@gmail.com>
 
         WebKit doesn't allow replacing the document element with a DocumentFragment containing one element

Modified: trunk/Source/WebCore/css/mediaControlsChromium.css (120039 => 120040)


--- trunk/Source/WebCore/css/mediaControlsChromium.css	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/Source/WebCore/css/mediaControlsChromium.css	2012-06-12 05:40:04 UTC (rev 120040)
@@ -39,6 +39,12 @@
     max-width: 100%;
 }
 
+audio::-webkit-media-controls-enclosure, video::-webkit-media-controls-enclosure {
+    width: 100%;
+    height: 32px;
+    bottom: 0;
+}
+
 audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel {
     -webkit-user-select: none;
     -webkit-box-pack: end;

Modified: trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp (120039 => 120040)


--- trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp	2012-06-12 05:40:04 UTC (rev 120040)
@@ -29,6 +29,7 @@
 #if ENABLE(VIDEO)
 #include "MediaControlRootElementChromium.h"
 
+#include "HTMLDivElement.h"
 #include "HTMLMediaElement.h"
 #include "HTMLNames.h"
 #include "MediaControlElements.h"
@@ -45,6 +46,23 @@
 
 namespace WebCore {
 
+MediaControlChromiumEnclosureElement::MediaControlChromiumEnclosureElement(Document* document)
+    : HTMLDivElement(HTMLNames::divTag, document->document())
+    , m_mediaController(0)
+{
+}
+
+PassRefPtr<MediaControlChromiumEnclosureElement> MediaControlChromiumEnclosureElement::create(Document* document)
+{
+    return adoptRef(new MediaControlChromiumEnclosureElement(document));
+}
+
+const AtomicString& MediaControlChromiumEnclosureElement::shadowPseudoId() const
+{
+    DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-enclosure"));
+    return id;
+}
+
 MediaControlRootElementChromium::MediaControlRootElementChromium(Document* document)
     : MediaControls(document)
     , m_mediaController(0)
@@ -59,6 +77,7 @@
     , m_fullscreenButton(0)
 #endif
     , m_panel(0)
+    , m_enclosure(0)
 #if ENABLE(VIDEO_TRACK)
     , m_textDisplayContainer(0)
     , m_textTrackDisplay(0)
@@ -80,6 +99,9 @@
 
     RefPtr<MediaControlRootElementChromium> controls = adoptRef(new MediaControlRootElementChromium(document));
 
+    // Create an enclosing element for the panel so we can visually offset the controls correctly.
+    RefPtr<MediaControlChromiumEnclosureElement> enclosure = MediaControlChromiumEnclosureElement::create(document);
+
     RefPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create(document);
 
     ExceptionCode ec;
@@ -143,10 +165,15 @@
 #endif
 
     controls->m_panel = panel.get();
-    controls->appendChild(panel.release(), ec, true);
+    enclosure->appendChild(panel.release(), ec, true);
     if (ec)
         return 0;
 
+    controls->m_enclosure = enclosure.get();
+    controls->appendChild(enclosure.release(), ec, true);
+    if (ec)
+        return 0;
+
     return controls.release();
 }
 
@@ -176,6 +203,8 @@
 #endif
     if (m_panel)
         m_panel->setMediaController(controller);
+    if (m_enclosure)
+        m_enclosure->setMediaController(controller);
 #if ENABLE(VIDEO_TRACK)
     if (m_textDisplayContainer)
         m_textDisplayContainer->setMediaController(controller);
@@ -365,8 +394,7 @@
     m_textDisplayContainer = textDisplayContainer.get();
 
     // Insert it before the first controller element so it always displays behind the controls.
-    ExceptionCode ec;
-    insertBefore(textDisplayContainer.release(), m_panel, ec, true);
+    insertBefore(textDisplayContainer.release(), m_enclosure, ASSERT_NO_EXCEPTION, true);
 }
 
 void MediaControlRootElementChromium::showTextTrackDisplay()

Modified: trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h (120039 => 120040)


--- trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h	2012-06-12 05:32:29 UTC (rev 120039)
+++ trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h	2012-06-12 05:40:04 UTC (rev 120040)
@@ -49,6 +49,7 @@
 class MediaControlVolumeSliderElement;
 class MediaControlVolumeSliderContainerElement;
 class MediaControlPanelElement;
+class MediaControlChromiumEnclosureElement;
 class MediaControllerInterface;
 class MediaPlayer;
 
@@ -60,6 +61,24 @@
 class MediaControlTextTrackDisplayElement;
 #endif
 
+class MediaControlChromiumEnclosureElement : public HTMLDivElement {
+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; }
+
+    MediaControllerInterface* m_mediaController;
+};
+
 class MediaControlRootElementChromium : public MediaControls {
 public:
     static PassRefPtr<MediaControlRootElementChromium> create(Document*);
@@ -125,6 +144,7 @@
     MediaControlFullscreenButtonElement* m_fullscreenButton;
 #endif
     MediaControlPanelElement* m_panel;
+    MediaControlChromiumEnclosureElement* m_enclosure;
 #if ENABLE(VIDEO_TRACK)
     MediaControlTextTrackContainerElement* m_textDisplayContainer;
     MediaControlTextTrackDisplayElement* m_textTrackDisplay;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to