ScriptPromise MediaDevices::enumerateDevices(ScriptState* scriptState) { Document* document = toDocument(scriptState->executionContext()); UserMediaController* userMedia = UserMediaController::from(document->frame()); if (!userMedia) return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "No media device controller available; is this a detached window?")); MediaDevicesRequest* request = MediaDevicesRequest::create(scriptState, userMedia); return request->start(); }
void NavigatorMediaStream::getMediaDevices(Navigator& navigator, PassOwnPtr<MediaDeviceInfoCallback> callback, ExceptionState& exceptionState) { UserMediaController* userMedia = UserMediaController::from(navigator.frame()); if (!userMedia) { exceptionState.throwDOMException(NotSupportedError, "No media device controller available; is this a detached window?"); return; } MediaDevicesRequest* request = MediaDevicesRequest::create(navigator.frame()->document(), userMedia, callback, exceptionState); if (!request) { if (!exceptionState.hadException()) exceptionState.throwDOMException(NotSupportedError, "Failed to request media devices."); return; } request->start(); }
MediaDevicesRequest* MediaDevicesRequest::create(ExecutionContext* context, UserMediaController* controller, MediaDeviceInfoCallback* callback, ExceptionState& exceptionState) { MediaDevicesRequest* request = new MediaDevicesRequest(context, controller, callback); request->suspendIfNeeded(); return request; }