| Index: Source/core/html/HTMLMediaElement.h | 
| diff --git a/Source/core/html/HTMLMediaElement.h b/Source/core/html/HTMLMediaElement.h | 
| index 4dd5bf21b1e3150dbaaf9e43bad26263c5cdcda2..dfd2cf5a1aa51b0e8957d5299c44fc627239bd4e 100644 | 
| --- a/Source/core/html/HTMLMediaElement.h | 
| +++ b/Source/core/html/HTMLMediaElement.h | 
| @@ -48,6 +48,7 @@ namespace WebCore { | 
| class AudioSourceProvider; | 
| class AudioSourceProviderClient; | 
| #endif | 
| +class AudioTrackList; | 
| class ContentType; | 
| class Event; | 
| class ExceptionState; | 
| @@ -61,6 +62,7 @@ class HTMLMediaSource; | 
| class TextTrackList; | 
| class TimeRanges; | 
| class URLRegistry; | 
| +class VideoTrackList; | 
|  | 
| typedef PODIntervalTree<double, TextTrackCue*> CueIntervalTree; | 
| typedef CueIntervalTree::IntervalType CueInterval; | 
| @@ -164,6 +166,12 @@ public: | 
| bool togglePlayStateWillPlay() const; | 
| void togglePlayState(); | 
|  | 
| +    AudioTrackList& audioTracks(); | 
| +    void audioTrackChanged(const String& audioTrackID); | 
| + | 
| +    VideoTrackList& videoTracks(); | 
| +    void selectedVideoTrackChanged(const String& selectedTrackID); | 
| + | 
| PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, const AtomicString& label, const AtomicString& language, ExceptionState&); | 
| PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, const AtomicString& label, ExceptionState& exceptionState) { return addTextTrack(kind, label, emptyAtom, exceptionState); } | 
| PassRefPtrWillBeRawPtr<TextTrack> addTextTrack(const AtomicString& kind, ExceptionState& exceptionState) { return addTextTrack(kind, emptyAtom, emptyAtom, exceptionState); } | 
| @@ -182,6 +190,11 @@ public: | 
| void didAddTrackElement(HTMLTrackElement*); | 
| void didRemoveTrackElement(HTMLTrackElement*); | 
|  | 
| +    void addAudioTrack(const String& id, blink::WebMediaPlayerClient::AudioTrackKind, const AtomicString& label, const AtomicString& language, bool enabled); | 
| +    void removeAudioTrack(const String& id); | 
| +    void addVideoTrack(const String& id, blink::WebMediaPlayerClient::VideoTrackKind, const AtomicString& label, const AtomicString& language, bool selected); | 
| +    void removeVideoTrack(const String& id); | 
| + | 
| virtual void mediaPlayerDidAddTextTrack(blink::WebInbandTextTrack*) OVERRIDE FINAL; | 
| virtual void mediaPlayerDidRemoveTextTrack(blink::WebInbandTextTrack*) OVERRIDE FINAL; | 
| // FIXME: Remove this when WebMediaPlayerClientImpl::loadInternal does not depend on it. | 
| @@ -419,9 +432,22 @@ private: | 
|  | 
| blink::WebMediaPlayer::CORSMode corsMode() const; | 
|  | 
| +    // Creates placeholder AudioTrack and/or VideoTrack objects when WebMemediaPlayer objects | 
| +    // advertise they have audio and/or video, but don't explicity signal them via | 
| +    // mediaPlayerDidAddAudioTrack() and mediaPlayerDidAddVideoTrack(). | 
| +    // FIXME: Remove this once all WebMediaPlayer implementations properly report their track info. | 
| +    void createPlaceholderTracksIfNecessary(); | 
| + | 
| +    // Sets the selected/enabled tracks if they aren't set before we initially | 
| +    // transition to HAVE_METADATA. | 
| +    void selectInitialTracksIfNecessary(); | 
| + | 
| +    void audioTracksTimerFired(Timer<HTMLMediaElement>*); | 
| + | 
| Timer<HTMLMediaElement> m_loadTimer; | 
| Timer<HTMLMediaElement> m_progressEventTimer; | 
| Timer<HTMLMediaElement> m_playbackProgressTimer; | 
| +    Timer<HTMLMediaElement> m_audioTracksTimer; | 
| RefPtr<TimeRanges> m_playedTimeRanges; | 
| OwnPtr<GenericEventQueue> m_asyncEventQueue; | 
|  | 
| @@ -503,6 +529,8 @@ private: | 
| bool m_processingPreferenceChange : 1; | 
| double m_lastTextTrackUpdateTime; | 
|  | 
| +    RefPtr<AudioTrackList> m_audioTracks; | 
| +    RefPtr<VideoTrackList> m_videoTracks; | 
| RefPtrWillBeMember<TextTrackList> m_textTracks; | 
| WillBeHeapVector<RefPtrWillBeMember<TextTrack> > m_textTracksWhenResourceSelectionBegan; | 
|  | 
|  |