Commit 1b57f882 authored by Nohemi Fernandez's avatar Nohemi Fernandez Committed by Commit Bot

[iOS] Add coordinator to display consistency promo on web sign-in.

Adds a temporary UI that displays the list of accounts currently on the
device when a user selects sign-in on the web.

https://drive.google.com/file/d/1uBEdtsq3MPDaAas7sVSRWWEsqqk_avCo/view?usp=sharing

Bug: 1125631
Change-Id: I225a6f81bbe677458a062b7ad78b1491d4c8b2f6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2411934Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Nohemi Fernandez <fernandex@chromium.org>
Cr-Commit-Position: refs/heads/master@{#807520}
parent 11e7c48d
...@@ -50,6 +50,7 @@ source_set("signin_impl") { ...@@ -50,6 +50,7 @@ source_set("signin_impl") {
"//ios/chrome/browser/signin", "//ios/chrome/browser/signin",
"//ios/chrome/browser/ui/authentication/signin/add_account_signin", "//ios/chrome/browser/ui/authentication/signin/add_account_signin",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin", "//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin",
"//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin",
"//ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication", "//ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication",
"//ios/chrome/browser/ui/authentication/signin/user_signin", "//ios/chrome/browser/ui/authentication/signin/user_signin",
"//ios/chrome/browser/ui/authentication/signin/user_signin/logging", "//ios/chrome/browser/ui/authentication/signin/user_signin/logging",
......
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/chrome_build.gni")
source_set("consistency_promo_signin") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"consistency_promo_signin_coordinator.h",
"consistency_promo_signin_coordinator.mm",
]
deps = [
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/ui/authentication/signin:signin_protected",
"//ios/chrome/browser/ui/authentication/unified_consent/identity_chooser",
]
public_deps =
[ "//ios/chrome/browser/ui/authentication/signin:signin_headers" ]
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_
#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h"
// Enabled with |signin::kMobileIdentityConsistency| experiment flag.
// Coordinates various Identity options in Chrome including signing in
// using accounts on the device, opening Incognito, and adding an account.
@interface ConsistencyPromoSigninCoordinator : SigninCoordinator
@end
#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h"
#import "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h"
#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_coordinator.h"
#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_coordinator_delegate.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface ConsistencyPromoSigninCoordinator () <
IdentityChooserCoordinatorDelegate>
// Identity chooser coordinator.
@property(nonatomic, strong)
IdentityChooserCoordinator* identityChooserCoordinator;
@end
@implementation ConsistencyPromoSigninCoordinator
#pragma mark - Public
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
browser:(Browser*)browser {
return [super initWithBaseViewController:viewController browser:browser];
}
#pragma mark - SigninCoordinator
- (void)interruptWithAction:(SigninCoordinatorInterruptAction)action
completion:(ProceduralBlock)completion {
[self.identityChooserCoordinator stop];
self.identityChooserCoordinator.delegate = nil;
self.identityChooserCoordinator = nil;
__weak ConsistencyPromoSigninCoordinator* weakSelf = self;
ProceduralBlock interruptCompletion = ^{
[weakSelf
runCompletionCallbackWithSigninResult:SigninCoordinatorResultInterrupted
identity:nil
showAdvancedSettingsSignin:NO];
if (completion) {
completion();
}
};
switch (action) {
case SigninCoordinatorInterruptActionNoDismiss: {
interruptCompletion();
break;
}
case SigninCoordinatorInterruptActionDismissWithoutAnimation: {
[self.baseViewController
dismissViewControllerAnimated:NO
completion:interruptCompletion];
break;
}
case SigninCoordinatorInterruptActionDismissWithAnimation: {
[self.baseViewController
dismissViewControllerAnimated:YES
completion:interruptCompletion];
break;
}
}
}
#pragma mark - ChromeCoordinator
- (void)start {
[super start];
self.identityChooserCoordinator = [[IdentityChooserCoordinator alloc]
initWithBaseViewController:self.baseViewController
browser:self.browser];
self.identityChooserCoordinator.delegate = self;
[self.identityChooserCoordinator start];
}
#pragma mark - IdentityChooserCoordinatorDelegate
- (void)identityChooserCoordinatorDidClose:
(IdentityChooserCoordinator*)coordinator {
CHECK_EQ(self.identityChooserCoordinator, coordinator);
[self.identityChooserCoordinator stop];
self.identityChooserCoordinator.delegate = nil;
self.identityChooserCoordinator = nil;
[self runCompletionCallbackWithSigninResult:SigninCoordinatorResultSuccess
identity:nil
showAdvancedSettingsSignin:NO];
}
- (void)identityChooserCoordinatorDidTapOnAddAccount:
(IdentityChooserCoordinator*)coordinator {
CHECK_EQ(self.identityChooserCoordinator, coordinator);
// TODO(crbug.com/1125631): Add action for tapping on "Add account" button.
NOTIMPLEMENTED();
}
- (void)identityChooserCoordinator:(IdentityChooserCoordinator*)coordinator
didSelectIdentity:(ChromeIdentity*)identity {
CHECK_EQ(self.identityChooserCoordinator, coordinator);
// TODO(crbug.com/1125631): Add sign-in action for tapping on an identity.
NOTIMPLEMENTED();
}
@end
...@@ -112,6 +112,14 @@ enum class KeyRetrievalTriggerForUMA; ...@@ -112,6 +112,14 @@ enum class KeyRetrievalTriggerForUMA;
KeyRetrievalTriggerForUMA) KeyRetrievalTriggerForUMA)
retrievalTrigger; retrievalTrigger;
// Returns a coordinator to display the account consistency promo with a list
// of accounts available on the device for sign-in.
// |viewController| presents the promo.
+ (instancetype)
consistencyPromoSigninCoordinatorWithBaseViewController:
(UIViewController*)viewController
browser:(Browser*)browser;
// Interrupts the sign-in flow. // Interrupts the sign-in flow.
// |signinCompletion(SigninCoordinatorResultInterrupted, nil)| is guaranteed to // |signinCompletion(SigninCoordinatorResultInterrupted, nil)| is guaranteed to
// be called before |completion()|. // be called before |completion()|.
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/notreached.h" #include "base/notreached.h"
#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h" #import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h"
#import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_coordinator.h" #import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_coordinator.h"
#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h"
#import "ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h" #import "ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h"
#import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/first_run_signin_logger.h" #import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/first_run_signin_logger.h"
#import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/upgrade_signin_logger.h" #import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/upgrade_signin_logger.h"
...@@ -120,6 +121,15 @@ using signin_metrics::PromoAction; ...@@ -120,6 +121,15 @@ using signin_metrics::PromoAction;
retrievalTrigger:retrievalTrigger]; retrievalTrigger:retrievalTrigger];
} }
+ (instancetype)
consistencyPromoSigninCoordinatorWithBaseViewController:
(UIViewController*)viewController
browser:(Browser*)browser {
return [[ConsistencyPromoSigninCoordinator alloc]
initWithBaseViewController:viewController
browser:browser];
}
- (void)dealloc { - (void)dealloc {
// -[SigninCoordinator runCompletionCallbackWithSigninResult:identity: // -[SigninCoordinator runCompletionCallbackWithSigninResult:identity:
// showAdvancedSettingsSignin:] has to be called by the subclass before // showAdvancedSettingsSignin:] has to be called by the subclass before
......
...@@ -1026,7 +1026,11 @@ const char kMultiWindowOpenInNewWindowHistogram[] = ...@@ -1026,7 +1026,11 @@ const char kMultiWindowOpenInNewWindowHistogram[] =
- (void)showConsistencyPromoFromViewController: - (void)showConsistencyPromoFromViewController:
(UIViewController*)baseViewController { (UIViewController*)baseViewController {
DCHECK(!self.signinCoordinator); DCHECK(!self.signinCoordinator);
// TODO(crbug.com/1125631): Add new consistency promo UI to enable sign-in. self.signinCoordinator = [SigninCoordinator
consistencyPromoSigninCoordinatorWithBaseViewController:baseViewController
browser:self.mainInterface
.browser];
[self startSigninCoordinatorWithCompletion:nil];
} }
- (void)setIncognitoContentVisible:(BOOL)incognitoContentVisible { - (void)setIncognitoContentVisible:(BOOL)incognitoContentVisible {
......
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