Title: [118043] branches/chromium/1132
Revision
118043
Author
[email protected]
Date
2012-05-22 13:48:08 -0700 (Tue, 22 May 2012)

Log Message

Merge 116900 - Volume slider needs to be displayed below the mute button
https://bugs.webkit.org/show_bug.cgi?id=85990

Patch by Victor Carbune <[email protected]> on 2012-05-13
Reviewed by Dimitri Glazkov.

Source/WebCore:

Added back code for rendering offset, but used only when the volume slider
needs to be displayed below the controls.

Test: media/media-volume-slider-rendered-below.html

* css/mediaControlsChromium.css:
(audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
Changed positioning of the slider to absolute, otherwise it is not possible to position it from the layout() method.
* css/mediaControlsQuickTime.css:
Added back the double mute-button and changed the z-index of the original button. When the slider is displayed
the second mute button is actually there.
(audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
(audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
(audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
Added copy.
* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlPanelElement::makeTransparent): Disabled the possible of hiding controls. WebVTT rendering
in the place of controls when these are visible is not possible with the current code.
(RenderMediaVolumeSliderContainer):
(WebCore):
(WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
(WebCore::RenderMediaVolumeSliderContainer::layout):
Checked if the absolute coordinates of the corner of the slider would be rendered outside the page. This part of the
code is faulty if display:none is toggled on the controls.
(WebCore::MediaControlVolumeSliderContainerElement::createRenderer):
* html/shadow/MediaControlElements.h:
(MediaControlVolumeSliderContainerElement):
* html/shadow/MediaControlRootElement.cpp:
(WebCore::MediaControlRootElement::create):

LayoutTests:

Updated tests expectation and marked failing tests accordingly.

* media/media-volume-slider-rendered-below.html: Added.
* media/media-volume-slider-rendered-expected.txt: Added.
* platform/chromium/test_expectations.txt: Updated.
* platform/mac/media/audio-controls-rendering-expected.txt: Updated (z-index change).
* platform/mac/media/controls-after-reload-expected.txt: Same.
* platform/mac/media/controls-strict-expected.txt: Same.
* platform/mac/media/video-controls-rendering-expected.txt: Same.
* platform/mac/media/video-display-toggle-expected.txt: Same.
* platform/mac/media/video-playing-and-pause-expected.txt: Same.
* platform/mac/test_expectations.txt: Updated.

[email protected]
Review URL: https://chromiumcodereview.appspot.com/10412040

Modified Paths

Added Paths

Diff

Copied: branches/chromium/1132/LayoutTests/media/media-volume-slider-rendered-below-expected.txt (from rev 116900, trunk/LayoutTests/media/media-volume-slider-rendered-below-expected.txt) (0 => 118043)


--- branches/chromium/1132/LayoutTests/media/media-volume-slider-rendered-below-expected.txt	                        (rev 0)
+++ branches/chromium/1132/LayoutTests/media/media-volume-slider-rendered-below-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -0,0 +1,10 @@
+** Test that the volume slider is rendered correctly if the controls are near the top of the page **
+
+** Move mouse on top of the mute button **
+
+** Ensure layout is done after mouse move **
+
+** The volume slider should not be positioned outside the page **
+EXPECTED (volumeSliderCoordinates[0] >= 0 && volumeSliderCoordinates[1] >= 0 == 'true') OK
+END OF TEST
+

Copied: branches/chromium/1132/LayoutTests/media/media-volume-slider-rendered-below.html (from rev 116900, trunk/LayoutTests/media/media-volume-slider-rendered-below.html) (0 => 118043)


--- branches/chromium/1132/LayoutTests/media/media-volume-slider-rendered-below.html	                        (rev 0)
+++ branches/chromium/1132/LayoutTests/media/media-volume-slider-rendered-below.html	2012-05-22 20:48:08 UTC (rev 118043)
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+    <title>Test that volume slider is rendered below. </title>
+
+    <head>
+
+    <script src=""
+    <script src=""
+    <script src=""
+
+    <script>
+        var audio;
+
+        var muteButtonCoordinates;
+        var volumeSliderCoordinates;
+
+        function test()
+        {
+            consoleWrite("** Test that the volume slider is rendered correctly if the controls are near the top of the page **");
+
+            if (window.eventSender) {
+                consoleWrite("");
+                consoleWrite("** Move mouse on top of the mute button **");
+
+                try {
+                    muteButtonCoordinates = mediaControlsButtonCoordinates(audio, "mute-button");
+                } catch (exception) {
+                    consoleWrite("ERROR: unable to get controls coordinates.");
+
+                    failTest();
+                    return;
+                }
+
+                eventSender.mouseMoveTo(muteButtonCoordinates[0], muteButtonCoordinates[1]);
+            }
+
+            consoleWrite("");
+            consoleWrite("** Ensure layout is done after mouse move **");
+            document.body.offsetTop;
+            volumeSliderCoordinates = mediaControlsButtonCoordinates(audio, "volume-slider-container");
+
+            consoleWrite("");
+            consoleWrite("** The volume slider should not be positioned outside the page **");
+            testExpected("volumeSliderCoordinates[0] >= 0 && volumeSliderCoordinates[1] >= 0", true);
+
+            endTest();
+        }
+
+        function initialize()
+        {
+            audio = document.getElementsByTagName("audio")[0];
+            audio.src = "" "content/test");
+        }
+    </script>
+    </head>
+
+    <body _onload_="initialize();">
+        <audio controls _oncanplaythrough_="test();"></audio>
+    </body>
+</html>

Modified: branches/chromium/1132/LayoutTests/platform/chromium/test_expectations.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/chromium/test_expectations.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/chromium/test_expectations.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -3038,6 +3038,12 @@
 BUGWK81402 WIN : media/track/track-active-cues.html = PASS TIMEOUT
 BUGWK83882 : media/track/track-mode.html = PASS TEXT TIMEOUT
 
+BUGWK85990 : media/video-controls-rendering-toggle-display-none.html = TEXT
+BUGWK85990 : media/video-controls-toggling.html = TIMEOUT
+
+// Needs rebaseline.
+BUGWK85990 : media/video-volume-slider.html = TEXT
+
 BUGWK72271 MAC DEBUG : fast/loader/_javascript_-url-in-embed.html = PASS CRASH
 BUGWK72271 SNOWLEOPARD DEBUG : fast/dom/node-iterator-reference-node-moved-crash.html = PASS CRASH
 

Modified: branches/chromium/1132/LayoutTests/platform/mac/media/audio-controls-rendering-expected.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/mac/media/audio-controls-rendering-expected.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/mac/media/audio-controls-rendering-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -29,7 +29,7 @@
 layer at (57,51) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (185,48) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
 layer at (8,85) size 320x25
   RenderDeprecatedFlexibleBox (relative positioned) {DIV} at (0,0) size 320x25
 layer at (8,85) size 320x25
@@ -55,7 +55,7 @@
 layer at (102,94) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (305,91) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
 layer at (8,128) size 320x100
   RenderMedia {AUDIO} at (8,128) size 320x100 [bgcolor=#0000FF]
 layer at (8,128) size 320x100
@@ -83,4 +83,4 @@
 layer at (102,212) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (305,209) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12

Modified: branches/chromium/1132/LayoutTests/platform/mac/media/controls-after-reload-expected.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/mac/media/controls-after-reload-expected.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/mac/media/controls-after-reload-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -36,4 +36,4 @@
 layer at (102,266) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,263) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12

Modified: branches/chromium/1132/LayoutTests/platform/mac/media/controls-strict-expected.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/mac/media/controls-strict-expected.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/mac/media/controls-strict-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -36,4 +36,4 @@
 layer at (102,274) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,271) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12

Modified: branches/chromium/1132/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -41,7 +41,7 @@
 layer at (102,266) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,263) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
 layer at (8,282) size 320x240
   RenderDeprecatedFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
 layer at (8,497) size 320x25
@@ -68,7 +68,7 @@
 layer at (102,506) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,503) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12
 layer at (8,522) size 320x240
   RenderVideo {VIDEO} at (8,522) size 320x240
 layer at (8,522) size 320x240
@@ -97,4 +97,4 @@
 layer at (102,746) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,743) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12

Modified: branches/chromium/1132/LayoutTests/platform/mac/media/video-display-toggle-expected.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/mac/media/video-display-toggle-expected.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/mac/media/video-display-toggle-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -35,4 +35,4 @@
 layer at (102,250) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,247) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12

Modified: branches/chromium/1132/LayoutTests/platform/mac/media/video-playing-and-pause-expected.txt (118042 => 118043)


--- branches/chromium/1132/LayoutTests/platform/mac/media/video-playing-and-pause-expected.txt	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/LayoutTests/platform/mac/media/video-playing-and-pause-expected.txt	2012-05-22 20:48:08 UTC (rev 118043)
@@ -37,4 +37,4 @@
 layer at (102,292) size 10x8
   RenderBlock (relative positioned) {DIV} at (0,0) size 10x8
 layer at (275,289) size 14x12
-  RenderButton zI: 2 {INPUT} at (2,0) size 14x12
+  RenderButton zI: 1 {INPUT} at (2,0) size 14x12

Modified: branches/chromium/1132/Source/WebCore/css/mediaControlsChromium.css (118042 => 118043)


--- branches/chromium/1132/Source/WebCore/css/mediaControlsChromium.css	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/Source/WebCore/css/mediaControlsChromium.css	2012-05-22 20:48:08 UTC (rev 118043)
@@ -154,7 +154,8 @@
 
 audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container {
     -webkit-appearance: media-volume-slider-container;
-    position: relative;
+    position: absolute;
+    bottom: 32px;
 
     width: 34px;
     height: 100px;

Modified: branches/chromium/1132/Source/WebCore/css/mediaControlsQuickTime.css (118042 => 118043)


--- branches/chromium/1132/Source/WebCore/css/mediaControlsQuickTime.css	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/Source/WebCore/css/mediaControlsQuickTime.css	2012-05-22 20:48:08 UTC (rev 118043)
@@ -50,7 +50,7 @@
     border: none !important;
 
     position: relative;
-    z-index: 2;
+    z-index: 1;
 }
 
 audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button {
@@ -204,7 +204,7 @@
     position: absolute;
 
     bottom: 0px;
-    z-index: 1;
+    z-index: 2;
 
     width: 22px;
     height: 114px;
@@ -221,3 +221,21 @@
     width: 10px;
     height: 80px;
 }
+
+audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button {
+    -webkit-appearance: media-volume-slider-mute-button;
+    display: inline;
+
+    position: absolute;
+
+    bottom: 7px;
+    left: 0px;
+
+    width: 14px;
+    height: 12px;
+
+    margin-left: 2px;
+    margin-right: 9px;
+
+    border: none !important;
+}

Modified: branches/chromium/1132/Source/WebCore/html/shadow/MediaControlElements.cpp (118042 => 118043)


--- branches/chromium/1132/Source/WebCore/html/shadow/MediaControlElements.cpp	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/Source/WebCore/html/shadow/MediaControlElements.cpp	2012-05-22 20:48:08 UTC (rev 118043)
@@ -256,8 +256,6 @@
     setInlineStyleProperty(CSSPropertyOpacity, 0.0, CSSPrimitiveValue::CSS_NUMBER);
 
     m_opaque = false;
-
-    startTimer();
 }
 
 void MediaControlPanelElement::defaultEventHandler(Event* event)
@@ -322,6 +320,36 @@
 
 // ----------------------------
 
+class RenderMediaVolumeSliderContainer : public RenderBlock {
+public:
+    RenderMediaVolumeSliderContainer(Node*);
+
+private:
+    virtual void layout();
+};
+
+RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Node* node)
+    : RenderBlock(node)
+{
+}
+
+void RenderMediaVolumeSliderContainer::layout()
+{
+    RenderBlock::layout();
+
+    if (style()->display() == NONE || !nextSibling() || !nextSibling()->isBox())
+        return;
+
+    RenderBox* buttonBox = toRenderBox(nextSibling());
+    int absoluteOffsetTop = buttonBox->localToAbsolute(FloatPoint(0, -size().height())).y();
+
+    LayoutStateDisabler layoutStateDisabler(view());
+
+    // If the slider would be rendered outside the page, it should be moved below the controls.
+    if (UNLIKELY(absoluteOffsetTop < 0))
+        setY(buttonBox->offsetTop() + theme()->volumeSliderOffsetFromMuteButton(buttonBox, pixelSnappedSize()).y());
+}
+
 inline MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement(Document* document)
     : MediaControlElement(document)
 {
@@ -334,6 +362,11 @@
     return element.release();
 }
 
+RenderObject* MediaControlVolumeSliderContainerElement::createRenderer(RenderArena* arena, RenderStyle*)
+{
+    return new (arena) RenderMediaVolumeSliderContainer(this);
+}
+
 void MediaControlVolumeSliderContainerElement::defaultEventHandler(Event* event)
 {
     if (!event->isMouseEvent() || event->type() != eventNames().mouseoutEvent)

Modified: branches/chromium/1132/Source/WebCore/html/shadow/MediaControlElements.h (118042 => 118043)


--- branches/chromium/1132/Source/WebCore/html/shadow/MediaControlElements.h	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/Source/WebCore/html/shadow/MediaControlElements.h	2012-05-22 20:48:08 UTC (rev 118043)
@@ -161,6 +161,7 @@
 
 private:
     MediaControlVolumeSliderContainerElement(Document*);
+    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
     virtual void defaultEventHandler(Event*);
     virtual MediaControlElementType displayType() const;
     virtual const AtomicString& shadowPseudoId() const;

Modified: branches/chromium/1132/Source/WebCore/html/shadow/MediaControlRootElement.cpp (118042 => 118043)


--- branches/chromium/1132/Source/WebCore/html/shadow/MediaControlRootElement.cpp	2012-05-22 20:37:27 UTC (rev 118042)
+++ branches/chromium/1132/Source/WebCore/html/shadow/MediaControlRootElement.cpp	2012-05-22 20:48:08 UTC (rev 118043)
@@ -186,6 +186,15 @@
         if (ec)
             return 0;
 
+        // This is a duplicate mute button, which is visible in some ports at the bottom of the volume bar.
+        // It's important only when the volume bar is displayed below the controls.
+        RefPtr<MediaControlVolumeSliderMuteButtonElement> volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create(document);
+        controls->m_volumeSliderMuteButton = volumeSliderMuteButton.get();
+        volumeSliderContainer->appendChild(volumeSliderMuteButton.release(), ec, true);
+
+        if (ec)
+            return 0;
+
         controls->m_volumeSliderContainer = volumeSliderContainer.get();
         panelVolumeControlContainer->appendChild(volumeSliderContainer.release(), ec, true);
         if (ec)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to