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

Side by Side Diff: ios/chrome/browser/ui/authentication/signin_interaction_controller.mm

Issue 2936583002: [ObjC ARC] Converts ios/chrome/browser/ui/authentication:authentication to ARC. (Closed)
Patch Set: Review fixes. Created 3 years, 6 months 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 unified diff | Download patch
« no previous file with comments | « ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.mm ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/ui/authentication/signin_interaction_controller.h" 5 #import "ios/chrome/browser/ui/authentication/signin_interaction_controller.h"
6 6
7 #include "base/ios/weak_nsobject.h"
8 #include "base/logging.h" 7 #include "base/logging.h"
9 #include "base/mac/scoped_block.h"
10 #include "base/mac/scoped_nsobject.h"
11 #include "base/strings/sys_string_conversions.h" 8 #include "base/strings/sys_string_conversions.h"
12 #include "components/prefs/pref_service.h" 9 #include "components/prefs/pref_service.h"
13 #include "components/signin/core/browser/signin_manager.h" 10 #include "components/signin/core/browser/signin_manager.h"
14 #include "components/signin/core/common/signin_pref_names.h" 11 #include "components/signin/core/common/signin_pref_names.h"
15 #import "ios/chrome/browser/browser_state/chrome_browser_state.h" 12 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
16 #include "ios/chrome/browser/signin/authentication_service.h" 13 #include "ios/chrome/browser/signin/authentication_service.h"
17 #include "ios/chrome/browser/signin/authentication_service_factory.h" 14 #include "ios/chrome/browser/signin/authentication_service_factory.h"
18 #include "ios/chrome/browser/signin/signin_manager_factory.h" 15 #include "ios/chrome/browser/signin/signin_manager_factory.h"
19 #import "ios/chrome/browser/signin/signin_util.h" 16 #import "ios/chrome/browser/signin/signin_util.h"
20 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h" 17 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
21 #import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" 18 #import "ios/chrome/browser/ui/authentication/authentication_ui_util.h"
22 #import "ios/chrome/browser/ui/authentication/chrome_signin_view_controller.h" 19 #import "ios/chrome/browser/ui/authentication/chrome_signin_view_controller.h"
23 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" 20 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h"
24 #import "ios/chrome/browser/ui/util/top_view_controller.h" 21 #import "ios/chrome/browser/ui/util/top_view_controller.h"
25 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" 22 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
26 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h" 23 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
27 #import "ios/public/provider/chrome/browser/signin/chrome_identity_interaction_m anager.h" 24 #import "ios/public/provider/chrome/browser/signin/chrome_identity_interaction_m anager.h"
28 #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h" 25 #import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
29 26
27 #if !defined(__has_feature) || !__has_feature(objc_arc)
28 #error "This file requires ARC support."
29 #endif
30
30 using signin_ui::CompletionCallback; 31 using signin_ui::CompletionCallback;
31 32
32 @interface SigninInteractionController ()< 33 @interface SigninInteractionController ()<
33 ChromeIdentityInteractionManagerDelegate, 34 ChromeIdentityInteractionManagerDelegate,
34 ChromeSigninViewControllerDelegate> { 35 ChromeSigninViewControllerDelegate> {
35 ios::ChromeBrowserState* browserState_; 36 ios::ChromeBrowserState* browserState_;
36 signin_metrics::AccessPoint accessPoint_; 37 signin_metrics::AccessPoint accessPoint_;
37 signin_metrics::PromoAction promoAction_; 38 signin_metrics::PromoAction promoAction_;
38 base::scoped_nsobject<UIViewController> presentingViewController_; 39 UIViewController* presentingViewController_;
39 BOOL isPresentedOnSettings_; 40 BOOL isPresentedOnSettings_;
40 BOOL isCancelling_; 41 BOOL isCancelling_;
41 BOOL isDismissing_; 42 BOOL isDismissing_;
42 BOOL interactionManagerDismissalIgnored_; 43 BOOL interactionManagerDismissalIgnored_;
43 base::scoped_nsobject<AlertCoordinator> alertCoordinator_; 44 AlertCoordinator* alertCoordinator_;
44 base::mac::ScopedBlock<CompletionCallback> completionCallback_; 45 CompletionCallback completionCallback_;
45 base::scoped_nsobject<ChromeSigninViewController> signinViewController_; 46 ChromeSigninViewController* signinViewController_;
46 base::scoped_nsobject<ChromeIdentityInteractionManager> 47 ChromeIdentityInteractionManager* identityInteractionManager_;
47 identityInteractionManager_; 48 ChromeIdentity* signInIdentity_;
48 base::scoped_nsobject<ChromeIdentity> signInIdentity_;
49 BOOL identityAdded_; 49 BOOL identityAdded_;
50 } 50 }
51 @end 51 @end
52 52
53 @implementation SigninInteractionController 53 @implementation SigninInteractionController
54 54
55 - (id)init { 55 - (id)init {
56 NOTREACHED(); 56 NOTREACHED();
57 return nil; 57 return nil;
58 } 58 }
59 59
60 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState 60 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState
61 presentingViewController:(UIViewController*)presentingViewController 61 presentingViewController:(UIViewController*)presentingViewController
62 isPresentedOnSettings:(BOOL)isPresentedOnSettings 62 isPresentedOnSettings:(BOOL)isPresentedOnSettings
63 accessPoint:(signin_metrics::AccessPoint)accessPoint 63 accessPoint:(signin_metrics::AccessPoint)accessPoint
64 promoAction:(signin_metrics::PromoAction)promoAction { 64 promoAction:(signin_metrics::PromoAction)promoAction {
65 self = [super init]; 65 self = [super init];
66 if (self) { 66 if (self) {
67 DCHECK(browserState); 67 DCHECK(browserState);
68 DCHECK(presentingViewController); 68 DCHECK(presentingViewController);
69 browserState_ = browserState; 69 browserState_ = browserState;
70 presentingViewController_.reset([presentingViewController retain]); 70 presentingViewController_ = presentingViewController;
71 isPresentedOnSettings_ = isPresentedOnSettings; 71 isPresentedOnSettings_ = isPresentedOnSettings;
72 accessPoint_ = accessPoint; 72 accessPoint_ = accessPoint;
73 promoAction_ = promoAction; 73 promoAction_ = promoAction;
74 } 74 }
75 return self; 75 return self;
76 } 76 }
77 77
78 - (void)cancel { 78 - (void)cancel {
79 // Cancelling and dismissing the |identityInteractionManager_| may call the 79 // Cancelling and dismissing the |identityInteractionManager_| may call the
80 // |completionCallback_| which could lead to |self| being released before the 80 // |completionCallback_| which could lead to |self| being released before the
81 // end of this method. |self| is retained here to prevent this from happening. 81 // end of this method. |self| is retained here to prevent this from happening.
82 base::scoped_nsobject<SigninInteractionController> strongSelf([self retain]); 82 #pragma clang diagnostic push
83 #pragma clang diagnostic ignored "-Wunused-variable"
84 // Retain this object through the rest of this method in case this object's
85 // owner frees this object during the execution of the completion block.
86 SigninInteractionController* strongSelf = self;
87 #pragma clang diagnostic pop
83 isCancelling_ = YES; 88 isCancelling_ = YES;
84 [alertCoordinator_ executeCancelHandler]; 89 [alertCoordinator_ executeCancelHandler];
85 [alertCoordinator_ stop]; 90 [alertCoordinator_ stop];
86 [identityInteractionManager_ cancelAndDismissAnimated:NO]; 91 [identityInteractionManager_ cancelAndDismissAnimated:NO];
87 [signinViewController_ cancel]; 92 [signinViewController_ cancel];
88 isCancelling_ = NO; 93 isCancelling_ = NO;
89 } 94 }
90 95
91 - (void)cancelAndDismiss { 96 - (void)cancelAndDismiss {
92 isDismissing_ = YES; 97 isDismissing_ = YES;
93 [self cancel]; 98 [self cancel];
94 isDismissing_ = NO; 99 isDismissing_ = NO;
95 } 100 }
96 101
97 - (void)signInWithViewController:(UIViewController*)viewController 102 - (void)signInWithViewController:(UIViewController*)viewController
98 identity:(ChromeIdentity*)identity 103 identity:(ChromeIdentity*)identity
99 completion:(signin_ui::CompletionCallback)completion { 104 completion:(signin_ui::CompletionCallback)completion {
100 signin_metrics::LogSigninAccessPointStarted(accessPoint_, promoAction_); 105 signin_metrics::LogSigninAccessPointStarted(accessPoint_, promoAction_);
101 completionCallback_.reset(completion, base::scoped_policy::RETAIN); 106 completionCallback_ = [completion copy];
102 ios::ChromeIdentityService* identityService = 107 ios::ChromeIdentityService* identityService =
103 ios::GetChromeBrowserProvider()->GetChromeIdentityService(); 108 ios::GetChromeBrowserProvider()->GetChromeIdentityService();
104 if (identity) { 109 if (identity) {
105 DCHECK(identityService->IsValidIdentity(identity)); 110 DCHECK(identityService->IsValidIdentity(identity));
106 DCHECK(!signinViewController_); 111 DCHECK(!signinViewController_);
107 [self showSigninViewControllerWithIdentity:identity identityAdded:NO]; 112 [self showSigninViewControllerWithIdentity:identity identityAdded:NO];
108 } else if (identityService->HasIdentities()) { 113 } else if (identityService->HasIdentities()) {
109 DCHECK(!signinViewController_); 114 DCHECK(!signinViewController_);
110 [self showSigninViewControllerWithIdentity:nil identityAdded:NO]; 115 [self showSigninViewControllerWithIdentity:nil identityAdded:NO];
111 } else { 116 } else {
112 identityInteractionManager_ = 117 identityInteractionManager_ =
113 identityService->NewChromeIdentityInteractionManager(browserState_, 118 identityService->NewChromeIdentityInteractionManager(browserState_,
114 self); 119 self);
115 if (!identityInteractionManager_) { 120 if (!identityInteractionManager_) {
116 // Abort sign-in if the ChromeIdentityInteractionManager returned is 121 // Abort sign-in if the ChromeIdentityInteractionManager returned is
117 // nil (this can happen when the iOS internal provider is not used). 122 // nil (this can happen when the iOS internal provider is not used).
118 [self runCompletionCallbackWithSuccess:NO executeCommand:nil]; 123 [self runCompletionCallbackWithSuccess:NO executeCommand:nil];
119 return; 124 return;
120 } 125 }
121 126
122 base::WeakNSObject<SigninInteractionController> weakSelf(self); 127 __weak SigninInteractionController* weakSelf = self;
123 [identityInteractionManager_ 128 [identityInteractionManager_
124 addAccountWithCompletion:^(ChromeIdentity* identity, NSError* error) { 129 addAccountWithCompletion:^(ChromeIdentity* identity, NSError* error) {
125 [weakSelf handleIdentityAdded:identity 130 [weakSelf handleIdentityAdded:identity
126 error:error 131 error:error
127 shouldSignIn:YES 132 shouldSignIn:YES
128 viewController:viewController]; 133 viewController:viewController];
129 }]; 134 }];
130 } 135 }
131 } 136 }
132 137
133 - (void)reAuthenticateWithCompletion:(CompletionCallback)completion 138 - (void)reAuthenticateWithCompletion:(CompletionCallback)completion
134 viewController:(UIViewController*)viewController { 139 viewController:(UIViewController*)viewController {
135 signin_metrics::LogSigninAccessPointStarted(accessPoint_, promoAction_); 140 signin_metrics::LogSigninAccessPointStarted(accessPoint_, promoAction_);
136 completionCallback_.reset(completion, base::scoped_policy::RETAIN); 141 completionCallback_ = [completion copy];
137 AccountInfo accountInfo = 142 AccountInfo accountInfo =
138 ios::SigninManagerFactory::GetForBrowserState(browserState_) 143 ios::SigninManagerFactory::GetForBrowserState(browserState_)
139 ->GetAuthenticatedAccountInfo(); 144 ->GetAuthenticatedAccountInfo();
140 std::string emailToReauthenticate = accountInfo.email; 145 std::string emailToReauthenticate = accountInfo.email;
141 std::string idToReauthenticate = accountInfo.gaia; 146 std::string idToReauthenticate = accountInfo.gaia;
142 if (emailToReauthenticate.empty() || idToReauthenticate.empty()) { 147 if (emailToReauthenticate.empty() || idToReauthenticate.empty()) {
143 // This corresponds to a re-authenticate request after the user was signed 148 // This corresponds to a re-authenticate request after the user was signed
144 // out. This corresponds to the case where the identity was removed as a 149 // out. This corresponds to the case where the identity was removed as a
145 // result of the permissions being removed on the server or the identity 150 // result of the permissions being removed on the server or the identity
146 // being removed from another app. 151 // being removed from another app.
147 // 152 //
148 // Simply use the the last signed-in user email in this case and go though 153 // Simply use the the last signed-in user email in this case and go though
149 // the entire sign-in flow as sync needs to be configured. 154 // the entire sign-in flow as sync needs to be configured.
150 emailToReauthenticate = browserState_->GetPrefs()->GetString( 155 emailToReauthenticate = browserState_->GetPrefs()->GetString(
151 prefs::kGoogleServicesLastUsername); 156 prefs::kGoogleServicesLastUsername);
152 idToReauthenticate = browserState_->GetPrefs()->GetString( 157 idToReauthenticate = browserState_->GetPrefs()->GetString(
153 prefs::kGoogleServicesLastAccountId); 158 prefs::kGoogleServicesLastAccountId);
154 } 159 }
155 DCHECK(!emailToReauthenticate.empty()); 160 DCHECK(!emailToReauthenticate.empty());
156 DCHECK(!idToReauthenticate.empty()); 161 DCHECK(!idToReauthenticate.empty());
157 identityInteractionManager_ = 162 identityInteractionManager_ =
158 ios::GetChromeBrowserProvider() 163 ios::GetChromeBrowserProvider()
159 ->GetChromeIdentityService() 164 ->GetChromeIdentityService()
160 ->NewChromeIdentityInteractionManager(browserState_, self); 165 ->NewChromeIdentityInteractionManager(browserState_, self);
161 base::WeakNSObject<SigninInteractionController> weakSelf(self); 166 __weak SigninInteractionController* weakSelf = self;
162 [identityInteractionManager_ 167 [identityInteractionManager_
163 reauthenticateUserWithID:base::SysUTF8ToNSString(idToReauthenticate) 168 reauthenticateUserWithID:base::SysUTF8ToNSString(idToReauthenticate)
164 email:base::SysUTF8ToNSString(emailToReauthenticate) 169 email:base::SysUTF8ToNSString(emailToReauthenticate)
165 completion:^(ChromeIdentity* identity, NSError* error) { 170 completion:^(ChromeIdentity* identity, NSError* error) {
166 [weakSelf handleIdentityAdded:identity 171 [weakSelf handleIdentityAdded:identity
167 error:error 172 error:error
168 shouldSignIn:YES 173 shouldSignIn:YES
169 viewController:viewController]; 174 viewController:viewController];
170 }]; 175 }];
171 } 176 }
172 177
173 - (void)addAccountWithCompletion:(CompletionCallback)completion 178 - (void)addAccountWithCompletion:(CompletionCallback)completion
174 viewController:(UIViewController*)viewController { 179 viewController:(UIViewController*)viewController {
175 completionCallback_.reset(completion, base::scoped_policy::RETAIN); 180 completionCallback_ = [completion copy];
176 identityInteractionManager_ = 181 identityInteractionManager_ =
177 ios::GetChromeBrowserProvider() 182 ios::GetChromeBrowserProvider()
178 ->GetChromeIdentityService() 183 ->GetChromeIdentityService()
179 ->NewChromeIdentityInteractionManager(browserState_, self); 184 ->NewChromeIdentityInteractionManager(browserState_, self);
180 base::WeakNSObject<SigninInteractionController> weakSelf(self); 185 __weak SigninInteractionController* weakSelf = self;
181 [identityInteractionManager_ 186 [identityInteractionManager_
182 addAccountWithCompletion:^(ChromeIdentity* identity, NSError* error) { 187 addAccountWithCompletion:^(ChromeIdentity* identity, NSError* error) {
183 [weakSelf handleIdentityAdded:identity 188 [weakSelf handleIdentityAdded:identity
184 error:error 189 error:error
185 shouldSignIn:NO 190 shouldSignIn:NO
186 viewController:viewController]; 191 viewController:viewController];
187 }]; 192 }];
188 } 193 }
189 194
190 #pragma mark - ChromeIdentityInteractionManager operations 195 #pragma mark - ChromeIdentityInteractionManager operations
191 196
192 - (void)handleIdentityAdded:(ChromeIdentity*)identity 197 - (void)handleIdentityAdded:(ChromeIdentity*)identity
193 error:(NSError*)error 198 error:(NSError*)error
194 shouldSignIn:(BOOL)shouldSignIn 199 shouldSignIn:(BOOL)shouldSignIn
195 viewController:(UIViewController*)viewController { 200 viewController:(UIViewController*)viewController {
196 if (!identityInteractionManager_) 201 if (!identityInteractionManager_)
197 return; 202 return;
198 203
199 if (error) { 204 if (error) {
200 // Filter out cancel and errors handled internally by ChromeIdentity. 205 // Filter out cancel and errors handled internally by ChromeIdentity.
201 if (!ShouldHandleSigninError(error)) { 206 if (!ShouldHandleSigninError(error)) {
202 [self runCompletionCallbackWithSuccess:NO executeCommand:nil]; 207 [self runCompletionCallbackWithSuccess:NO executeCommand:nil];
203 return; 208 return;
204 } 209 }
205 210
206 base::WeakNSObject<SigninInteractionController> weakSelf(self); 211 __weak SigninInteractionController* weakSelf = self;
207 ProceduralBlock dismissAction = ^{ 212 ProceduralBlock dismissAction = ^{
208 [weakSelf runCompletionCallbackWithSuccess:NO executeCommand:nil]; 213 [weakSelf runCompletionCallbackWithSuccess:NO executeCommand:nil];
209 }; 214 };
210 215
211 alertCoordinator_.reset([ios_internal::ErrorCoordinator( 216 alertCoordinator_ = ios_internal::ErrorCoordinator(
212 error, dismissAction, 217 error, dismissAction,
213 top_view_controller::TopPresentedViewControllerFrom(viewController)) 218 top_view_controller::TopPresentedViewControllerFrom(viewController));
214 retain]);
215 [alertCoordinator_ start]; 219 [alertCoordinator_ start];
216 return; 220 return;
217 } 221 }
218 if (shouldSignIn) { 222 if (shouldSignIn) {
219 [self showSigninViewControllerWithIdentity:identity identityAdded:YES]; 223 [self showSigninViewControllerWithIdentity:identity identityAdded:YES];
220 } else { 224 } else {
221 [self runCompletionCallbackWithSuccess:YES executeCommand:nil]; 225 [self runCompletionCallbackWithSuccess:YES executeCommand:nil];
222 } 226 }
223 } 227 }
224 228
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 if (completion) { 263 if (completion) {
260 completion(); 264 completion();
261 } 265 }
262 } 266 }
263 } 267 }
264 268
265 #pragma mark - ChromeSigninViewController operations 269 #pragma mark - ChromeSigninViewController operations
266 270
267 - (void)showSigninViewControllerWithIdentity:(ChromeIdentity*)signInIdentity 271 - (void)showSigninViewControllerWithIdentity:(ChromeIdentity*)signInIdentity
268 identityAdded:(BOOL)identityAdded { 272 identityAdded:(BOOL)identityAdded {
269 signinViewController_.reset([[ChromeSigninViewController alloc] 273 signinViewController_ = [[ChromeSigninViewController alloc]
270 initWithBrowserState:browserState_ 274 initWithBrowserState:browserState_
271 isPresentedOnSettings:isPresentedOnSettings_ 275 isPresentedOnSettings:isPresentedOnSettings_
272 accessPoint:accessPoint_ 276 accessPoint:accessPoint_
273 promoAction:promoAction_ 277 promoAction:promoAction_
274 signInIdentity:signInIdentity]); 278 signInIdentity:signInIdentity];
275 [signinViewController_ setDelegate:self]; 279 [signinViewController_ setDelegate:self];
276 [signinViewController_ 280 [signinViewController_
277 setModalPresentationStyle:UIModalPresentationFormSheet]; 281 setModalPresentationStyle:UIModalPresentationFormSheet];
278 [signinViewController_ 282 [signinViewController_
279 setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 283 setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
280 signInIdentity_.reset([signInIdentity retain]); 284 signInIdentity_ = signInIdentity;
281 identityAdded_ = identityAdded; 285 identityAdded_ = identityAdded;
282 286
283 UIViewController* presentingViewController = presentingViewController_; 287 UIViewController* presentingViewController = presentingViewController_;
284 if (identityInteractionManager_) { 288 if (identityInteractionManager_) {
285 // If |identityInteractionManager_| is currently displayed, 289 // If |identityInteractionManager_| is currently displayed,
286 // |signinViewController_| is presented on top of it (instead of on top of 290 // |signinViewController_| is presented on top of it (instead of on top of
287 // |presentingViewController_|), to avoid an awkward transition (dismissing 291 // |presentingViewController_|), to avoid an awkward transition (dismissing
288 // |identityInteractionManager_|, followed by presenting 292 // |identityInteractionManager_|, followed by presenting
289 // |signinViewController_|). 293 // |signinViewController_|).
290 while (presentingViewController.presentedViewController) { 294 while (presentingViewController.presentedViewController) {
(...skipping 17 matching lines...) Expand all
308 } 312 }
309 ProceduralBlock completion = ^{ 313 ProceduralBlock completion = ^{
310 [self runCompletionCallbackWithSuccess:success executeCommand:command]; 314 [self runCompletionCallbackWithSuccess:success executeCommand:command];
311 }; 315 };
312 [self dismissPresentedViewControllersAnimated:YES completion:completion]; 316 [self dismissPresentedViewControllersAnimated:YES completion:completion];
313 } 317 }
314 318
315 #pragma mark - ChromeSigninViewControllerDelegate 319 #pragma mark - ChromeSigninViewControllerDelegate
316 320
317 - (void)willStartSignIn:(ChromeSigninViewController*)controller { 321 - (void)willStartSignIn:(ChromeSigninViewController*)controller {
318 DCHECK_EQ(controller, signinViewController_.get()); 322 DCHECK_EQ(controller, signinViewController_);
319 } 323 }
320 324
321 - (void)willStartAddAccount:(ChromeSigninViewController*)controller { 325 - (void)willStartAddAccount:(ChromeSigninViewController*)controller {
322 DCHECK_EQ(controller, signinViewController_.get()); 326 DCHECK_EQ(controller, signinViewController_);
323 } 327 }
324 328
325 - (void)didSkipSignIn:(ChromeSigninViewController*)controller { 329 - (void)didSkipSignIn:(ChromeSigninViewController*)controller {
326 DCHECK_EQ(controller, signinViewController_.get()); 330 DCHECK_EQ(controller, signinViewController_);
327 [self dismissSigninViewControllerWithSignInSuccess:NO executeCommand:nil]; 331 [self dismissSigninViewControllerWithSignInSuccess:NO executeCommand:nil];
328 } 332 }
329 333
330 - (void)didSignIn:(ChromeSigninViewController*)controller { 334 - (void)didSignIn:(ChromeSigninViewController*)controller {
331 DCHECK_EQ(controller, signinViewController_.get()); 335 DCHECK_EQ(controller, signinViewController_);
332 } 336 }
333 337
334 - (void)didUndoSignIn:(ChromeSigninViewController*)controller 338 - (void)didUndoSignIn:(ChromeSigninViewController*)controller
335 identity:(ChromeIdentity*)identity { 339 identity:(ChromeIdentity*)identity {
336 DCHECK_EQ(controller, signinViewController_.get()); 340 DCHECK_EQ(controller, signinViewController_);
337 if ([signInIdentity_.get() isEqual:identity]) { 341 if ([signInIdentity_ isEqual:identity]) {
338 signInIdentity_.reset(); 342 signInIdentity_ = nil;
339 if (identityAdded_) { 343 if (identityAdded_) {
340 // This is best effort. If the operation fails, the account will be left 344 // This is best effort. If the operation fails, the account will be left
341 // on the device. The user will not be warned either as this call is 345 // on the device. The user will not be warned either as this call is
342 // asynchronous (but undo is not), the application might be in an unknown 346 // asynchronous (but undo is not), the application might be in an unknown
343 // state when the forget identity operation finishes. 347 // state when the forget identity operation finishes.
344 ios::GetChromeBrowserProvider() 348 ios::GetChromeBrowserProvider()
345 ->GetChromeIdentityService() 349 ->GetChromeIdentityService()
346 ->ForgetIdentity(identity, nil); 350 ->ForgetIdentity(identity, nil);
347 } 351 }
348 [self dismissSigninViewControllerWithSignInSuccess:NO executeCommand:nil]; 352 [self dismissSigninViewControllerWithSignInSuccess:NO executeCommand:nil];
349 } 353 }
350 } 354 }
351 355
352 - (void)didFailSignIn:(ChromeSigninViewController*)controller { 356 - (void)didFailSignIn:(ChromeSigninViewController*)controller {
353 DCHECK_EQ(controller, signinViewController_.get()); 357 DCHECK_EQ(controller, signinViewController_);
354 [self dismissSigninViewControllerWithSignInSuccess:NO executeCommand:nil]; 358 [self dismissSigninViewControllerWithSignInSuccess:NO executeCommand:nil];
355 } 359 }
356 360
357 - (void)didAcceptSignIn:(ChromeSigninViewController*)controller 361 - (void)didAcceptSignIn:(ChromeSigninViewController*)controller
358 executeCommand:(GenericChromeCommand*)command { 362 executeCommand:(GenericChromeCommand*)command {
359 DCHECK_EQ(controller, signinViewController_.get()); 363 DCHECK_EQ(controller, signinViewController_);
360 [self dismissSigninViewControllerWithSignInSuccess:YES 364 [self dismissSigninViewControllerWithSignInSuccess:YES
361 executeCommand:command]; 365 executeCommand:command];
362 } 366 }
363 367
364 #pragma mark - Utility methods 368 #pragma mark - Utility methods
365 369
366 - (void)runCompletionCallbackWithSuccess:(BOOL)success 370 - (void)runCompletionCallbackWithSuccess:(BOOL)success
367 executeCommand:(GenericChromeCommand*)command { 371 executeCommand:(GenericChromeCommand*)command {
368 // In order to avoid awkward double transitions, |identityInteractionManager_| 372 // In order to avoid awkward double transitions, |identityInteractionManager_|
369 // is not dismissed when requested (except when canceling). However, in case 373 // is not dismissed when requested (except when canceling). However, in case
370 // of errors, |identityInteractionManager_| needs to be directly dismissed, 374 // of errors, |identityInteractionManager_| needs to be directly dismissed,
371 // which is done here. 375 // which is done here.
372 if (interactionManagerDismissalIgnored_) { 376 if (interactionManagerDismissalIgnored_) {
373 [self dismissPresentedViewControllersAnimated:YES completion:nil]; 377 [self dismissPresentedViewControllersAnimated:YES completion:nil];
374 } 378 }
375 379
376 identityInteractionManager_.reset(); 380 identityInteractionManager_ = nil;
377 signinViewController_.reset(); 381 signinViewController_ = nil;
378 UIViewController* presentingViewController = presentingViewController_; 382 UIViewController* presentingViewController = presentingViewController_;
379 // Ensure self is not destroyed in the callbacks. 383 // Ensure self is not destroyed in the callbacks.
380 base::scoped_nsobject<SigninInteractionController> strongSelf([self retain]); 384 SigninInteractionController* strongSelf = self;
381 if (completionCallback_) { 385 if (completionCallback_) {
382 completionCallback_.get()(success); 386 completionCallback_(success);
383 completionCallback_.reset(); 387 completionCallback_ = nil;
384 } 388 }
385 strongSelf.reset(); 389 strongSelf = nil;
386 if (command) { 390 if (command) {
387 [presentingViewController chromeExecuteCommand:command]; 391 [presentingViewController chromeExecuteCommand:command];
388 } 392 }
389 } 393 }
390 394
391 @end 395 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698