Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: Source/modules/presentation/Presentation.cpp

Issue 832263007: Added plumbing for the availablechange event from Blink to WebPresentationClient. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added isAvailableChangeWatched Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "modules/presentation/Presentation.h" 6 #include "modules/presentation/Presentation.h"
7 7
8 #include "bindings/core/v8/ScriptPromise.h" 8 #include "bindings/core/v8/ScriptPromise.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h" 9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "bindings/core/v8/ScriptState.h" 10 #include "bindings/core/v8/ScriptState.h"
11 #include "core/dom/DOMException.h" 11 #include "core/dom/DOMException.h"
12 #include "core/dom/Document.h"
12 #include "core/dom/ExceptionCode.h" 13 #include "core/dom/ExceptionCode.h"
14 #include "core/frame/LocalFrame.h"
13 #include "modules/EventTargetModules.h" 15 #include "modules/EventTargetModules.h"
16 #include "modules/presentation/AvailableChangeEvent.h"
17 #include "modules/presentation/PresentationController.h"
14 18
15 namespace blink { 19 namespace blink {
16 20
17 Presentation::Presentation(ExecutionContext* executionContext) 21 Presentation::Presentation(LocalFrame* frame)
18 : ContextLifecycleObserver(executionContext) 22 : FrameDestructionObserver(frame)
19 { 23 {
20 } 24 }
21 25
22 Presentation::~Presentation() 26 Presentation::~Presentation()
23 { 27 {
24 } 28 }
25 29
26 // static 30 // static
27 Presentation* Presentation::create(ExecutionContext* executionContext) 31 Presentation* Presentation::create(LocalFrame* frame)
28 { 32 {
29 return new Presentation(executionContext); 33 Presentation* presentation = new Presentation(frame);
34 PresentationController* controller = presentation->presentationController();
35 if (controller)
36 controller->setPresentation(presentation);
37 return presentation;
30 } 38 }
31 39
32 const AtomicString& Presentation::interfaceName() const 40 const AtomicString& Presentation::interfaceName() const
33 { 41 {
34 return EventTargetNames::Presentation; 42 return EventTargetNames::Presentation;
35 } 43 }
36 44
37 ExecutionContext* Presentation::executionContext() const 45 ExecutionContext* Presentation::executionContext() const
38 { 46 {
39 return ContextLifecycleObserver::executionContext(); 47 if (!frame())
48 return nullptr;
49 return frame()->document();
40 } 50 }
41 51
42 void Presentation::trace(Visitor* visitor) 52 void Presentation::trace(Visitor* visitor)
43 { 53 {
44 visitor->trace(m_session); 54 visitor->trace(m_session);
45 RefCountedGarbageCollectedEventTargetWithInlineData<Presentation>::trace(vis itor); 55 RefCountedGarbageCollectedEventTargetWithInlineData<Presentation>::trace(vis itor);
46 ContextLifecycleObserver::trace(visitor); 56 FrameDestructionObserver::trace(visitor);
47 } 57 }
48 58
49 PresentationSession* Presentation::session() const 59 PresentationSession* Presentation::session() const
50 { 60 {
51 return m_session.get(); 61 return m_session.get();
52 } 62 }
53 63
54 ScriptPromise Presentation::startSession(ScriptState* state, const String& sende rId, const String& presentationId) 64 ScriptPromise Presentation::startSession(ScriptState* state, const String& sende rId, const String& presentationId)
55 { 65 {
56 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(state); 66 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(state);
57 ScriptPromise promise = resolver->promise(); 67 ScriptPromise promise = resolver->promise();
58 resolver->reject(DOMException::create(NotSupportedError, "The method is not supported yet.")); 68 resolver->reject(DOMException::create(NotSupportedError, "The method is not supported yet."));
59 return promise; 69 return promise;
60 } 70 }
61 71
62 ScriptPromise Presentation::joinSession(ScriptState* state, const String& sender Id, const String& presentationId) 72 ScriptPromise Presentation::joinSession(ScriptState* state, const String& sender Id, const String& presentationId)
63 { 73 {
64 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(state); 74 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(state);
65 ScriptPromise promise = resolver->promise(); 75 ScriptPromise promise = resolver->promise();
66 resolver->reject(DOMException::create(NotSupportedError, "The method is not supported yet.")); 76 resolver->reject(DOMException::create(NotSupportedError, "The method is not supported yet."));
67 return promise; 77 return promise;
68 } 78 }
69 79
80 bool Presentation::addEventListener(const AtomicString& eventType, PassRefPtr<Ev entListener> listener, bool useCapture)
81 {
82 bool hadEventListeners = hasEventListeners(EventTypeNames::availablechange);
83 if (!RefCountedGarbageCollectedEventTargetWithInlineData<Presentation>::addE ventListener(eventType, listener, useCapture))
84 return false;
85
86 if (hasEventListeners(EventTypeNames::availablechange) && !hadEventListeners ) {
87 PresentationController* controller = presentationController();
88 if (controller)
89 controller->updateAvailableChangeWatched(true);
90 }
91
92 return true;
93 }
94
95 bool Presentation::removeEventListener(const AtomicString& eventType, PassRefPtr <EventListener> listener, bool useCapture)
96 {
97 bool hadEventListeners = hasEventListeners(EventTypeNames::availablechange);
98 if (!RefCountedGarbageCollectedEventTargetWithInlineData<Presentation>::remo veEventListener(eventType, listener, useCapture))
99 return false;
100
101 if (hadEventListeners && !hasEventListeners(EventTypeNames::availablechange) ) {
102 PresentationController* controller = presentationController();
103 if (controller)
104 controller->updateAvailableChangeWatched(false);
105 }
106
107 return true;
108 }
109
110 void Presentation::removeAllEventListeners()
111 {
112 bool hadEventListeners = hasEventListeners(EventTypeNames::availablechange);
113 RefCountedGarbageCollectedEventTargetWithInlineData<Presentation>::removeAll EventListeners();
114
115 if (hadEventListeners) {
116 PresentationController* controller = presentationController();
117 if (controller)
118 controller->updateAvailableChangeWatched(false);
119 }
120 }
121
122 void Presentation::didChangeAvailability(bool available)
123 {
124 dispatchEvent(AvailableChangeEvent::create(EventTypeNames::availablechange, available));
125 }
126
127 bool Presentation::isAvailableChangeWatched() const
128 {
129 return hasEventListeners(EventTypeNames::availablechange);
130 }
131
132 PresentationController* Presentation::presentationController()
133 {
134 if (!frame())
135 return nullptr;
136 return PresentationController::from(*frame());
137 }
138
70 } // namespace blink 139 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698