15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * its contributors may be used to endorse or promote products derived 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * from this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/MediaControlElements.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionStatePlaceholder.h" 348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/dom/DOMTokenList.h" 3551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 3606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/MouseEvent.h" 37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLVideoElement.h" 39aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch#include "core/html/MediaController.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/MediaControls.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/track/TextTrack.h" 4251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/html/track/vtt/VTTRegionList.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/EventHandler.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderMediaControlElements.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderSlider.h" 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTheme.h" 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderVideo.h" 485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)static const AtomicString& getMediaControlCurrentTimeDisplayElementShadowPseudoId(); 5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)static const AtomicString& getMediaControlTimeRemainingDisplayElementShadowPseudoId(); 5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 57c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// This is the duration from mediaControls.css 58f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)static const double fadeOutDuration = 0.3; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)static bool isUserInteractionEvent(Event* event) 61c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const AtomicString& type = event->type(); 63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return type == EventTypeNames::mousedown 64c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::mouseup 65c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::click 66c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::dblclick 67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || event->isKeyboardEvent() 68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || event->isTouchEvent(); 69c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 70c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 71c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Sliders (the volume control and timeline) need to capture some additional events used when dragging the thumb. 72c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)static bool isUserInteractionEventForSlider(Event* event) 73c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 74c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const AtomicString& type = event->type(); 75c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return type == EventTypeNames::mousedown 76c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::mouseup 77c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::click 78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::dblclick 79c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::mouseover 80c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::mouseout 81c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || type == EventTypeNames::mousemove 82c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || event->isKeyboardEvent() 83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) || event->isTouchEvent(); 84c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 85c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 86c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlPanelElement::MediaControlPanelElement(MediaControls& mediaControls) 88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlDivElement(mediaControls, MediaControlsPanel) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isDisplayed(false) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_opaque(true) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_transitionTimer(this, &MediaControlPanelElement::transitionTimerFired) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlPanelElement> MediaControlPanelElement::create(MediaControls& mediaControls) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return adoptRefWillBeNoop(new MediaControlPanelElement(mediaControls)); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlPanelElement::shadowPseudoId() const 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-panel", AtomicString::ConstructFromLiteral)); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid MediaControlPanelElement::defaultEventHandler(Event* event) 10707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 10807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // Suppress the media element activation behavior (toggle play/pause) when 10907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // any part of the control panel is clicked. 11007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (event->type() == EventTypeNames::click) { 11107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch event->setDefaultHandled(); 11207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 11307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 11407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch HTMLDivElement::defaultEventHandler(event); 11507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 11607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPanelElement::startTimer() 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stopTimer(); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The timer is required to set the property display:'none' on the panel, 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // such that captions are correctly displayed at the bottom of the video 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // at the end of the fadeout transition. 124f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // FIXME: Racing a transition with a setTimeout like this is wrong. 125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_transitionTimer.startOneShot(fadeOutDuration, FROM_HERE); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPanelElement::stopTimer() 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_transitionTimer.isActive()) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_transitionTimer.stop(); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPanelElement::transitionTimerFired(Timer<MediaControlPanelElement>*) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_opaque) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) hide(); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stopTimer(); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPanelElement::makeOpaque() 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_opaque) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setInlineStyleProperty(CSSPropertyOpacity, 1.0, CSSPrimitiveValue::CSS_NUMBER); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_opaque = true; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_isDisplayed) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) show(); 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPanelElement::makeTransparent() 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_opaque) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setInlineStyleProperty(CSSPropertyOpacity, 0.0, CSSPrimitiveValue::CSS_NUMBER); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_opaque = false; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) startTimer(); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPanelElement::setIsDisplayed(bool isDisplayed) 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isDisplayed = isDisplayed; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 170c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)bool MediaControlPanelElement::keepEventInNode(Event* event) 171c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 172c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return isUserInteractionEvent(event); 173c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 174c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlPanelEnclosureElement::MediaControlPanelEnclosureElement(MediaControls& mediaControls) 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Mapping onto same MediaControlElementType as panel element, since it has similar properties. 179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlDivElement(mediaControls, MediaControlsPanel) 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 183d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> MediaControlPanelEnclosureElement::create(MediaControls& mediaControls) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return adoptRefWillBeNoop(new MediaControlPanelEnclosureElement(mediaControls)); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlPanelEnclosureElement::shadowPseudoId() const 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-enclosure", AtomicString::ConstructFromLiteral)); 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlOverlayEnclosureElement::MediaControlOverlayEnclosureElement(MediaControls& mediaControls) 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Mapping onto same MediaControlElementType as panel element, since it has similar properties. 198d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlDivElement(mediaControls, MediaControlsPanel) 199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 202d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> MediaControlOverlayEnclosureElement::create(MediaControls& mediaControls) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return adoptRefWillBeNoop(new MediaControlOverlayEnclosureElement(mediaControls)); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlOverlayEnclosureElement::shadowPseudoId() const 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-overlay-enclosure", AtomicString::ConstructFromLiteral)); 210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return id; 211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid* MediaControlOverlayEnclosureElement::preDispatchEventHandler(Event* event) 2147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 2157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // When the media element is clicked or touched we want to make the overlay cast button visible 2167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // (if the other requirements are right) even if JavaScript is doing its own handling of the event. 2177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Doing it in preDispatchEventHandler prevents any interference from JavaScript. 2187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Note that we can't simply test for click, since JS handling of touch events can prevent their translation to click events. 2197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event && (event->type() == EventTypeNames::click || event->type() == EventTypeNames::touchstart) && mediaElement().hasRemoteRoutes() && !mediaElement().shouldShowControls()) 2207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaControls().showOverlayCastButton(); 2217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return MediaControlDivElement::preDispatchEventHandler(event); 2227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 2237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// ---------------------------- 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlMuteButtonElement::MediaControlMuteButtonElement(MediaControls& mediaControls) 228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaMuteButton) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 232d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(MediaControls& mediaControls) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlMuteButtonElement> button = adoptRefWillBeNoop(new MediaControlMuteButtonElement(mediaControls)); 235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) button->ensureUserAgentShadowRoot(); 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->setType("button"); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return button.release(); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 240d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void MediaControlMuteButtonElement::defaultEventHandler(Event* event) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 242d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (event->type() == EventTypeNames::click) { 24307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch mediaElement().setMuted(!mediaElement().muted()); 244d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) event->setDefaultHandled(); 245d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HTMLInputElement::defaultEventHandler(event); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 250d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void MediaControlMuteButtonElement::updateDisplayType() 251d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 25207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch setDisplayType(mediaElement().muted() ? MediaUnMuteButton : MediaMuteButton); 253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 255d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)const AtomicString& MediaControlMuteButtonElement::shadowPseudoId() const 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-mute-button", AtomicString::ConstructFromLiteral)); 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 263d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlPlayButtonElement::MediaControlPlayButtonElement(MediaControls& mediaControls) 264d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaPlayButton) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 268d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create(MediaControls& mediaControls) 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlPlayButtonElement> button = adoptRefWillBeNoop(new MediaControlPlayButtonElement(mediaControls)); 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) button->ensureUserAgentShadowRoot(); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->setType("button"); 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return button.release(); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPlayButtonElement::defaultEventHandler(Event* event) 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2781e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::click) { 27907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch mediaElement().togglePlayState(); 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateDisplayType(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLInputElement::defaultEventHandler(event); 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlPlayButtonElement::updateDisplayType() 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 28807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch setDisplayType(mediaElement().togglePlayStateWillPlay() ? MediaPlayButton : MediaPauseButton); 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlPlayButtonElement::shadowPseudoId() const 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-play-button", AtomicString::ConstructFromLiteral)); 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 299d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlOverlayPlayButtonElement::MediaControlOverlayPlayButtonElement(MediaControls& mediaControls) 300d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaOverlayPlayButton) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 304d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> MediaControlOverlayPlayButtonElement::create(MediaControls& mediaControls) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> button = adoptRefWillBeNoop(new MediaControlOverlayPlayButtonElement(mediaControls)); 307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) button->ensureUserAgentShadowRoot(); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->setType("button"); 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return button.release(); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 312f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid MediaControlOverlayPlayButtonElement::defaultEventHandler(Event* event) 313f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 314f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (event->type() == EventTypeNames::click && mediaElement().togglePlayStateWillPlay()) { 315f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu mediaElement().togglePlayState(); 316f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu updateDisplayType(); 317f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu event->setDefaultHandled(); 318f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 319f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 320f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlOverlayPlayButtonElement::updateDisplayType() 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (mediaElement().shouldShowControls() && mediaElement().togglePlayStateWillPlay()) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) show(); 3257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci else 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) hide(); 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlOverlayPlayButtonElement::shadowPseudoId() const 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-overlay-play-button", AtomicString::ConstructFromLiteral)); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 335c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)bool MediaControlOverlayPlayButtonElement::keepEventInNode(Event* event) 336c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 337c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return isUserInteractionEvent(event); 338c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 339c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 343d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement(MediaControls& mediaControls) 344d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaShowClosedCaptionsButton) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 348d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClosedCaptionsButtonElement::create(MediaControls& mediaControls) 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRefWillBeNoop(new MediaControlToggleClosedCaptionsButtonElement(mediaControls)); 351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) button->ensureUserAgentShadowRoot(); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->setType("button"); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->hide(); 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return button.release(); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType() 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 35943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) bool captionsVisible = mediaElement().closedCaptionsVisible(); 360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setDisplayType(captionsVisible ? MediaHideClosedCaptionsButton : MediaShowClosedCaptionsButton); 361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setChecked(captionsVisible); 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler(Event* event) 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3661e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::click) { 36743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) mediaElement().setClosedCaptionsVisible(!mediaElement().closedCaptionsVisible()); 36843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) setChecked(mediaElement().closedCaptionsVisible()); 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateDisplayType(); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLInputElement::defaultEventHandler(event); 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId() const 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-toggle-closed-captions-button", AtomicString::ConstructFromLiteral)); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 384d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlTimelineElement::MediaControlTimelineElement(MediaControls& mediaControls) 385d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaSlider) 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 389d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlTimelineElement> MediaControlTimelineElement::create(MediaControls& mediaControls) 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlTimelineElement> timeline = adoptRefWillBeNoop(new MediaControlTimelineElement(mediaControls)); 392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) timeline->ensureUserAgentShadowRoot(); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) timeline->setType("range"); 394f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) timeline->setAttribute(stepAttr, "any"); 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return timeline.release(); 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlTimelineElement::defaultEventHandler(Event* event) 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 40007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (event->isMouseEvent() && toMouseEvent(event)->button() != LeftButton) 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (!inDocument() || !document().isActive()) 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::mousedown) 40707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch mediaControls().beginScrubbing(); 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4091e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::mouseup) 41007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch mediaControls().endScrubbing(); 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MediaControlInputElement::defaultEventHandler(event); 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double time = value().toDouble(); 418aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (event->type() == EventTypeNames::input) { 419a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // FIXME: This will need to take the timeline offset into consideration 420a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // once that concept is supported, see https://crbug.com/312699 421aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (mediaElement().controller()) 4227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaElement().controller()->setCurrentTime(time); 423aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch else 424aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch mediaElement().setCurrentTime(time, IGNORE_EXCEPTION); 425aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderSlider* slider = toRenderSlider(renderer()); 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (slider && slider->inDragMode()) 429d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) mediaControls().updateCurrentTimeDisplay(); 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool MediaControlTimelineElement::willRespondToMouseClickEvents() 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return inDocument() && document().isActive(); 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void MediaControlTimelineElement::setPosition(double currentTime) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setValue(String::number(currentTime)); 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void MediaControlTimelineElement::setDuration(double duration) 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 44451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setFloatingPointAttribute(maxAttr, std::isfinite(duration) ? duration : 0); 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlTimelineElement::shadowPseudoId() const 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-timeline", AtomicString::ConstructFromLiteral)); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 453c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)bool MediaControlTimelineElement::keepEventInNode(Event* event) 454c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 455c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return isUserInteractionEventForSlider(event); 456c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 457c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 460d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(MediaControls& mediaControls) 461d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaVolumeSlider) 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlVolumeSliderElement> MediaControlVolumeSliderElement::create(MediaControls& mediaControls) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlVolumeSliderElement> slider = adoptRefWillBeNoop(new MediaControlVolumeSliderElement(mediaControls)); 468926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) slider->ensureUserAgentShadowRoot(); 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) slider->setType("range"); 470f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) slider->setAttribute(stepAttr, "any"); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) slider->setAttribute(maxAttr, "1"); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return slider.release(); 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void MediaControlVolumeSliderElement::defaultEventHandler(Event* event) 476d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 477d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (event->isMouseEvent() && toMouseEvent(event)->button() != LeftButton) 478d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 479d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 480d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!inDocument() || !document().isActive()) 481d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 482d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 483d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MediaControlInputElement::defaultEventHandler(event); 484d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 485d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove) 486d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 487d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 488d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) double volume = value().toDouble(); 48907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch mediaElement().setVolume(volume, ASSERT_NO_EXCEPTION); 49007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch mediaElement().setMuted(false); 491d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 492d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 493d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool MediaControlVolumeSliderElement::willRespondToMouseMoveEvents() 494d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 495d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!inDocument() || !document().isActive()) 496d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return false; 497d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 498d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return MediaControlInputElement::willRespondToMouseMoveEvents(); 499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 500d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 501d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool MediaControlVolumeSliderElement::willRespondToMouseClickEvents() 502d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 503d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!inDocument() || !document().isActive()) 504d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return false; 505d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 506d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return MediaControlInputElement::willRespondToMouseClickEvents(); 507d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 508d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 509d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void MediaControlVolumeSliderElement::setVolume(double volume) 510d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 511d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (value().toDouble() != volume) 512d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) setValue(String::number(volume)); 513d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 514d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 515d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)const AtomicString& MediaControlVolumeSliderElement::shadowPseudoId() const 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider", AtomicString::ConstructFromLiteral)); 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 521c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)bool MediaControlVolumeSliderElement::keepEventInNode(Event* event) 522c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 523c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return isUserInteractionEventForSlider(event); 524c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 525c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 528d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement(MediaControls& mediaControls) 529d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlInputElement(mediaControls, MediaEnterFullscreenButton) 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 533d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElement::create(MediaControls& mediaControls) 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> button = adoptRefWillBeNoop(new MediaControlFullscreenButtonElement(mediaControls)); 536926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) button->ensureUserAgentShadowRoot(); 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->setType("button"); 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) button->hide(); 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return button.release(); 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlFullscreenButtonElement::defaultEventHandler(Event* event) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (event->type() == EventTypeNames::click) { 545197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (mediaElement().isFullscreen()) 546197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch mediaElement().exitFullscreen(); 54743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) else 548197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch mediaElement().enterFullscreen(); 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLInputElement::defaultEventHandler(event); 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlFullscreenButtonElement::shadowPseudoId() const 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-button", AtomicString::ConstructFromLiteral)); 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlFullscreenButtonElement::setIsFullscreen(bool isFullscreen) 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setDisplayType(isFullscreen ? MediaExitFullscreenButton : MediaEnterFullscreenButton); 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciMediaControlCastButtonElement::MediaControlCastButtonElement(MediaControls& mediaControls, bool isOverlayButton) 5687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : MediaControlInputElement(mediaControls, MediaCastOnButton), m_isOverlayButton(isOverlayButton) 5697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 5707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 5717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtrWillBeRawPtr<MediaControlCastButtonElement> MediaControlCastButtonElement::create(MediaControls& mediaControls, bool isOverlayButton) 5737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 5747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<MediaControlCastButtonElement> button = adoptRefWillBeNoop(new MediaControlCastButtonElement(mediaControls, isOverlayButton)); 5757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci button->ensureUserAgentShadowRoot(); 5767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci button->setType("button"); 5777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return button.release(); 5787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 5797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid MediaControlCastButtonElement::defaultEventHandler(Event* event) 5817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 5827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event->type() == EventTypeNames::click) { 5837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (mediaElement().isPlayingRemotely()) { 5847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaElement().requestRemotePlaybackControl(); 5857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } else { 5867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaElement().requestRemotePlayback(); 5877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 5887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 5897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HTMLInputElement::defaultEventHandler(event); 5907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 5917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst AtomicString& MediaControlCastButtonElement::shadowPseudoId() const 5937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 5947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_STATIC_LOCAL(AtomicString, id_nonOverlay, ("-internal-media-controls-cast-button", AtomicString::ConstructFromLiteral)); 5957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_STATIC_LOCAL(AtomicString, id_overlay, ("-internal-media-controls-overlay-cast-button", AtomicString::ConstructFromLiteral)); 5967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_isOverlayButton ? id_overlay : id_nonOverlay; 5977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 5987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid MediaControlCastButtonElement::setIsPlayingRemotely(bool isPlayingRemotely) 6007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 6017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setDisplayType(isPlayingRemotely ? MediaCastOnButton : MediaCastOffButton); 6027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 6037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 6047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccibool MediaControlCastButtonElement::keepEventInNode(Event* event) 6057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 6067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return isUserInteractionEvent(event); 6077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 6087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 6097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// ---------------------------- 6107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 611d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(MediaControls& mediaControls) 612d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlTimeDisplayElement(mediaControls, MediaTimeRemainingDisplay) 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 616d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create(MediaControls& mediaControls) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return adoptRefWillBeNoop(new MediaControlTimeRemainingDisplayElement(mediaControls)); 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)static const AtomicString& getMediaControlTimeRemainingDisplayElementShadowPseudoId() 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-time-remaining-display", AtomicString::ConstructFromLiteral)); 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlTimeRemainingDisplayElement::shadowPseudoId() const 62853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 62953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return getMediaControlTimeRemainingDisplayElementShadowPseudoId(); 63053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 63153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 634d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement(MediaControls& mediaControls) 635d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlTimeDisplayElement(mediaControls, MediaCurrentTimeDisplay) 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 639d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create(MediaControls& mediaControls) 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return adoptRefWillBeNoop(new MediaControlCurrentTimeDisplayElement(mediaControls)); 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 64453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)static const AtomicString& getMediaControlCurrentTimeDisplayElementShadowPseudoId() 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-current-time-display", AtomicString::ConstructFromLiteral)); 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlCurrentTimeDisplayElement::shadowPseudoId() const 65153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 65253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return getMediaControlCurrentTimeDisplayElementShadowPseudoId(); 65353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)// ---------------------------- 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 657d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement(MediaControls& mediaControls) 658d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : MediaControlDivElement(mediaControls, MediaTextTrackDisplayContainer) 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_fontSize(0) 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 663d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> MediaControlTextTrackContainerElement::create(MediaControls& mediaControls) 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> element = adoptRefWillBeNoop(new MediaControlTextTrackContainerElement(mediaControls)); 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element->hide(); 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return element.release(); 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 670591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochRenderObject* MediaControlTextTrackContainerElement::createRenderer(RenderStyle*) 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 672f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return new RenderTextTrackContainerElement(this); 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)const AtomicString& MediaControlTextTrackContainerElement::textTrackContainerElementShadowPseudoId() 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-text-track-container", AtomicString::ConstructFromLiteral)); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return id; 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 68109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)const AtomicString& MediaControlTextTrackContainerElement::shadowPseudoId() const 682926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 683926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return textTrackContainerElementShadowPseudoId(); 684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MediaControlTextTrackContainerElement::updateDisplay() 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 68843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!mediaElement().closedCaptionsVisible()) { 689926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) removeChildren(); 690926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 691926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 1. If the media element is an audio element, or is another playback 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // mechanism with no rendering area, abort these steps. There is nothing to 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // render. 69643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (isHTMLAudioElement(mediaElement())) 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 2. Let video be the media element or other playback mechanism. 700d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HTMLVideoElement& video = toHTMLVideoElement(mediaElement()); 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 3. Let output be an empty list of absolutely positioned CSS block boxes. 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 4. If the user agent is exposing a user interface for video, add to 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // output one or more completely transparent positioned CSS block boxes that 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // cover the same region as the user interface. 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5. If the last time these rules were run, the user agent was not exposing 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // a user interface for video, but now it is, let reset be true. Otherwise, 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // let reset be false. 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // There is nothing to be done explicitly for 4th and 5th steps, as 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // everything is handled through CSS. The caption box is on top of the 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // controls box, in a container set with the -webkit-box display property. 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 6. Let tracks be the subset of video's list of text tracks that have as 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // their rules for updating the text track rendering these rules for 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // updating the display of WebVTT text tracks, and whose text track mode is 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // showing or showing by default. 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 7. Let cues be an empty list of text track cues. 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 8. For each track track in tracks, append to cues all the cues from 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // track's list of cues that have their text track cue active flag set. 723d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) CueList activeCues = video.currentlyActiveCues(); 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 9. If reset is false, then, for each text track cue cue in cues: if cue's 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // text track cue display state has a set of CSS boxes, then add those boxes 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to output, and remove cue from cues. 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // There is nothing explicitly to be done here, as all the caching occurs 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // within the TextTrackCue instance itself. If parameters of the cue change, 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the display tree is cleared. 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 10. For each text track cue cue in cues that has not yet had 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // corresponding CSS boxes added to output, in text track cue order, run the 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // following substeps: 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < activeCues.size(); ++i) { 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextTrackCue* cue = activeCues[i].data(); 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(cue->isActive()); 740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!cue->track() || !cue->track()->isRendered() || !cue->isActive()) 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) cue->updateDisplay(m_videoDisplaySize.size(), *this); 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 11. Return output. 747d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (hasChildren()) 748926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) show(); 74993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) else 750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) hide(); 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 75309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void MediaControlTextTrackContainerElement::updateSizes() 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 75509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!document().isActive()) 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 758926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IntRect videoBox; 759926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 760d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!mediaElement().renderer() || !mediaElement().renderer()->isVideo()) 76193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 762d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) videoBox = toRenderVideo(mediaElement().renderer())->videoBox(); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_videoDisplaySize == videoBox) 765926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 766926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_videoDisplaySize = videoBox; 767926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) float smallestDimension = std::min(m_videoDisplaySize.size().height(), m_videoDisplaySize.size().width()); 769926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) float fontSize = smallestDimension * 0.05f; 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (fontSize != m_fontSize) { 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_fontSize = fontSize; 77383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch setInlineStyleProperty(CSSPropertyFontSize, fontSize, CSSPrimitiveValue::CSS_PX); 774926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ---------------------------- 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 779c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 780