Commit 1771751f authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Use non-modal contained presenter for HTTP auth dialogs

HTTP auth dialogs are now presented as child view controllers.  This
allows for usage NonModalViewControllerPresenter, which has the
durations provided by UX.

Also, since the view controllers can be presented immediately, this
CL also prevents the flicker from occurring when exiting the tab
switcher by avoiding the asynchronicity of view controller
presentation.

Bug: 979030, 999960, 999962
Change-Id: I8aec7617bd4900aa05859aea514f2429b95f7d37
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1788513
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarMike Dougherty <michaeldo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#696966}
parent b546938b
......@@ -22,6 +22,7 @@ source_set("http_auth_dialogs") {
"//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays:coordinators",
"//ios/chrome/browser/ui/presenters",
"//ui/base",
]
}
......
......@@ -9,18 +9,22 @@
#import "ios/chrome/browser/ui/alert_view_controller/alert_view_controller.h"
#import "ios/chrome/browser/ui/overlays/overlay_request_coordinator_delegate.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/http_auth_dialogs/http_auth_dialog_overlay_mediator.h"
#import "ios/chrome/browser/ui/presenters/contained_presenter_delegate.h"
#import "ios/chrome/browser/ui/presenters/non_modal_view_controller_presenter.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface HTTPAuthDialogOverlayCoordinator () <
ContainedPresenterDelegate,
HTTPAuthDialogOverlayMediatorDataSource,
HTTPAuthDialogOverlayMediatorDelegate>
// Whether the coordinator has been started.
@property(nonatomic, getter=isStarted) BOOL started;
@property(nonatomic) AlertViewController* alertViewController;
@property(nonatomic) NonModalViewControllerPresenter* presenter;
@property(nonatomic) HTTPAuthDialogOverlayMediator* mediator;
@end
......@@ -38,6 +42,18 @@
_mediator.delegate = self;
}
#pragma mark - ContainedPresenterDelegate
- (void)containedPresenterDidPresent:(id<ContainedPresenter>)presenter {
self.delegate->OverlayUIDidFinishPresentation(self.request);
}
- (void)containedPresenterDidDismiss:(id<ContainedPresenter>)presenter {
self.alertViewController = nil;
self.presenter = nil;
self.delegate->OverlayUIDidFinishDismissal(self.request);
}
#pragma mark - HTTPAuthDialogOverlayMediatorDataSource
- (NSString*)userForMediator:(HTTPAuthDialogOverlayMediator*)mediator {
......@@ -65,6 +81,10 @@
return !!request->GetConfig<HTTPAuthOverlayRequestConfig>();
}
+ (BOOL)usesChildViewController {
return YES;
}
- (UIViewController*)viewController {
return self.alertViewController;
}
......@@ -80,31 +100,19 @@
self.mediator =
[[HTTPAuthDialogOverlayMediator alloc] initWithRequest:self.request];
self.mediator.consumer = self.alertViewController;
__weak __typeof__(self) weakSelf = self;
[self.baseViewController
presentViewController:self.alertViewController
animated:animated
completion:^{
weakSelf.delegate->OverlayUIDidFinishPresentation(
weakSelf.request);
}];
self.presenter = [[NonModalViewControllerPresenter alloc] init];
self.presenter.delegate = self;
self.presenter.baseViewController = self.baseViewController;
self.presenter.presentedViewController = self.alertViewController;
[self.presenter prepareForPresentation];
[self.presenter presentAnimated:animated];
self.started = YES;
}
- (void)stopAnimated:(BOOL)animated {
if (!self.started)
return;
__weak __typeof__(self) weakSelf = self;
[self.baseViewController
dismissViewControllerAnimated:animated
completion:^{
__typeof__(self) strongSelf = weakSelf;
if (!strongSelf)
return;
strongSelf.alertViewController = nil;
strongSelf.delegate->OverlayUIDidFinishDismissal(
weakSelf.request);
}];
[self.presenter dismissAnimated:animated];
self.started = NO;
}
......
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