Commit 02e29a49 authored by mlamouri's avatar mlamouri Committed by Commit bot

Presentation API: clean up around usage of promises.

I wrote this while investigating a Promise issue. I think it wouldn't
hurt to land it :)

BUG=None

Review-Url: https://codereview.chromium.org/2178463002
Cr-Commit-Position: refs/heads/master@{#407184}
parent b3edc847
...@@ -91,67 +91,50 @@ bool PresentationRequest::hasPendingActivity() const ...@@ -91,67 +91,50 @@ bool PresentationRequest::hasPendingActivity() const
ScriptPromise PresentationRequest::start(ScriptState* scriptState) ScriptPromise PresentationRequest::start(ScriptState* scriptState)
{ {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
Settings* contextSettings = settings(getExecutionContext()); Settings* contextSettings = settings(getExecutionContext());
bool isUserGestureRequired = !contextSettings || contextSettings->presentationRequiresUserGesture(); bool isUserGestureRequired = !contextSettings || contextSettings->presentationRequiresUserGesture();
if (isUserGestureRequired && !UserGestureIndicator::utilizeUserGesture()) { if (isUserGestureRequired && !UserGestureIndicator::utilizeUserGesture())
resolver->reject(DOMException::create(InvalidAccessError, "PresentationRequest::start() requires user gesture.")); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidAccessError, "PresentationRequest::start() requires user gesture."));
return promise;
}
if (toDocument(getExecutionContext())->isSandboxed(SandboxPresentation)) { if (toDocument(getExecutionContext())->isSandboxed(SandboxPresentation))
resolver->reject(DOMException::create(SecurityError, "The document is sandboxed and lacks the 'allow-presentation' flag.")); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(SecurityError, "The document is sandboxed and lacks the 'allow-presentation' flag."));
return promise;
}
WebPresentationClient* client = presentationClient(getExecutionContext()); WebPresentationClient* client = presentationClient(getExecutionContext());
if (!client) { if (!client)
resolver->reject(DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame.")); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame."));
return promise;
} ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
client->startSession(m_url.getString(), new PresentationConnectionCallbacks(resolver, this)); client->startSession(m_url.getString(), new PresentationConnectionCallbacks(resolver, this));
return promise; return resolver->promise();
} }
ScriptPromise PresentationRequest::reconnect(ScriptState* scriptState, const String& id) ScriptPromise PresentationRequest::reconnect(ScriptState* scriptState, const String& id)
{ {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); if (toDocument(getExecutionContext())->isSandboxed(SandboxPresentation))
ScriptPromise promise = resolver->promise(); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(SecurityError, "The document is sandboxed and lacks the 'allow-presentation' flag."));
if (toDocument(getExecutionContext())->isSandboxed(SandboxPresentation)) {
resolver->reject(DOMException::create(SecurityError, "The document is sandboxed and lacks the 'allow-presentation' flag."));
return promise;
}
WebPresentationClient* client = presentationClient(getExecutionContext()); WebPresentationClient* client = presentationClient(getExecutionContext());
if (!client) { if (!client)
resolver->reject(DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame.")); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame."));
return promise;
} ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
client->joinSession(m_url.getString(), id, new PresentationConnectionCallbacks(resolver, this)); client->joinSession(m_url.getString(), id, new PresentationConnectionCallbacks(resolver, this));
return promise; return resolver->promise();
} }
ScriptPromise PresentationRequest::getAvailability(ScriptState* scriptState) ScriptPromise PresentationRequest::getAvailability(ScriptState* scriptState)
{ {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); if (toDocument(getExecutionContext())->isSandboxed(SandboxPresentation))
ScriptPromise promise = resolver->promise(); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(SecurityError, "The document is sandboxed and lacks the 'allow-presentation' flag."));
if (toDocument(getExecutionContext())->isSandboxed(SandboxPresentation)) {
resolver->reject(DOMException::create(SecurityError, "The document is sandboxed and lacks the 'allow-presentation' flag."));
return promise;
}
WebPresentationClient* client = presentationClient(getExecutionContext()); WebPresentationClient* client = presentationClient(getExecutionContext());
if (!client) { if (!client)
resolver->reject(DOMException::create(InvalidStateError, "The object is no longer associated to a frame.")); return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "The PresentationRequest is no longer associated to a frame."));
return promise;
} ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
client->getAvailability(m_url.getString(), new PresentationAvailabilityCallbacks(resolver, m_url)); client->getAvailability(m_url.getString(), new PresentationAvailabilityCallbacks(resolver, m_url));
return promise; return resolver->promise();
} }
const KURL& PresentationRequest::url() const const KURL& PresentationRequest::url() const
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment