| Index: Source/modules/presentation/Presentation.cpp
|
| diff --git a/Source/modules/presentation/Presentation.cpp b/Source/modules/presentation/Presentation.cpp
|
| index 1dd3bcc41dd3e792cab64a91641207d2469fa8f3..6213d4f13505572dec88ee06057941372f2fe0df 100644
|
| --- a/Source/modules/presentation/Presentation.cpp
|
| +++ b/Source/modules/presentation/Presentation.cpp
|
| @@ -15,6 +15,7 @@
|
| #include "modules/EventTargetModules.h"
|
| #include "modules/presentation/AvailableChangeEvent.h"
|
| #include "modules/presentation/PresentationController.h"
|
| +#include "modules/presentation/PresentationSessionClientCallbacks.h"
|
|
|
| namespace blink {
|
|
|
| @@ -52,6 +53,7 @@ ExecutionContext* Presentation::executionContext() const
|
| DEFINE_TRACE(Presentation)
|
| {
|
| visitor->trace(m_session);
|
| + visitor->trace(m_openSessions);
|
| RefCountedGarbageCollectedEventTargetWithInlineData<Presentation>::trace(visitor);
|
| DOMWindowProperty::trace(visitor);
|
| }
|
| @@ -65,7 +67,14 @@ ScriptPromise Presentation::startSession(ScriptState* state, const String& prese
|
| {
|
| RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(state);
|
| ScriptPromise promise = resolver->promise();
|
| - resolver->reject(DOMException::create(NotSupportedError, "The method is not supported yet."));
|
| +
|
| + PresentationController* controller = presentationController();
|
| + if (!controller) {
|
| + resolver->reject(DOMException::create(InvalidStateError, "The object is no longer attached to the frame."));
|
| + return promise;
|
| + }
|
| + controller->startSession(presentationUrl, presentationId, new PresentationSessionClientCallbacks(resolver, this));
|
| +
|
| return promise;
|
| }
|
|
|
| @@ -73,7 +82,14 @@ ScriptPromise Presentation::joinSession(ScriptState* state, const String& presen
|
| {
|
| RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(state);
|
| ScriptPromise promise = resolver->promise();
|
| - resolver->reject(DOMException::create(NotSupportedError, "The method is not supported yet."));
|
| +
|
| + PresentationController* controller = presentationController();
|
| + if (!controller) {
|
| + resolver->reject(DOMException::create(InvalidStateError, "The object is no longer attached to the frame."));
|
| + return promise;
|
| + }
|
| + controller->joinSession(presentationUrl, presentationId, new PresentationSessionClientCallbacks(resolver, this));
|
| +
|
| return promise;
|
| }
|
|
|
| @@ -129,6 +145,11 @@ bool Presentation::isAvailableChangeWatched() const
|
| return hasEventListeners(EventTypeNames::availablechange);
|
| }
|
|
|
| +void Presentation::registerSession(PresentationSession* session)
|
| +{
|
| + m_openSessions.add(session);
|
| +}
|
| +
|
| PresentationController* Presentation::presentationController()
|
| {
|
| if (!frame())
|
|
|