Commit 3f5ddd2f authored by Stepan Khapugin's avatar Stepan Khapugin Committed by Commit Bot

[multiball] Move mainCoordinator to SceneController.

Reparents the tab grid to SceneController. Note that the lazy getter
loses a DCHECK - it seems too hard to cleanly port to SceneController
at the moment, though once multiwindow is operational we should add new
invariant checks everywhere.

Bug: 1045657
Change-Id: I7e4eecd58bea4338a634f9e01e2cbc255c49c328
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2087337
Commit-Queue: Stepan Khapugin <stkhapugin@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#747694}
parent 84525819
...@@ -125,7 +125,6 @@ ...@@ -125,7 +125,6 @@
#import "ios/chrome/browser/ui/main/browser_view_wrangler.h" #import "ios/chrome/browser/ui/main/browser_view_wrangler.h"
#import "ios/chrome/browser/ui/main/scene_controller_guts.h" #import "ios/chrome/browser/ui/main/scene_controller_guts.h"
#import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
#include "ios/chrome/browser/ui/tab_grid/tab_grid_coordinator.h"
#import "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/ui_feature_flags.h"
#include "ios/chrome/browser/ui/util/ui_util.h" #include "ios/chrome/browser/ui/util/ui_util.h"
#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
...@@ -319,11 +318,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -319,11 +318,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
// The ChromeBrowserState associated with the main (non-OTR) browsing mode. // The ChromeBrowserState associated with the main (non-OTR) browsing mode.
@property(nonatomic, assign) ChromeBrowserState* mainBrowserState; // Weak. @property(nonatomic, assign) ChromeBrowserState* mainBrowserState; // Weak.
// The main coordinator, lazily created the first time it is accessed. Manages
// the main view controller. This property should not be accessed before the
// browser has started up to the FOREGROUND stage.
@property(nonatomic, readonly) TabGridCoordinator* mainCoordinator;
// Returns whether the restore infobar should be displayed. // Returns whether the restore infobar should be displayed.
- (bool)mustShowRestoreInfobar; - (bool)mustShowRestoreInfobar;
// Returns the set of the sessions ids of the tabs in the given |tabModel|. // Returns the set of the sessions ids of the tabs in the given |tabModel|.
...@@ -402,8 +396,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -402,8 +396,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
@synthesize isColdStart = _isColdStart; @synthesize isColdStart = _isColdStart;
@synthesize startupParameters = _startupParameters; @synthesize startupParameters = _startupParameters;
@synthesize appLaunchTime = _appLaunchTime; @synthesize appLaunchTime = _appLaunchTime;
// Defined in private interface
@synthesize mainCoordinator = _mainCoordinator;
@synthesize tabSwitcherIsActive; @synthesize tabSwitcherIsActive;
#pragma mark - Application lifecycle #pragma mark - Application lifecycle
...@@ -665,24 +657,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -665,24 +657,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
return self.sceneController.browserViewWrangler; return self.sceneController.browserViewWrangler;
} }
- (TabGridCoordinator*)mainCoordinator {
if (_browserInitializationStage == INITIALIZATION_STAGE_BASIC) {
NOTREACHED() << "mainCoordinator accessed too early in initialization.";
return nil;
}
if (!_mainCoordinator) {
// Lazily create the main coordinator.
TabGridCoordinator* tabGridCoordinator =
[[TabGridCoordinator alloc] initWithWindow:self.window
applicationCommandEndpoint:self.sceneController
browsingDataCommandEndpoint:self];
tabGridCoordinator.regularBrowser = self.mainBrowser;
tabGridCoordinator.incognitoBrowser = self.otrBrowser;
_mainCoordinator = tabGridCoordinator;
}
return _mainCoordinator;
}
- (BOOL)isFirstLaunchAfterUpgrade { - (BOOL)isFirstLaunchAfterUpgrade {
return [[PreviousSessionInfo sharedInstance] isFirstSessionAfterUpgrade]; return [[PreviousSessionInfo sharedInstance] isFirstSessionAfterUpgrade];
} }
...@@ -718,15 +692,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData( ...@@ -718,15 +692,6 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
// Teardown UI state that is associated with scenes. // Teardown UI state that is associated with scenes.
[self.sceneController teardownUI]; [self.sceneController teardownUI];
[_mainCoordinator stop];
_mainCoordinator = nil;
// Invariant: The UI is stopped before the model is shutdown.
DCHECK(!_mainCoordinator);
[self.sceneController.browserViewWrangler shutdown];
self.sceneController.browserViewWrangler = nil;
// End of per-window code. // End of per-window code.
OmahaService::Stop(); OmahaService::Stop();
......
...@@ -46,7 +46,6 @@ class ChromeBrowserState; ...@@ -46,7 +46,6 @@ class ChromeBrowserState;
- (BrowserViewController*)currentBVC; - (BrowserViewController*)currentBVC;
- (BrowserViewController*)mainBVC; - (BrowserViewController*)mainBVC;
- (BrowserViewController*)otrBVC; - (BrowserViewController*)otrBVC;
- (TabGridCoordinator*)mainCoordinator;
- (id<BrowserInterfaceProvider>)interfaceProvider; - (id<BrowserInterfaceProvider>)interfaceProvider;
- (UIWindow*)window; - (UIWindow*)window;
- (NSDictionary*)launchOptions; - (NSDictionary*)launchOptions;
......
...@@ -165,6 +165,11 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -165,6 +165,11 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
// in a modal dialog. // in a modal dialog.
@property(nonatomic, assign) BOOL presentingFirstRunUI; @property(nonatomic, assign) BOOL presentingFirstRunUI;
// The main coordinator, lazily created the first time it is accessed. Manages
// the main view controller. This property should not be accessed before the
// browser has started up to the FOREGROUND stage.
@property(nonatomic, strong) TabGridCoordinator* mainCoordinator;
@end @end
@implementation SceneController @implementation SceneController
...@@ -196,6 +201,20 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -196,6 +201,20 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
#pragma mark - Setters and getters #pragma mark - Setters and getters
- (TabGridCoordinator*)mainCoordinator {
if (!_mainCoordinator) {
// Lazily create the main coordinator.
TabGridCoordinator* tabGridCoordinator =
[[TabGridCoordinator alloc] initWithWindow:self.sceneState.window
applicationCommandEndpoint:self
browsingDataCommandEndpoint:self.mainController];
tabGridCoordinator.regularBrowser = self.mainInterface.browser;
tabGridCoordinator.incognitoBrowser = self.incognitoInterface.browser;
_mainCoordinator = tabGridCoordinator;
}
return _mainCoordinator;
}
- (id<BrowserInterface>)mainInterface { - (id<BrowserInterface>)mainInterface {
return self.mainController.interfaceProvider.mainInterface; return self.mainController.interfaceProvider.mainInterface;
} }
...@@ -312,9 +331,9 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -312,9 +331,9 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
[self.mainController.window makeKeyAndVisible]; [self.mainController.window makeKeyAndVisible];
// Lazy init of mainCoordinator. // Lazy init of mainCoordinator.
[self.mainController.mainCoordinator start]; [self.mainCoordinator start];
_tabSwitcher = self.mainController.mainCoordinator.tabSwitcher; _tabSwitcher = self.mainCoordinator.tabSwitcher;
// Call -restoreInternalState so that the grid shows the correct panel. // Call -restoreInternalState so that the grid shows the correct panel.
[_tabSwitcher [_tabSwitcher
restoreInternalStateWithMainBrowser:self.mainInterface.browser restoreInternalStateWithMainBrowser:self.mainInterface.browser
...@@ -372,6 +391,12 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -372,6 +391,12 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
[self.historyCoordinator stop]; [self.historyCoordinator stop];
self.historyCoordinator = nil; self.historyCoordinator = nil;
[_mainCoordinator stop];
_mainCoordinator = nil;
[self.browserViewWrangler shutdown];
self.browserViewWrangler = nil;
self.hasInitializedUI = NO; self.hasInitializedUI = NO;
} }
...@@ -525,8 +550,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -525,8 +550,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
snapshotResult); snapshotResult);
}); });
} }
[self.mainController.mainCoordinator [self.mainCoordinator prepareToShowTabSwitcher:self.tabSwitcher];
prepareToShowTabSwitcher:self.tabSwitcher];
} }
- (void)displayTabSwitcher { - (void)displayTabSwitcher {
...@@ -689,7 +713,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -689,7 +713,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
DCHECK(!self.signinInteractionCoordinator.isSettingsViewPresented); DCHECK(!self.signinInteractionCoordinator.isSettingsViewPresented);
if (!baseViewController) { if (!baseViewController) {
DCHECK_EQ(self.mainController.currentBVC, DCHECK_EQ(self.mainController.currentBVC,
self.mainController.mainCoordinator.activeViewController); self.mainCoordinator.activeViewController);
baseViewController = self.mainController.currentBVC; baseViewController = self.mainController.currentBVC;
} }
...@@ -718,7 +742,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -718,7 +742,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
DCHECK(!self.signinInteractionCoordinator.isSettingsViewPresented); DCHECK(!self.signinInteractionCoordinator.isSettingsViewPresented);
if (!baseViewController) { if (!baseViewController) {
DCHECK_EQ(self.mainController.currentBVC, DCHECK_EQ(self.mainController.currentBVC,
self.mainController.mainCoordinator.activeViewController); self.mainCoordinator.activeViewController);
baseViewController = self.mainController.currentBVC; baseViewController = self.mainController.currentBVC;
} }
...@@ -852,8 +876,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -852,8 +876,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
} }
- (UIImage*)currentPageScreenshot { - (UIImage*)currentPageScreenshot {
UIView* lastView = UIView* lastView = self.mainCoordinator.activeViewController.view;
self.mainController.mainCoordinator.activeViewController.view;
DCHECK(lastView); DCHECK(lastView);
CGFloat scale = 0.0; CGFloat scale = 0.0;
// For screenshots of the tab switcher we need to use a scale of 1.0 to avoid // For screenshots of the tab switcher we need to use a scale of 1.0 to avoid
...@@ -945,7 +968,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -945,7 +968,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
// The tab switcher dismissal animation runs // The tab switcher dismissal animation runs
// as part of the BVC presentation process. The BVC is presented before the // as part of the BVC presentation process. The BVC is presented before the
// animations begin, so it should be the current active VC at this point. // animations begin, so it should be the current active VC at this point.
DCHECK_EQ(self.mainController.mainCoordinator.activeViewController, DCHECK_EQ(self.mainCoordinator.activeViewController,
self.mainController.currentBVC); self.mainController.currentBVC);
if (self.modeToDisplayOnTabSwitcherDismissal == if (self.modeToDisplayOnTabSwitcherDismissal ==
...@@ -1161,9 +1184,8 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -1161,9 +1184,8 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
[self.signinInteractionCoordinator cancelAndDismiss]; [self.signinInteractionCoordinator cancelAndDismiss];
// History coordinator can be started on top of the tab grid. This is not // History coordinator can be started on top of the tab grid. This is not
// true of the other tab switchers. // true of the other tab switchers.
DCHECK(self.mainController.mainCoordinator); DCHECK(self.mainCoordinator);
[self.mainController.mainCoordinator [self.mainCoordinator stopChildCoordinatorsWithCompletion:completion];
stopChildCoordinatorsWithCompletion:completion];
}; };
// As a top level rule, if the settings are showing, they need to be // As a top level rule, if the settings are showing, they need to be
...@@ -1400,9 +1422,8 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -1400,9 +1422,8 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
[weakCurrentBVC.dispatcher focusOmnibox]; [weakCurrentBVC.dispatcher focusOmnibox];
}; };
} }
[self.mainController.mainCoordinator [self.mainCoordinator showTabViewController:self.currentInterface.bvc
showTabViewController:self.currentInterface.bvc completion:completion];
completion:completion];
[self.currentInterface.bvc.dispatcher [self.currentInterface.bvc.dispatcher
setIncognitoContentVisible:(self.currentInterface == setIncognitoContentVisible:(self.currentInterface ==
self.incognitoInterface)]; self.incognitoInterface)];
...@@ -1456,7 +1477,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -1456,7 +1477,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
// TODO(crbug.com/754642): Implement TopPresentedViewControllerFrom() // TODO(crbug.com/754642): Implement TopPresentedViewControllerFrom()
// privately. // privately.
return top_view_controller::TopPresentedViewControllerFrom( return top_view_controller::TopPresentedViewControllerFrom(
self.mainController.mainCoordinator.viewController); self.mainCoordinator.viewController);
} }
#pragma mark - WebStateListObserving #pragma mark - WebStateListObserving
...@@ -1570,7 +1591,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1; ...@@ -1570,7 +1591,7 @@ const NSTimeInterval kDisplayPromoDelay = 0.1;
self.mainController.tabSwitcherIsActive = YES; self.mainController.tabSwitcherIsActive = YES;
[self.tabSwitcher setDelegate:self]; [self.tabSwitcher setDelegate:self];
[self.mainController.mainCoordinator showTabSwitcher:self.tabSwitcher]; [self.mainCoordinator showTabSwitcher:self.tabSwitcher];
} }
// Destroys and rebuilds the incognito browser state. // Destroys and rebuilds the incognito browser state.
......
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