Commit 90dcab05 authored by zqzhang's avatar zqzhang Committed by Commit bot

Fixing MediaSessionDelegateAndroid referencing destroyed MediaSession

There's a crash caused by asynchronous audio focus events.
MediaSessionDelegate may receive audio focus change signals after
MediaSession::~MediaSession is called. This CL adds checks to see if the
native MediaSession is destroyed before calling it's methods.

BUG=624208

Review-Url: https://codereview.chromium.org/2111163002
Cr-Commit-Position: refs/heads/master@{#403180}
parent cf04606c
......@@ -34,8 +34,9 @@ public class MediaSessionDelegate implements AudioManager.OnAudioFocusChangeList
private int mFocusType;
private boolean mIsDucking = false;
// Native pointer to C++ content::MediaSessionAndroid.
private final long mNativeMediaSessionDelegateAndroid;
// Native pointer to C++ content::MediaSessionDelegateAndroid.
// It will be set to 0 when the native MediaSessionDelegateAndroid object is destroyed.
private long mNativeMediaSessionDelegateAndroid;
private MediaSessionDelegate(final Context context, long nativeMediaSessionDelegateAndroid) {
mContext = context;
......@@ -51,6 +52,7 @@ public class MediaSessionDelegate implements AudioManager.OnAudioFocusChangeList
@CalledByNative
private void tearDown() {
abandonAudioFocus();
mNativeMediaSessionDelegateAndroid = 0;
}
@CalledByNative
......@@ -75,6 +77,8 @@ public class MediaSessionDelegate implements AudioManager.OnAudioFocusChangeList
@Override
public void onAudioFocusChange(int focusChange) {
if (mNativeMediaSessionDelegateAndroid == 0) return;
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (mIsDucking) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment