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 faf15db3dab3897ec8370185d6179454d6d03511..8fe33ea895b431b8b23caa2ef362ecbdb2ab95f1 100644 |
--- a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm |
+++ b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm |
@@ -8,12 +8,16 @@ |
#include "base/mac/foundation_util.h" |
#include "base/memory/ptr_util.h" |
+#include "ios/chrome/browser/chrome_url_constants.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/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" |
@@ -29,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 { |
@@ -40,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 |
@@ -50,10 +59,15 @@ 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]; |
[webCoordinator start]; |
+ self.webCoordinator = webCoordinator; |
ToolbarCoordinator* toolbarCoordinator = [[ToolbarCoordinator alloc] init]; |
toolbarCoordinator.webState = self.webState; |
@@ -64,6 +78,15 @@ const BOOL kUseBottomToolbar = NO; |
[self addChildCoordinator:tabStripCoordinator]; |
[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(kChromeUINewTabURL)) { |
+ self.viewController.contentViewController = |
+ self.ntpCoordinator.viewController; |
+ } |
+ |
[super start]; |
} |
@@ -75,6 +98,7 @@ const BOOL kUseBottomToolbar = NO; |
[child stop]; |
} |
_webStateObserver.reset(); |
+ [self.browser->dispatcher() stopDispatchingToTarget:self]; |
} |
- (void)childCoordinatorDidStart:(BrowserCoordinator*)childCoordinator { |
@@ -89,6 +113,10 @@ const BOOL kUseBottomToolbar = NO; |
} |
} |
+- (void)childCoordinatorWillStop:(BrowserCoordinator*)childCoordinator { |
+ self.viewController.contentViewController = nil; |
+} |
+ |
- (BOOL)canAddOverlayCoordinator:(BrowserCoordinator*)overlayCoordinator { |
// This coordinator will always accept overlay coordinators. |
return YES; |
@@ -112,10 +140,21 @@ const BOOL kUseBottomToolbar = NO; |
// optimization in some equivalent to loadURL. |
- (void)webState:(web::WebState*)webState |
didCommitNavigationWithDetails:(const web::LoadCommittedDetails&)details { |
- if (webState->GetLastCommittedURL() == GURL("chrome://newtab/")) { |
+ if (webState->GetLastCommittedURL() == GURL(kChromeUINewTabURL)) { |
NTPCoordinator* ntpCoordinator = [[NTPCoordinator alloc] init]; |
[self addChildCoordinator:ntpCoordinator]; |
[ntpCoordinator start]; |
+ 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; |
} |
} |
@@ -141,4 +180,10 @@ animationControllerForDismissedController:(UIViewController*)dismissed { |
return animator; |
} |
+#pragma mark - TabCommands |
+ |
+- (void)loadURL:(web::NavigationManager::WebLoadParams)params { |
+ self.webState->GetNavigationManager()->LoadURLWithParams(params); |
+} |
+ |
@end |