Index: content/renderer/media/android/webmediaplayer_android.cc |
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc |
index b0142d3354e36703b8974422ee17a1254c8f8a90..d82138de7a7e9dbd5d847582a9979a139e30029e 100644 |
--- a/content/renderer/media/android/webmediaplayer_android.cc |
+++ b/content/renderer/media/android/webmediaplayer_android.cc |
@@ -177,8 +177,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
scoped_refptr<StreamTextureFactory> factory, |
int frame_id, |
const media::WebMediaPlayerParams& params) |
- : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), |
- frame_(frame), |
+ : frame_(frame), |
client_(client), |
encrypted_client_(encrypted_client), |
delegate_(delegate), |
@@ -218,6 +217,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
interpolator_(&default_tick_clock_), |
frame_id_(frame_id), |
suppress_deleting_texture_(false), |
+ playback_completed_(false), |
weak_factory_(this) { |
DCHECK(player_manager_); |
DCHECK(cdm_factory_); |
@@ -225,11 +225,14 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
stream_texture_factory_->AddObserver(this); |
+ if (delegate) |
+ delegate->AddObserver(this); |
+ |
player_id_ = player_manager_->RegisterMediaPlayer(this); |
#if defined(VIDEO_HOLE) |
const RendererPreferences& prefs = |
- static_cast<RenderFrameImpl*>(render_frame()) |
+ static_cast<RenderFrameImpl*>(RenderFrame::FromRoutingID(frame_id)) |
->render_view() |
->renderer_preferences(); |
force_use_overlay_embedded_video_ = prefs.use_view_overlay_for_all_video; |
@@ -443,6 +446,7 @@ void WebMediaPlayerAndroid::seek(double seconds) { |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
DVLOG(1) << __FUNCTION__ << "(" << seconds << ")"; |
+ playback_completed_ = false; |
base::TimeDelta new_seek_time = base::TimeDelta::FromSecondsD(seconds); |
if (seeking_) { |
@@ -843,6 +847,8 @@ void WebMediaPlayerAndroid::OnPlaybackComplete() { |
// playing after seek completes. |
if (seeking_ && seek_time_ == base::TimeDelta()) |
player_manager_->Start(player_id_); |
+ else |
+ playback_completed_ = true; |
} |
void WebMediaPlayerAndroid::OnBufferingUpdate(int percentage) { |
@@ -1108,12 +1114,6 @@ void WebMediaPlayerAndroid::SuspendAndReleaseResources() { |
SetNeedsEstablishPeer(true); |
} |
-void WebMediaPlayerAndroid::OnDestruct() { |
- NOTREACHED() << "WebMediaPlayer should be destroyed before any " |
- "RenderFrameObserver::OnDestruct() gets called when " |
- "the RenderFrame goes away."; |
-} |
- |
void WebMediaPlayerAndroid::InitializePlayer( |
const GURL& url, |
const GURL& first_party_for_cookies, |
@@ -1451,9 +1451,9 @@ void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) { |
if (delegate_) { |
if (is_playing) |
- delegate_->DidPlay(this); |
+ delegate_->DidPlay(this, hasVideo(), hasAudio(), isRemote(), duration_); |
else |
- delegate_->DidPause(this); |
+ delegate_->DidPause(this, playback_completed_); |
} |
} |
@@ -1835,6 +1835,20 @@ void WebMediaPlayerAndroid::OnWaitingForDecryptionKey() { |
encrypted_client_->didResumePlaybackBlockedForKey(); |
} |
+void WebMediaPlayerAndroid::OnHidden() {} |
+ |
+void WebMediaPlayerAndroid::OnShown() {} |
+ |
+void WebMediaPlayerAndroid::OnPlay() { |
+ play(); |
+ client_->playbackStateChanged(); |
+} |
+ |
+void WebMediaPlayerAndroid::OnPause() { |
+ pause(); |
+ client_->playbackStateChanged(); |
+} |
+ |
void WebMediaPlayerAndroid::OnCdmContextReady(media::CdmContext* cdm_context) { |
DCHECK(!cdm_context_); |