[go: nahoru, domu]

blob: b7c842207928b451b68d8559cbd87248610acf94 [file] [log] [blame]
// Copyright 2018 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/ui/history/history_clear_browsing_data_coordinator.h"
#import <UIKit/UIKit.h>
#import "base/apple/foundation_util.h"
#import "ios/chrome/browser/shared/model/browser/browser.h"
#import "ios/chrome/browser/shared/ui/table_view/table_view_navigation_controller.h"
#import "ios/chrome/browser/ui/history/history_clear_browsing_data_coordinator_delegate.h"
#import "ios/chrome/browser/ui/history/public/history_presentation_delegate.h"
#import "ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_ui_delegate.h"
#import "ios/chrome/browser/url_loading/url_loading_browser_agent.h"
#import "ios/chrome/browser/url_loading/url_loading_params.h"
#import "ios/web/public/navigation/referrer.h"
@interface HistoryClearBrowsingDataCoordinator ()
// ViewControllers being managed by this Coordinator.
@property(strong, nonatomic)
TableViewNavigationController* historyClearBrowsingDataNavigationController;
@property(strong, nonatomic)
ClearBrowsingDataTableViewController* clearBrowsingDataTableViewController;
@end
@implementation HistoryClearBrowsingDataCoordinator
@synthesize clearBrowsingDataTableViewController =
_clearBrowsingDataTableViewController;
@synthesize historyClearBrowsingDataNavigationController =
_historyClearBrowsingDataNavigationController;
@synthesize delegate = _delegate;
@synthesize presentationDelegate = _presentationDelegate;
- (void)start {
self.clearBrowsingDataTableViewController =
[[ClearBrowsingDataTableViewController alloc]
initWithBrowser:self.browser];
self.clearBrowsingDataTableViewController.extendedLayoutIncludesOpaqueBars =
YES;
self.clearBrowsingDataTableViewController.delegate = self;
// TODO(crbug.com/1045047): Use HandlerForProtocol after commands protocol
// clean up.
self.clearBrowsingDataTableViewController.dispatcher =
static_cast<id<ApplicationCommands, BrowsingDataCommands>>(
self.browser->GetCommandDispatcher());
// Configure and present ClearBrowsingDataNavigationController.
self.historyClearBrowsingDataNavigationController =
[[TableViewNavigationController alloc]
initWithTable:self.clearBrowsingDataTableViewController];
self.historyClearBrowsingDataNavigationController.toolbarHidden = YES;
[self.historyClearBrowsingDataNavigationController
setModalPresentationStyle:UIModalPresentationFormSheet];
self.historyClearBrowsingDataNavigationController.presentationController
.delegate = self.clearBrowsingDataTableViewController;
[self.baseViewController
presentViewController:self.historyClearBrowsingDataNavigationController
animated:YES
completion:nil];
}
- (void)stopWithCompletion:(ProceduralBlock)completionHandler {
if (self.historyClearBrowsingDataNavigationController) {
[self.clearBrowsingDataTableViewController prepareForDismissal];
[self.historyClearBrowsingDataNavigationController
dismissViewControllerAnimated:YES
completion:^() {
// completionHandler might trigger
// dismissHistory:withCompletion:, which will
// call stopWithCompletion:, so
// historyClearBrowsingDataNavigationController
// needs to be nil, otherwise stopWithCompletion:
// will call dismiss with nothing to dismiss and
// therefore not trigger its own completionHandler.
[self.clearBrowsingDataTableViewController stop];
self.clearBrowsingDataTableViewController = nil;
self.historyClearBrowsingDataNavigationController =
nil;
if (completionHandler) {
completionHandler();
}
}];
} else if (completionHandler) {
completionHandler();
}
}
#pragma mark - ClearBrowsingDataUIDelegate
- (void)clearBrowsingDataTableViewController:
(ClearBrowsingDataTableViewController*)controller
wantsToOpenURL:(const GURL&)URL {
CHECK_EQ(controller, self.clearBrowsingDataTableViewController);
UrlLoadParams params = UrlLoadParams::InNewTab(URL);
params.load_strategy = self.loadStrategy;
[self.delegate
dismissHistoryClearBrowsingData:self
withCompletion:^{
UrlLoadingBrowserAgent::FromBrowser(self.browser)
->Load(params);
[self.presentationDelegate
showActiveRegularTabFromHistory];
}];
}
- (void)clearBrowsingDataTableViewControllerWantsDismissal:
(ClearBrowsingDataTableViewController*)controller {
CHECK_EQ(controller, self.clearBrowsingDataTableViewController);
[self stopWithCompletion:nil];
}
- (void)dismissClearBrowsingData {
DCHECK(self.historyClearBrowsingDataNavigationController);
[self.delegate dismissHistoryClearBrowsingData:self withCompletion:nil];
}
- (void)clearBrowsingDataTableViewControllerWasRemoved:
(ClearBrowsingDataTableViewController*)controller {
DCHECK_EQ(self.clearBrowsingDataTableViewController, controller);
[self.delegate dismissHistoryClearBrowsingData:self withCompletion:nil];
}
@end