Commit 8243bb18 authored by Nazerke's avatar Nazerke Committed by Commit Bot

[iOS][coordinator] Modernize Download Manager Coordinator.

This CL modernizes the DownloadManagerCoordinator
 - to use the superclass -initWithBaseViewController:browser:
initializer.
 - to remove the public property for dispatcher, webstatelist.
- to use self.browser to get dispatcher, webstatelist values.

Bug: 1029346, 1048402
Change-Id: Ib2efa46f23e166d7d47bdc42b0b07e6febcd840e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2036101Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Commit-Queue: Nazerke Kalidolda <nazerke@google.com>
Cr-Commit-Position: refs/heads/master@{#746784}
parent 20645c72
......@@ -753,10 +753,10 @@ NSString* const kBrowserViewControllerSnackbarCategory =
// removal.
if (!IsDownloadInfobarMessagesUIEnabled()) {
_downloadManagerCoordinator = [[DownloadManagerCoordinator alloc]
initWithBaseViewController:_browserContainerViewController];
initWithBaseViewController:_browserContainerViewController
browser:browser];
_downloadManagerCoordinator.presenter =
[[VerticalAnimationContainer alloc] init];
_downloadManagerCoordinator.dispatcher = self.dispatcher;
}
if (!base::FeatureList::IsEnabled(dialogs::kNonModalDialogs)) {
......@@ -2171,7 +2171,6 @@ NSString* const kBrowserViewControllerSnackbarCategory =
if (!IsDownloadInfobarMessagesUIEnabled()) {
// DownloadManagerCoordinator is already created.
DCHECK(_downloadManagerCoordinator);
_downloadManagerCoordinator.webStateList = self.browser->GetWebStateList();
_downloadManagerCoordinator.bottomMarginHeightAnchor =
[NamedGuide guideWithName:kSecondaryToolbarGuide view:self.contentArea]
.heightAnchor;
......
......@@ -12,15 +12,20 @@ namespace web {
class DownloadTask;
} // namespace web
@protocol BrowserCoordinatorCommands;
@class CommandDispatcher;
@protocol ContainedPresenter;
class WebStateList;
// Coordinates presentation of Download Manager UI.
@interface DownloadManagerCoordinator
: ChromeCoordinator<DownloadManagerTabHelperDelegate>
// Unavailable, use -initWithBaseViewController:browser:.
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
NS_UNAVAILABLE;
// Unavailable, use -initWithBaseViewController:browser:.
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
browserState:(ChromeBrowserState*)browserState
NS_UNAVAILABLE;
// Presents the receiver's view controller.
@property(nonatomic) id<ContainedPresenter> presenter;
......@@ -31,17 +36,12 @@ class WebStateList;
// stop method is called.
@property(nonatomic) web::DownloadTask* downloadTask;
// Needed to observe web state closing. Set to null when stop method is called.
@property(nonatomic) WebStateList* webStateList;
// Controls the height of the bottom margin.
@property(nonatomic) NSLayoutDimension* bottomMarginHeightAnchor;
// Underlying UIViewController presented by this coordinator.
@property(nonatomic, readonly) UIViewController* viewController;
@property(nonatomic, weak) CommandDispatcher* dispatcher;
@end
#endif // IOS_CHROME_BROWSER_UI_DOWNLOAD_DOWNLOAD_MANAGER_COORDINATOR_H_
......@@ -20,6 +20,7 @@
#import "ios/chrome/browser/download/download_manager_tab_helper.h"
#import "ios/chrome/browser/download/google_drive_app_util.h"
#import "ios/chrome/browser/installation_notifier.h"
#import "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/store_kit/store_kit_coordinator.h"
#import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
#import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h"
......@@ -180,7 +181,6 @@ class UnopenedDownloadsTracker : public web::DownloadTaskObserver,
@synthesize presenter = _presenter;
@synthesize animatesPresentation = _animatesPresentation;
@synthesize downloadTask = _downloadTask;
@synthesize webStateList = _webStateList;
@synthesize bottomMarginHeightAnchor = _bottomMarginHeightAnchor;
- (void)dealloc {
......@@ -190,6 +190,7 @@ class UnopenedDownloadsTracker : public web::DownloadTaskObserver,
- (void)start {
DCHECK(self.presenter);
DCHECK(self.browser);
_viewController = [[DownloadManagerViewController alloc] init];
_viewController.delegate = self;
......@@ -201,6 +202,8 @@ class UnopenedDownloadsTracker : public web::DownloadTaskObserver,
self.presenter.presentedViewController = _viewController;
self.presenter.delegate = self;
self.browser->GetWebStateList()->AddObserver(&_unopenedDownloads);
[self.presenter prepareForPresentation];
[self.presenter presentAnimated:self.animatesPresentation];
......@@ -217,7 +220,9 @@ class UnopenedDownloadsTracker : public web::DownloadTaskObserver,
completion:nil];
_confirmationDialog = nil;
_downloadTask = nullptr;
self.webStateList = nullptr;
if (self.browser)
(self.browser->GetWebStateList())->RemoveObserver(&_unopenedDownloads);
[_storeKitCoordinator stop];
_storeKitCoordinator = nil;
......@@ -225,19 +230,6 @@ class UnopenedDownloadsTracker : public web::DownloadTaskObserver,
_installDriveAlertCoordinator = nil;
}
- (void)setWebStateList:(WebStateList*)webStateList {
if (_webStateList == webStateList)
return;
if (_webStateList)
_webStateList->RemoveObserver(&_unopenedDownloads);
_webStateList = webStateList;
if (_webStateList)
_webStateList->AddObserver(&_unopenedDownloads);
}
- (UIViewController*)viewController {
return _viewController;
}
......@@ -368,8 +360,8 @@ class UnopenedDownloadsTracker : public web::DownloadTaskObserver,
if (base::FeatureList::IsEnabled(web::features::kEnablePersistentDownloads)) {
OpenDownloadsFolderActivity* customActivity =
[[OpenDownloadsFolderActivity alloc] init];
customActivity.browserHandler =
HandlerForProtocol(self.dispatcher, BrowserCoordinatorCommands);
customActivity.browserHandler = HandlerForProtocol(
self.browser->GetCommandDispatcher(), BrowserCoordinatorCommands);
activities = @[ customActivity ];
}
_openInController =
......
......@@ -19,6 +19,7 @@
#include "ios/chrome/browser/download/download_manager_metric_names.h"
#import "ios/chrome/browser/download/download_manager_tab_helper.h"
#import "ios/chrome/browser/download/google_drive_app_util.h"
#include "ios/chrome/browser/main/test_browser.h"
#import "ios/chrome/browser/ui/download/download_manager_view_controller.h"
#import "ios/chrome/browser/web_state_list/fake_web_state_list_delegate.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h"
......@@ -76,11 +77,13 @@ class DownloadManagerCoordinatorTest : public PlatformTest {
DownloadManagerCoordinatorTest()
: presenter_([[FakeContainedPresenter alloc] init]),
base_view_controller_([[UIViewController alloc] init]),
browser_(std::make_unique<TestBrowser>()),
document_interaction_controller_class_(
OCMClassMock([UIDocumentInteractionController class])),
tab_helper_(&web_state_),
coordinator_([[DownloadManagerCoordinator alloc]
initWithBaseViewController:base_view_controller_]) {
initWithBaseViewController:base_view_controller_
browser:browser_.get()]) {
[scoped_key_window_.Get() setRootViewController:base_view_controller_];
coordinator_.presenter = presenter_;
}
......@@ -99,6 +102,7 @@ class DownloadManagerCoordinatorTest : public PlatformTest {
web::WebTaskEnvironment task_environment_;
FakeContainedPresenter* presenter_;
UIViewController* base_view_controller_;
std::unique_ptr<Browser> browser_;
ScopedKeyWindow scoped_key_window_;
web::TestWebState web_state_;
id document_interaction_controller_class_;
......@@ -504,12 +508,9 @@ TEST_F(DownloadManagerCoordinatorTest, QuitDuringInProgressDownload) {
auto task = CreateTestTask();
coordinator_.downloadTask = task.get();
web::DownloadTask* task_ptr = task.get();
FakeWebStateListDelegate web_state_list_delegate;
WebStateList web_state_list(&web_state_list_delegate);
auto web_state = std::make_unique<web::TestWebState>();
web_state_list.InsertWebState(
browser_->GetWebStateList()->InsertWebState(
0, std::move(web_state), WebStateList::INSERT_NO_FLAGS, WebStateOpener());
coordinator_.webStateList = &web_state_list;
[coordinator_ start];
EXPECT_EQ(1U, base_view_controller_.childViewControllers.count);
......@@ -532,7 +533,7 @@ TEST_F(DownloadManagerCoordinatorTest, QuitDuringInProgressDownload) {
}));
// Web States are closed without user action only during app termination.
web_state_list.CloseAllWebStates(WebStateList::CLOSE_NO_FLAGS);
browser_->GetWebStateList()->CloseAllWebStates(WebStateList::CLOSE_NO_FLAGS);
// Download task is destroyed before the download is complete.
task = nullptr;
......@@ -548,7 +549,6 @@ TEST_F(DownloadManagerCoordinatorTest, QuitDuringInProgressDownload) {
static_cast<base::HistogramBase::Sample>(DownloadFileResult::Other), 1);
histogram_tester_.ExpectTotalCount("Download.IOSDownloadFileUIGoogleDrive",
0);
coordinator_.webStateList = nullptr;
}
// Tests closing view controller while the download is in progress. Coordinator
......
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