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

Side by Side 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, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.h" 5 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_coordinator.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/mac/foundation_util.h"
9 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
10 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" 11 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
11 #import "ios/chrome/browser/web_state_list/web_state_list.h" 12 #import "ios/chrome/browser/web_state_list/web_state_list.h"
13 #import "ios/clean/chrome/browser/ui/commands/context_menu_commands.h"
12 #import "ios/clean/chrome/browser/ui/commands/settings_commands.h" 14 #import "ios/clean/chrome/browser/ui/commands/settings_commands.h"
13 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h" 15 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h"
14 #import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h" 16 #import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h"
17 #import "ios/clean/chrome/browser/ui/context_menu/context_menu_context_impl.h"
15 #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h" 18 #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h"
16 #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h" 19 #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h"
17 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h" 20 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h"
18 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h" 21 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h"
19 #import "ios/clean/chrome/browser/ui/tools/tools_coordinator.h" 22 #import "ios/clean/chrome/browser/ui/tools/tools_coordinator.h"
20 #import "ios/shared/chrome/browser/ui/browser_list/browser.h" 23 #import "ios/shared/chrome/browser/ui/browser_list/browser.h"
21 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" 24 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
22 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal. h" 25 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal. h"
23 #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h" 26 #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h"
24 #import "ios/web/public/navigation_manager.h" 27 #import "ios/web/public/navigation_manager.h"
25 #include "ios/web/public/web_state/web_state.h" 28 #include "ios/web/public/web_state/web_state.h"
26 #import "net/base/mac/url_conversions.h" 29 #import "net/base/mac/url_conversions.h"
27 #include "ui/base/page_transition_types.h" 30 #include "ui/base/page_transition_types.h"
28 31
29 #if !defined(__has_feature) || !__has_feature(objc_arc) 32 #if !defined(__has_feature) || !__has_feature(objc_arc)
30 #error "This file requires ARC support." 33 #error "This file requires ARC support."
31 #endif 34 #endif
32 35
33 @interface TabGridCoordinator ()<SettingsCommands, 36 @interface TabGridCoordinator ()<ContextMenuCommands,
37 SettingsCommands,
34 TabGridCommands, 38 TabGridCommands,
35 ToolsMenuCommands> 39 ToolsMenuCommands>
36 @property(nonatomic, strong) TabGridViewController* viewController; 40 @property(nonatomic, strong) TabGridViewController* viewController;
37 @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator; 41 @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator;
38 @property(nonatomic, weak) ToolsCoordinator* toolsMenuCoordinator; 42 @property(nonatomic, weak) ToolsCoordinator* toolsMenuCoordinator;
43 @property(nonatomic, weak) TabCoordinator* activeTabCoordinator;
39 @property(nonatomic, readonly) WebStateList& webStateList; 44 @property(nonatomic, readonly) WebStateList& webStateList;
40 @property(nonatomic, strong) TabGridMediator* mediator; 45 @property(nonatomic, strong) TabGridMediator* mediator;
41 @end 46 @end
42 47
43 @implementation TabGridCoordinator 48 @implementation TabGridCoordinator
44 @synthesize viewController = _viewController; 49 @synthesize viewController = _viewController;
45 @synthesize settingsCoordinator = _settingsCoordinator; 50 @synthesize settingsCoordinator = _settingsCoordinator;
46 @synthesize toolsMenuCoordinator = _toolsMenuCoordinator; 51 @synthesize toolsMenuCoordinator = _toolsMenuCoordinator;
52 @synthesize activeTabCoordinator = _activeTabCoordinator;
47 @synthesize mediator = _mediator; 53 @synthesize mediator = _mediator;
48 54
49 #pragma mark - Properties 55 #pragma mark - Properties
50 56
51 - (WebStateList&)webStateList { 57 - (WebStateList&)webStateList {
52 return self.browser->web_state_list(); 58 return self.browser->web_state_list();
53 } 59 }
54 60
55 #pragma mark - BrowserCoordinator 61 #pragma mark - BrowserCoordinator
56 62
57 - (void)start { 63 - (void)start {
58 self.mediator = [[TabGridMediator alloc] init]; 64 self.mediator = [[TabGridMediator alloc] init];
59 self.mediator.webStateList = &self.webStateList; 65 self.mediator.webStateList = &self.webStateList;
60 66
67 [self registerForContextMenuCommands];
61 [self registerForSettingsCommands]; 68 [self registerForSettingsCommands];
62 [self registerForTabGridCommands]; 69 [self registerForTabGridCommands];
63 [self registerForToolsMenuCommands]; 70 [self registerForToolsMenuCommands];
64 71
65 self.viewController = [[TabGridViewController alloc] init]; 72 self.viewController = [[TabGridViewController alloc] init];
66 self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher()); 73 self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher());
67 74
68 self.mediator.consumer = self.viewController; 75 self.mediator.consumer = self.viewController;
69 76
70 [super start]; 77 [super start];
(...skipping 21 matching lines...) Expand all
92 99
93 - (void)childCoordinatorWillStop:(BrowserCoordinator*)childCoordinator { 100 - (void)childCoordinatorWillStop:(BrowserCoordinator*)childCoordinator {
94 DCHECK([childCoordinator isKindOfClass:[SettingsCoordinator class]] || 101 DCHECK([childCoordinator isKindOfClass:[SettingsCoordinator class]] ||
95 [childCoordinator isKindOfClass:[TabCoordinator class]] || 102 [childCoordinator isKindOfClass:[TabCoordinator class]] ||
96 [childCoordinator isKindOfClass:[ToolsCoordinator class]]); 103 [childCoordinator isKindOfClass:[ToolsCoordinator class]]);
97 [childCoordinator.viewController.presentingViewController 104 [childCoordinator.viewController.presentingViewController
98 dismissViewControllerAnimated:YES 105 dismissViewControllerAnimated:YES
99 completion:nil]; 106 completion:nil];
100 } 107 }
101 108
109 #pragma mark - ContextMenuCommands
110
111 - (void)openContextMenuLinkInNewTab:(ContextMenuContext*)context {
112 [self createAndShowNewTabInTabGrid];
113 ContextMenuContextImpl* contextImpl =
114 base::mac::ObjCCastStrict<ContextMenuContextImpl>(context);
115 [self openURL:net::NSURLWithGURL(contextImpl.linkURL)];
116 }
117
118 - (void)openContextMenuImageInNewTab:(ContextMenuContext*)context {
119 [self createAndShowNewTabInTabGrid];
120 ContextMenuContextImpl* contextImpl =
121 base::mac::ObjCCastStrict<ContextMenuContextImpl>(context);
122 [self openURL:net::NSURLWithGURL(contextImpl.imageURL)];
123 }
124
125 #pragma mark - SettingsCommands
126
127 - (void)showSettings {
128 CommandDispatcher* dispatcher = self.browser->dispatcher();
129 [dispatcher startDispatchingToTarget:self
130 forSelector:@selector(closeSettings)];
131 SettingsCoordinator* settingsCoordinator = [[SettingsCoordinator alloc] init];
132 [self addOverlayCoordinator:settingsCoordinator];
133 self.settingsCoordinator = settingsCoordinator;
134 [settingsCoordinator start];
135 }
136
137 - (void)closeSettings {
138 CommandDispatcher* dispatcher = self.browser->dispatcher();
139 [dispatcher stopDispatchingForSelector:@selector(closeSettings)];
140 [self.settingsCoordinator stop];
141 [self.settingsCoordinator.parentCoordinator
142 removeChildCoordinator:self.settingsCoordinator];
143 // self.settingsCoordinator should be presumed to be nil after this point.
144 }
145
102 #pragma mark - TabGridCommands 146 #pragma mark - TabGridCommands
103 147
104 - (void)showTabGridTabAtIndex:(int)index { 148 - (void)showTabGridTabAtIndex:(int)index {
105 self.webStateList.ActivateWebStateAt(index); 149 self.webStateList.ActivateWebStateAt(index);
106 // PLACEHOLDER: The tab coordinator should be able to get the active webState 150 // PLACEHOLDER: The tab coordinator should be able to get the active webState
107 // on its own. 151 // on its own.
152 [self.activeTabCoordinator stop];
153 [self removeChildCoordinator:self.activeTabCoordinator];
108 TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init]; 154 TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init];
155 self.activeTabCoordinator = tabCoordinator;
109 tabCoordinator.webState = self.webStateList.GetWebStateAt(index); 156 tabCoordinator.webState = self.webStateList.GetWebStateAt(index);
110 tabCoordinator.presentationKey = 157 tabCoordinator.presentationKey =
111 [NSIndexPath indexPathForItem:index inSection:0]; 158 [NSIndexPath indexPathForItem:index inSection:0];
112 [self addChildCoordinator:tabCoordinator]; 159 [self addChildCoordinator:tabCoordinator];
113 [self deRegisterFromToolsMenuCommands]; 160 [self deRegisterFromToolsMenuCommands];
114 [tabCoordinator start]; 161 [tabCoordinator start];
115 } 162 }
116 163
117 - (void)closeTabGridTabAtIndex:(int)index { 164 - (void)closeTabGridTabAtIndex:(int)index {
118 self.webStateList.DetachWebStateAt(index); 165 self.webStateList.DetachWebStateAt(index);
(...skipping 29 matching lines...) Expand all
148 toolsCoordinator.toolsMenuConfiguration = menuConfiguration; 195 toolsCoordinator.toolsMenuConfiguration = menuConfiguration;
149 [toolsCoordinator start]; 196 [toolsCoordinator start];
150 self.toolsMenuCoordinator = toolsCoordinator; 197 self.toolsMenuCoordinator = toolsCoordinator;
151 } 198 }
152 199
153 - (void)closeToolsMenu { 200 - (void)closeToolsMenu {
154 [self.toolsMenuCoordinator stop]; 201 [self.toolsMenuCoordinator stop];
155 [self removeChildCoordinator:self.toolsMenuCoordinator]; 202 [self removeChildCoordinator:self.toolsMenuCoordinator];
156 } 203 }
157 204
158 #pragma mark - SettingsCommands
159
160 - (void)showSettings {
161 CommandDispatcher* dispatcher = self.browser->dispatcher();
162 [dispatcher startDispatchingToTarget:self
163 forSelector:@selector(closeSettings)];
164 SettingsCoordinator* settingsCoordinator = [[SettingsCoordinator alloc] init];
165 [self addOverlayCoordinator:settingsCoordinator];
166 self.settingsCoordinator = settingsCoordinator;
167 [settingsCoordinator start];
168 }
169
170 - (void)closeSettings {
171 CommandDispatcher* dispatcher = self.browser->dispatcher();
172 [dispatcher stopDispatchingForSelector:@selector(closeSettings)];
173 [self.settingsCoordinator stop];
174 [self.settingsCoordinator.parentCoordinator
175 removeChildCoordinator:self.settingsCoordinator];
176 // self.settingsCoordinator should be presumed to be nil after this point.
177 }
178
179 #pragma mark - URLOpening 205 #pragma mark - URLOpening
180 206
181 - (void)openURL:(NSURL*)URL { 207 - (void)openURL:(NSURL*)URL {
182 if (self.webStateList.active_index() == WebStateList::kInvalidIndex) { 208 if (self.webStateList.active_index() == WebStateList::kInvalidIndex) {
183 return; 209 return;
184 } 210 }
185 [self.overlayCoordinator stop]; 211 [self.overlayCoordinator stop];
186 [self removeOverlayCoordinator]; 212 [self removeOverlayCoordinator];
187 web::WebState* activeWebState = self.webStateList.GetActiveWebState(); 213 web::WebState* activeWebState = self.webStateList.GetActiveWebState();
188 web::NavigationManager::WebLoadParams params(net::GURLWithNSURL(URL)); 214 web::NavigationManager::WebLoadParams params(net::GURLWithNSURL(URL));
189 params.transition_type = ui::PAGE_TRANSITION_LINK; 215 params.transition_type = ui::PAGE_TRANSITION_LINK;
190 activeWebState->GetNavigationManager()->LoadURLWithParams(params); 216 activeWebState->GetNavigationManager()->LoadURLWithParams(params);
191 if (!self.children.count) { 217 if (!self.children.count) {
192 [self showTabGridTabAtIndex:self.webStateList.active_index()]; 218 [self showTabGridTabAtIndex:self.webStateList.active_index()];
193 } 219 }
194 } 220 }
195 221
196 #pragma mark - PrivateMethods 222 #pragma mark - PrivateMethods
197 223
224 - (void)registerForContextMenuCommands {
225 // Right now these are unregistered in |-stop|. However, once incognito is
226 // implemented, these commands will need to be unregistered before switching
227 // to incognito mode, as "open in new tab" commands are meant to be handled
228 // by the incognito TabGridCoordinator.
229 [self.browser->dispatcher()
230 startDispatchingToTarget:self
231 forSelector:@selector(openContextMenuLinkInNewTab:)];
232 [self.browser->dispatcher()
233 startDispatchingToTarget:self
234 forSelector:@selector(openContextMenuImageInNewTab:)];
235 }
236
198 - (void)registerForSettingsCommands { 237 - (void)registerForSettingsCommands {
199 [self.browser->dispatcher() startDispatchingToTarget:self 238 [self.browser->dispatcher() startDispatchingToTarget:self
200 forSelector:@selector(showSettings)]; 239 forSelector:@selector(showSettings)];
201 } 240 }
202 241
203 - (void)registerForTabGridCommands { 242 - (void)registerForTabGridCommands {
204 [self.browser->dispatcher() startDispatchingToTarget:self 243 [self.browser->dispatcher() startDispatchingToTarget:self
205 forSelector:@selector(showTabGrid)]; 244 forSelector:@selector(showTabGrid)];
206 [self.browser->dispatcher() 245 [self.browser->dispatcher()
207 startDispatchingToTarget:self 246 startDispatchingToTarget:self
(...skipping 16 matching lines...) Expand all
224 } 263 }
225 264
226 - (void)deRegisterFromToolsMenuCommands { 265 - (void)deRegisterFromToolsMenuCommands {
227 [self.browser->dispatcher() 266 [self.browser->dispatcher()
228 stopDispatchingForSelector:@selector(showToolsMenu)]; 267 stopDispatchingForSelector:@selector(showToolsMenu)];
229 [self.browser->dispatcher() 268 [self.browser->dispatcher()
230 stopDispatchingForSelector:@selector(closeToolsMenu)]; 269 stopDispatchingForSelector:@selector(closeToolsMenu)];
231 } 270 }
232 271
233 @end 272 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698