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

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

Issue 2786893002: [ios] Dispatcher for tab_strip and tab_grid. (Closed)
Patch Set: Update showcase. Created 3 years, 8 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/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
10 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" 10 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
11 #import "ios/clean/chrome/browser/ui/commands/settings_commands.h" 11 #import "ios/clean/chrome/browser/ui/commands/settings_commands.h"
12 #import "ios/clean/chrome/browser/ui/commands/tab_commands.h"
13 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h" 12 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h"
14 #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h" 13 #import "ios/clean/chrome/browser/ui/settings/settings_coordinator.h"
15 #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h" 14 #import "ios/clean/chrome/browser/ui/tab/tab_coordinator.h"
16 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h" 15 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_mediator.h"
17 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h" 16 #import "ios/clean/chrome/browser/ui/tab_grid/tab_grid_view_controller.h"
18 #import "ios/shared/chrome/browser/coordinator_context/coordinator_context.h" 17 #import "ios/shared/chrome/browser/coordinator_context/coordinator_context.h"
19 #import "ios/shared/chrome/browser/tabs/web_state_list.h" 18 #import "ios/shared/chrome/browser/tabs/web_state_list.h"
20 #import "ios/shared/chrome/browser/ui/browser_list/browser.h" 19 #import "ios/shared/chrome/browser/ui/browser_list/browser.h"
21 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" 20 #import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h"
22 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal. h" 21 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal. h"
23 #import "ios/web/public/navigation_manager.h" 22 #import "ios/web/public/navigation_manager.h"
24 #include "ios/web/public/web_state/web_state.h" 23 #include "ios/web/public/web_state/web_state.h"
25 #import "net/base/mac/url_conversions.h" 24 #import "net/base/mac/url_conversions.h"
26 #include "ui/base/page_transition_types.h" 25 #include "ui/base/page_transition_types.h"
27 26
28 #if !defined(__has_feature) || !__has_feature(objc_arc) 27 #if !defined(__has_feature) || !__has_feature(objc_arc)
29 #error "This file requires ARC support." 28 #error "This file requires ARC support."
30 #endif 29 #endif
31 30
32 @interface TabGridCoordinator ()<SettingsCommands, TabCommands, TabGridCommands> 31 @interface TabGridCoordinator ()<SettingsCommands, TabGridCommands>
33 @property(nonatomic, strong) TabGridViewController* viewController; 32 @property(nonatomic, strong) TabGridViewController* viewController;
34 @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator; 33 @property(nonatomic, weak) SettingsCoordinator* settingsCoordinator;
35 @property(nonatomic, readonly) WebStateList& webStateList; 34 @property(nonatomic, readonly) WebStateList& webStateList;
36 @property(nonatomic, strong) TabGridMediator* mediator; 35 @property(nonatomic, strong) TabGridMediator* mediator;
37 @end 36 @end
38 37
39 @implementation TabGridCoordinator 38 @implementation TabGridCoordinator
40 @synthesize viewController = _viewController; 39 @synthesize viewController = _viewController;
41 @synthesize settingsCoordinator = _settingsCoordinator; 40 @synthesize settingsCoordinator = _settingsCoordinator;
42 @synthesize mediator = _mediator; 41 @synthesize mediator = _mediator;
(...skipping 15 matching lines...) Expand all
58 - (WebStateList&)webStateList { 57 - (WebStateList&)webStateList {
59 return self.browser->web_state_list(); 58 return self.browser->web_state_list();
60 } 59 }
61 60
62 #pragma mark - BrowserCoordinator 61 #pragma mark - BrowserCoordinator
63 62
64 - (void)start { 63 - (void)start {
65 self.mediator = [[TabGridMediator alloc] init]; 64 self.mediator = [[TabGridMediator alloc] init];
66 self.mediator.webStateList = &self.webStateList; 65 self.mediator.webStateList = &self.webStateList;
67 66
67 CommandDispatcher* dispatcher = self.browser->dispatcher();
68 // SettingsCommands
69 [dispatcher startDispatchingToTarget:self
70 forSelector:@selector(showSettings)];
71 [dispatcher startDispatchingToTarget:self
72 forSelector:@selector(closeSettings)];
73 // TabGridCommands
74 [dispatcher startDispatchingToTarget:self
75 forSelector:@selector(showTabGridTabAtIndex:)];
76 [dispatcher startDispatchingToTarget:self
77 forSelector:@selector(closeTabGridTabAtIndex:)];
78 [dispatcher startDispatchingToTarget:self
79 forSelector:@selector(createAndShowNewTabInTabGrid)];
80 [dispatcher startDispatchingToTarget:self forSelector:@selector(showTabGrid)];
81
68 self.viewController = [[TabGridViewController alloc] init]; 82 self.viewController = [[TabGridViewController alloc] init];
69 self.viewController.dataSource = self.mediator; 83 self.viewController.dataSource = self.mediator;
70 self.viewController.settingsCommandHandler = self; 84 self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher());
71 self.viewController.tabCommandHandler = self;
72 self.viewController.tabGridCommandHandler = self;
73 85
74 self.mediator.consumer = self.viewController; 86 self.mediator.consumer = self.viewController;
75 87
76 // |baseViewController| is nullable, so this is by design a no-op if it hasn't 88 // |baseViewController| is nullable, so this is by design a no-op if it hasn't
77 // been set. This may be true in a unit test, or if this coordinator is being 89 // been set. This may be true in a unit test, or if this coordinator is being
78 // used as a root coordinator. 90 // used as a root coordinator.
79 [self.context.baseViewController presentViewController:self.viewController 91 [self.context.baseViewController presentViewController:self.viewController
80 animated:self.context.animated 92 animated:self.context.animated
81 completion:nil]; 93 completion:nil];
82 [super start]; 94 [super start];
83 } 95 }
84 96
85 #pragma mark - TabCommands 97 - (void)stop {
98 [super stop];
99 [self.browser->dispatcher() stopDispatchingToTarget:self];
100 }
86 101
87 - (void)showTabAtIndex:(int)index { 102 #pragma mark - TabGridCommands
103
104 - (void)showTabGridTabAtIndex:(int)index {
88 self.webStateList.ActivateWebStateAt(index); 105 self.webStateList.ActivateWebStateAt(index);
89 // PLACEHOLDER: The tab coordinator should be able to get the active webState 106 // PLACEHOLDER: The tab coordinator should be able to get the active webState
90 // on its own. 107 // on its own.
91 TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init]; 108 TabCoordinator* tabCoordinator = [[TabCoordinator alloc] init];
92 tabCoordinator.webState = self.webStateList.GetWebStateAt(index); 109 tabCoordinator.webState = self.webStateList.GetWebStateAt(index);
93 tabCoordinator.presentationKey = 110 tabCoordinator.presentationKey =
94 [NSIndexPath indexPathForItem:index inSection:0]; 111 [NSIndexPath indexPathForItem:index inSection:0];
95 [self addChildCoordinator:tabCoordinator]; 112 [self addChildCoordinator:tabCoordinator];
96 [tabCoordinator start]; 113 [tabCoordinator start];
97 } 114 }
98 115
99 - (void)closeTabAtIndex:(int)index { 116 - (void)closeTabGridTabAtIndex:(int)index {
100 std::unique_ptr<web::WebState> closedWebState( 117 std::unique_ptr<web::WebState> closedWebState(
101 self.webStateList.DetachWebStateAt(index)); 118 self.webStateList.DetachWebStateAt(index));
102 } 119 }
103 120
104 - (void)createAndShowNewTab { 121 - (void)createAndShowNewTabInTabGrid {
105 web::WebState::CreateParams webStateCreateParams( 122 web::WebState::CreateParams webStateCreateParams(
106 self.browser->browser_state()); 123 self.browser->browser_state());
107 std::unique_ptr<web::WebState> webState = 124 std::unique_ptr<web::WebState> webState =
108 web::WebState::Create(webStateCreateParams); 125 web::WebState::Create(webStateCreateParams);
109 self.webStateList.InsertWebState(self.webStateList.count(), 126 self.webStateList.InsertWebState(self.webStateList.count(),
110 webState.release()); 127 webState.release());
111 [self showTabAtIndex:self.webStateList.count() - 1]; 128 [self showTabGridTabAtIndex:self.webStateList.count() - 1];
112 } 129 }
113 130
114 #pragma mark - TabGridCommands
115
116 - (void)showTabGrid { 131 - (void)showTabGrid {
117 // This object should only ever have at most one child. 132 // This object should only ever have at most one child.
118 DCHECK_LE(self.children.count, 1UL); 133 DCHECK_LE(self.children.count, 1UL);
119 BrowserCoordinator* child = [self.children anyObject]; 134 BrowserCoordinator* child = [self.children anyObject];
120 [child stop]; 135 [child stop];
121 [self removeChildCoordinator:child]; 136 [self removeChildCoordinator:child];
122 } 137 }
123 138
124 #pragma mark - SettingsCommands 139 #pragma mark - SettingsCommands
125 140
(...skipping 22 matching lines...) Expand all
148 if (self.webStateList.active_index() == WebStateList::kInvalidIndex) { 163 if (self.webStateList.active_index() == WebStateList::kInvalidIndex) {
149 return; 164 return;
150 } 165 }
151 [self.overlayCoordinator stop]; 166 [self.overlayCoordinator stop];
152 [self removeOverlayCoordinator]; 167 [self removeOverlayCoordinator];
153 web::WebState* activeWebState = self.webStateList.GetActiveWebState(); 168 web::WebState* activeWebState = self.webStateList.GetActiveWebState();
154 web::NavigationManager::WebLoadParams params(net::GURLWithNSURL(URL)); 169 web::NavigationManager::WebLoadParams params(net::GURLWithNSURL(URL));
155 params.transition_type = ui::PAGE_TRANSITION_LINK; 170 params.transition_type = ui::PAGE_TRANSITION_LINK;
156 activeWebState->GetNavigationManager()->LoadURLWithParams(params); 171 activeWebState->GetNavigationManager()->LoadURLWithParams(params);
157 if (!self.children.count) { 172 if (!self.children.count) {
158 [self showTabAtIndex:self.webStateList.active_index()]; 173 [self showTabGridTabAtIndex:self.webStateList.active_index()];
159 } 174 }
160 } 175 }
161 176
162 @end 177 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698