Chromium Code Reviews| Index: ios/clean/chrome/browser/ui/tab/tab_coordinator.mm |
| diff --git a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm |
| index 59497cb2e159e0165b1fa94e3b025c0ca8759c21..3f57ec3758a5687fd48d18b411bd79f9d40d860d 100644 |
| --- a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm |
| +++ b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm |
| @@ -9,12 +9,15 @@ |
| #include "base/mac/foundation_util.h" |
| #include "base/memory/ptr_util.h" |
| #import "ios/clean/chrome/browser/ui/animators/zoom_transition_animator.h" |
| -#import "ios/clean/chrome/browser/ui/ntp/new_tab_page_coordinator.h" |
| +#import "ios/clean/chrome/browser/ui/commands/tab_commands.h" |
| +#import "ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h" |
| #import "ios/clean/chrome/browser/ui/tab/tab_container_view_controller.h" |
| #import "ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.h" |
| #import "ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.h" |
| #import "ios/clean/chrome/browser/ui/web_contents/web_coordinator.h" |
| #import "ios/shared/chrome/browser/coordinator_context/coordinator_context.h" |
| +#import "ios/shared/chrome/browser/ui/browser_list/browser.h" |
| +#import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" |
| #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.h" |
| #import "ios/web/public/web_state/web_state.h" |
| #import "ios/web/public/web_state/web_state_observer_bridge.h" |
| @@ -30,8 +33,11 @@ const BOOL kUseBottomToolbar = NO; |
| } // namespace |
| @interface TabCoordinator ()<CRWWebStateObserver, |
| + TabCommands, |
| UIViewControllerTransitioningDelegate> |
| @property(nonatomic, strong) TabContainerViewController* viewController; |
| +@property(nonatomic, weak) NTPCoordinator* ntpCoordinator; |
| +@property(nonatomic, weak) WebCoordinator* webCoordinator; |
| @end |
| @implementation TabCoordinator { |
| @@ -41,6 +47,8 @@ const BOOL kUseBottomToolbar = NO; |
| @synthesize presentationKey = _presentationKey; |
| @synthesize viewController = _viewController; |
| @synthesize webState = _webState; |
| +@synthesize webCoordinator = _webCoordinator; |
| +@synthesize ntpCoordinator = _ntpCoordinator; |
| #pragma mark - BrowserCoordinator |
| @@ -51,6 +59,10 @@ const BOOL kUseBottomToolbar = NO; |
| _webStateObserver = |
| base::MakeUnique<web::WebStateObserverBridge>(self.webState, self); |
| + CommandDispatcher* dispatcher = self.browser->dispatcher(); |
| + // TabCommands |
| + [dispatcher startDispatchingToTarget:self forSelector:@selector(loadURL:)]; |
| + |
| WebCoordinator* webCoordinator = [[WebCoordinator alloc] init]; |
| webCoordinator.webState = self.webState; |
| [self addChildCoordinator:webCoordinator]; |
| @@ -58,6 +70,7 @@ const BOOL kUseBottomToolbar = NO; |
| // view controller. |
| webCoordinator.context.baseViewController = nil; |
| [webCoordinator start]; |
| + self.webCoordinator = webCoordinator; |
| ToolbarCoordinator* toolbarCoordinator = [[ToolbarCoordinator alloc] init]; |
| toolbarCoordinator.webState = self.webState; |
| @@ -73,9 +86,19 @@ const BOOL kUseBottomToolbar = NO; |
| tabStripCoordinator.context.baseViewController = nil; |
| [tabStripCoordinator start]; |
| + // PLACEHOLDER: Fix the order of events here. The ntpCoordinator was already |
| + // created above when |webCoordinator.webState = self.webState;| triggers |
| + // a load event, but then the webCoordinator stomps on the |
| + // contentViewController when it starts afterwards. |
| + if (self.webState->GetLastCommittedURL() == GURL("chrome://newtab/")) { |
|
marq (ping after 24h)
2017/04/07 12:25:01
Use kChromeUINewTabURL from ios/chrome/browser/chr
justincohen
2017/04/07 15:27:30
Done.
|
| + self.viewController.contentViewController = |
| + self.ntpCoordinator.viewController; |
| + } |
| + |
| [self.context.baseViewController presentViewController:self.viewController |
| animated:self.context.animated |
| completion:nil]; |
| + |
| [super start]; |
| } |
| @@ -86,6 +109,7 @@ const BOOL kUseBottomToolbar = NO; |
| for (BrowserCoordinator* child in self.children) { |
| [child stop]; |
| } |
| + |
| [self.viewController.presentingViewController |
| dismissViewControllerAnimated:self.context.animated |
| completion:nil]; |
| @@ -99,9 +123,15 @@ const BOOL kUseBottomToolbar = NO; |
| self.viewController.contentViewController = coordinator.viewController; |
| } else if ([coordinator isKindOfClass:[TabStripCoordinator class]]) { |
| self.viewController.tabStripViewController = coordinator.viewController; |
| + } else if ([coordinator isKindOfClass:[NTPCoordinator class]]) { |
| + self.viewController.contentViewController = coordinator.viewController; |
| } |
| } |
| +- (void)childCoordinatorWillStop:(BrowserCoordinator*)childCoordinator { |
| + self.viewController.contentViewController = nil; |
| +} |
| + |
| - (BOOL)canAddOverlayCoordinator:(BrowserCoordinator*)overlayCoordinator { |
| // This coordinator will always accept overlay coordinators. |
| return YES; |
| @@ -130,7 +160,17 @@ const BOOL kUseBottomToolbar = NO; |
| [self addChildCoordinator:ntpCoordinator]; |
| ntpCoordinator.context.baseViewController = nil; |
| [ntpCoordinator start]; |
| - self.viewController.contentViewController = ntpCoordinator.viewController; |
| + self.ntpCoordinator = ntpCoordinator; |
| + } |
| +} |
| + |
| +- (void)webState:(web::WebState*)webState |
| + didStartProvisionalNavigationForURL:(const GURL&)URL { |
| + if (self.ntpCoordinator) { |
| + [self.ntpCoordinator stop]; |
| + [self removeChildCoordinator:self.ntpCoordinator]; |
| + self.viewController.contentViewController = |
| + self.webCoordinator.viewController; |
| } |
| } |
| @@ -156,4 +196,10 @@ animationControllerForDismissedController:(UIViewController*)dismissed { |
| return animator; |
| } |
| +#pragma mark - TabCommands |
| + |
| +- (void)loadURL:(web::NavigationManager::WebLoadParams)params { |
| + self.webState->GetNavigationManager()->LoadURLWithParams(params); |
| +} |
| + |
| @end |