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;
if (Frame* frame = downcast<Document>(*scriptExecutionContext()).frame()) {
if (frame->isMainFrame())
return nullptr;
}
return scriptExecutionContext()->topOrigin();
}
void MediaDevicesEnumerationRequest::contextDestroyed()
{
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)
{
m_deviceList = deviceList;
m_deviceIdentifierHashSalt = deviceIdentifierHashSalt;
m_originHasPersistentAccess = originHasPersistentAccess;
if (m_completionHandler)
m_completionHandler(m_deviceList, m_deviceIdentifierHashSalt, m_originHasPersistentAccess);
m_completionHandler = nullptr;
}
}
#endif // ENABLE(MEDIA_STREAM)