Index: media/blink/webmediaplayer_cast_android.cc |
diff --git a/media/blink/webmediaplayer_cast_android.cc b/media/blink/webmediaplayer_cast_android.cc |
index fc3de1cf4a06cdf704c9f428d6b36a2ef4cffd78..7f827f3ab8eae4a6809f70f006e6f80f5c528755 100644 |
--- a/media/blink/webmediaplayer_cast_android.cc |
+++ b/media/blink/webmediaplayer_cast_android.cc |
@@ -177,7 +177,7 @@ void WebMediaPlayerCast::Initialize(const GURL& url, |
blink::WebLocalFrame* frame) { |
player_manager_->Initialize(MEDIA_PLAYER_TYPE_REMOTE_ONLY, player_id_, url, |
frame->document().firstPartyForCookies(), 0, |
- frame->document().url(), true); |
+ frame->document().url(), true, webmediaplayer_); |
is_player_initialized_ = true; |
} |
@@ -200,7 +200,9 @@ void WebMediaPlayerCast::requestRemotePlaybackControl() { |
void WebMediaPlayerCast::OnMediaMetadataChanged(base::TimeDelta duration, |
int width, |
int height, |
- bool success) {} |
+ bool success) { |
+ duration_ = duration; |
+} |
void WebMediaPlayerCast::OnPlaybackComplete() { |
DVLOG(1) << __FUNCTION__; |
@@ -249,8 +251,10 @@ void WebMediaPlayerCast::OnConnectedToRemoteDevice( |
is_remote_ = true; |
initializing_ = true; |
paused_ = false; |
- if (delegate_) |
- delegate_->DidPlay(webmediaplayer_); |
+ if (delegate_) { |
+ delegate_->DidPlay(webmediaplayer_, hasVideo(), false, is_remote_, |
+ GetDuration()); |
+ } |
client_->playbackStateChanged(); |
remote_playback_message_ = remote_playback_message; |
@@ -273,8 +277,10 @@ void WebMediaPlayerCast::play() { |
player_manager_->Start(player_id_); |
remote_time_at_ = base::TimeTicks::Now(); |
paused_ = false; |
- if (delegate_) |
- delegate_->DidPlay(webmediaplayer_); |
+ if (delegate_) { |
+ delegate_->DidPlay(webmediaplayer_, hasVideo(), false, is_remote_, |
+ GetDuration()); |
+ } |
} |
void WebMediaPlayerCast::pause() { |
@@ -291,7 +297,7 @@ void WebMediaPlayerCast::OnDisconnectedFromRemoteDevice() { |
if (!paused_) { |
paused_ = true; |
if (delegate_) |
- delegate_->DidPause(webmediaplayer_); |
+ delegate_->DidPause(webmediaplayer_, false); |
} |
is_remote_ = false; |
double t = currentTime(); |
@@ -310,8 +316,10 @@ void WebMediaPlayerCast::OnMediaPlayerPlay() { |
initializing_ = false; |
if (is_remote_ && paused_) { |
paused_ = false; |
- if (paused_) |
- delegate_->DidPlay(webmediaplayer_); |
+ if (delegate_) { |
+ delegate_->DidPlay(webmediaplayer_, hasVideo(), false, is_remote_, |
+ GetDuration()); |
+ } |
remote_time_at_ = base::TimeTicks::Now(); |
client_->playbackStateChanged(); |
} |
@@ -325,7 +333,7 @@ void WebMediaPlayerCast::OnMediaPlayerPause() { |
if (is_remote_ && !paused_) { |
paused_ = true; |
if (delegate_) |
- delegate_->DidPause(webmediaplayer_); |
+ delegate_->DidPause(webmediaplayer_, false); |
client_->playbackStateChanged(); |
} |
} |
@@ -385,4 +393,12 @@ scoped_refptr<VideoFrame> WebMediaPlayerCast::GetCastingBanner() { |
base::Bind(&GLCBShim, context_3d_cb_)); |
} |
+base::TimeDelta WebMediaPlayerCast::GetDuration() { |
+ const double duration = webmediaplayer_->duration(); |
+ if (duration == std::numeric_limits<double>::infinity()) |
+ return kInfiniteDuration(); |
+ |
+ return std::max(duration_, base::TimeDelta::FromSecondsD(duration)); |
+} |
+ |
} // namespace media |