15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef HTMLMediaElement_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define HTMLMediaElement_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ActiveDOMObject.h" 3006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/GenericEventQueue.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLElement.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/track/TextTrack.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/track/TextTrackCue.h" 3451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/html/track/vtt/VTTCue.h" 351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PODIntervalTree.h" 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "platform/Supplementable.h" 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/graphics/media/MediaPlayer.h" 385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "public/platform/WebMediaPlayerClient.h" 395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebMimeRegistry.h" 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebContentDecryptionModule; 4351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class WebInbandTextTrack; 4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class WebLayer; 4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 46521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 47c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class AudioSourceProvider; 51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass AudioSourceProviderClient; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class AudioTrackList; 545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class ContentType; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Event; 56df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ExceptionState; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLSourceElement; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLTrackElement; 595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class KURL; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MediaController; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MediaControls; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MediaError; 63e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass HTMLMediaSource; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TextTrackList; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TimeRanges; 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class URLRegistry; 675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class VideoTrackList; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef PODIntervalTree<double, TextTrackCue*> CueIntervalTree; 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)typedef CueIntervalTree::IntervalType CueInterval; 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)typedef Vector<CueInterval> CueList; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: The inheritance from MediaPlayerClient here should be private inheritance. 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so it 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement. 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTMLMediaElement>, public MediaPlayerClient, public ActiveDOMObject { 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 79323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElement); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 8151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) static blink::WebMimeRegistry::SupportsType supportsType(const ContentType&, const String& keySystem = String()); 825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) static void setMediaStreamRegistry(URLRegistry*); 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) static bool isMediaStreamURL(const String& url); 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 86a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual void trace(Visitor*) OVERRIDE; 875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void clearWeakMembers(Visitor*); 895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#endif 90d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) blink::WebMediaPlayer* webMediaPlayer() const { return m_player ? m_player->webMediaPlayer() : 0; } 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool hasVideo() const { return false; } 9307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool hasAudio() const; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) bool supportsSave() const; 9602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 9751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) blink::WebLayer* platformLayer() const; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) enum DelayedActionType { 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) LoadMediaResource = 1 << 0, 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) LoadTextTrackResource = 1 << 1, 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) TextTrackChangesNotification = 1 << 2 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void scheduleDelayedAction(DelayedActionType); 10502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 106f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) bool isActive() const { return m_active; } 10702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool hasRemoteRoutes() const { return m_remoteRoutesAvailable; } 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool isPlayingRemotely() const { return m_playingRemotely; } 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 11119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // error state 112d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) PassRefPtrWillBeRawPtr<MediaError> error() const; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // network state 115a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void setSrc(const AtomicString&); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const KURL& currentSrc() const { return m_currentSrc; } 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum NetworkState { NETWORK_EMPTY, NETWORK_IDLE, NETWORK_LOADING, NETWORK_NO_SOURCE }; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NetworkState networkState() const; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch String preload() const; 12209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void setPreload(const AtomicString&); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 124197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch PassRefPtrWillBeRawPtr<TimeRanges> buffered() const; 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void load(); 12609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) String canPlayType(const String& mimeType, const String& keySystem = String()) const; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // ready state 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) enum ReadyState { HAVE_NOTHING, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA }; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ReadyState readyState() const; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool seeking() const; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // playback state 134aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch double currentTime() const; 135aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch void setCurrentTime(double, ExceptionState&); 136aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch double duration() const; 13707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool paused() const; 13853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double defaultPlaybackRate() const; 139323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) void setDefaultPlaybackRate(double); 14053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double playbackRate() const; 141323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) void setPlaybackRate(double); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updatePlaybackRate(); 143197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch PassRefPtrWillBeRawPtr<TimeRanges> played(); 144197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch PassRefPtrWillBeRawPtr<TimeRanges> seekable() const; 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ended() const; 14602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch bool autoplay() const; 14702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch bool loop() const; 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setLoop(bool); 14907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void play(); 15007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void pause(); 1517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void requestRemotePlayback(); 1527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void requestRemotePlaybackControl(); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // statistics 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned webkitAudioDecodedByteCount() const; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned webkitVideoDecodedByteCount() const; 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // media source extensions 159e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) void closeMediaSource(); 1605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void durationChanged(double duration, bool requestSeek); 1613c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 16219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // controls 163197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool shouldShowControls() const; 16407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch double volume() const; 16507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setVolume(double, ExceptionState&); 16607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool muted() const; 16707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setMuted(bool); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // play/pause toggling that uses the media controller if present. togglePlayStateWillPlay() is 17007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // true if togglePlayState() will call play() or unpause() on the media element or controller. 17107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool togglePlayStateWillPlay() const; 17207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void togglePlayState(); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) AudioTrackList& audioTracks(); 1755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void audioTrackChanged(); 1765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) VideoTrackList& videoTracks(); 1785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void selectedVideoTrackChanged(blink::WebMediaPlayer::TrackId*); 1795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 180f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, const AtomicString& label, const AtomicString& language, ExceptionState&); 181f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, const AtomicString& label, ExceptionState& exceptionState) { return addTextTrack(kind, label, emptyAtom, exceptionState); } 182f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, ExceptionState& exceptionState) { return addTextTrack(kind, emptyAtom, emptyAtom, exceptionState); } 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextTrackList* textTracks(); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CueList currentlyActiveCues() const { return m_currentlyActiveCues; } 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 187d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void addTextTrack(TextTrack*); 188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void removeTextTrack(TextTrack*); 1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void textTracksChanged(); 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void notifyMediaPlayerOfTextTrackChanges(); 191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Implements the "forget the media element's media-resource-specific tracks" algorithm in the HTML5 spec. 193d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void forgetResourceSpecificTracks(); 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 195d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void didAddTrackElement(HTMLTrackElement*); 196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void didRemoveTrackElement(HTMLTrackElement*); 197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) blink::WebMediaPlayer::TrackId addAudioTrack(const String& id, blink::WebMediaPlayerClient::AudioTrackKind, const AtomicString& label, const AtomicString& language, bool enabled); 1995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void removeAudioTrack(blink::WebMediaPlayer::TrackId); 2005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) blink::WebMediaPlayer::TrackId addVideoTrack(const String& id, blink::WebMediaPlayerClient::VideoTrackKind, const AtomicString& label, const AtomicString& language, bool selected); 2015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void removeVideoTrack(blink::WebMediaPlayer::TrackId); 2025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 203d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual void mediaPlayerDidAddTextTrack(blink::WebInbandTextTrack*) OVERRIDE FINAL; 204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual void mediaPlayerDidRemoveTextTrack(blink::WebInbandTextTrack*) OVERRIDE FINAL; 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // FIXME: Remove this when WebMediaPlayerClientImpl::loadInternal does not depend on it. 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual KURL mediaPlayerPosterURL() OVERRIDE { return KURL(); } 207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 208f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu class TrackGroup { 209f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu STACK_ALLOCATED(); 210f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu public: 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum GroupKind { CaptionsAndSubtitles, Description, Chapter, Metadata, Other }; 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 213f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu explicit TrackGroup(GroupKind kind) 214d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : visibleTrack(nullptr) 215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) , defaultTrack(nullptr) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , kind(kind) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , hasSrcLang(false) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 221f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WillBeHeapVector<RefPtrWillBeMember<TextTrack> > tracks; 222f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RefPtrWillBeMember<TextTrack> visibleTrack; 223f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RefPtrWillBeMember<TextTrack> defaultTrack; 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) GroupKind kind; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasSrcLang; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void configureTextTrackGroupForLanguage(const TrackGroup&) const; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void configureTextTracks(); 230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void configureTextTrackGroup(const TrackGroup&); 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool textTracksAreReady() const; 2331e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) enum VisibilityChangeAssumption { 2341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) AssumeNoVisibleChange, 2351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) AssumeVisibleChange 2361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) }; 2371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void configureTextTrackDisplay(VisibilityChangeAssumption); 238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void updateTextTrackDisplay(); 23919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) void textTrackReadyStateChanged(TextTrack*); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 241d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void textTrackKindChanged(TextTrack*); 242d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void textTrackModeChanged(TextTrack*); 243d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void textTrackAddCues(TextTrack*, const TextTrackCueList*); 244d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void textTrackRemoveCues(TextTrack*, const TextTrackCueList*); 245f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void textTrackAddCue(TextTrack*, PassRefPtrWillBeRawPtr<TextTrackCue>); 246f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void textTrackRemoveCue(TextTrack*, PassRefPtrWillBeRawPtr<TextTrackCue>); 247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // EventTarget function. 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Both Node (via HTMLElement) and ActiveDOMObject define this method, which 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // causes an ambiguity error at compile time. This class's constructor 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ensures that both implementations return document, so return the result 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // of one of them here. 2535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) using HTMLElement::executionContext; 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool hasSingleSecurityOrigin() const { return !m_player || (webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin()); } 25602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isFullscreen() const; 25843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void enterFullscreen(); 25907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void exitFullscreen(); 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) bool hasClosedCaptions() const; 26243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) bool closedCaptionsVisible() const; 26343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void setClosedCaptionsVisible(bool); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void remoteRouteAvailabilityChanged(bool); 2667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void connectedToRemoteDevice(); 2677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void disconnectedFromRemoteDevice(); 2687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MediaControls* mediaControls() const; 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void sourceWasRemoved(HTMLSourceElement*); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void sourceWasAdded(HTMLSourceElement*); 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2741e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // ActiveDOMObject functions. 27509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool hasPendingActivity() const OVERRIDE FINAL; 27609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void contextDestroyed() OVERRIDE FINAL; 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 279f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu AudioSourceProviderClient* audioSourceNode() { return m_audioSourceNode; } 280f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu void setAudioSourceNode(AudioSourceProviderClient*); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AudioSourceProvider* audioSourceProvider(); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum InvalidURLAction { DoNothing, Complain }; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSafeToLoadURL(const KURL&, InvalidURLAction); 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MediaController* controller() const; 2895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void setController(PassRefPtrWillBeRawPtr<MediaController>); // Resets the MediaGroup and sets the MediaController. 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 291a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch void scheduleEvent(PassRefPtrWillBeRawPtr<Event>); 292d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 293e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // Returns the "effective media volume" value as specified in the HTML5 spec. 294e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) double effectiveMediaVolume() const; 295d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 296d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if ENABLE(OILPAN) 297d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bool isFinalizing() const { return m_isFinalizing; } 298197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 299197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // Oilpan: finalization of the media element is observable from its 300197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // attached MediaSource; it entering a closed state. 301197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // 302197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // Express that by having the MediaSource keep a weak reference 303197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // to the media element and signal that it wants to be notified 304197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // of destruction if it survives a GC, but the media element 305197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // doesn't. 306197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void setCloseMediaSourceWhenFinalizing(); 307d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 308d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 3099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) // Predicates also used when dispatching wrapper creation (cf. [SpecialWrapFor] IDL attribute usage.) 3109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) virtual bool isHTMLAudioElement() const { return false; } 3119e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) virtual bool isHTMLVideoElement() const { return false; } 3129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 31409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HTMLMediaElement(const QualifiedName&, Document&); 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~HTMLMediaElement(); 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 31809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void finishParsingChildren() OVERRIDE FINAL; 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isURLAttribute(const Attribute&) const OVERRIDE; 320521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) virtual void attach(const AttachContext& = AttachContext()) OVERRIDE; 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) virtual void didMoveToNewDocument(Document& oldDocument) OVERRIDE; 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 32409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) enum DisplayMode { Unknown, Poster, PosterWaitingForVideo, Video }; 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DisplayMode displayMode() const { return m_displayMode; } 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; } 32702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 3285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void setControllerInternal(PassRefPtrWillBeRawPtr<MediaController>); 32951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool ignoreTrackDisplayUpdateRequests() const { return m_ignoreTrackDisplayUpdate > 0; } 331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void beginIgnoringTrackDisplayUpdateRequests(); 332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void endIgnoringTrackDisplayUpdateRequests(); 333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void createMediaPlayer(); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool alwaysCreateUserAgentShadowRoot() const OVERRIDE FINAL { return true; } 33809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool areAuthorShadowsAllowed() const OVERRIDE FINAL { return false; } 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 34009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool supportsFocus() const OVERRIDE FINAL; 34109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isMouseFocusable() const OVERRIDE FINAL; 34219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE; 34319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE; 34409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE FINAL; 3456f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch virtual void didNotifySubtreeInsertionsToDocument() OVERRIDE; 34609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void removedFrom(ContainerNode*) OVERRIDE FINAL; 34709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void didRecalcStyle(StyleRecalcChange) OVERRIDE FINAL; 34802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 34909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void didBecomeFullscreenElement() OVERRIDE FINAL; 35009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void willStopBeingFullscreenElement() OVERRIDE FINAL; 35109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isInteractiveContent() const OVERRIDE FINAL; 352d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) virtual void defaultEventHandler(Event*) OVERRIDE FINAL; 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ActiveDOMObject functions. 35509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void stop() OVERRIDE FINAL; 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateDisplayState() { } 35802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 3595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void setReadyState(ReadyState); 360197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void setNetworkState(blink::WebMediaPlayer::NetworkState); 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 36209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerNetworkStateChanged() OVERRIDE FINAL; 36309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerReadyStateChanged() OVERRIDE FINAL; 36409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerTimeChanged() OVERRIDE FINAL; 36509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerDurationChanged() OVERRIDE FINAL; 36609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerPlaybackStateChanged() OVERRIDE FINAL; 36709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerRequestFullscreen() OVERRIDE FINAL; 36809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerRequestSeek(double) OVERRIDE FINAL; 36909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerRepaint() OVERRIDE FINAL; 37009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerSizeChanged() OVERRIDE FINAL; 37109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerSetWebLayer(blink::WebLayer*) OVERRIDE FINAL; 37209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mediaPlayerMediaSourceOpened(blink::WebMediaSource*) OVERRIDE FINAL; 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadTimerFired(Timer<HTMLMediaElement>*); 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void progressEventTimerFired(Timer<HTMLMediaElement>*); 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void playbackProgressTimerFired(Timer<HTMLMediaElement>*); 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void startPlaybackProgressTimer(); 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void startProgressEventTimer(); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void stopPeriodicTimers(); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void seek(double time); 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void finishSeek(); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkIfSeekNeeded(); 38453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void addPlayedRange(double start, double end); 38502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void scheduleTimeupdateEvent(bool periodicEvent); 387d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to scheduleNamedEvent for clarity. 38802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // loading 39009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void prepareForLoad(); 39109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void loadInternal(); 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void selectMediaResource(); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadResource(const KURL&, ContentType&, const String& keySystem); 394d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void startPlayerLoad(); 39507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setPlayerPreload(); 39607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch blink::WebMediaPlayer::LoadType loadType() const; 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void scheduleNextSourceChild(); 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadNextSourceChild(); 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void userCancelledLoad(); 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearMediaPlayer(int flags); 4015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void clearMediaPlayerAndAudioSourceProviderClientWithoutLocking(); 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool havePotentialSourceChild(); 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void noneSupported(); 404d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void mediaEngineError(PassRefPtrWillBeRawPtr<MediaError>); 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void cancelPendingEventsAndCallbacks(); 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void waitForSourceChange(); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void prepareToPlay(); 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL selectNextSourceChild(ContentType*, String* keySystem, InvalidURLAction); 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 411197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void mediaLoadingFailed(blink::WebMediaPlayer::NetworkState); 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // deferred loading (preload=none) 4145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool loadIsDeferred() const; 4155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void deferLoad(); 4165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void cancelDeferredLoad(); 4175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void startDeferredLoad(); 4185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void executeDeferredLoad(); 4195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void deferredLoadTimerFired(Timer<HTMLMediaElement>*); 4205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 42153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void updateActiveTextTrackCues(double); 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTrackElement* showingTrackWithSameKind(HTMLTrackElement*) const; 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void markCaptionAndSubtitleTracksAsUnconfigured(); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // This does not check user gesture restrictions. 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void playInternal(); 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void allowVideoRendering(); 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updateVolume(); 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updatePlayState(); 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool potentiallyPlaying() const; 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool endedPlayback() const; 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool stoppedDueToErrors() const; 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool couldPlayIfEnoughData() const; 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setShouldDelayLoadEvent(bool); 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void invalidateCachedTime(); 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void refreshCachedTime() const; 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasMediaControls() const; 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool createMediaControls(); 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void configureMediaControls(); 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void* preDispatchEventHandler(Event*) OVERRIDE FINAL; 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void changeNetworkStateFromLoadingToIdle(); 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const AtomicString& mediaGroup() const; 45151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setMediaGroup(const AtomicString&); 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updateMediaController(); 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isBlocked() const; 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isBlockedOnMediaController() const; 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAutoplaying() const { return m_autoplaying; } 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch blink::WebMediaPlayer::CORSMode corsMode() const; 45807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Returns the "direction of playback" value as specified in the HTML5 spec. 4605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) enum DirectionOfPlayback { Backward, Forward }; 4615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) DirectionOfPlayback directionOfPlayback() const; 4625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Returns the "effective playback rate" value as specified in the HTML5 spec. 4645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) double effectivePlaybackRate() const; 4655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Creates placeholder AudioTrack and/or VideoTrack objects when WebMemediaPlayer objects 4675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // advertise they have audio and/or video, but don't explicitly signal them via 4685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // addAudioTrack() and addVideoTrack(). 4695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // FIXME: Remove this once all WebMediaPlayer implementations properly report their track info. 4705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void createPlaceholderTracksIfNecessary(); 4715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Sets the selected/enabled tracks if they aren't set before we initially 4735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // transition to HAVE_METADATA. 4745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void selectInitialTracksIfNecessary(); 4755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void audioTracksTimerFired(Timer<HTMLMediaElement>*); 4775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Timer<HTMLMediaElement> m_loadTimer; 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Timer<HTMLMediaElement> m_progressEventTimer; 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Timer<HTMLMediaElement> m_playbackProgressTimer; 4815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Timer<HTMLMediaElement> m_audioTracksTimer; 482197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch RefPtrWillBeMember<TimeRanges> m_playedTimeRanges; 4835d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) OwnPtrWillBeMember<GenericEventQueue> m_asyncEventQueue; 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double m_playbackRate; 48653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double m_defaultPlaybackRate; 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NetworkState m_networkState; 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ReadyState m_readyState; 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ReadyState m_readyStateMaximum; 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL m_currentSrc; 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 492d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeMember<MediaError> m_error; 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double m_volume; 49553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double m_lastSeekTime; 49602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_previousProgressTime; 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4993c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch // Cached duration to suppress duplicate events if duration unchanged. 5003c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch double m_duration; 5013c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The last time a timeupdate event was sent (wall clock). 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_lastTimeUpdateEventWallTime; 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The last time a timeupdate event was sent in movie time. 50653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double m_lastTimeUpdateEventMovieTime; 50702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 5087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // The default playback start position. 5097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci double m_defaultPlaybackStartPosition; 5107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Loading state. 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum LoadState { WaitingForSource, LoadingFromSrcAttr, LoadingFromSourceElement }; 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LoadState m_loadState; 514323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeMember<HTMLSourceElement> m_currentSourceNode; 515323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RefPtrWillBeMember<Node> m_nextChildNodeToConsider; 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // "Deferred loading" state (for preload=none). 5185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) enum DeferredLoadState { 5195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // The load is not deferred. 5205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) NotDeferred, 5215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // The load is deferred, and waiting for the task to set the 5225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // delaying-the-load-event flag (to false). 5235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WaitingForStopDelayingLoadEventTask, 5245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // The load is the deferred, and waiting for a triggering event. 5255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WaitingForTrigger, 5265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // The load is deferred, and waiting for the task to set the 5275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // delaying-the-load-event flag, after which the load will be executed. 5285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ExecuteOnStopDelayingLoadEventTask 5295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }; 5305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) DeferredLoadState m_deferredLoadState; 5315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Timer<HTMLMediaElement> m_deferredLoadTimer; 5325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<MediaPlayer> m_player; 534a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) blink::WebLayer* m_webLayer; 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MediaPlayer::Preload m_preload; 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DisplayMode m_displayMode; 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 540197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch RefPtrWillBeMember<HTMLMediaSource> m_mediaSource; 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Cached time value. Only valid when ready state is HAVE_METADATA or 5437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // higher, otherwise the current time is assumed to be zero. 54453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) mutable double m_cachedTime; 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_fragmentEndTime; 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 548926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) typedef unsigned PendingActionFlags; 549926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) PendingActionFlags m_pendingActionFlags; 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 551f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // FIXME: MediaElement has way too many state bits. 552d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool m_userGestureRequiredForPlay : 1; 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_playing : 1; 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_shouldDelayLoadEvent : 1; 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_haveFiredLoadedData : 1; 556f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) bool m_active : 1; 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_autoplaying : 1; 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_muted : 1; 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_paused : 1; 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_seeking : 1; 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // data has not been loaded since sending a "stalled" event 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_sentStalledEvent : 1; 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // time has not changed since sending an "ended" event 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_sentEndEvent : 1; 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_closedCaptionsVisible : 1; 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_completelyLoaded : 1; 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_havePreparedToPlay : 1; 57207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool m_delayingLoadForPreloadNone : 1; 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_tracksAreReady : 1; 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_haveVisibleTextTrack : 1; 576926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool m_processingPreferenceChange : 1; 5777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool m_remoteRoutesAvailable : 1; 5787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool m_playingRemotely : 1; 579d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if ENABLE(OILPAN) 580d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bool m_isFinalizing : 1; 581197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool m_closeMediaSourceWhenFinalizing : 1; 582d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 58353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double m_lastTextTrackUpdateTime; 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<AudioTrackList> m_audioTracks; 5865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<VideoTrackList> m_videoTracks; 587f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu RefPtrWillBeMember<TextTrackList> m_textTracks; 588f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WillBeHeapVector<RefPtrWillBeMember<TextTrack> > m_textTracksWhenResourceSelectionBegan; 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CueIntervalTree m_cueTree; 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CueList m_currentlyActiveCues; 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int m_ignoreTrackDisplayUpdate; 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is a weak reference, since m_audioSourceNode holds a reference to us. 5975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem. 5989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) GC_PLUGIN_IGNORE("http://crbug.com/404577") 5995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode; 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class MediaController; 6035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RefPtrWillBeMember<MediaController> m_mediaController; 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch friend class Internals; 606926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) friend class TrackDisplayUpdateScope; 607926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 60809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) static URLRegistry* s_mediaStreamRegistry; 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Template specializations required by PodIntervalTree in debug mode. 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template <> 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct ValueToString<double> { 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static String string(const double value) 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return String::number(value); 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template <> 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct ValueToString<TextTrackCue*> { 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static String string(TextTrackCue* const& cue) 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 62551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return cue->toString(); 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)inline bool isHTMLMediaElement(const HTMLElement& element) 631d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 63243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return isHTMLAudioElement(element) || isHTMLVideoElement(element); 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement); 636f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 6377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // HTMLMediaElement_h 640