Chromium Code Reviews| Index: ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm |
| diff --git a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm |
| index 091bbecee47975f6be77d6ed58155cfcee3181ac..104978959777a314246cb43c5cda533d5725bd58 100644 |
| --- a/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm |
| +++ b/ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm |
| @@ -6,12 +6,15 @@ |
| #include <memory> |
| +#include "base/mac/foundation_util.h" |
| #include "base/strings/sys_string_conversions.h" |
| #include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
| #import "ios/chrome/browser/web_state_list/web_state_list.h" |
| +#import "ios/clean/chrome/browser/ui/commands/context_menu_commands.h" |
| #import "ios/clean/chrome/browser/ui/commands/settings_commands.h" |
| #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h" |
| #import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h" |
| +#import "ios/clean/chrome/browser/ui/context_menu/context_menu_context_impl.h" |
| #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h" |
| #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h" |
| #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h" |
| @@ -30,12 +33,14 @@ |
| #error "This file requires ARC support." |
| #endif |
| -@interface TabGridCoordinator ()<SettingsCommands, |
| +@interface TabGridCoordinator ()<ContextMenuCommands, |
| + SettingsCommands, |
| TabGridCommands, |
| ToolsMenuCommands> |
| @property(nonatomic, strong) TabGridViewController* viewController; |
| @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator; |
| @property(nonatomic, weak) ToolsCoordinator* toolsMenuCoordinator; |
| +@property(nonatomic, weak) TabCoordinator* activeTabCoordinator; |
| @property(nonatomic, readonly) WebStateList& webStateList; |
| @property(nonatomic, strong) TabGridMediator* mediator; |
| @end |
| @@ -44,6 +49,7 @@ @implementation TabGridCoordinator |
| @synthesize viewController = _viewController; |
| @synthesize settingsCoordinator = _settingsCoordinator; |
| @synthesize toolsMenuCoordinator = _toolsMenuCoordinator; |
| +@synthesize activeTabCoordinator = _activeTabCoordinator; |
| @synthesize mediator = _mediator; |
| #pragma mark - Properties |
| @@ -58,6 +64,7 @@ - (void)start { |
| self.mediator = [[TabGridMediator alloc] init]; |
| self.mediator.webStateList = &self.webStateList; |
| + [self registerForContextMenuCommands]; |
| [self registerForSettingsCommands]; |
| [self registerForTabGridCommands]; |
| [self registerForToolsMenuCommands]; |
| @@ -99,13 +106,53 @@ - (void)childCoordinatorWillStop:(BrowserCoordinator*)childCoordinator { |
| completion:nil]; |
| } |
| +#pragma mark - ContextMenuCommands |
| + |
| +- (void)openContextMenuLinkInNewTab:(ContextMenuContext*)context { |
| + [self createAndShowNewTabInTabGrid]; |
| + ContextMenuContextImpl* contextImpl = |
| + base::mac::ObjCCastStrict<ContextMenuContextImpl>(context); |
| + [self openURL:net::NSURLWithGURL(contextImpl.linkURL)]; |
| +} |
| + |
| +- (void)openContextMenuImageInNewTab:(ContextMenuContext*)context { |
| + [self createAndShowNewTabInTabGrid]; |
| + ContextMenuContextImpl* contextImpl = |
| + base::mac::ObjCCastStrict<ContextMenuContextImpl>(context); |
| + [self openURL:net::NSURLWithGURL(contextImpl.imageURL)]; |
| +} |
| + |
| +#pragma mark - SettingsCommands |
|
kkhorimoto
2017/05/24 08:48:46
These were just moved to match the order in which
|
| + |
| +- (void)showSettings { |
| + CommandDispatcher* dispatcher = self.browser->dispatcher(); |
| + [dispatcher startDispatchingToTarget:self |
| + forSelector:@selector(closeSettings)]; |
| + SettingsCoordinator* settingsCoordinator = [[SettingsCoordinator alloc] init]; |
| + [self addOverlayCoordinator:settingsCoordinator]; |
| + self.settingsCoordinator = settingsCoordinator; |
| + [settingsCoordinator start]; |
| +} |
| + |
| +- (void)closeSettings { |
| + CommandDispatcher* dispatcher = self.browser->dispatcher(); |
| + [dispatcher stopDispatchingForSelector:@selector(closeSettings)]; |
| + [self.settingsCoordinator stop]; |
| + [self.settingsCoordinator.parentCoordinator |
| + removeChildCoordinator:self.settingsCoordinator]; |
| + // self.settingsCoordinator should be presumed to be nil after this point. |
| +} |
| + |
| #pragma mark - TabGridCommands |
| - (void)showTabGridTabAtIndex:(int)index { |
| self.webStateList.ActivateWebStateAt(index); |
| // PLACEHOLDER: The tab coordinator should be able to get the active webState |
| // on its own. |
| + [self.activeTabCoordinator stop]; |
| + [self removeChildCoordinator:self.activeTabCoordinator]; |
| TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init]; |
| + self.activeTabCoordinator = tabCoordinator; |
| tabCoordinator.webState = self.webStateList.GetWebStateAt(index); |
| tabCoordinator.presentationKey = |
| [NSIndexPath indexPathForItem:index inSection:0]; |
| @@ -155,27 +202,6 @@ - (void)closeToolsMenu { |
| [self removeChildCoordinator:self.toolsMenuCoordinator]; |
| } |
| -#pragma mark - SettingsCommands |
| - |
| -- (void)showSettings { |
| - CommandDispatcher* dispatcher = self.browser->dispatcher(); |
| - [dispatcher startDispatchingToTarget:self |
| - forSelector:@selector(closeSettings)]; |
| - SettingsCoordinator* settingsCoordinator = [[SettingsCoordinator alloc] init]; |
| - [self addOverlayCoordinator:settingsCoordinator]; |
| - self.settingsCoordinator = settingsCoordinator; |
| - [settingsCoordinator start]; |
| -} |
| - |
| -- (void)closeSettings { |
| - CommandDispatcher* dispatcher = self.browser->dispatcher(); |
| - [dispatcher stopDispatchingForSelector:@selector(closeSettings)]; |
| - [self.settingsCoordinator stop]; |
| - [self.settingsCoordinator.parentCoordinator |
| - removeChildCoordinator:self.settingsCoordinator]; |
| - // self.settingsCoordinator should be presumed to be nil after this point. |
| -} |
| - |
| #pragma mark - URLOpening |
| - (void)openURL:(NSURL*)URL { |
| @@ -195,6 +221,19 @@ - (void)openURL:(NSURL*)URL { |
| #pragma mark - PrivateMethods |
| +- (void)registerForContextMenuCommands { |
| + // Right now these are unregistered in |-stop|. However, once incognito is |
| + // implemented, these commands will need to be unregistered before switching |
| + // to incognito mode, as "open in new tab" commands are meant to be handled |
| + // by the incognito TabGridCoordinator. |
| + [self.browser->dispatcher() |
| + startDispatchingToTarget:self |
| + forSelector:@selector(openContextMenuLinkInNewTab:)]; |
| + [self.browser->dispatcher() |
| + startDispatchingToTarget:self |
| + forSelector:@selector(openContextMenuImageInNewTab:)]; |
| +} |
| + |
| - (void)registerForSettingsCommands { |
| [self.browser->dispatcher() startDispatchingToTarget:self |
| forSelector:@selector(showSettings)]; |