OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/renderer/media/renderer_webmediaplayer_delegate.h" | 5 #include "content/renderer/media/renderer_webmediaplayer_delegate.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "content/common/frame_messages.h" | 9 #include "content/common/frame_messages.h" |
10 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" | 10 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" |
11 | 11 |
12 namespace media { | 12 namespace media { |
13 | 13 |
14 RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate( | 14 RendererWebMediaPlayerDelegate::RendererWebMediaPlayerDelegate( |
15 content::RenderFrame* render_frame) | 15 content::RenderFrame* render_frame) |
16 : RenderFrameObserver(render_frame) {} | 16 : RenderFrameObserver(render_frame) {} |
17 | 17 |
18 RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {} | 18 RendererWebMediaPlayerDelegate::~RendererWebMediaPlayerDelegate() {} |
19 | 19 |
20 void RendererWebMediaPlayerDelegate::DidPlay(blink::WebMediaPlayer* player) { | 20 void RendererWebMediaPlayerDelegate::DidPlay(blink::WebMediaPlayer* player) { |
21 has_played_media_ = true; | 21 has_played_media_ = true; |
| 22 players_.insert(player); |
22 Send(new FrameHostMsg_MediaPlayingNotification( | 23 Send(new FrameHostMsg_MediaPlayingNotification( |
23 routing_id(), reinterpret_cast<int64_t>(player), player->hasVideo(), | 24 routing_id(), reinterpret_cast<int64_t>(player), player->hasVideo(), |
24 player->hasAudio(), player->isRemote())); | 25 player->hasAudio(), player->isRemote(), |
| 26 base::TimeDelta::FromSecondsD(player->duration()))); |
25 } | 27 } |
26 | 28 |
27 void RendererWebMediaPlayerDelegate::DidPause(blink::WebMediaPlayer* player) { | 29 void RendererWebMediaPlayerDelegate::DidPause(blink::WebMediaPlayer* player) { |
| 30 DCHECK_EQ(players_.count(player), 1u); |
28 Send(new FrameHostMsg_MediaPausedNotification( | 31 Send(new FrameHostMsg_MediaPausedNotification( |
| 32 routing_id(), reinterpret_cast<int64_t>(player), |
| 33 player->currentTime() >= player->duration())); |
| 34 } |
| 35 |
| 36 void RendererWebMediaPlayerDelegate::PlayerGone(blink::WebMediaPlayer* player) { |
| 37 // No player may exist, so this might be a no-op. |
| 38 players_.erase(player); |
| 39 Send(new FrameHostMsg_MediaDestroyedNotification( |
29 routing_id(), reinterpret_cast<int64_t>(player))); | 40 routing_id(), reinterpret_cast<int64_t>(player))); |
30 } | 41 } |
31 | 42 |
32 void RendererWebMediaPlayerDelegate::PlayerGone(blink::WebMediaPlayer* player) { | |
33 DidPause(player); | |
34 } | |
35 | |
36 void RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { | 43 void RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { |
37 observer_list_.AddObserver(observer); | 44 observer_list_.AddObserver(observer); |
38 } | 45 } |
39 | 46 |
40 void RendererWebMediaPlayerDelegate::RemoveObserver(Observer* observer) { | 47 void RendererWebMediaPlayerDelegate::RemoveObserver(Observer* observer) { |
41 observer_list_.RemoveObserver(observer); | 48 observer_list_.RemoveObserver(observer); |
42 } | 49 } |
43 | 50 |
44 void RendererWebMediaPlayerDelegate::WasHidden() { | 51 void RendererWebMediaPlayerDelegate::WasHidden() { |
45 FOR_EACH_OBSERVER(Observer, observer_list_, OnHidden()); | 52 FOR_EACH_OBSERVER(Observer, observer_list_, OnHidden()); |
46 } | 53 } |
47 | 54 |
48 void RendererWebMediaPlayerDelegate::WasShown() { | 55 void RendererWebMediaPlayerDelegate::WasShown() { |
49 FOR_EACH_OBSERVER(Observer, observer_list_, OnShown()); | 56 FOR_EACH_OBSERVER(Observer, observer_list_, OnShown()); |
50 } | 57 } |
51 | 58 |
| 59 bool RendererWebMediaPlayerDelegate::OnMessageReceived( |
| 60 const IPC::Message& msg) { |
| 61 bool handled = true; |
| 62 IPC_BEGIN_MESSAGE_MAP(RendererWebMediaPlayerDelegate, msg) |
| 63 IPC_MESSAGE_HANDLER(FrameMsg_MediaDelegatePause, OnMediaDelegatePause) |
| 64 IPC_MESSAGE_HANDLER(FrameMsg_MediaDelegatePlay, OnMediaDelegatePlay) |
| 65 IPC_MESSAGE_UNHANDLED(handled = false) |
| 66 IPC_END_MESSAGE_MAP() |
| 67 return handled; |
| 68 } |
| 69 |
| 70 void RendererWebMediaPlayerDelegate::OnMediaDelegatePause( |
| 71 int64_t player_cookie) { |
| 72 // Translate the player cookie back to a WebMediaPlayer instance and make sure |
| 73 // it's still a valid instance. |
| 74 blink::WebMediaPlayer* player = |
| 75 reinterpret_cast<blink::WebMediaPlayer*>(player_cookie); |
| 76 if (players_.find(player) == players_.end()) |
| 77 return; |
| 78 player->pause(); |
| 79 } |
| 80 |
| 81 void RendererWebMediaPlayerDelegate::OnMediaDelegatePlay( |
| 82 int64_t player_cookie) { |
| 83 // Translate the player cookie back to a WebMediaPlayer instance and make sure |
| 84 // it's still a valid instance. |
| 85 blink::WebMediaPlayer* player = |
| 86 reinterpret_cast<blink::WebMediaPlayer*>(player_cookie); |
| 87 if (players_.find(player) == players_.end()) |
| 88 return; |
| 89 player->play(); |
| 90 } |
| 91 |
52 } // namespace media | 92 } // namespace media |
OLD | NEW |