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);
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}