NavigatorUserMedia.cpp [plain text]
#include "config.h"
#include "NavigatorUserMedia.h"
#if ENABLE(MEDIA_STREAM)
#include "Dictionary.h"
#include "Document.h"
#include "ExceptionCode.h"
#include "Frame.h"
#include "MediaStream.h"
#include "Navigator.h"
#include "NavigatorUserMediaError.h"
#include "NavigatorUserMediaErrorCallback.h"
#include "NavigatorUserMediaSuccessCallback.h"
#include "Page.h"
#include "UserMediaController.h"
#include "UserMediaRequest.h"
namespace WebCore {
NavigatorUserMedia::NavigatorUserMedia()
{
}
NavigatorUserMedia::~NavigatorUserMedia()
{
}
void NavigatorUserMedia::webkitGetUserMedia(Navigator* navigator, const Dictionary& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback, ExceptionCode& ec)
{
if (!successCallback || !errorCallback) {
ec = TYPE_MISMATCH_ERR;
return;
}
Document* document = navigator->frame()->document();
ASSERT(errorCallback);
ASSERT(successCallback);
auto resolveCallback = [successCallback, document](const RefPtr<MediaStream>& stream) mutable {
RefPtr<MediaStream> protectedStream = stream;
document->postTask([successCallback, protectedStream](ScriptExecutionContext&) {
successCallback->handleEvent(protectedStream.get());
});
};
auto rejectCallback = [errorCallback, document](const RefPtr<NavigatorUserMediaError>& error) mutable {
RefPtr<NavigatorUserMediaError> protectedError = error;
document->postTask([errorCallback, protectedError](ScriptExecutionContext&) {
errorCallback->handleEvent(protectedError.get());
});
};
UserMediaRequest::start(navigator->frame()->document(), options, MediaDevices::Promise(WTF::move(resolveCallback), WTF::move(rejectCallback)), ec);
}
}
#endif // ENABLE(MEDIA_STREAM)