Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 | |
|
kkhorimoto
2017/05/24 08:48:46
These were just moved to match the order in which
| |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |