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

Unified Diff: webkit/media/android/media_source_delegate.h

Issue 15754004: Fix various MediaSource related crashes on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 7 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: webkit/media/android/media_source_delegate.h
diff --git a/webkit/media/android/media_source_delegate.h b/webkit/media/android/media_source_delegate.h
index b0639250f59cb3923390f6d6c908e8857ee681f1..46184fde18d820492ce41309350949b26d4e242f 100644
--- a/webkit/media/android/media_source_delegate.h
+++ b/webkit/media/android/media_source_delegate.h
@@ -39,13 +39,21 @@ class MediaSourceDelegate : public media::DemuxerHost {
typedef base::Callback<void(WebKit::WebMediaPlayer::NetworkState)>
UpdateNetworkStateCB;
+ // Helper class used by scoped_ptr to destroy an instance of
+ // MediaSourceDelegate.
+ class Destroyer {
+ public:
+ inline void operator()(void* x) const {
qinmin 2013/05/22 18:51:24 nit: s/x/media_source_delegate/
acolwell GONE FROM CHROMIUM 2013/05/22 19:12:09 Done.
+ MediaSourceDelegate* delegate = static_cast<MediaSourceDelegate*>(x);
+ delegate->Destroy();
+ }
+ };
+
MediaSourceDelegate(WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
WebMediaPlayerProxyAndroid* proxy,
int player_id,
media::MediaLog* media_log);
- virtual ~MediaSourceDelegate();
-
// Initialize the MediaSourceDelegate. |media_source| will be owned by
// this object after this call.
void Initialize(WebKit::WebMediaSource* media_source,
@@ -79,6 +87,14 @@ class MediaSourceDelegate : public media::DemuxerHost {
void OnReadFromDemuxer(media::DemuxerStream::Type type, bool seek_done);
private:
+ friend Destroyer;
+
+ // This is private to enforce use of the Destroyer.
+ virtual ~MediaSourceDelegate();
+
+ // Called by the Destroyer to destroy an instance of this object.
+ void Destroy();
+
// Methods inherited from DemuxerHost.
virtual void SetTotalBytes(int64 total_bytes) OVERRIDE;
virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE;
@@ -89,6 +105,7 @@ class MediaSourceDelegate : public media::DemuxerHost {
// Callbacks for ChunkDemuxer & Decryptor.
void OnDemuxerInitDone(media::PipelineStatus status);
+ void OnDemuxerStopDone();
void OnDemuxerOpened();
void OnKeyAdded(const std::string& key_system, const std::string& session_id);
void OnKeyError(const std::string& key_system,
@@ -123,7 +140,7 @@ class MediaSourceDelegate : public media::DemuxerHost {
base::WeakPtrFactory<MediaSourceDelegate> weak_this_;
- WebKit::WebMediaPlayerClient* const client_;
+ WebKit::WebMediaPlayerClient* client_;
WebMediaPlayerProxyAndroid* proxy_;
int player_id_;
@@ -159,4 +176,3 @@ class MediaSourceDelegate : public media::DemuxerHost {
} // namespace webkit_media
#endif // WEBKIT_MEDIA_ANDROID_MEDIA_SOURCE_DELEGATE_H_
-

Powered by Google App Engine
This is Rietveld 408576698