Commit 768c7e94 authored by edchin's avatar edchin Committed by Commit Bot

[ios] Migrate 2 coordinators from BVC to BrowserCoordinator

This CL moves CommandDispatcher ownership out of BVC
and up into BrowserCoordinator.

This CL migrates these coordinators:
- formInputAccessoryCoordinator
- snackbarCoordinator

The goal is to migrate all coordinators from BVC to
BrowserCoordinator.

Bug: 905524
Change-Id: If7fe78cabbda32a19b2c5420ede55a8e48930563
Reviewed-on: https://chromium-review.googlesource.com/c/1336560
Commit-Queue: edchin <edchin@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Reviewed-by: default avatarRohit Rao <rohitrao@chromium.org>
Reviewed-by: default avataredchin <edchin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608795}
parent 7b6c5d7c
......@@ -23,6 +23,7 @@ source_set("perf_test_support") {
"//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui:ui_internal",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/web:web_internal",
"//ios/chrome/test:test_support",
"//ios/chrome/test/base:perf_test_support",
......
......@@ -17,6 +17,7 @@
@class BrowserViewController;
@class BrowserViewControllerDependencyFactory;
@class CommandDispatcher;
@class TabModel;
// Base class for performance tests that require a browser view controller. The
......@@ -53,6 +54,7 @@ class PerfTestWithBVC : public PerfTest {
TabModel* tab_model_;
TabModel* otr_tab_model_;
CommandDispatcher* command_dispatcher_;
BrowserViewControllerDependencyFactory* bvc_factory_;
BrowserViewController* bvc_;
UIWindow* window_;
......
......@@ -19,6 +19,7 @@
#import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/ui/browser_view_controller.h"
#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/web/chrome_web_client.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
......@@ -106,6 +107,7 @@ void PerfTestWithBVC::SetUp() {
browserState:chrome_browser_state_
->GetOffTheRecordChromeBrowserState()];
command_dispatcher_ = [[CommandDispatcher alloc] init];
// Create the browser view controller with its testing factory.
bvc_factory_ = [[BrowserViewControllerDependencyFactory alloc]
initWithBrowserState:chrome_browser_state_.get()
......@@ -114,7 +116,8 @@ void PerfTestWithBVC::SetUp() {
initWithTabModel:tab_model_
browserState:chrome_browser_state_.get()
dependencyFactory:bvc_factory_
applicationCommandEndpoint:nil];
applicationCommandEndpoint:nil
commandDispatcher:command_dispatcher_];
[bvc_ setActive:YES];
// Create a real window to give to the browser view controller.
......
......@@ -19,6 +19,7 @@
@protocol ApplicationCommands;
@protocol BrowserCommands;
@class BrowserViewControllerDependencyFactory;
@class CommandDispatcher;
class GURL;
@protocol OmniboxFocuser;
@protocol PopupMenuCommands;
......@@ -50,6 +51,7 @@ class ChromeBrowserState;
browserState:(ios::ChromeBrowserState*)browserState
dependencyFactory:(BrowserViewControllerDependencyFactory*)factory
applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint
commandDispatcher:(CommandDispatcher*)commandDispatcher
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithNibName:(NSString*)nibNameOrNil
......
......@@ -35,6 +35,7 @@
#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h"
#import "ios/chrome/browser/ui/browser_view_controller_helper.h"
#import "ios/chrome/browser/ui/commands/browser_commands.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
#import "ios/chrome/browser/ui/page_not_available_controller.h"
#import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h"
......@@ -216,11 +217,13 @@ class BrowserViewControllerTest : public BlockCleanupTest {
tabModel_ = tabModel;
tab_ = currentTab;
dependencyFactory_ = factory;
command_dispatcher_ = [[CommandDispatcher alloc] init];
bvc_ = [[BrowserViewController alloc]
initWithTabModel:tabModel_
browserState:chrome_browser_state_.get()
dependencyFactory:factory
applicationCommandEndpoint:nil];
applicationCommandEndpoint:nil
commandDispatcher:command_dispatcher_];
// Load TemplateURLService.
TemplateURLService* template_url_service =
......@@ -265,6 +268,7 @@ class BrowserViewControllerTest : public BlockCleanupTest {
BrowserViewControllerHelper* bvcHelper_;
PKAddPassesViewController* passKitViewController_;
OCMockObject* dependencyFactory_;
CommandDispatcher* command_dispatcher_;
BrowserViewController* bvc_;
UIWindow* window_;
};
......
......@@ -27,7 +27,10 @@ source_set("main") {
"//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/tabs:tabs_internal",
"//ios/chrome/browser/ui/autofill",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/snackbar",
"//ios/public/provider/chrome/browser",
]
public_deps = [
......
......@@ -4,47 +4,124 @@
#import "ios/chrome/browser/ui/main/browser_coordinator.h"
#import "ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.h"
#import "ios/chrome/browser/ui/browser_view_controller.h"
#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h"
#import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/ui/snackbar/snackbar_coordinator.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface BrowserCoordinator ()<FormInputAccessoryCoordinatorDelegate>
// Handles command dispatching.
@property(nonatomic, strong) CommandDispatcher* dispatcher;
// =================================================
// Child Coordinators, listed in alphabetical order.
// =================================================
// Coordinator in charge of the presenting autofill options above the
// keyboard.
@property(nonatomic, strong)
FormInputAccessoryCoordinator* formInputAccessoryCoordinator;
// Coordinator for displaying snackbars.
@property(nonatomic, strong) SnackbarCoordinator* snackbarCoordinator;
@end
@implementation BrowserCoordinator
@synthesize viewController = _viewController;
@synthesize applicationCommandHandler = _applicationCommandHandler;
@synthesize tabModel = _tabModel;
@synthesize dispatcher = _dispatcher;
// Private child coordinators
@synthesize formInputAccessoryCoordinator = _formInputAccessoryCoordinator;
@synthesize snackbarCoordinator = _snackbarCoordinator;
#pragma mark - ChromeCoordinator
- (void)start {
DCHECK(self.browserState);
DCHECK(!self.viewController);
_viewController = [self createViewController];
self.dispatcher = [[CommandDispatcher alloc] init];
[self createViewController];
[self startChildCoordinators];
[super start];
}
- (void)stop {
[_viewController browserStateDestroyed];
[_viewController shutdown];
_viewController = nil;
[super stop];
[self stopChildCoordinators];
[self destroyViewController];
self.dispatcher = nil;
}
#pragma mark - Private
// Instantiate a BrowserViewController.
- (BrowserViewController*)createViewController {
// Instantiates a BrowserViewController.
- (void)createViewController {
BrowserViewControllerDependencyFactory* factory =
[[BrowserViewControllerDependencyFactory alloc]
initWithBrowserState:self.browserState
webStateList:[self.tabModel webStateList]];
return [[BrowserViewController alloc]
_viewController = [[BrowserViewController alloc]
initWithTabModel:self.tabModel
browserState:self.browserState
dependencyFactory:factory
applicationCommandEndpoint:self.applicationCommandHandler];
applicationCommandEndpoint:self.applicationCommandHandler
commandDispatcher:self.dispatcher];
}
// Shuts down the BrowserViewController.
- (void)destroyViewController {
[self.viewController browserStateDestroyed];
[self.viewController shutdown];
_viewController = nil;
}
// Starts child coordinators.
- (void)startChildCoordinators {
// Dispatcher should be instantiated so that it can be passed to child
// coordinators.
DCHECK(self.dispatcher);
self.formInputAccessoryCoordinator = [[FormInputAccessoryCoordinator alloc]
initWithBaseViewController:self.viewController
browserState:self.browserState
webStateList:self.tabModel.webStateList];
self.formInputAccessoryCoordinator.delegate = self;
[self.formInputAccessoryCoordinator start];
self.snackbarCoordinator = [[SnackbarCoordinator alloc] init];
self.snackbarCoordinator.dispatcher = self.dispatcher;
[self.snackbarCoordinator start];
}
// Stops child coordinators.
- (void)stopChildCoordinators {
[self.formInputAccessoryCoordinator stop];
self.formInputAccessoryCoordinator = nil;
[self.snackbarCoordinator stop];
self.snackbarCoordinator = nil;
}
#pragma mark - FormInputAccessoryCoordinatorDelegate
- (void)openPasswordSettings {
[self.applicationCommandHandler
showSavedPasswordsSettingsFromViewController:self.viewController];
}
- (void)openAddressSettings {
[self.applicationCommandHandler
showProfileSettingsFromViewController:self.viewController];
}
- (void)openCreditCardSettings {
[self.applicationCommandHandler
showCreditCardSettingsFromViewController:self.viewController];
}
@end
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