Chromium Code Reviews| 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 |