Index: ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.mm |
diff --git a/ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.mm b/ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.mm |
index da7e689e62c991041409d1aff37ac82947b84c00..754405baf19a348664322ca2a593f276e50efbaa 100644 |
--- a/ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.mm |
+++ b/ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.mm |
@@ -4,17 +4,20 @@ |
#import "ios/clean/chrome/browser/ui/tab_strip/tab_strip_coordinator.h" |
+#import "ios/clean/chrome/browser/ui/commands/tab_strip_commands.h" |
#import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_mediator.h" |
#import "ios/clean/chrome/browser/ui/tab_strip/tab_strip_view_controller.h" |
#import "ios/shared/chrome/browser/coordinator_context/coordinator_context.h" |
#import "ios/shared/chrome/browser/tabs/web_state_list.h" |
#import "ios/shared/chrome/browser/ui/browser_list/browser.h" |
+#import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" |
+#include "ios/web/public/web_state/web_state.h" |
#if !defined(__has_feature) || !__has_feature(objc_arc) |
#error "This file requires ARC support." |
#endif |
-@interface TabStripCoordinator () |
+@interface TabStripCoordinator ()<TabStripCommands> |
@property(nonatomic, strong) TabStripViewController* viewController; |
@property(nonatomic, strong) TabCollectionMediator* mediator; |
@property(nonatomic, readonly) WebStateList& webStateList; |
@@ -33,11 +36,18 @@ |
#pragma mark - BrowserCoordinator |
- (void)start { |
+ CommandDispatcher* dispatcher = self.browser->dispatcher(); |
+ [dispatcher startDispatchingToTarget:self |
+ forSelector:@selector(showTabStripTabAtIndex:)]; |
+ [dispatcher startDispatchingToTarget:self |
+ forSelector:@selector(closeTabStripTabAtIndex:)]; |
+ |
self.viewController = [[TabStripViewController alloc] init]; |
self.mediator = [[TabCollectionMediator alloc] init]; |
self.mediator.webStateList = &self.webStateList; |
self.mediator.consumer = self.viewController; |
self.viewController.dataSource = self.mediator; |
+ self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher()); |
[self.context.baseViewController presentViewController:self.viewController |
animated:self.context.animated |
@@ -45,4 +55,20 @@ |
[super start]; |
} |
+- (void)stop { |
+ [super stop]; |
+ [self.browser->dispatcher() stopDispatchingToTarget:self]; |
+} |
+ |
+#pragma mark - TabStripCommands |
+ |
+- (void)showTabStripTabAtIndex:(int)index { |
+ self.webStateList.ActivateWebStateAt(index); |
+} |
+ |
+- (void)closeTabStripTabAtIndex:(int)index { |
+ std::unique_ptr<web::WebState> closedWebState( |
+ self.webStateList.DetachWebStateAt(index)); |
+} |
+ |
@end |