void PresentationAvailability::updateListening() { WebPresentationClient* client = presentationClient(executionContext()); if (!client) return; if (m_state == State::Active && (toDocument(executionContext())->pageVisibilityState() == PageVisibilityStateVisible)) client->startListening(this); else client->stopListening(this); }
ScriptPromise PresentationRequest::getAvailability(ScriptState* scriptState) { ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); WebPresentationClient* client = presentationClient(getExecutionContext()); if (!client) { resolver->reject(DOMException::create(InvalidStateError, "The object is no longer associated to a frame.")); return promise; } client->getAvailability(m_url.getString(), new PresentationAvailabilityCallbacks(resolver, m_url)); return promise; }
ScriptPromise PresentationRequest::reconnect(ScriptState* scriptState, const String& id) { ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); WebPresentationClient* client = presentationClient(getExecutionContext()); if (!client) { resolver->reject(DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame.")); return promise; } client->joinSession(m_url.getString(), id, new PresentationConnectionCallbacks(resolver, this)); return promise; }
ScriptPromise PresentationRequest::start(ScriptState* scriptState) { ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); Settings* contextSettings = settings(getExecutionContext()); bool isUserGestureRequired = !contextSettings || contextSettings->presentationRequiresUserGesture(); if (isUserGestureRequired && !UserGestureIndicator::utilizeUserGesture()) { resolver->reject(DOMException::create(InvalidAccessError, "PresentationRequest::start() requires user gesture.")); return promise; } WebPresentationClient* client = presentationClient(getExecutionContext()); if (!client) { resolver->reject(DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame.")); return promise; } client->startSession(m_url.getString(), new PresentationConnectionCallbacks(resolver, this)); return promise; }