Index: third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h |
diff --git a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h |
index a1b3e7dbee4b51e52607ecd546d791292a0244f6..c356d970883563437b0a8a926f29b5b953533f4f 100644 |
--- a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h |
+++ b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h |
@@ -7,6 +7,7 @@ |
#include "bindings/core/v8/ActiveScriptWrappable.h" |
#include "bindings/core/v8/ScriptPromise.h" |
+#include "bindings/core/v8/ScriptState.h" |
#include "core/events/EventTarget.h" |
#include "modules/ModulesExport.h" |
#include "platform/heap/Handle.h" |
@@ -21,7 +22,7 @@ namespace blink { |
class ExecutionContext; |
class HTMLMediaElement; |
class LocalFrame; |
-class RemotePlaybackAvailability; |
+class RemotePlaybackAvailabilityCallback; |
class ScriptPromiseResolver; |
class MODULES_EXPORT RemotePlayback final |
@@ -32,14 +33,27 @@ class MODULES_EXPORT RemotePlayback final |
USING_GARBAGE_COLLECTED_MIXIN(RemotePlayback); |
public: |
- static RemotePlayback* create(HTMLMediaElement&); |
+ static RemotePlayback* create(ScriptState*, HTMLMediaElement&); |
// EventTarget implementation. |
const WTF::AtomicString& interfaceName() const override; |
ExecutionContext* getExecutionContext() const override; |
- ScriptPromise getAvailability(ScriptState*); |
- ScriptPromise prompt(ScriptState*); |
+ // Starts notifying the page about the changes to the remote playback devices |
+ // availability via the provided callback. May start the monitoring of remote |
+ // playback devices if it isn't running yet. |
+ ScriptPromise watchAvailability(RemotePlaybackAvailabilityCallback*); |
+ |
+ // Cancels updating the page via the callback specified by its id. |
+ ScriptPromise cancelWatchAvailability(int id); |
+ |
+ // Cancels all the callbacks watching remote playback availability changes |
+ // registered with this element. |
+ ScriptPromise cancelWatchAvailability(); |
+ |
+ // Shows the UI allowing user to change the remote playback state of the media |
+ // element (by picking a remote playback device from the list, for example). |
+ ScriptPromise prompt(); |
String state() const; |
@@ -53,18 +67,31 @@ class MODULES_EXPORT RemotePlayback final |
DECLARE_VIRTUAL_TRACE(); |
private: |
+ friend class V8RemotePlayback; |
friend class RemotePlaybackTest; |
- explicit RemotePlayback(HTMLMediaElement&); |
+ explicit RemotePlayback(ScriptState*, HTMLMediaElement&); |
+ |
+ // Calls the specified availability callback with the current availability. |
+ // Need a void() method to post it as a task. |
+ void notifyInitialAvailability(int callbackId); |
// WebRemotePlaybackClient implementation. |
void stateChanged(WebRemotePlaybackState) override; |
void availabilityChanged(bool available) override; |
void promptCancelled() override; |
+ // Prevent v8 from garbage collecting the availability callbacks. |
+ // TODO(avayvod): remove when crbug.com/468240 is fixed and the references |
+ // are maintained automatically. |
+ void setV8ReferencesForCallbacks(v8::Isolate*, |
+ const v8::Persistent<v8::Object>& wrapper); |
+ |
+ RefPtr<ScriptState> m_scriptState; |
WebRemotePlaybackState m_state; |
bool m_availability; |
- HeapVector<Member<RemotePlaybackAvailability>> m_availabilityObjects; |
+ HeapHashMap<int, Member<RemotePlaybackAvailabilityCallback>> |
+ m_availabilityCallbacks; |
Member<HTMLMediaElement> m_mediaElement; |
Member<ScriptPromiseResolver> m_promptPromiseResolver; |
}; |