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") { ...@@ -23,6 +23,7 @@ source_set("perf_test_support") {
"//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui:ui_internal", "//ios/chrome/browser/ui:ui_internal",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/web:web_internal", "//ios/chrome/browser/web:web_internal",
"//ios/chrome/test:test_support", "//ios/chrome/test:test_support",
"//ios/chrome/test/base:perf_test_support", "//ios/chrome/test/base:perf_test_support",
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
@class BrowserViewController; @class BrowserViewController;
@class BrowserViewControllerDependencyFactory; @class BrowserViewControllerDependencyFactory;
@class CommandDispatcher;
@class TabModel; @class TabModel;
// Base class for performance tests that require a browser view controller. The // Base class for performance tests that require a browser view controller. The
...@@ -53,6 +54,7 @@ class PerfTestWithBVC : public PerfTest { ...@@ -53,6 +54,7 @@ class PerfTestWithBVC : public PerfTest {
TabModel* tab_model_; TabModel* tab_model_;
TabModel* otr_tab_model_; TabModel* otr_tab_model_;
CommandDispatcher* command_dispatcher_;
BrowserViewControllerDependencyFactory* bvc_factory_; BrowserViewControllerDependencyFactory* bvc_factory_;
BrowserViewController* bvc_; BrowserViewController* bvc_;
UIWindow* window_; UIWindow* window_;
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#import "ios/chrome/browser/tabs/tab_model.h" #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.h"
#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.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" #import "ios/chrome/browser/web/chrome_web_client.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
...@@ -106,6 +107,7 @@ void PerfTestWithBVC::SetUp() { ...@@ -106,6 +107,7 @@ void PerfTestWithBVC::SetUp() {
browserState:chrome_browser_state_ browserState:chrome_browser_state_
->GetOffTheRecordChromeBrowserState()]; ->GetOffTheRecordChromeBrowserState()];
command_dispatcher_ = [[CommandDispatcher alloc] init];
// Create the browser view controller with its testing factory. // Create the browser view controller with its testing factory.
bvc_factory_ = [[BrowserViewControllerDependencyFactory alloc] bvc_factory_ = [[BrowserViewControllerDependencyFactory alloc]
initWithBrowserState:chrome_browser_state_.get() initWithBrowserState:chrome_browser_state_.get()
...@@ -114,7 +116,8 @@ void PerfTestWithBVC::SetUp() { ...@@ -114,7 +116,8 @@ void PerfTestWithBVC::SetUp() {
initWithTabModel:tab_model_ initWithTabModel:tab_model_
browserState:chrome_browser_state_.get() browserState:chrome_browser_state_.get()
dependencyFactory:bvc_factory_ dependencyFactory:bvc_factory_
applicationCommandEndpoint:nil]; applicationCommandEndpoint:nil
commandDispatcher:command_dispatcher_];
[bvc_ setActive:YES]; [bvc_ setActive:YES];
// Create a real window to give to the browser view controller. // Create a real window to give to the browser view controller.
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
@protocol ApplicationCommands; @protocol ApplicationCommands;
@protocol BrowserCommands; @protocol BrowserCommands;
@class BrowserViewControllerDependencyFactory; @class BrowserViewControllerDependencyFactory;
@class CommandDispatcher;
class GURL; class GURL;
@protocol OmniboxFocuser; @protocol OmniboxFocuser;
@protocol PopupMenuCommands; @protocol PopupMenuCommands;
...@@ -50,6 +51,7 @@ class ChromeBrowserState; ...@@ -50,6 +51,7 @@ class ChromeBrowserState;
browserState:(ios::ChromeBrowserState*)browserState browserState:(ios::ChromeBrowserState*)browserState
dependencyFactory:(BrowserViewControllerDependencyFactory*)factory dependencyFactory:(BrowserViewControllerDependencyFactory*)factory
applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint
commandDispatcher:(CommandDispatcher*)commandDispatcher
NS_DESIGNATED_INITIALIZER; NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithNibName:(NSString*)nibNameOrNil - (instancetype)initWithNibName:(NSString*)nibNameOrNil
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h" #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/browser_view_controller_helper.h"
#import "ios/chrome/browser/ui/commands/browser_commands.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/ntp/new_tab_page_controller.h"
#import "ios/chrome/browser/ui/page_not_available_controller.h" #import "ios/chrome/browser/ui/page_not_available_controller.h"
#import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h" #import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h"
...@@ -216,11 +217,13 @@ class BrowserViewControllerTest : public BlockCleanupTest { ...@@ -216,11 +217,13 @@ class BrowserViewControllerTest : public BlockCleanupTest {
tabModel_ = tabModel; tabModel_ = tabModel;
tab_ = currentTab; tab_ = currentTab;
dependencyFactory_ = factory; dependencyFactory_ = factory;
command_dispatcher_ = [[CommandDispatcher alloc] init];
bvc_ = [[BrowserViewController alloc] bvc_ = [[BrowserViewController alloc]
initWithTabModel:tabModel_ initWithTabModel:tabModel_
browserState:chrome_browser_state_.get() browserState:chrome_browser_state_.get()
dependencyFactory:factory dependencyFactory:factory
applicationCommandEndpoint:nil]; applicationCommandEndpoint:nil
commandDispatcher:command_dispatcher_];
// Load TemplateURLService. // Load TemplateURLService.
TemplateURLService* template_url_service = TemplateURLService* template_url_service =
...@@ -265,6 +268,7 @@ class BrowserViewControllerTest : public BlockCleanupTest { ...@@ -265,6 +268,7 @@ class BrowserViewControllerTest : public BlockCleanupTest {
BrowserViewControllerHelper* bvcHelper_; BrowserViewControllerHelper* bvcHelper_;
PKAddPassesViewController* passKitViewController_; PKAddPassesViewController* passKitViewController_;
OCMockObject* dependencyFactory_; OCMockObject* dependencyFactory_;
CommandDispatcher* command_dispatcher_;
BrowserViewController* bvc_; BrowserViewController* bvc_;
UIWindow* window_; UIWindow* window_;
}; };
......
...@@ -27,7 +27,10 @@ source_set("main") { ...@@ -27,7 +27,10 @@ source_set("main") {
"//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/tabs:tabs_internal", "//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/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/snackbar",
"//ios/public/provider/chrome/browser", "//ios/public/provider/chrome/browser",
] ]
public_deps = [ public_deps = [
......
...@@ -4,47 +4,124 @@ ...@@ -4,47 +4,124 @@
#import "ios/chrome/browser/ui/main/browser_coordinator.h" #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.h"
#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.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) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #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 @implementation BrowserCoordinator
@synthesize viewController = _viewController; @synthesize dispatcher = _dispatcher;
@synthesize applicationCommandHandler = _applicationCommandHandler; // Private child coordinators
@synthesize tabModel = _tabModel; @synthesize formInputAccessoryCoordinator = _formInputAccessoryCoordinator;
@synthesize snackbarCoordinator = _snackbarCoordinator;
#pragma mark - ChromeCoordinator #pragma mark - ChromeCoordinator
- (void)start { - (void)start {
DCHECK(self.browserState); DCHECK(self.browserState);
DCHECK(!self.viewController); DCHECK(!self.viewController);
_viewController = [self createViewController]; self.dispatcher = [[CommandDispatcher alloc] init];
[self createViewController];
[self startChildCoordinators];
[super start]; [super start];
} }
- (void)stop { - (void)stop {
[_viewController browserStateDestroyed];
[_viewController shutdown];
_viewController = nil;
[super stop]; [super stop];
[self stopChildCoordinators];
[self destroyViewController];
self.dispatcher = nil;
} }
#pragma mark - Private #pragma mark - Private
// Instantiate a BrowserViewController. // Instantiates a BrowserViewController.
- (BrowserViewController*)createViewController { - (void)createViewController {
BrowserViewControllerDependencyFactory* factory = BrowserViewControllerDependencyFactory* factory =
[[BrowserViewControllerDependencyFactory alloc] [[BrowserViewControllerDependencyFactory alloc]
initWithBrowserState:self.browserState initWithBrowserState:self.browserState
webStateList:[self.tabModel webStateList]]; webStateList:[self.tabModel webStateList]];
return [[BrowserViewController alloc] _viewController = [[BrowserViewController alloc]
initWithTabModel:self.tabModel initWithTabModel:self.tabModel
browserState:self.browserState browserState:self.browserState
dependencyFactory:factory 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 @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