Commit 2c6d1ac4 authored by Zhiqiang Zhang's avatar Zhiqiang Zhang Committed by Commit Bot

[Android MR] Fix a crasher when registering/unregistering callback

The crasher happens when the session is connected/disconnected. The code
registers/unregisters RemoteMediaClient callback upon
connecting/disconnecting. However it should check the availability of
RemoteMediaClient of the current session.

Bug: 711860
Change-Id: Ie4b29f507a0044ac8649b52b37f1541e4dc9b4ee
Reviewed-on: https://chromium-review.googlesource.com/c/1350211
Commit-Queue: Zhiqiang Zhang <zqzhang@chromium.org>
Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611030}
parent cb43d716
......@@ -128,14 +128,20 @@ public class BaseSessionController {
/** Attaches the controller to the current {@link CastSession}. */
public void attachToCastSession(CastSession session) {
mCastSession = session;
getRemoteMediaClient().registerCallback(mRemoteMediaClientCallback);
RemoteMediaClient uncheckedRemoteMediaClient = mCastSession.getRemoteMediaClient();
if (uncheckedRemoteMediaClient != null) {
uncheckedRemoteMediaClient.registerCallback(mRemoteMediaClientCallback);
}
}
/** Detaches the controller from any {@link CastSession}. */
public void detachFromCastSession() {
if (mCastSession == null) return;
getRemoteMediaClient().unregisterCallback(mRemoteMediaClientCallback);
RemoteMediaClient uncheckedRemoteMediaClient = mCastSession.getRemoteMediaClient();
if (uncheckedRemoteMediaClient != null) {
uncheckedRemoteMediaClient.unregisterCallback(mRemoteMediaClientCallback);
}
mCastSession = null;
}
......
......@@ -14,6 +14,7 @@ import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
......@@ -32,6 +33,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
......@@ -167,13 +169,27 @@ public class BaseSessionControllerTest {
@Test
public void testSessionAttachment() {
InOrder inOrder = inOrder(mRemoteMediaClient);
mController.attachToCastSession(mCastSession);
assertSame(mController.getSession(), mCastSession);
inOrder.verify(mRemoteMediaClient).registerCallback(any(RemoteMediaClient.Callback.class));
mController.detachFromCastSession();
assertNull(mController.getSession());
inOrder.verify(mRemoteMediaClient)
.unregisterCallback(any(RemoteMediaClient.Callback.class));
// Attaching/detaching while the session is disconnected.
doReturn(false).when(mCastSession).isConnected();
mController.attachToCastSession(mCastSession);
assertSame(mController.getSession(), mCastSession);
verify(mRemoteMediaClient).registerCallback(any(RemoteMediaClient.Callback.class));
inOrder.verify(mRemoteMediaClient).registerCallback(any(RemoteMediaClient.Callback.class));
mController.detachFromCastSession();
assertNull(mController.getSession());
verify(mRemoteMediaClient).unregisterCallback(any(RemoteMediaClient.Callback.class));
inOrder.verify(mRemoteMediaClient)
.unregisterCallback(any(RemoteMediaClient.Callback.class));
}
@Test
......
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