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

Side by Side Diff: ios/web/navigation/navigation_manager_impl.mm

Issue 2704663004: Remove CRWSessionEntry from NavigationManagerImpl. (Closed)
Patch Set: Created 3 years, 10 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
« no previous file with comments | « ios/web/navigation/navigation_manager_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/web/navigation/navigation_manager_impl.h" 5 #import "ios/web/navigation/navigation_manager_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #import "ios/web/navigation/crw_session_controller+private_constructors.h" 12 #import "ios/web/navigation/crw_session_controller+private_constructors.h"
13 #import "ios/web/navigation/crw_session_controller.h" 13 #import "ios/web/navigation/crw_session_controller.h"
14 #import "ios/web/navigation/crw_session_entry.h"
15 #import "ios/web/navigation/navigation_item_impl.h" 14 #import "ios/web/navigation/navigation_item_impl.h"
16 #import "ios/web/navigation/navigation_manager_delegate.h" 15 #import "ios/web/navigation/navigation_manager_delegate.h"
17 #include "ios/web/navigation/navigation_manager_facade_delegate.h" 16 #include "ios/web/navigation/navigation_manager_facade_delegate.h"
18 #include "ios/web/public/load_committed_details.h" 17 #include "ios/web/public/load_committed_details.h"
19 #import "ios/web/public/navigation_item.h" 18 #import "ios/web/public/navigation_item.h"
20 #import "ios/web/public/web_state/web_state.h" 19 #import "ios/web/public/web_state/web_state.h"
21 #include "ui/base/page_transition_types.h" 20 #include "ui/base/page_transition_types.h"
22 21
23 #if !defined(__has_feature) || !__has_feature(objc_arc) 22 #if !defined(__has_feature) || !__has_feature(objc_arc)
24 #error "This file requires ARC support." 23 #error "This file requires ARC support."
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 if (facade_delegate_) 135 if (facade_delegate_)
137 facade_delegate_->OnNavigationItemChanged(); 136 facade_delegate_->OnNavigationItemChanged();
138 } 137 }
139 138
140 void NavigationManagerImpl::OnNavigationItemCommitted() { 139 void NavigationManagerImpl::OnNavigationItemCommitted() {
141 LoadCommittedDetails details; 140 LoadCommittedDetails details;
142 details.item = GetLastCommittedItem(); 141 details.item = GetLastCommittedItem();
143 DCHECK(details.item); 142 DCHECK(details.item);
144 details.previous_item_index = [session_controller_ previousNavigationIndex]; 143 details.previous_item_index = [session_controller_ previousNavigationIndex];
145 if (details.previous_item_index >= 0) { 144 if (details.previous_item_index >= 0) {
146 DCHECK([session_controller_ previousEntry]); 145 DCHECK(GetPreviousItem());
147 details.previous_url = 146 details.previous_url = GetPreviousItem()->GetURL();
148 [session_controller_ previousEntry].navigationItem->GetURL();
149 details.is_in_page = 147 details.is_in_page =
150 AreURLsInPageNavigation(details.previous_url, details.item->GetURL()); 148 AreURLsInPageNavigation(details.previous_url, details.item->GetURL());
151 } else { 149 } else {
152 details.previous_url = GURL(); 150 details.previous_url = GURL();
153 details.is_in_page = NO; 151 details.is_in_page = NO;
154 } 152 }
155 153
156 delegate_->OnNavigationItemCommitted(details); 154 delegate_->OnNavigationItemCommitted(details);
157 155
158 if (facade_delegate_) { 156 if (facade_delegate_) {
159 facade_delegate_->OnNavigationItemCommitted(details.previous_item_index, 157 facade_delegate_->OnNavigationItemCommitted(details.previous_item_index,
160 details.is_in_page); 158 details.is_in_page);
161 } 159 }
162 } 160 }
163 161
164 CRWSessionController* NavigationManagerImpl::GetSessionController() { 162 CRWSessionController* NavigationManagerImpl::GetSessionController() {
165 return session_controller_; 163 return session_controller_;
166 } 164 }
167 165
168 void NavigationManagerImpl::LoadURL(const GURL& url, 166 void NavigationManagerImpl::LoadURL(const GURL& url,
169 const web::Referrer& referrer, 167 const web::Referrer& referrer,
170 ui::PageTransition type) { 168 ui::PageTransition type) {
171 WebState::OpenURLParams params(url, referrer, 169 WebState::OpenURLParams params(url, referrer,
172 WindowOpenDisposition::CURRENT_TAB, type, NO); 170 WindowOpenDisposition::CURRENT_TAB, type, NO);
173 delegate_->GetWebState()->OpenURL(params); 171 delegate_->GetWebState()->OpenURL(params);
174 } 172 }
175 173
176 NavigationItem* NavigationManagerImpl::GetLastUserItem() const { 174 NavigationItem* NavigationManagerImpl::GetLastUserItem() const {
177 CRWSessionEntry* entry = [session_controller_ lastUserEntry]; 175 return [session_controller_ lastUserItem];
178 return [entry navigationItem];
179 } 176 }
180 177
181 NavigationItem* NavigationManagerImpl::GetPreviousItem() const { 178 NavigationItem* NavigationManagerImpl::GetPreviousItem() const {
182 CRWSessionEntry* entry = [session_controller_ previousEntry]; 179 return [session_controller_ previousItem];
183 return [entry navigationItem];
184 } 180 }
185 181
186 std::vector<NavigationItem*> NavigationManagerImpl::GetItems() { 182 NavigationItemList NavigationManagerImpl::GetItems() const {
187 std::vector<NavigationItem*> items; 183 return [session_controller_ items];
188 size_t i = 0;
189 items.resize([session_controller_ entries].count);
190 for (CRWSessionEntry* entry in [session_controller_ entries]) {
191 items[i++] = entry.navigationItem;
192 }
193 return items;
194 } 184 }
195 185
196 BrowserState* NavigationManagerImpl::GetBrowserState() const { 186 BrowserState* NavigationManagerImpl::GetBrowserState() const {
197 return browser_state_; 187 return browser_state_;
198 } 188 }
199 189
200 WebState* NavigationManagerImpl::GetWebState() const { 190 WebState* NavigationManagerImpl::GetWebState() const {
201 return delegate_->GetWebState(); 191 return delegate_->GetWebState();
202 } 192 }
203 193
204 NavigationItem* NavigationManagerImpl::GetVisibleItem() const { 194 NavigationItem* NavigationManagerImpl::GetVisibleItem() const {
205 CRWSessionEntry* entry = [session_controller_ visibleEntry]; 195 return [session_controller_ visibleItem];
206 return [entry navigationItem];
207 } 196 }
208 197
209 NavigationItem* NavigationManagerImpl::GetLastCommittedItem() const { 198 NavigationItem* NavigationManagerImpl::GetLastCommittedItem() const {
210 CRWSessionEntry* entry = [session_controller_ lastCommittedEntry]; 199 return [session_controller_ lastCommittedItem];
211 return [entry navigationItem];
212 } 200 }
213 201
214 NavigationItem* NavigationManagerImpl::GetPendingItem() const { 202 NavigationItem* NavigationManagerImpl::GetPendingItem() const {
215 return [[session_controller_ pendingEntry] navigationItem]; 203 return [session_controller_ pendingItem];
216 } 204 }
217 205
218 NavigationItem* NavigationManagerImpl::GetTransientItem() const { 206 NavigationItem* NavigationManagerImpl::GetTransientItem() const {
219 return [[session_controller_ transientEntry] navigationItem]; 207 return [session_controller_ transientItem];
220 } 208 }
221 209
222 void NavigationManagerImpl::DiscardNonCommittedItems() { 210 void NavigationManagerImpl::DiscardNonCommittedItems() {
223 [session_controller_ discardNonCommittedItems]; 211 [session_controller_ discardNonCommittedItems];
224 } 212 }
225 213
226 void NavigationManagerImpl::LoadIfNecessary() { 214 void NavigationManagerImpl::LoadIfNecessary() {
227 // Nothing to do; iOS loads lazily. 215 // Nothing to do; iOS loads lazily.
228 } 216 }
229 217
230 void NavigationManagerImpl::LoadURLWithParams( 218 void NavigationManagerImpl::LoadURLWithParams(
231 const NavigationManager::WebLoadParams& params) { 219 const NavigationManager::WebLoadParams& params) {
232 delegate_->LoadURLWithParams(params); 220 delegate_->LoadURLWithParams(params);
233 } 221 }
234 222
235 void NavigationManagerImpl::AddTransientURLRewriter( 223 void NavigationManagerImpl::AddTransientURLRewriter(
236 BrowserURLRewriter::URLRewriter rewriter) { 224 BrowserURLRewriter::URLRewriter rewriter) {
237 DCHECK(rewriter); 225 DCHECK(rewriter);
238 if (!transient_url_rewriters_) { 226 if (!transient_url_rewriters_) {
239 transient_url_rewriters_.reset( 227 transient_url_rewriters_.reset(
240 new std::vector<BrowserURLRewriter::URLRewriter>()); 228 new std::vector<BrowserURLRewriter::URLRewriter>());
241 } 229 }
242 transient_url_rewriters_->push_back(rewriter); 230 transient_url_rewriters_->push_back(rewriter);
243 } 231 }
244 232
245 int NavigationManagerImpl::GetItemCount() const { 233 int NavigationManagerImpl::GetItemCount() const {
246 return [[session_controller_ entries] count]; 234 return GetItems().size();
247 } 235 }
248 236
249 NavigationItem* NavigationManagerImpl::GetItemAtIndex(size_t index) const { 237 NavigationItem* NavigationManagerImpl::GetItemAtIndex(size_t index) const {
250 NSArray* entries = [session_controller_ entries]; 238 NavigationItemList items = GetItems();
251 return index < entries.count ? [entries[index] navigationItem] : nullptr; 239 return index < items.size() ? items[index] : nullptr;
252 } 240 }
253 241
254 int NavigationManagerImpl::GetCurrentItemIndex() const { 242 int NavigationManagerImpl::GetCurrentItemIndex() const {
255 return [session_controller_ currentNavigationIndex]; 243 return [session_controller_ currentNavigationIndex];
256 } 244 }
257 245
258 int NavigationManagerImpl::GetPendingItemIndex() const { 246 int NavigationManagerImpl::GetPendingItemIndex() const {
259 if ([session_controller_ pendingEntry]) { 247 if (GetPendingItem()) {
260 if ([session_controller_ pendingItemIndex] != -1) { 248 if ([session_controller_ pendingItemIndex] != -1) {
261 return [session_controller_ pendingItemIndex]; 249 return [session_controller_ pendingItemIndex];
262 } 250 }
263 // TODO(crbug.com/665189): understand why current item index is 251 // TODO(crbug.com/665189): understand why current item index is
264 // returned here. 252 // returned here.
265 return GetCurrentItemIndex(); 253 return GetCurrentItemIndex();
266 } 254 }
267 return -1; 255 return -1;
268 } 256 }
269 257
270 int NavigationManagerImpl::GetLastCommittedItemIndex() const { 258 int NavigationManagerImpl::GetLastCommittedItemIndex() const {
271 if (![[session_controller_ entries] count]) 259 if (GetItems().empty())
272 return -1; 260 return -1;
273 return [session_controller_ currentNavigationIndex]; 261 return [session_controller_ currentNavigationIndex];
274 } 262 }
275 263
276 bool NavigationManagerImpl::RemoveItemAtIndex(int index) { 264 bool NavigationManagerImpl::RemoveItemAtIndex(int index) {
277 if (index == GetLastCommittedItemIndex() || index == GetPendingItemIndex()) 265 if (index == GetLastCommittedItemIndex() || index == GetPendingItemIndex())
278 return false; 266 return false;
279 267
280 NSUInteger idx = static_cast<NSUInteger>(index); 268 size_t idx = static_cast<size_t>(index);
281 NSArray* entries = [session_controller_ entries]; 269 if (idx >= GetItems().size())
Eugene But (OOO till 7-30) 2017/02/18 01:21:38 Do you want to file a bug and add a TODO to change
kkhorimoto 2017/02/23 05:22:31 One was already created; I've added TODOs in navig
282 if (idx >= entries.count)
283 return false; 270 return false;
284 271
285 [session_controller_ removeItemAtIndex:index]; 272 [session_controller_ removeItemAtIndex:index];
286 return true; 273 return true;
287 } 274 }
288 275
289 bool NavigationManagerImpl::CanGoBack() const { 276 bool NavigationManagerImpl::CanGoBack() const {
290 return CanGoToOffset(-1); 277 return CanGoToOffset(-1);
291 } 278 }
292 279
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 } 384 }
398 385
399 bool NavigationManagerImpl::IsRedirectItemAtIndex(int index) const { 386 bool NavigationManagerImpl::IsRedirectItemAtIndex(int index) const {
400 DCHECK_GT(index, 0); 387 DCHECK_GT(index, 0);
401 DCHECK_LT(index, GetItemCount()); 388 DCHECK_LT(index, GetItemCount());
402 ui::PageTransition transition = GetItemAtIndex(index)->GetTransitionType(); 389 ui::PageTransition transition = GetItemAtIndex(index)->GetTransitionType();
403 return transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK; 390 return transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK;
404 } 391 }
405 392
406 } // namespace web 393 } // namespace web
OLDNEW
« no previous file with comments | « ios/web/navigation/navigation_manager_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698