Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Unified Diff: content/renderer/media/android/media_source_delegate.cc

Issue 605013002: Refactor MediaSourceDelegate destruction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mp4_stream_parser_hack
Patch Set: comments addressed Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/android/media_source_delegate.cc
diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc
index 6b1f206e07a1abdf6893c53ee123a5781bdbbccf..5f2b64bcc7b0c54e14bc8db42da5b719da2b4e85 100644
--- a/content/renderer/media/android/media_source_delegate.cc
+++ b/content/renderer/media/android/media_source_delegate.cc
@@ -81,13 +81,12 @@ MediaSourceDelegate::~MediaSourceDelegate() {
DCHECK(!video_stream_);
}
-void MediaSourceDelegate::Destroy() {
+void MediaSourceDelegate::Stop(const base::Closure& stop_cb) {
DCHECK(main_task_runner_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
if (!chunk_demuxer_) {
DCHECK(!demuxer_client_);
- delete this;
return;
}
@@ -100,12 +99,11 @@ void MediaSourceDelegate::Destroy() {
chunk_demuxer_->Shutdown();
- // |this| will be transferred to the callback StopDemuxer() and
- // OnDemuxerStopDone(). They own |this| and OnDemuxerStopDone() will delete
- // it when called, hence using base::Unretained(this) is safe here.
- media_task_runner_->PostTask(FROM_HERE,
- base::Bind(&MediaSourceDelegate::StopDemuxer,
- base::Unretained(this)));
+ // Continue to stop objects on the media thread.
+ media_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(
+ &MediaSourceDelegate::StopDemuxer, base::Unretained(this), stop_cb));
}
bool MediaSourceDelegate::IsVideoEncrypted() {
@@ -122,7 +120,8 @@ base::Time MediaSourceDelegate::GetTimelineOffset() const {
return chunk_demuxer_->GetTimelineOffset();
}
-void MediaSourceDelegate::StopDemuxer() {
+void MediaSourceDelegate::StopDemuxer(const base::Closure& stop_cb) {
+ DVLOG(2) << __FUNCTION__;
DCHECK(media_task_runner_->BelongsToCurrentThread());
DCHECK(chunk_demuxer_);
@@ -142,11 +141,9 @@ void MediaSourceDelegate::StopDemuxer() {
chunk_demuxer_->Stop();
chunk_demuxer_.reset();
- // The callback DeleteSelf() owns |this| and will delete it when called.
- // Hence using base::Unretained(this) is safe here.
- media_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&MediaSourceDelegate::DeleteSelf, base::Unretained(this)));
+ // |this| may be destroyed at this point in time as a result of running
+ // |stop_cb|.
+ stop_cb.Run();
}
void MediaSourceDelegate::InitializeMediaSource(
@@ -630,12 +627,6 @@ void MediaSourceDelegate::FinishResettingDecryptingDemuxerStreams() {
demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_);
}
-void MediaSourceDelegate::DeleteSelf() {
- DCHECK(main_task_runner_->BelongsToCurrentThread());
- DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
- delete this;
-}
-
void MediaSourceDelegate::NotifyDemuxerReady() {
DCHECK(media_task_runner_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
« no previous file with comments | « content/renderer/media/android/media_source_delegate.h ('k') | content/renderer/media/android/webmediaplayer_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698