Add interfaces and stubs for audio and video tracks
https://bugs.webkit.org/show_bug.cgi?id=113965
Patch by Brendan Long <b.long@cablelabs.com> on 2013-04-19
Reviewed by Jer Noble.
No new tests because there's no implementations, so there's nothing
interesting to test.
* CMakeLists.txt: Add AudioTrack, VideoTrack, AudioTrackList and VideoTrackList.
* DerivedSources.cpp: Same.
* DerivedSources.make: Same.
* DerivedSources.pri: Same.
* GNUmakefile.list.am: Same.
* Target.pri: Same.
* UseJSC.cmake: Same.
* WebCore.vcproj/WebCore.vcproj: Same.
* WebCore.xcodeproj/project.pbxproj: Same.
* bindings/gobject/GNUmakefile.am: Same.
* bindings/js/JSAudioTrackCustom.cpp: Added, based on JSTestTrackCustom
* bindings/js/JSAudioTrackListCustom.cpp: Same.
* bindings/js/JSBindingsAllInOne.cpp: Add AudioTrack, VideoTrack, AudioTrackList and VideoTrackList.
* bindings/js/JSVideoTrackCustom.cpp: Added, based on JSTestTrackCustom
* bindings/js/JSVideoTrackListCustom.cpp: Same.
* dom/EventTarget.h: Make AudioTrackList and VideoTrackList event targets.
* dom/EventTargetFactory.in: Same.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::HTMLMediaElement): Add m_audioTracks and m_videoTracks
(WebCore::HTMLMediaElement::~HTMLMediaElement): Clear clients for audio and video tracks
(WebCore::HTMLMediaElement::audioTrackEnabledChanged): Added.
(WebCore::HTMLMediaElement::videoTrackSelectedChanged): Added.
(WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack): Added, based on mediaPlayerDidAddTextTrack
(WebCore::HTMLMediaElement::mediaPlayerDidAddVideoTrack): Same.
(WebCore::HTMLMediaElement::mediaPlayerDidRemoveAudioTrack): Added, based on mediaPlayerDidRemoveTextTrack
(WebCore::HTMLMediaElement::mediaPlayerDidRemoveVideoTrack): Same.
(WebCore::HTMLMediaElement::addAudioTrack): Added, based on addTextTrack
(WebCore::HTMLMediaElement::addVideoTrack): Same.
(WebCore::HTMLMediaElement::removeAudioTrack): Added, based on removeTextTrack
(WebCore::HTMLMediaElement::removeVideoTrack): Added, based on removeTextTrack
(WebCore::HTMLMediaElement::removeAllInbandTracks): Remove audio and video tracks too
(WebCore::HTMLMediaElement::audioTracks): Added, based on textTracks
(WebCore::HTMLMediaElement::videoTracks): Added, based on textTracks
(WebCore::HTMLMediaElement::reportMemoryUsage): Add audio and video tracks
* html/HTMLMediaElement.h: Add audioTracks and videoTracks and related functions
* html/HTMLMediaElement.idl: Add audioTracks and videoTracks
* html/track/AudioTrack.cpp: Added, based on TextTrack and InbandTextTrack.
* html/track/AudioTrack.h: Same.
* html/track/AudioTrack.idl: Added.
* html/track/AudioTrackList.cpp: Added, based on TextTrackList
* html/track/AudioTrackList.h: Same.
* html/track/AudioTrackList.idl: Added.
* html/track/TextTrackList.h: Add missing OVERRIDE on interfaceName()
* html/track/VideoTrack.cpp: Added, based on TextTrack and InbandTextTrack.
* html/track/VideoTrack.h: Same.
* html/track/VideoTrack.idl: Added.
* html/track/VideoTrackList.cpp: Added, based on TextTrackList
* html/track/VideoTrackList.h: Same.
* html/track/VideoTrackList.idl: Added.
* platform/graphics/AudioTrackPrivate.h: Added, based on InbandTextTrackPrivate.h
* platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::addAudioTrack): Added, based on addTextTrack
(WebCore::MediaPlayer::removeAudioTrack): Added, based on removeTextTrack
(WebCore::MediaPlayer::addVideoTrack): Added, based on addTextTrack
(WebCore::MediaPlayer::removeVideoTrack): Added, based on removeTextTrack
* platform/graphics/MediaPlayer.h:
(WebCore::MediaPlayerClient::mediaPlayerDidAddAudioTrack): Added, based on mediaPlayerDidAddTextTrack
(WebCore::MediaPlayerClient::mediaPlayerDidAddVideoTrack): Same
(WebCore::MediaPlayerClient::mediaPlayerDidRemoveAudioTrack): Added, based on mediaPlayerDidRemoveTextTrack
(WebCore::MediaPlayerClient::mediaPlayerDidRemoveVideoTrack): Same
* platform/graphics/VideoTrackPrivate.h: Added, based on InbandTextTrackPrivate.h
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@148785 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/html/track/VideoTrackList.cpp b/Source/WebCore/html/track/VideoTrackList.cpp
new file mode 100644
index 0000000..b3b43b5
--- /dev/null
+++ b/Source/WebCore/html/track/VideoTrackList.cpp
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(VIDEO_TRACK)
+
+#include "VideoTrackList.h"
+
+#include "EventNames.h"
+#include "VideoTrack.h"
+
+using namespace WebCore;
+
+VideoTrackList::VideoTrackList(HTMLMediaElement* element, ScriptExecutionContext* context)
+ : TrackListBase(element, context)
+{
+}
+
+VideoTrackList::~VideoTrackList()
+{
+}
+
+void VideoTrackList::append(PassRefPtr<VideoTrack> prpTrack)
+{
+ RefPtr<VideoTrack> track = prpTrack;
+
+ // Insert tracks in the media file order.
+ size_t index = track->inbandTrackIndex();
+ m_inbandTracks.insert(index, track);
+
+ ASSERT(!track->mediaElement() || track->mediaElement() == mediaElement());
+ track->setMediaElement(mediaElement());
+
+ scheduleAddTrackEvent(track.release());
+}
+
+VideoTrack* VideoTrackList::item(unsigned index) const
+{
+ if (index < m_inbandTracks.size())
+ return toVideoTrack(m_inbandTracks[index].get());
+
+ return 0;
+}
+
+VideoTrack* VideoTrackList::getTrackById(const AtomicString& id) const
+{
+ for (size_t i = 0; i < length(); ++i) {
+ VideoTrack* track = toVideoTrack(m_inbandTracks[i].get());
+ if (track->id() == id)
+ return track;
+ }
+ return 0;
+}
+
+long VideoTrackList::selectedIndex() const
+{
+ // 4.8.10.10.1 AudioTrackList and VideoTrackList objects
+ // The VideoTrackList.selectedIndex attribute must return the index of the
+ // currently selected track, if any. If the VideoTrackList object does not
+ // currently represent any tracks, or if none of the tracks are selected,
+ // it must instead return −1.
+ for (size_t i = 0; i < length(); ++i) {
+ VideoTrack* track = toVideoTrack(m_inbandTracks[i].get());
+ if (track->selected())
+ return i;
+ }
+ return -1;
+}
+
+const AtomicString& VideoTrackList::interfaceName() const
+{
+ return eventNames().interfaceForVideoTrackList;
+}
+
+#endif