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)