#ifndef TextTrackList_h
#define TextTrackList_h
#if ENABLE(VIDEO_TRACK)
#include "EventListener.h"
#include "EventTarget.h"
#include "Timer.h"
#include <algorithm>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
class HTMLMediaElement;
class TextTrack;
class TextTrackList;
class TextTrackList : public RefCounted<TextTrackList>, public EventTarget {
public:
static PassRefPtr<TextTrackList> create(HTMLMediaElement* owner, ScriptExecutionContext* context)
{
return adoptRef(new TextTrackList(owner, context));
}
~TextTrackList();
unsigned length() const;
unsigned getTrackIndex(TextTrack*);
TextTrack* item(unsigned index);
void append(PassRefPtr<TextTrack>);
void remove(TextTrack*);
virtual const AtomicString& interfaceName() const;
using RefCounted<TextTrackList>::ref;
using RefCounted<TextTrackList>::deref;
virtual ScriptExecutionContext* scriptExecutionContext() const { return m_context; }
DEFINE_ATTRIBUTE_EVENT_LISTENER(addtrack);
void clearOwner() { m_owner = 0; }
Node* owner() const;
bool isFiringEventListeners() { return m_dispatchingEvents; }
private:
TextTrackList(HTMLMediaElement*, ScriptExecutionContext*);
virtual void refEventTarget() { ref(); }
virtual void derefEventTarget() { deref(); }
virtual EventTargetData* eventTargetData() { return &m_eventTargetData; }
virtual EventTargetData* ensureEventTargetData() { return &m_eventTargetData; }
void scheduleAddTrackEvent(PassRefPtr<TextTrack>);
void asyncEventTimerFired(Timer<TextTrackList>*);
ScriptExecutionContext* m_context;
HTMLMediaElement* m_owner;
Vector<RefPtr<Event> > m_pendingEvents;
Timer<TextTrackList> m_pendingEventTimer;
EventTargetData m_eventTargetData;
Vector<RefPtr<TextTrack> > m_addTrackTracks;
Vector<RefPtr<TextTrack> > m_elementTracks;
int m_dispatchingEvents;
};
}
#endif
#endif