SourceBufferList.cpp [plain text]
#include "config.h"
#include "SourceBufferList.h"
#if ENABLE(MEDIA_SOURCE)
#include "Event.h"
#include "GenericEventQueue.h"
#include "SourceBuffer.h"
namespace WebCore {
SourceBufferList::SourceBufferList(ScriptExecutionContext* context,
GenericEventQueue* asyncEventQueue)
: m_scriptExecutionContext(context)
, m_asyncEventQueue(asyncEventQueue)
{
}
unsigned long SourceBufferList::length() const
{
return m_list.size();
}
SourceBuffer* SourceBufferList::item(unsigned index) const
{
if (index >= m_list.size())
return 0;
return m_list[index].get();
}
void SourceBufferList::add(PassRefPtr<SourceBuffer> buffer)
{
m_list.append(buffer);
createAndFireEvent(eventNames().webkitaddsourcebufferEvent);
}
bool SourceBufferList::remove(SourceBuffer* buffer)
{
size_t index = m_list.find(buffer);
if (index == notFound)
return false;
buffer->removedFromMediaSource();
m_list.remove(index);
createAndFireEvent(eventNames().webkitremovesourcebufferEvent);
return true;
}
void SourceBufferList::clear()
{
for (size_t i = 0; i < m_list.size(); ++i)
m_list[i]->removedFromMediaSource();
m_list.clear();
createAndFireEvent(eventNames().webkitremovesourcebufferEvent);
}
void SourceBufferList::createAndFireEvent(const AtomicString& eventName)
{
ASSERT(m_asyncEventQueue);
RefPtr<Event> event = Event::create(eventName, false, false);
event->setTarget(this);
m_asyncEventQueue->enqueueEvent(event.release());
}
const AtomicString& SourceBufferList::interfaceName() const
{
return eventNames().interfaceForSourceBufferList;
}
ScriptExecutionContext* SourceBufferList::scriptExecutionContext() const
{
return m_scriptExecutionContext;
}
EventTargetData* SourceBufferList::eventTargetData()
{
return &m_eventTargetData;
}
EventTargetData* SourceBufferList::ensureEventTargetData()
{
return &m_eventTargetData;
}
}
#endif