Commit 323ec558 authored by Jérôme Lebel's avatar Jérôme Lebel Committed by Commit Bot

[iOS] Using sign-in commands from AccountTableViewController

Sign-in UI cannot be dismiss without asynchronous calls. This was
previously ignored. The new architecture is more strict, don't allow
to ignore callbacks.
To prepare the transition to the new architecture, all sign-in UI has
to be managed by the SceneController.
The SceneController already supports asynchronous dismiss of the sign-in
UI.

Adding AUTHENTICATION_OPERATION_ADD_ACCOUNT command to add secondary
accounts.

   crrev.com/c/2161007 GoogleServicesCoordinator
=> crrev.com/c/2160911 AccountTableViewController
   crrev.com/c/2161027 SettingsTableViewController
   crrev.com/c/2165732 Fixing tests

Bug: 971989
Change-Id: I8306a2d8613992bbf750abbe2a90a1ab4a1ac641
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2160911
Commit-Queue: Jérôme Lebel <jlebel@chromium.org>
Reviewed-by: default avatarNohemi Fernandez <fernandex@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#763572}
parent 10cfcc67
...@@ -19,8 +19,12 @@ enum AuthenticationOperation { ...@@ -19,8 +19,12 @@ enum AuthenticationOperation {
AUTHENTICATION_OPERATION_REAUTHENTICATE, AUTHENTICATION_OPERATION_REAUTHENTICATE,
// Operation to start a sign-in operation. The user is presented with the // Operation to start a sign-in operation. The user is presented with the
// SSOAuth sign in page (SSOAuth account picker or SSOAuth sign-in web page). // sign-in page with the user consent.
AUTHENTICATION_OPERATION_SIGNIN, AUTHENTICATION_OPERATION_SIGNIN,
// Operation to add a secondary account. The user is presented with the
// SSOAUth sin-in page.
AUTHENTICATION_OPERATION_ADD_ACCOUNT,
}; };
// A command to perform a sign in operation. // A command to perform a sign in operation.
......
...@@ -747,6 +747,13 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -747,6 +747,13 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
presentingViewController:baseViewController presentingViewController:baseViewController
completion:command.callback]; completion:command.callback];
break; break;
case AUTHENTICATION_OPERATION_ADD_ACCOUNT:
[self.signinInteractionCoordinator
addAccountWithAccessPoint:command.accessPoint
promoAction:command.promoAction
presentingViewController:baseViewController
completion:command.callback];
break;
} }
} }
......
...@@ -66,7 +66,6 @@ source_set("google_services") { ...@@ -66,7 +66,6 @@ source_set("google_services") {
"//ios/chrome/browser/ui/settings/sync", "//ios/chrome/browser/ui/settings/sync",
"//ios/chrome/browser/ui/settings/sync/utils", "//ios/chrome/browser/ui/settings/sync/utils",
"//ios/chrome/browser/ui/settings/utils", "//ios/chrome/browser/ui/settings/utils",
"//ios/chrome/browser/ui/signin_interaction",
"//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/table_view",
"//ios/chrome/browser/ui/table_view/cells:cells_constants", "//ios/chrome/browser/ui/table_view/cells:cells_constants",
"//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/util",
...@@ -77,7 +76,6 @@ source_set("google_services") { ...@@ -77,7 +76,6 @@ source_set("google_services") {
"//ui/base", "//ui/base",
] ]
allow_circular_includes_from = [ allow_circular_includes_from = [
"//ios/chrome/browser/ui/signin_interaction",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin", "//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin",
] ]
} }
......
...@@ -28,10 +28,10 @@ ...@@ -28,10 +28,10 @@
#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h" #import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/commands/open_new_tab_command.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
#import "ios/chrome/browser/ui/commands/show_signin_command.h"
#import "ios/chrome/browser/ui/icons/chrome_icon.h" #import "ios/chrome/browser/ui/icons/chrome_icon.h"
#import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_constants.h" #import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_constants.h"
#import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h" #import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h"
#import "ios/chrome/browser/ui/signin_interaction/signin_interaction_coordinator.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_text_item.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h"
...@@ -53,6 +53,9 @@ ...@@ -53,6 +53,9 @@
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #endif
using signin_metrics::AccessPoint;
using signin_metrics::PromoAction;
namespace { namespace {
typedef NS_ENUM(NSInteger, SectionIdentifier) { typedef NS_ENUM(NSInteger, SectionIdentifier) {
...@@ -105,11 +108,6 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -105,11 +108,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
NSDictionary<NSString*, TableViewItem*>* _identityMap; NSDictionary<NSString*, TableViewItem*>* _identityMap;
} }
// The SigninInteractionCoordinator that presents Sign In UI for the Accounts
// Settings page.
@property(nonatomic, strong)
SigninInteractionCoordinator* signinInteractionCoordinator;
// Stops observing browser state services. This is required during the shutdown // Stops observing browser state services. This is required during the shutdown
// phase to avoid observing services for a browser state that is being killed. // phase to avoid observing services for a browser state that is being killed.
- (void)stopBrowserStateServiceObservers; - (void)stopBrowserStateServiceObservers;
...@@ -119,7 +117,6 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -119,7 +117,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
@implementation AccountsTableViewController @implementation AccountsTableViewController
@synthesize dispatcher = _dispatcher; @synthesize dispatcher = _dispatcher;
@synthesize signinInteractionCoordinator = _signinInteractionCoordinator;
- (instancetype)initWithBrowser:(Browser*)browser - (instancetype)initWithBrowser:(Browser*)browser
closeSettingsOnAddAccount:(BOOL)closeSettingsOnAddAccount { closeSettingsOnAddAccount:(BOOL)closeSettingsOnAddAccount {
...@@ -163,7 +160,6 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -163,7 +160,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
} }
- (void)settingsWillBeDismissed { - (void)settingsWillBeDismissed {
[self.signinInteractionCoordinator cancel];
[_alertCoordinator stop]; [_alertCoordinator stop];
[self stopBrowserStateServiceObservers]; [self stopBrowserStateServiceObservers];
} }
...@@ -397,25 +393,18 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -397,25 +393,18 @@ typedef NS_ENUM(NSInteger, ItemType) {
- (void)showAddAccount { - (void)showAddAccount {
if ([_alertCoordinator isVisible]) if ([_alertCoordinator isVisible])
return; return;
if (!self.signinInteractionCoordinator) {
self.signinInteractionCoordinator =
[[SigninInteractionCoordinator alloc] initWithBrowser:_browser];
}
// |_authenticationOperationInProgress| is reset when the signin operation is
// completed.
_authenticationOperationInProgress = YES; _authenticationOperationInProgress = YES;
__weak AccountsTableViewController* weakSelf = self;
[self.signinInteractionCoordinator __weak __typeof(self) weakSelf = self;
addAccountWithAccessPoint:signin_metrics::AccessPoint:: ShowSigninCommand* command = [[ShowSigninCommand alloc]
ACCESS_POINT_SETTINGS initWithOperation:AUTHENTICATION_OPERATION_ADD_ACCOUNT
promoAction:signin_metrics::PromoAction:: identity:nil
PROMO_ACTION_NO_SIGNIN_PROMO accessPoint:AccessPoint::ACCESS_POINT_SETTINGS
presentingViewController:self.navigationController promoAction:PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO
completion:^(BOOL success) { callback:^(BOOL success) {
[weakSelf handleDidAddAccount:success]; [weakSelf handleDidAddAccount:success];
}]; }];
[self.dispatcher showSignin:command baseViewController:self];
} }
- (void)handleDidAddAccount:(BOOL)success { - (void)handleDidAddAccount:(BOOL)success {
...@@ -565,7 +554,6 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -565,7 +554,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
return; return;
} }
_isBeingDismissed = YES; _isBeingDismissed = YES;
[self.signinInteractionCoordinator cancelAndDismiss];
[_alertCoordinator stop]; [_alertCoordinator stop];
[self.navigationController popToViewController:self animated:NO]; [self.navigationController popToViewController:self animated:NO];
[base::mac::ObjCCastStrict<SettingsNavigationController>( [base::mac::ObjCCastStrict<SettingsNavigationController>(
......
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