blob: f849f2aa5df1d1495fd9fc356b516b1399f05932 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/shared/public/commands/show_signin_command.h"
#import "base/check.h"
#import "base/functional/callback.h"
#import "base/functional/callback_helpers.h"
#import "base/ios/block_types.h"
#import "ios/chrome/browser/authentication/ui_bundled/change_profile_continuation_provider.h"
#import "ios/chrome/browser/authentication/ui_bundled/continuation.h"
#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h"
@implementation ShowSigninCommand {
ChangeProfileContinuationProvider _provider;
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
identity:(id<SystemIdentity>)identity
accessPoint:(signin_metrics::AccessPoint)accessPoint
promoAction:(signin_metrics::PromoAction)promoAction
completion:
(SigninCoordinatorCompletionCallback)completion
prepareChangeProfile:(ProceduralBlock)prepareChangeProfile
changeProfileContinuationProvider:
(const ChangeProfileContinuationProvider&)provider {
if ((self = [super init])) {
// Only `InstantSignin` can be opened with an identity selected.
DCHECK(operation == AuthenticationOperation::kInstantSignin || !identity);
CHECK(provider);
_operation = operation;
_identity = identity;
_accessPoint = accessPoint;
_promoAction = promoAction;
_completion = [completion copy];
_optionalHistorySync = YES;
_fullScreenPromo = NO;
_prepareChangeProfile = prepareChangeProfile;
_provider = provider;
}
return self;
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
identity:(id<SystemIdentity>)identity
accessPoint:(signin_metrics::AccessPoint)accessPoint
promoAction:(signin_metrics::PromoAction)promoAction
completion:
(SigninCoordinatorCompletionCallback)completion
changeProfileContinuationProvider:
(const ChangeProfileContinuationProvider&)provider {
return [self initWithOperation:operation
identity:identity
accessPoint:accessPoint
promoAction:promoAction
completion:completion
prepareChangeProfile:nil
changeProfileContinuationProvider:provider];
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
identity:(id<SystemIdentity>)identity
accessPoint:(signin_metrics::AccessPoint)accessPoint
promoAction:(signin_metrics::PromoAction)promoAction
completion:
(SigninCoordinatorCompletionCallback)completion {
return [self initWithOperation:operation
identity:identity
accessPoint:accessPoint
promoAction:promoAction
completion:completion
changeProfileContinuationProvider:DoNothingContinuationProvider()];
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
accessPoint:(signin_metrics::AccessPoint)accessPoint
promoAction:(signin_metrics::PromoAction)promoAction
changeProfileContinuationProvider:
(const ChangeProfileContinuationProvider&)provider {
return [self initWithOperation:operation
identity:nil
accessPoint:accessPoint
promoAction:promoAction
completion:nil
changeProfileContinuationProvider:provider];
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
accessPoint:(signin_metrics::AccessPoint)accessPoint
promoAction:(signin_metrics::PromoAction)promoAction {
return [self initWithOperation:operation
identity:nil
accessPoint:accessPoint
promoAction:promoAction
completion:nil
changeProfileContinuationProvider:DoNothingContinuationProvider()];
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
accessPoint:(signin_metrics::AccessPoint)accessPoint
changeProfileContinuationProvider:
(const ChangeProfileContinuationProvider&)provider {
return [self initWithOperation:operation
identity:nil
accessPoint:accessPoint
promoAction:signin_metrics::PromoAction::
PROMO_ACTION_NO_SIGNIN_PROMO
completion:nil
changeProfileContinuationProvider:provider];
}
- (instancetype)initWithOperation:(AuthenticationOperation)operation
accessPoint:(signin_metrics::AccessPoint)accessPoint {
return [self initWithOperation:operation
identity:nil
accessPoint:accessPoint
promoAction:signin_metrics::PromoAction::
PROMO_ACTION_NO_SIGNIN_PROMO
completion:nil
changeProfileContinuationProvider:DoNothingContinuationProvider()];
}
- (void)addSigninCompletion:(SigninCoordinatorCompletionCallback)completion {
CHECK(completion, base::NotFatalUntil::M145);
SigninCoordinatorCompletionCallback firstCompletion = self.completion;
_completion = ^(SigninCoordinatorResult result, id<SystemIdentity> identity) {
if (firstCompletion) {
firstCompletion(result, identity);
}
completion(result, identity);
};
}
- (const ChangeProfileContinuationProvider&)changeProfileContinuationProvider {
return _provider;
}
@end