UserMediaRequest.cpp [plain text]
#include "config.h"
#if ENABLE(MEDIA_STREAM)
#include "UserMediaRequest.h"
#include "Dictionary.h"
#include "LocalMediaStream.h"
#include "MediaStreamCenter.h"
#include "SpaceSplitString.h"
#include "UserMediaController.h"
namespace WebCore {
PassRefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
{
RefPtr<UserMediaRequest> request = adoptRef(new UserMediaRequest(context, controller, options, successCallback, errorCallback));
if (!request->audio() && !request->video())
return 0;
return request.release();
}
UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
: ContextDestructionObserver(context)
, m_audio(false)
, m_video(false)
, m_controller(controller)
, m_successCallback(successCallback)
, m_errorCallback(errorCallback)
{
options.get("audio", m_audio);
options.get("video", m_video);
}
UserMediaRequest::~UserMediaRequest()
{
}
void UserMediaRequest::start()
{
MediaStreamCenter::instance().queryMediaStreamSources(this);
}
void UserMediaRequest::didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
{
if (m_controller)
m_controller->requestUserMedia(this, audioSources, videoSources);
}
void UserMediaRequest::succeed(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
{
if (!m_scriptExecutionContext)
return;
RefPtr<LocalMediaStream> stream = LocalMediaStream::create(m_scriptExecutionContext, audioSources, videoSources);
m_successCallback->handleEvent(stream.get());
}
void UserMediaRequest::fail()
{
if (!m_scriptExecutionContext)
return;
if (m_errorCallback) {
RefPtr<NavigatorUserMediaError> error = NavigatorUserMediaError::create(NavigatorUserMediaError::PERMISSION_DENIED);
m_errorCallback->handleEvent(error.get());
}
}
void UserMediaRequest::contextDestroyed()
{
if (m_controller) {
m_controller->cancelUserMediaRequest(this);
m_controller = 0;
}
ContextDestructionObserver::contextDestroyed();
}
}
#endif // ENABLE(MEDIA_STREAM)