Commit e9602c3f authored by Alice Wang's avatar Alice Wang Committed by Commit Bot

[Android][WebSignIn] Destroy WebSigninBridge in onSigninFailed

This CL destroys the WebSigninBridge object when signin failed and adds
tests for it.

Bug: 1117471
Change-Id: I5f8ead25dd03f6f863782ec039b7d84abae3e46d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2366933Reviewed-by: default avatarTanmoy Mollik <triploblastic@chromium.org>
Commit-Queue: Alice Wang <aliceywang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800202}
parent 2576e02f
...@@ -133,9 +133,12 @@ public class AccountPickerDelegate implements WebSigninBridge.Listener { ...@@ -133,9 +133,12 @@ public class AccountPickerDelegate implements WebSigninBridge.Listener {
* *
* @param error Details about the error that occurred in the sign-in process. * @param error Details about the error that occurred in the sign-in process.
*/ */
@MainThread
@Override @Override
public void onSigninFailed(GoogleServiceAuthError error) { public void onSigninFailed(GoogleServiceAuthError error) {
ThreadUtils.assertOnUiThread();
mOnSignInErrorCallback.onResult(error); mOnSignInErrorCallback.onResult(error);
destroyWebSigninBridge();
} }
private void destroyWebSigninBridge() { private void destroyWebSigninBridge() {
......
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.signin.account_picker; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.signin.account_picker;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
...@@ -27,6 +28,7 @@ import org.mockito.Captor; ...@@ -27,6 +28,7 @@ import org.mockito.Captor;
import org.mockito.InOrder; import org.mockito.InOrder;
import org.mockito.Mock; import org.mockito.Mock;
import org.chromium.base.Callback;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
...@@ -35,6 +37,8 @@ import org.chromium.chrome.browser.signin.SigninManager; ...@@ -35,6 +37,8 @@ import org.chromium.chrome.browser.signin.SigninManager;
import org.chromium.chrome.browser.signin.WebSigninBridge; import org.chromium.chrome.browser.signin.WebSigninBridge;
import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.base.CoreAccountInfo;
import org.chromium.components.signin.base.GoogleServiceAuthError;
import org.chromium.components.signin.base.GoogleServiceAuthError.State;
import org.chromium.components.signin.identitymanager.IdentityManager; import org.chromium.components.signin.identitymanager.IdentityManager;
import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.signin.metrics.SigninAccessPoint;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
...@@ -53,7 +57,10 @@ public class AccountPickerDelegateTest { ...@@ -53,7 +57,10 @@ public class AccountPickerDelegateTest {
public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(); public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule();
@Mock @Mock
public WebSigninBridge.Factory mWebSigninBridgeFactoryMock; private WebSigninBridge.Factory mWebSigninBridgeFactoryMock;
@Mock
private WebSigninBridge mWebSigninBridgeMock;
@Mock @Mock
private SigninManager mSigninManagerMock; private SigninManager mSigninManagerMock;
...@@ -87,6 +94,8 @@ public class AccountPickerDelegateTest { ...@@ -87,6 +94,8 @@ public class AccountPickerDelegateTest {
.thenReturn(new WeakReference<Activity>(mChromeActivityMock)); .thenReturn(new WeakReference<Activity>(mChromeActivityMock));
mDelegate = new AccountPickerDelegate( mDelegate = new AccountPickerDelegate(
mWindowAndroidMock, mWebSigninBridgeFactoryMock, CONTINUE_URL); mWindowAndroidMock, mWebSigninBridgeFactoryMock, CONTINUE_URL);
when(mWebSigninBridgeFactoryMock.create(eq(mProfileMock), any(), eq(mDelegate)))
.thenReturn(mWebSigninBridgeMock);
} }
@After @After
...@@ -110,4 +119,33 @@ public class AccountPickerDelegateTest { ...@@ -110,4 +119,33 @@ public class AccountPickerDelegateTest {
LoadUrlParams loadUrlParams = mLoadUrlParamsCaptor.getValue(); LoadUrlParams loadUrlParams = mLoadUrlParamsCaptor.getValue();
Assert.assertEquals("Continue url does not match!", CONTINUE_URL, loadUrlParams.getUrl()); Assert.assertEquals("Continue url does not match!", CONTINUE_URL, loadUrlParams.getUrl());
} }
@Test
public void testSignInAborted() {
Account account =
mAccountManagerTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
CoreAccountInfo coreAccountInfo = mAccountManagerTestRule.toCoreAccountInfo(account.name);
doAnswer(invocation -> {
SigninManager.SignInCallback callback = invocation.getArgument(2);
callback.onSignInAborted();
return null;
})
.when(mSigninManagerMock)
.signIn(eq(SigninAccessPoint.WEB_SIGNIN), eq(coreAccountInfo), any());
mDelegate.signIn(coreAccountInfo, error -> {});
verify(mWebSigninBridgeMock).destroy();
}
@Test
public void testSignInFailedWithConnectionError() {
Account account =
mAccountManagerTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
CoreAccountInfo coreAccountInfo = mAccountManagerTestRule.toCoreAccountInfo(account.name);
Callback<GoogleServiceAuthError> mockCallback = mock(Callback.class);
GoogleServiceAuthError error = new GoogleServiceAuthError(State.CONNECTION_FAILED);
mDelegate.signIn(coreAccountInfo, mockCallback);
mDelegate.onSigninFailed(error);
verify(mockCallback).onResult(error);
verify(mWebSigninBridgeMock).destroy();
}
} }
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