Commit 20d1fc69 authored by Jérôme Lebel's avatar Jérôme Lebel Committed by Commit Bot

[iOS] Interrupt AddAccountSigninCoordinator in the UserSigninCoordinator

|self.addAccountSigninCoordinator| needs to be interrupted when
UserSigninCoordinator interrupted.
Once |self.addAccountSigninCoordinator| is done, the sign-in flow
can be interrupted (with dismissing the view controller if needed).

Related to: crrev.com/c/2062410

Bug: 971989
Change-Id: I4825d822737e11ce5af83ef5f94d26c95bfda673
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2087752
Commit-Queue: Jérôme Lebel <jlebel@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746811}
parent 18341a4d
......@@ -109,33 +109,26 @@ using signin_metrics::PromoAction;
- (void)interruptWithAction:(SigninCoordinatorInterruptAction)action
completion:(ProceduralBlock)completion {
[self.mediator cancelAndDismissAuthenticationFlow];
ProceduralBlock runCompletionCallback = ^{
[self
runCompletionCallbackWithSigninResult:SigninCoordinatorResultInterrupted
identity:self.unifiedConsentCoordinator
.selectedIdentity];
if (completion) {
completion();
}
};
switch (action) {
case SigninCoordinatorInterruptActionNoDismiss: {
runCompletionCallback();
break;
}
case SigninCoordinatorInterruptActionDismissWithAnimation: {
[self.viewController dismissViewControllerAnimated:YES
completion:runCompletionCallback];
break;
}
case SigninCoordinatorInterruptActionDismissWithoutAnimation: {
[self.viewController dismissViewControllerAnimated:NO
completion:runCompletionCallback];
break;
}
if (self.addAccountSigninCoordinator) {
// |self.addAccountSigninCoordinator| needs to be interupted before
// interrupting |self.viewController|.
// The add account view should not be dismissed since the
// |self.viewController| will take care of that according to |action|.
__weak UserSigninCoordinator* weakSelf = self;
[self.addAccountSigninCoordinator
interruptWithAction:SigninCoordinatorInterruptActionNoDismiss
completion:^{
// |self.addAccountSigninCoordinator.signinCompletion|
// is expected to be called before this block.
// Therefore |weakSelf.addAccountSigninCoordinator| is
// expected to be nil.
DCHECK(!weakSelf.addAccountSigninCoordinator);
[weakSelf interruptUserSigninUIWithAction:action
completion:completion];
}];
return;
}
[self interruptUserSigninUIWithAction:action completion:completion];
}
#pragma mark - UnifiedConsentCoordinatorDelegate
......@@ -263,6 +256,7 @@ using signin_metrics::PromoAction;
#pragma mark - Private
// Records the metrics when the sign-in is finished.
- (void)recordSigninMetricsWithResult:(SigninCoordinatorResult)signinResult {
switch (signinResult) {
case SigninCoordinatorResultSuccess: {
......@@ -282,4 +276,40 @@ using signin_metrics::PromoAction;
}
}
// Interrupts the sign-in when |self.viewController| is presented, by dismissing
// it if needed (according to |action|). Then |completion| is called.
// This method should not be called if |self.addAccountSigninCoordinator| has
// not been stopped before.
- (void)interruptUserSigninUIWithAction:(SigninCoordinatorInterruptAction)action
completion:(ProceduralBlock)completion {
DCHECK(!self.addAccountSigninCoordinator);
[self.mediator cancelAndDismissAuthenticationFlow];
__weak UserSigninCoordinator* weakSelf = self;
ProceduralBlock runCompletionCallback = ^{
[weakSelf
runCompletionCallbackWithSigninResult:SigninCoordinatorResultInterrupted
identity:self.unifiedConsentCoordinator
.selectedIdentity];
if (completion) {
completion();
}
};
switch (action) {
case SigninCoordinatorInterruptActionNoDismiss: {
runCompletionCallback();
break;
}
case SigninCoordinatorInterruptActionDismissWithAnimation: {
[self.viewController dismissViewControllerAnimated:YES
completion:runCompletionCallback];
break;
}
case SigninCoordinatorInterruptActionDismissWithoutAnimation: {
[self.viewController dismissViewControllerAnimated:NO
completion:runCompletionCallback];
break;
}
}
}
@end
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