Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm

Issue 2590473002: Upstream Chrome on iOS source code [5/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm
diff --git a/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm b/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..099d6825a94a99dfbf35dc6d704431f1d74227d4
--- /dev/null
+++ b/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm
@@ -0,0 +1,168 @@
+// Copyright 2014 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/first_run/first_run_chrome_signin_view_controller.h"
+
+#import "base/mac/scoped_nsobject.h"
+#include "base/metrics/user_metrics.h"
+#include "components/signin/core/browser/signin_metrics.h"
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/first_run/first_run_configuration.h"
+#import "ios/chrome/browser/tabs/tab_model.h"
+#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h"
+#import "ios/chrome/browser/ui/commands/generic_chrome_command.h"
+#import "ios/chrome/browser/ui/first_run/first_run_util.h"
+#import "ios/chrome/browser/ui/promos/signin_promo_view_controller.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
+#import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
+#import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
+#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
+#import "ui/base/l10n/l10n_util.h"
+
+NSString* const kSignInButtonAccessibilityIdentifier =
+ @"SignInButtonAccessibilityIdentifier";
+NSString* const kSignInSkipButtonAccessibilityIdentifier =
+ @"SkipButtonAccessibilityIdentifier";
+
+@interface FirstRunChromeSigninViewController ()<
+ ChromeSigninViewControllerDelegate> {
+ TabModel* _tabModel; // weak
+ base::scoped_nsobject<FirstRunConfiguration> _firstRunConfig;
+ ChromeIdentity* _identity;
+ BOOL _hasRecordedSigninStarted;
+}
+
+@end
+
+@implementation FirstRunChromeSigninViewController
+
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
+ tabModel:(TabModel*)tabModel
+ firstRunConfig:(FirstRunConfiguration*)firstRunConfig
+ signInIdentity:(ChromeIdentity*)identity {
+ self = [super
+ initWithBrowserState:browserState
+ isPresentedOnSettings:NO
+ signInAccessPoint:signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE
+ signInIdentity:identity];
+ if (self) {
+ _tabModel = tabModel;
+ _firstRunConfig.reset([firstRunConfig retain]);
+ _identity = identity;
+ self.delegate = self;
+ }
+ return self;
+}
+
+- (void)dealloc {
+ self.delegate = nil;
+ _tabModel = nil;
+ [super dealloc];
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ [self.navigationController setNavigationBarHidden:YES];
+ self.primaryButton.accessibilityIdentifier =
+ kSignInButtonAccessibilityIdentifier;
+ self.secondaryButton.accessibilityIdentifier =
+ kSignInSkipButtonAccessibilityIdentifier;
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+
+ if (!_hasRecordedSigninStarted) {
+ _hasRecordedSigninStarted = YES;
+ base::RecordAction(base::UserMetricsAction("Signin_Signin_FromStartPage"));
+ signin_metrics::LogSigninAccessPointStarted(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE);
+ }
+
+ // Save the version number to prevent showing the SSO Recall promo on the next
+ // cold start.
+ [SigninPromoViewController recordVersionSeen];
+}
+
+- (BOOL)shouldAutorotate {
+ return IsIPadIdiom() ? [super shouldAutorotate] : NO;
+}
+
+- (void)finishFirstRunAndDismiss {
+ DCHECK(self.presentingViewController);
+ ios_internal::FinishFirstRun(self.browserState, [_tabModel currentTab],
+ _firstRunConfig);
+ [self.presentingViewController
+ dismissViewControllerAnimated:YES
+ completion:^{
+ ios_internal::FirstRunDismissed();
+ }];
+}
+
+#pragma mark ChromeSigninViewControllerDelegate
+
+- (void)willStartSignIn:(ChromeSigninViewController*)controller {
+ DCHECK_EQ(self, controller);
+ controller.shouldClearData = SHOULD_CLEAR_DATA_CLEAR_DATA;
+ [_firstRunConfig setSignInAttempted:YES];
+}
+
+- (void)willStartAddAccount:(ChromeSigninViewController*)controller {
+ DCHECK_EQ(self, controller);
+ [_firstRunConfig setSignInAttempted:YES];
+}
+
+- (void)didSkipSignIn:(ChromeSigninViewController*)controller {
+ DCHECK_EQ(self, controller);
+ // User is done with First Run after explicit skip.
+ [self finishFirstRunAndDismiss];
+}
+
+- (void)didFailSignIn:(ChromeSigninViewController*)controller {
+ DCHECK_EQ(self, controller);
+}
+
+- (void)didSignIn:(ChromeSigninViewController*)controller {
+ DCHECK_EQ(self, controller);
+
+ // User is considered done with First Run only after successful sign-in.
+ ios_internal::WriteFirstRunSentinelAndRecordMetrics(
+ self.browserState, YES, [_firstRunConfig hasSSOAccount]);
+}
+
+- (void)didUndoSignIn:(ChromeSigninViewController*)controller
+ identity:(ChromeIdentity*)identity {
+ DCHECK_EQ(self, controller);
+
+ if ([_identity isEqual:identity]) {
+ _identity = nil;
+ // This is best effort. If the operation fails, the account will be left on
+ // the device. The user will not be warned either as this call is
+ // asynchronous (but undo is not), the application might be in an unknown
+ // state when the forget identity operation finishes.
+ ios::GetChromeBrowserProvider()->GetChromeIdentityService()->ForgetIdentity(
+ identity, nil);
+ [self.navigationController popViewControllerAnimated:YES];
+ }
+}
+
+- (void)didAcceptSignIn:(ChromeSigninViewController*)controller
+ executeCommand:(GenericChromeCommand*)command {
+ DCHECK_EQ(self, controller);
+
+ // User is done with First Run after explicit sign-in accept.
+ [self finishFirstRunAndDismiss];
+ [command executeOnMainWindow];
+}
+
+#pragma mark ChromeSigninViewController
+
+- (NSString*)skipSigninButtonTitle {
+ return l10n_util::GetNSString(
+ IDS_IOS_FIRSTRUN_ACCOUNT_CONSISTENCY_SKIP_BUTTON);
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698