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 {
AUTHENTICATION_OPERATION_REAUTHENTICATE,
// 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,
// 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.
......
......@@ -747,6 +747,13 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
presentingViewController:baseViewController
completion:command.callback];
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") {
"//ios/chrome/browser/ui/settings/sync",
"//ios/chrome/browser/ui/settings/sync/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/cells:cells_constants",
"//ios/chrome/browser/ui/util",
......@@ -77,7 +76,6 @@ source_set("google_services") {
"//ui/base",
]
allow_circular_includes_from = [
"//ios/chrome/browser/ui/signin_interaction",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin",
]
}
......
......@@ -28,10 +28,10 @@
#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/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/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/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_link_header_footer_item.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h"
......@@ -53,6 +53,9 @@
#error "This file requires ARC support."
#endif
using signin_metrics::AccessPoint;
using signin_metrics::PromoAction;
namespace {
typedef NS_ENUM(NSInteger, SectionIdentifier) {
......@@ -105,11 +108,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
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
// phase to avoid observing services for a browser state that is being killed.
- (void)stopBrowserStateServiceObservers;
......@@ -119,7 +117,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
@implementation AccountsTableViewController
@synthesize dispatcher = _dispatcher;
@synthesize signinInteractionCoordinator = _signinInteractionCoordinator;
- (instancetype)initWithBrowser:(Browser*)browser
closeSettingsOnAddAccount:(BOOL)closeSettingsOnAddAccount {
......@@ -163,7 +160,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
}
- (void)settingsWillBeDismissed {
[self.signinInteractionCoordinator cancel];
[_alertCoordinator stop];
[self stopBrowserStateServiceObservers];
}
......@@ -397,25 +393,18 @@ typedef NS_ENUM(NSInteger, ItemType) {
- (void)showAddAccount {
if ([_alertCoordinator isVisible])
return;
if (!self.signinInteractionCoordinator) {
self.signinInteractionCoordinator =
[[SigninInteractionCoordinator alloc] initWithBrowser:_browser];
}
// |_authenticationOperationInProgress| is reset when the signin operation is
// completed.
_authenticationOperationInProgress = YES;
__weak AccountsTableViewController* weakSelf = self;
[self.signinInteractionCoordinator
addAccountWithAccessPoint:signin_metrics::AccessPoint::
ACCESS_POINT_SETTINGS
promoAction:signin_metrics::PromoAction::
PROMO_ACTION_NO_SIGNIN_PROMO
presentingViewController:self.navigationController
completion:^(BOOL success) {
[weakSelf handleDidAddAccount:success];
}];
__weak __typeof(self) weakSelf = self;
ShowSigninCommand* command = [[ShowSigninCommand alloc]
initWithOperation:AUTHENTICATION_OPERATION_ADD_ACCOUNT
identity:nil
accessPoint:AccessPoint::ACCESS_POINT_SETTINGS
promoAction:PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO
callback:^(BOOL success) {
[weakSelf handleDidAddAccount:success];
}];
[self.dispatcher showSignin:command baseViewController:self];
}
- (void)handleDidAddAccount:(BOOL)success {
......@@ -565,7 +554,6 @@ typedef NS_ENUM(NSInteger, ItemType) {
return;
}
_isBeingDismissed = YES;
[self.signinInteractionCoordinator cancelAndDismiss];
[_alertCoordinator stop];
[self.navigationController popToViewController:self animated:NO];
[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