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

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

Issue 2921833002: [iOS Clean] Created OverlayService.
Patch Set: Cancel overlays on queue deallocation 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/mac/foundation_util.h"
10 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
11 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" 11 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
12 #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" 13 #import "ios/clean/chrome/browser/ui/commands/context_menu_commands.h"
14 #import "ios/clean/chrome/browser/ui/commands/settings_commands.h" 14 #import "ios/clean/chrome/browser/ui/commands/settings_commands.h"
15 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h" 15 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h"
16 #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" 17 #import "ios/clean/chrome/browser/ui/context_menu/context_menu_context_impl.h"
18 #import "ios/clean/chrome/browser/ui/overlays/overlay_scheduler.h"
18 #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h" 19 #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h"
19 #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h" 20 #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h"
20 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h" 21 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h"
21 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h" 22 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h"
22 #import "ios/clean/chrome/browser/ui/tools/tools_coordinator.h" 23 #import "ios/clean/chrome/browser/ui/tools/tools_coordinator.h"
23 #import "ios/shared/chrome/browser/ui/browser_list/browser.h" 24 #import "ios/shared/chrome/browser/ui/browser_list/browser.h"
24 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" 25 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
25 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal. h" 26 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal. h"
26 #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h" 27 #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h"
27 #import "ios/web/public/navigation_manager.h" 28 #import "ios/web/public/navigation_manager.h"
28 #include "ios/web/public/web_state/web_state.h" 29 #include "ios/web/public/web_state/web_state.h"
29 #import "net/base/mac/url_conversions.h" 30 #import "net/base/mac/url_conversions.h"
30 #include "ui/base/page_transition_types.h" 31 #include "ui/base/page_transition_types.h"
31 32
32 #if !defined(__has_feature) || !__has_feature(objc_arc) 33 #if !defined(__has_feature) || !__has_feature(objc_arc)
33 #error "This file requires ARC support." 34 #error "This file requires ARC support."
34 #endif 35 #endif
35 36
36 @interface TabGridCoordinator ()<ContextMenuCommands, 37 @interface TabGridCoordinator ()<ContextMenuCommands,
37 SettingsCommands, 38 SettingsCommands,
38 TabGridCommands, 39 TabGridCommands,
39 ToolsMenuCommands> 40 ToolsMenuCommands>
40 @property(nonatomic, strong) TabGridViewController* viewController; 41 @property(nonatomic, strong) TabGridViewController* viewController;
41 @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator; 42 @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator;
42 @property(nonatomic, weak) ToolsCoordinator* toolsMenuCoordinator; 43 @property(nonatomic, weak) ToolsCoordinator* toolsMenuCoordinator;
43 @property(nonatomic, weak) TabCoordinator* activeTabCoordinator; 44 @property(nonatomic, weak) TabCoordinator* activeTabCoordinator;
44 @property(nonatomic, readonly) WebStateList& webStateList; 45 @property(nonatomic, readonly) WebStateList& webStateList;
45 @property(nonatomic, strong) TabGridMediator* mediator; 46 @property(nonatomic, strong) TabGridMediator* mediator;
47 @property(nonatomic, strong) OverlayScheduler* webOverlayScheduler;
46 @end 48 @end
47 49
48 @implementation TabGridCoordinator 50 @implementation TabGridCoordinator
49 @synthesize viewController = _viewController; 51 @synthesize viewController = _viewController;
50 @synthesize settingsCoordinator = _settingsCoordinator; 52 @synthesize settingsCoordinator = _settingsCoordinator;
51 @synthesize toolsMenuCoordinator = _toolsMenuCoordinator; 53 @synthesize toolsMenuCoordinator = _toolsMenuCoordinator;
52 @synthesize activeTabCoordinator = _activeTabCoordinator; 54 @synthesize activeTabCoordinator = _activeTabCoordinator;
53 @synthesize mediator = _mediator; 55 @synthesize mediator = _mediator;
56 @synthesize webOverlayScheduler = _webOverlayScheduler;
54 57
55 #pragma mark - Properties 58 #pragma mark - Properties
56 59
57 - (WebStateList&)webStateList { 60 - (WebStateList&)webStateList {
58 return self.browser->web_state_list(); 61 return self.browser->web_state_list();
59 } 62 }
60 63
61 #pragma mark - BrowserCoordinator 64 #pragma mark - BrowserCoordinator
62 65
63 - (void)start { 66 - (void)start {
64 self.mediator = [[TabGridMediator alloc] init]; 67 self.mediator = [[TabGridMediator alloc] init];
65 self.mediator.webStateList = &self.webStateList; 68 self.mediator.webStateList = &self.webStateList;
66 69
67 [self registerForContextMenuCommands]; 70 [self registerForContextMenuCommands];
68 [self registerForSettingsCommands]; 71 [self registerForSettingsCommands];
69 [self registerForTabGridCommands]; 72 [self registerForTabGridCommands];
70 [self registerForToolsMenuCommands]; 73 [self registerForToolsMenuCommands];
71 74
72 self.viewController = [[TabGridViewController alloc] init]; 75 self.viewController = [[TabGridViewController alloc] init];
73 self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher()); 76 self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher());
74 77
75 self.mediator.consumer = self.viewController; 78 self.mediator.consumer = self.viewController;
76 79
80 id<TabGridCommands, OverlayPresentationCommands> schedulerDispatcher =
81 static_cast<id<TabGridCommands, OverlayPresentationCommands>>(
82 self.browser->dispatcher());
marq (ping after 24h) 2017/06/14 10:02:32 FYI: Dispatcher is moving out of browser. See http
kkhorimoto 2017/06/15 08:26:29 Acknowledged. I'll rebase when your CL is landed.
83 self.webOverlayScheduler =
84 [[OverlayScheduler alloc] initWithWebStateList:&self.webStateList
85 dispatcher:schedulerDispatcher];
86 [self.browser->dispatcher()
87 startDispatchingToTarget:self.webOverlayScheduler
88 forProtocol:@protocol(OverlaySchedulerCommands)];
89
77 [super start]; 90 [super start];
78 } 91 }
79 92
80 - (void)stop { 93 - (void)stop {
81 [super stop]; 94 [super stop];
82 [self.browser->dispatcher() stopDispatchingToTarget:self]; 95 [self.browser->dispatcher() stopDispatchingToTarget:self];
96 [self.browser->dispatcher() stopDispatchingToTarget:self.webOverlayScheduler];
97 self.webOverlayScheduler = nil;
83 [self.mediator disconnect]; 98 [self.mediator disconnect];
84 // PLACEHOLDER: Remove child coordinators here for now. This might be handled 99 // PLACEHOLDER: Remove child coordinators here for now. This might be handled
85 // differently later on. 100 // differently later on.
86 for (BrowserCoordinator* child in self.children) { 101 for (BrowserCoordinator* child in self.children) {
87 [self removeChildCoordinator:child]; 102 [self removeChildCoordinator:child];
88 } 103 }
89 } 104 }
90 105
91 - (void)childCoordinatorDidStart:(BrowserCoordinator*)childCoordinator { 106 - (void)childCoordinatorDidStart:(BrowserCoordinator*)childCoordinator {
92 DCHECK([childCoordinator isKindOfClass:[SettingsCoordinator class]] || 107 DCHECK([childCoordinator isKindOfClass:[SettingsCoordinator class]] ||
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 [dispatcher stopDispatchingForSelector:@selector(closeSettings)]; 154 [dispatcher stopDispatchingForSelector:@selector(closeSettings)];
140 [self.settingsCoordinator stop]; 155 [self.settingsCoordinator stop];
141 [self.settingsCoordinator.parentCoordinator 156 [self.settingsCoordinator.parentCoordinator
142 removeChildCoordinator:self.settingsCoordinator]; 157 removeChildCoordinator:self.settingsCoordinator];
143 // self.settingsCoordinator should be presumed to be nil after this point. 158 // self.settingsCoordinator should be presumed to be nil after this point.
144 } 159 }
145 160
146 #pragma mark - TabGridCommands 161 #pragma mark - TabGridCommands
147 162
148 - (void)showTabGridTabAtIndex:(int)index { 163 - (void)showTabGridTabAtIndex:(int)index {
164 if (index == self.webStateList.active_index())
165 return;
149 self.webStateList.ActivateWebStateAt(index); 166 self.webStateList.ActivateWebStateAt(index);
150 // PLACEHOLDER: The tab coordinator should be able to get the active webState 167 // PLACEHOLDER: The tab coordinator should be able to get the active webState
151 // on its own. 168 // on its own.
152 [self.activeTabCoordinator stop]; 169 [self.activeTabCoordinator stop];
153 [self removeChildCoordinator:self.activeTabCoordinator]; 170 [self removeChildCoordinator:self.activeTabCoordinator];
154 TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init]; 171 TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init];
155 self.activeTabCoordinator = tabCoordinator; 172 self.activeTabCoordinator = tabCoordinator;
156 tabCoordinator.webState = self.webStateList.GetWebStateAt(index); 173 tabCoordinator.webState = self.webStateList.GetWebStateAt(index);
157 tabCoordinator.presentationKey = 174 tabCoordinator.presentationKey =
158 [NSIndexPath indexPathForItem:index inSection:0]; 175 [NSIndexPath indexPathForItem:index inSection:0];
(...skipping 18 matching lines...) Expand all
177 194
178 - (void)showTabGrid { 195 - (void)showTabGrid {
179 // This object should only ever have at most one child. 196 // This object should only ever have at most one child.
180 DCHECK_LE(self.children.count, 1UL); 197 DCHECK_LE(self.children.count, 1UL);
181 BrowserCoordinator* child = [self.children anyObject]; 198 BrowserCoordinator* child = [self.children anyObject];
182 [child stop]; 199 [child stop];
183 [self removeChildCoordinator:child]; 200 [self removeChildCoordinator:child];
184 [self registerForToolsMenuCommands]; 201 [self registerForToolsMenuCommands];
185 } 202 }
186 203
204 - (void)showTabGridTabForActiveWebState {
205 [self showTabGridTabAtIndex:self.webStateList.active_index()];
206 }
207
187 #pragma mark - ToolsMenuCommands 208 #pragma mark - ToolsMenuCommands
188 209
189 - (void)showToolsMenu { 210 - (void)showToolsMenu {
190 ToolsCoordinator* toolsCoordinator = [[ToolsCoordinator alloc] init]; 211 ToolsCoordinator* toolsCoordinator = [[ToolsCoordinator alloc] init];
191 [self addChildCoordinator:toolsCoordinator]; 212 [self addChildCoordinator:toolsCoordinator];
192 ToolsMenuConfiguration* menuConfiguration = 213 ToolsMenuConfiguration* menuConfiguration =
193 [[ToolsMenuConfiguration alloc] initWithDisplayView:nil]; 214 [[ToolsMenuConfiguration alloc] initWithDisplayView:nil];
194 menuConfiguration.inTabSwitcher = YES; 215 menuConfiguration.inTabSwitcher = YES;
195 toolsCoordinator.toolsMenuConfiguration = menuConfiguration; 216 toolsCoordinator.toolsMenuConfiguration = menuConfiguration;
196 [toolsCoordinator start]; 217 [toolsCoordinator start];
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 startDispatchingToTarget:self 254 startDispatchingToTarget:self
234 forSelector:@selector(openContextMenuImageInNewTab:)]; 255 forSelector:@selector(openContextMenuImageInNewTab:)];
235 } 256 }
236 257
237 - (void)registerForSettingsCommands { 258 - (void)registerForSettingsCommands {
238 [self.browser->dispatcher() startDispatchingToTarget:self 259 [self.browser->dispatcher() startDispatchingToTarget:self
239 forSelector:@selector(showSettings)]; 260 forSelector:@selector(showSettings)];
240 } 261 }
241 262
242 - (void)registerForTabGridCommands { 263 - (void)registerForTabGridCommands {
243 [self.browser->dispatcher() startDispatchingToTarget:self
244 forSelector:@selector(showTabGrid)];
245 [self.browser->dispatcher() 264 [self.browser->dispatcher()
246 startDispatchingToTarget:self 265 startDispatchingToTarget:self
247 forSelector:@selector(showTabGridTabAtIndex:)]; 266 forProtocol:@protocol(TabGridCommands)];
248 [self.browser->dispatcher()
249 startDispatchingToTarget:self
250 forSelector:@selector(closeTabGridTabAtIndex:)];
251 [self.browser->dispatcher()
252 startDispatchingToTarget:self
253 forSelector:@selector(createAndShowNewTabInTabGrid)];
254 } 267 }
255 268
256 - (void)registerForToolsMenuCommands { 269 - (void)registerForToolsMenuCommands {
257 [self.browser->dispatcher() 270 [self.browser->dispatcher()
258 startDispatchingToTarget:self 271 startDispatchingToTarget:self
259 forSelector:@selector(showToolsMenu)]; 272 forSelector:@selector(showToolsMenu)];
260 [self.browser->dispatcher() 273 [self.browser->dispatcher()
261 startDispatchingToTarget:self 274 startDispatchingToTarget:self
262 forSelector:@selector(closeToolsMenu)]; 275 forSelector:@selector(closeToolsMenu)];
263 } 276 }
264 277
265 - (void)deRegisterFromToolsMenuCommands { 278 - (void)deRegisterFromToolsMenuCommands {
266 [self.browser->dispatcher() 279 [self.browser->dispatcher()
267 stopDispatchingForSelector:@selector(showToolsMenu)]; 280 stopDispatchingForSelector:@selector(showToolsMenu)];
268 [self.browser->dispatcher() 281 [self.browser->dispatcher()
269 stopDispatchingForSelector:@selector(closeToolsMenu)]; 282 stopDispatchingForSelector:@selector(closeToolsMenu)];
270 } 283 }
271 284
272 @end 285 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698