Index: content/renderer/media/renderer_webmediaplayer_delegate.cc |
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc |
index 722b13d5440a1cc0d068e1f9c85da73da4f6e79a..b21a9f5acc4ca0a836cebd2834503e9878f6a5c8 100644 |
--- a/content/renderer/media/renderer_webmediaplayer_delegate.cc |
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc |
@@ -18,28 +18,46 @@ RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate( |
RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {} |
-void RendererWebMediaPlayerDelegate::DidPlay(blink::WebMediaPlayer* player) { |
+// static |
+int64_t RendererWebMediaPlayerDelegate::GetPlayerId(Observer* observer) { |
+ return reinterpret_cast<int64_t>(observer); |
+} |
+ |
+void RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { |
+ observer_list_.AddObserver(observer); |
+} |
+ |
+void RendererWebMediaPlayerDelegate::RemoveObserver(Observer* observer) { |
+ observer_list_.RemoveObserver(observer); |
+} |
+ |
+void RendererWebMediaPlayerDelegate::DidPlay(Observer* observer, |
+ bool has_video, |
+ bool has_audio, |
+ bool is_remote, |
+ base::TimeDelta duration) { |
+ DCHECK(observer_list_.HasObserver(observer)); |
has_played_media_ = true; |
Send(new FrameHostMsg_MediaPlayingNotification( |
- routing_id(), reinterpret_cast<int64_t>(player), player->hasVideo(), |
- player->hasAudio(), player->isRemote())); |
+ routing_id(), GetPlayerId(observer), has_video, has_audio, is_remote, |
+ duration)); |
} |
-void RendererWebMediaPlayerDelegate::DidPause(blink::WebMediaPlayer* player) { |
+void RendererWebMediaPlayerDelegate::DidPause(Observer* observer, |
+ bool reached_end_of_stream) { |
+ DCHECK(observer_list_.HasObserver(observer)); |
Send(new FrameHostMsg_MediaPausedNotification( |
- routing_id(), reinterpret_cast<int64_t>(player))); |
+ routing_id(), GetPlayerId(observer), reached_end_of_stream)); |
} |
-void RendererWebMediaPlayerDelegate::PlayerGone(blink::WebMediaPlayer* player) { |
- DidPause(player); |
+void RendererWebMediaPlayerDelegate::PlayerGone(Observer* observer) { |
+ DCHECK(observer_list_.HasObserver(observer)); |
+ Send(new FrameHostMsg_MediaDestroyedNotification(routing_id(), |
+ GetPlayerId(observer))); |
} |
-void RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { |
- observer_list_.AddObserver(observer); |
-} |
- |
-void RendererWebMediaPlayerDelegate::RemoveObserver(Observer* observer) { |
- observer_list_.RemoveObserver(observer); |
+bool RendererWebMediaPlayerDelegate::IsHidden() { |
+ return render_frame()->IsHidden(); |
} |
void RendererWebMediaPlayerDelegate::WasHidden() { |
@@ -50,8 +68,51 @@ void RendererWebMediaPlayerDelegate::WasShown() { |
FOR_EACH_OBSERVER(Observer, observer_list_, OnShown()); |
} |
-bool RendererWebMediaPlayerDelegate::IsHidden() { |
- return render_frame()->IsHidden(); |
+bool RendererWebMediaPlayerDelegate::OnMessageReceived( |
+ const IPC::Message& msg) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(RendererWebMediaPlayerDelegate, msg) |
+ IPC_MESSAGE_HANDLER(FrameMsg_MediaDelegatePause, OnMediaDelegatePause) |
+ IPC_MESSAGE_HANDLER(FrameMsg_MediaDelegatePlay, OnMediaDelegatePlay) |
+ IPC_MESSAGE_HANDLER(FrameMsg_MediaDelegateVolumeMultiplierUpdate, |
+ OnMediaDelegateVolumeMultiplierUpdate) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
+bool RendererWebMediaPlayerDelegate::GetObserver(int64_t player_cookie, |
+ Observer** observer) { |
nasko
2016/01/22 17:28:32
Wouldn't returning a pointer to the observer be si
DaleCurtis
2016/01/23 02:11:00
Done.
|
+ // Translate the player cookie back to a Observer instance and make sure it's |
+ // still a valid instance. |
+ Observer* result = reinterpret_cast<Observer*>(player_cookie); |
nasko
2016/01/22 17:28:32
Using pointer values for cookies should not be don
DaleCurtis
2016/01/23 02:11:00
Done.
|
+ if (!observer_list_.HasObserver(result)) |
+ return false; |
+ |
+ *observer = result; |
+ return true; |
+} |
+ |
+void RendererWebMediaPlayerDelegate::OnMediaDelegatePause( |
+ int64_t player_cookie) { |
+ Observer* observer; |
+ if (GetObserver(player_cookie, &observer)) |
+ observer->OnPause(); |
+} |
+ |
+void RendererWebMediaPlayerDelegate::OnMediaDelegatePlay( |
+ int64_t player_cookie) { |
+ Observer* observer; |
+ if (GetObserver(player_cookie, &observer)) |
+ observer->OnPlay(); |
+} |
+ |
+void RendererWebMediaPlayerDelegate::OnMediaDelegateVolumeMultiplierUpdate( |
+ int64_t player_cookie, |
+ double multiplier) { |
+ Observer* observer; |
+ if (GetObserver(player_cookie, &observer)) |
+ observer->OnVolumeMultiplierUpdate(multiplier); |
} |
} // namespace media |