MediaDevicesEnumerationRequest.cpp [plain text]
#include "config.h"
#include "MediaDevicesEnumerationRequest.h"
#if ENABLE(MEDIA_STREAM)
#include "CaptureDevice.h"
#include "Document.h"
#include "MainFrame.h"
#include "SecurityOrigin.h"
#include "UserMediaController.h"
namespace WebCore {
Ref<MediaDevicesEnumerationRequest> MediaDevicesEnumerationRequest::create(Document& document, CompletionHandler&& completionHandler)
{
return adoptRef(*new MediaDevicesEnumerationRequest(document, WTFMove(completionHandler)));
}
MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest(ScriptExecutionContext& context, CompletionHandler&& completionHandler)
: ContextDestructionObserver(&context)
, m_completionHandler(WTFMove(completionHandler))
{
}
MediaDevicesEnumerationRequest::~MediaDevicesEnumerationRequest()
{
}
SecurityOrigin* MediaDevicesEnumerationRequest::userMediaDocumentOrigin() const
{
if (!scriptExecutionContext())
return nullptr;
return scriptExecutionContext()->securityOrigin();
}
SecurityOrigin* MediaDevicesEnumerationRequest::topLevelDocumentOrigin() const
{
if (!scriptExecutionContext())
return nullptr;
return &scriptExecutionContext()->topOrigin();
}
void MediaDevicesEnumerationRequest::contextDestroyed()
{
Ref<MediaDevicesEnumerationRequest> protectedThis(*this);
cancel();
ContextDestructionObserver::contextDestroyed();
}
void MediaDevicesEnumerationRequest::start()
{
ASSERT(scriptExecutionContext());
auto& document = downcast<Document>(*scriptExecutionContext());
auto* controller = UserMediaController::from(document.page());
if (!controller)
return;
Ref<MediaDevicesEnumerationRequest> protectedThis(*this);
controller->enumerateMediaDevices(*this);
}
void MediaDevicesEnumerationRequest::cancel()
{
m_completionHandler = nullptr;
}
void MediaDevicesEnumerationRequest::setDeviceInfo(const Vector<CaptureDevice>& deviceList, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess)
{
if (m_completionHandler)
m_completionHandler(deviceList, deviceIdentifierHashSalt, originHasPersistentAccess);
m_completionHandler = nullptr;
}
}
#endif // ENABLE(MEDIA_STREAM)