#ifndef TextTrackList_h
#define TextTrackList_h
#include "bindings/v8/ScriptWrappable.h"
#include "core/events/EventListener.h"
#include "core/events/EventTarget.h"
#include "core/html/HTMLMediaElement.h"
#include "platform/Timer.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefCounted.h"
#include "wtf/Vector.h"
namespace WebCore {
class GenericEventQueue;
class TextTrack;
class TextTrackList FINAL : public RefCounted<TextTrackList>, public ScriptWrappable, public EventTargetWithInlineData {
REFCOUNTED_EVENT_TARGET(TextTrackList);
public:
static PassRefPtr<TextTrackList> create(HTMLMediaElement* owner)
{
return adoptRef(new TextTrackList(owner));
}
virtual ~TextTrackList();
unsigned length() const;
int getTrackIndex(TextTrack*);
int getTrackIndexRelativeToRenderedTracks(TextTrack*);
bool contains(TextTrack*) const;
TextTrack* item(unsigned index);
TextTrack* getTrackById(const AtomicString& id);
void append(PassRefPtr<TextTrack>);
void remove(TextTrack*);
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual ExecutionContext* executionContext() const OVERRIDE;
DEFINE_ATTRIBUTE_EVENT_LISTENER(addtrack);
DEFINE_ATTRIBUTE_EVENT_LISTENER(change);
DEFINE_ATTRIBUTE_EVENT_LISTENER(removetrack);
void clearOwner();
HTMLMediaElement* owner() const;
void scheduleChangeEvent();
void removeAllInbandTracks();
private:
explicit TextTrackList(HTMLMediaElement*);
void scheduleTrackEvent(const AtomicString& eventName, PassRefPtr<TextTrack>);
void scheduleAddTrackEvent(PassRefPtr<TextTrack>);
void scheduleRemoveTrackEvent(PassRefPtr<TextTrack>);
void invalidateTrackIndexesAfterTrack(TextTrack*);
HTMLMediaElement* m_owner;
OwnPtr<GenericEventQueue> m_asyncEventQueue;
Vector<RefPtr<TextTrack> > m_addTrackTracks;
Vector<RefPtr<TextTrack> > m_elementTracks;
Vector<RefPtr<TextTrack> > m_inbandTracks;
};
}
#endif