| 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 5d7769a455490c3c7a302398365645b192ca72d4..22abbade2bcdcd31ceb5b601496923660c435c85 100644
|
| --- a/content/renderer/media/android/webmediaplayer_android.cc
|
| +++ b/content/renderer/media/android/webmediaplayer_android.cc
|
| @@ -97,6 +97,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
|
| demuxer_(NULL),
|
| media_stream_client_(NULL),
|
| #endif // defined(GOOGLE_TV)
|
| + pending_playback_(false),
|
| player_type_(MEDIA_PLAYER_TYPE_URL),
|
| proxy_(proxy),
|
| current_time_(0),
|
| @@ -587,6 +588,15 @@ void WebMediaPlayerAndroid::OnPlaybackComplete() {
|
| // current time to media duration when OnPlaybackComplete() get called.
|
| OnTimeUpdate(duration_);
|
| client_->timeChanged();
|
| +
|
| + // if the loop attribute is set, timeChanged() will update the current time
|
| + // to 0. It will perform a seek to 0. As the requests to the renderer
|
| + // process are sequential, the OnSeekCompelete() will only occur
|
| + // once OnPlaybackComplete() is done. As the playback can only be executed
|
| + // upon completion of OnSeekComplete(), the request needs to be saved.
|
| + is_playing_ = false;
|
| + if (seeking_ && pending_seek_ == 0)
|
| + pending_playback_ = true;
|
| }
|
|
|
| void WebMediaPlayerAndroid::OnBufferingUpdate(int percentage) {
|
| @@ -602,6 +612,11 @@ void WebMediaPlayerAndroid::OnSeekComplete(base::TimeDelta current_time) {
|
| UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
|
|
|
| client_->timeChanged();
|
| +
|
| + if (pending_playback_) {
|
| + play();
|
| + pending_playback_ = false;
|
| + }
|
| }
|
|
|
| void WebMediaPlayerAndroid::OnMediaError(int error_type) {
|
|
|