Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Unified Diff: ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm

Issue 2862783002: [iOS Clean] Wired up ContextMenuCommands. (Closed)
Patch Set: fix deps Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+
+- (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)];

Powered by Google App Engine
This is Rietveld 408576698