gecko/content/media/TextTrackList.cpp
Rick Eyre 5939f3d97a Bug 883173 - Part 3: Implement TextTrack::ActiveCues. r=cpearce, r=rillian
- Active cues now returns the subset of cues in mCueList that are valid
for the current playback time.
- Introduces new code in media element, when seeking, and in TextTrack, when
adding and removing cues, to mark the active cue list as dirty so that we know
when we might need to rebuild the list completely.
2013-06-14 16:10:36 -04:00

91 lines
2.4 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/dom/TextTrackList.h"
#include "mozilla/dom/TextTrackListBinding.h"
namespace mozilla {
namespace dom {
NS_IMPL_CYCLE_COLLECTION_INHERITED_2(TextTrackList,
nsDOMEventTargetHelper,
mGlobal,
mTextTracks)
NS_IMPL_ADDREF_INHERITED(TextTrackList, nsDOMEventTargetHelper)
NS_IMPL_RELEASE_INHERITED(TextTrackList, nsDOMEventTargetHelper)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(TextTrackList)
NS_INTERFACE_MAP_END_INHERITING(nsDOMEventTargetHelper)
TextTrackList::TextTrackList(nsISupports* aGlobal) : mGlobal(aGlobal)
{
SetIsDOMBinding();
}
void
TextTrackList::Update(double aTime)
{
uint32_t length = Length(), i;
for (i = 0; i < length; i++) {
mTextTracks[i]->Update(aTime);
}
}
JSObject*
TextTrackList::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aScope)
{
return TextTrackListBinding::Wrap(aCx, aScope, this);
}
TextTrack*
TextTrackList::IndexedGetter(uint32_t aIndex, bool& aFound)
{
aFound = aIndex < mTextTracks.Length();
return aFound ? mTextTracks[aIndex] : nullptr;
}
already_AddRefed<TextTrack>
TextTrackList::AddTextTrack(HTMLMediaElement* aMediaElement,
TextTrackKind aKind,
const nsAString& aLabel,
const nsAString& aLanguage)
{
nsRefPtr<TextTrack> track = new TextTrack(mGlobal, aMediaElement, aKind,
aLabel, aLanguage);
mTextTracks.AppendElement(track);
// TODO: dispatch addtrack event
return track.forget();
}
TextTrack*
TextTrackList::GetTrackById(const nsAString& aId)
{
nsAutoString id;
for (uint32_t i = 0; i < Length(); i++) {
mTextTracks[i]->GetId(id);
if (aId.Equals(id)) {
return mTextTracks[i];
}
}
return nullptr;
}
void
TextTrackList::RemoveTextTrack(const TextTrack& aTrack)
{
mTextTracks.RemoveElement(&aTrack);
}
void
TextTrackList::DidSeek()
{
for (uint32_t i = 0; i < mTextTracks.Length(); i++) {
mTextTracks[i]->SetDirty();
}
}
} // namespace dom
} // namespace mozilla