OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/legacy_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/navigation_item_impl.h" | 14 #import "ios/web/navigation/navigation_item_impl.h" |
15 #import "ios/web/navigation/navigation_item_impl_list.h" | 15 #import "ios/web/navigation/navigation_item_impl_list.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 referrer = other.referrer; | 64 referrer = other.referrer; |
65 is_renderer_initiated = other.is_renderer_initiated; | 65 is_renderer_initiated = other.is_renderer_initiated; |
66 transition_type = other.transition_type; | 66 transition_type = other.transition_type; |
67 user_agent_override_option = other.user_agent_override_option; | 67 user_agent_override_option = other.user_agent_override_option; |
68 extra_headers.reset([other.extra_headers copy]); | 68 extra_headers.reset([other.extra_headers copy]); |
69 post_data.reset([other.post_data copy]); | 69 post_data.reset([other.post_data copy]); |
70 | 70 |
71 return *this; | 71 return *this; |
72 } | 72 } |
73 | 73 |
74 NavigationManagerImpl::NavigationManagerImpl() | 74 LegacyNavigationManagerImpl::LegacyNavigationManagerImpl() |
75 : delegate_(nullptr), browser_state_(nullptr) {} | 75 : delegate_(nullptr), browser_state_(nullptr) {} |
76 | 76 |
77 NavigationManagerImpl::~NavigationManagerImpl() { | 77 LegacyNavigationManagerImpl::~LegacyNavigationManagerImpl() { |
78 [session_controller_ setNavigationManager:nullptr]; | 78 [session_controller_ setNavigationManager:nullptr]; |
79 } | 79 } |
80 | 80 |
81 void NavigationManagerImpl::SetDelegate(NavigationManagerDelegate* delegate) { | 81 void LegacyNavigationManagerImpl::SetDelegate( |
| 82 NavigationManagerDelegate* delegate) { |
82 delegate_ = delegate; | 83 delegate_ = delegate; |
83 } | 84 } |
84 | 85 |
85 void NavigationManagerImpl::SetBrowserState(BrowserState* browser_state) { | 86 void LegacyNavigationManagerImpl::SetBrowserState(BrowserState* browser_state) { |
86 browser_state_ = browser_state; | 87 browser_state_ = browser_state; |
87 [session_controller_ setBrowserState:browser_state]; | 88 [session_controller_ setBrowserState:browser_state]; |
88 } | 89 } |
89 | 90 |
90 void NavigationManagerImpl::SetSessionController( | 91 void LegacyNavigationManagerImpl::SetSessionController( |
91 CRWSessionController* session_controller) { | 92 CRWSessionController* session_controller) { |
92 session_controller_.reset(session_controller); | 93 session_controller_.reset(session_controller); |
93 [session_controller_ setNavigationManager:this]; | 94 [session_controller_ setNavigationManager:this]; |
94 } | 95 } |
95 | 96 |
96 void NavigationManagerImpl::InitializeSession() { | 97 void LegacyNavigationManagerImpl::InitializeSession() { |
97 SetSessionController( | 98 SetSessionController( |
98 [[CRWSessionController alloc] initWithBrowserState:browser_state_]); | 99 [[CRWSessionController alloc] initWithBrowserState:browser_state_]); |
99 } | 100 } |
100 | 101 |
101 void NavigationManagerImpl::ReplaceSessionHistory( | 102 void LegacyNavigationManagerImpl::ReplaceSessionHistory( |
102 std::vector<std::unique_ptr<web::NavigationItem>> items, | 103 std::vector<std::unique_ptr<web::NavigationItem>> items, |
103 int lastCommittedItemIndex) { | 104 int lastCommittedItemIndex) { |
104 SetSessionController([[CRWSessionController alloc] | 105 SetSessionController([[CRWSessionController alloc] |
105 initWithBrowserState:browser_state_ | 106 initWithBrowserState:browser_state_ |
106 navigationItems:std::move(items) | 107 navigationItems:std::move(items) |
107 lastCommittedItemIndex:lastCommittedItemIndex]); | 108 lastCommittedItemIndex:lastCommittedItemIndex]); |
108 } | 109 } |
109 | 110 |
110 void NavigationManagerImpl::OnNavigationItemsPruned(size_t pruned_item_count) { | 111 void LegacyNavigationManagerImpl::OnNavigationItemsPruned( |
| 112 size_t pruned_item_count) { |
111 delegate_->OnNavigationItemsPruned(pruned_item_count); | 113 delegate_->OnNavigationItemsPruned(pruned_item_count); |
112 } | 114 } |
113 | 115 |
114 void NavigationManagerImpl::OnNavigationItemChanged() { | 116 void LegacyNavigationManagerImpl::OnNavigationItemChanged() { |
115 delegate_->OnNavigationItemChanged(); | 117 delegate_->OnNavigationItemChanged(); |
116 } | 118 } |
117 | 119 |
118 void NavigationManagerImpl::OnNavigationItemCommitted() { | 120 void LegacyNavigationManagerImpl::OnNavigationItemCommitted() { |
119 LoadCommittedDetails details; | 121 LoadCommittedDetails details; |
120 details.item = GetLastCommittedItem(); | 122 details.item = GetLastCommittedItem(); |
121 DCHECK(details.item); | 123 DCHECK(details.item); |
122 details.previous_item_index = [session_controller_ previousItemIndex]; | 124 details.previous_item_index = [session_controller_ previousItemIndex]; |
123 if (details.previous_item_index >= 0) { | 125 if (details.previous_item_index >= 0) { |
124 DCHECK([session_controller_ previousItem]); | 126 DCHECK([session_controller_ previousItem]); |
125 details.previous_url = [session_controller_ previousItem]->GetURL(); | 127 details.previous_url = [session_controller_ previousItem]->GetURL(); |
126 details.is_in_page = | 128 details.is_in_page = |
127 AreURLsInPageNavigation(details.previous_url, details.item->GetURL()); | 129 AreURLsInPageNavigation(details.previous_url, details.item->GetURL()); |
128 } else { | 130 } else { |
129 details.previous_url = GURL(); | 131 details.previous_url = GURL(); |
130 details.is_in_page = NO; | 132 details.is_in_page = NO; |
131 } | 133 } |
132 | 134 |
133 delegate_->OnNavigationItemCommitted(details); | 135 delegate_->OnNavigationItemCommitted(details); |
134 } | 136 } |
135 | 137 |
136 CRWSessionController* NavigationManagerImpl::GetSessionController() { | 138 CRWSessionController* LegacyNavigationManagerImpl::GetSessionController() |
| 139 const { |
137 return session_controller_; | 140 return session_controller_; |
138 } | 141 } |
139 | 142 |
140 void NavigationManagerImpl::AddTransientItem(const GURL& url) { | 143 void LegacyNavigationManagerImpl::AddTransientItem(const GURL& url) { |
141 [session_controller_ addTransientItemWithURL:url]; | 144 [session_controller_ addTransientItemWithURL:url]; |
142 | 145 |
143 // TODO(crbug.com/676129): Transient item is only supposed to be added for | 146 // TODO(crbug.com/676129): Transient item is only supposed to be added for |
144 // pending non-app-specific loads, but pending item can be null because of the | 147 // pending non-app-specific loads, but pending item can be null because of the |
145 // bug. The workaround should be removed once the bug is fixed. | 148 // bug. The workaround should be removed once the bug is fixed. |
146 NavigationItem* item = GetPendingItem(); | 149 NavigationItem* item = GetPendingItem(); |
147 if (!item) | 150 if (!item) |
148 item = GetLastCommittedNonAppSpecificItem(); | 151 item = GetLastCommittedNonAppSpecificItem(); |
149 DCHECK(item->GetUserAgentType() != UserAgentType::NONE); | 152 DCHECK(item->GetUserAgentType() != UserAgentType::NONE); |
150 GetTransientItem()->SetUserAgentType(item->GetUserAgentType()); | 153 GetTransientItem()->SetUserAgentType(item->GetUserAgentType()); |
151 } | 154 } |
152 | 155 |
153 void NavigationManagerImpl::AddPendingItem( | 156 void LegacyNavigationManagerImpl::AddPendingItem( |
154 const GURL& url, | 157 const GURL& url, |
155 const web::Referrer& referrer, | 158 const web::Referrer& referrer, |
156 ui::PageTransition navigation_type, | 159 ui::PageTransition navigation_type, |
157 NavigationInitiationType initiation_type, | 160 NavigationInitiationType initiation_type, |
158 UserAgentOverrideOption user_agent_override_option) { | 161 UserAgentOverrideOption user_agent_override_option) { |
159 [session_controller_ addPendingItem:url | 162 [session_controller_ addPendingItem:url |
160 referrer:referrer | 163 referrer:referrer |
161 transition:navigation_type | 164 transition:navigation_type |
162 initiationType:initiation_type | 165 initiationType:initiation_type |
163 userAgentOverrideOption:user_agent_override_option]; | 166 userAgentOverrideOption:user_agent_override_option]; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 last_non_native_item->GetUserAgentType() != UserAgentType::NONE); | 200 last_non_native_item->GetUserAgentType() != UserAgentType::NONE); |
198 if (last_non_native_item) { | 201 if (last_non_native_item) { |
199 pending_item->SetUserAgentType( | 202 pending_item->SetUserAgentType( |
200 last_non_native_item->GetUserAgentType()); | 203 last_non_native_item->GetUserAgentType()); |
201 } | 204 } |
202 break; | 205 break; |
203 } | 206 } |
204 } | 207 } |
205 } | 208 } |
206 | 209 |
207 void NavigationManagerImpl::CommitPendingItem() { | 210 void LegacyNavigationManagerImpl::CommitPendingItem() { |
208 [session_controller_ commitPendingItem]; | 211 [session_controller_ commitPendingItem]; |
209 } | 212 } |
210 | 213 |
211 BrowserState* NavigationManagerImpl::GetBrowserState() const { | 214 BrowserState* LegacyNavigationManagerImpl::GetBrowserState() const { |
212 return browser_state_; | 215 return browser_state_; |
213 } | 216 } |
214 | 217 |
215 WebState* NavigationManagerImpl::GetWebState() const { | 218 WebState* LegacyNavigationManagerImpl::GetWebState() const { |
216 return delegate_->GetWebState(); | 219 return delegate_->GetWebState(); |
217 } | 220 } |
218 | 221 |
219 NavigationItem* NavigationManagerImpl::GetVisibleItem() const { | 222 NavigationItem* LegacyNavigationManagerImpl::GetVisibleItem() const { |
220 return [session_controller_ visibleItem]; | 223 return [session_controller_ visibleItem]; |
221 } | 224 } |
222 | 225 |
223 NavigationItem* NavigationManagerImpl::GetLastCommittedItem() const { | 226 NavigationItem* LegacyNavigationManagerImpl::GetLastCommittedItem() const { |
224 return [session_controller_ lastCommittedItem]; | 227 return [session_controller_ lastCommittedItem]; |
225 } | 228 } |
226 | 229 |
227 NavigationItem* NavigationManagerImpl::GetPendingItem() const { | 230 NavigationItem* LegacyNavigationManagerImpl::GetPendingItem() const { |
228 return [session_controller_ pendingItem]; | 231 return [session_controller_ pendingItem]; |
229 } | 232 } |
230 | 233 |
231 NavigationItem* NavigationManagerImpl::GetTransientItem() const { | 234 NavigationItem* LegacyNavigationManagerImpl::GetTransientItem() const { |
232 return [session_controller_ transientItem]; | 235 return [session_controller_ transientItem]; |
233 } | 236 } |
234 | 237 |
235 void NavigationManagerImpl::DiscardNonCommittedItems() { | 238 void LegacyNavigationManagerImpl::DiscardNonCommittedItems() { |
236 [session_controller_ discardNonCommittedItems]; | 239 [session_controller_ discardNonCommittedItems]; |
237 } | 240 } |
238 | 241 |
239 void NavigationManagerImpl::LoadURLWithParams( | 242 void LegacyNavigationManagerImpl::LoadURLWithParams( |
240 const NavigationManager::WebLoadParams& params) { | 243 const NavigationManager::WebLoadParams& params) { |
241 delegate_->LoadURLWithParams(params); | 244 delegate_->LoadURLWithParams(params); |
242 } | 245 } |
243 | 246 |
244 void NavigationManagerImpl::AddTransientURLRewriter( | 247 void LegacyNavigationManagerImpl::AddTransientURLRewriter( |
245 BrowserURLRewriter::URLRewriter rewriter) { | 248 BrowserURLRewriter::URLRewriter rewriter) { |
246 DCHECK(rewriter); | 249 DCHECK(rewriter); |
247 if (!transient_url_rewriters_) { | 250 if (!transient_url_rewriters_) { |
248 transient_url_rewriters_.reset( | 251 transient_url_rewriters_.reset( |
249 new std::vector<BrowserURLRewriter::URLRewriter>()); | 252 new std::vector<BrowserURLRewriter::URLRewriter>()); |
250 } | 253 } |
251 transient_url_rewriters_->push_back(rewriter); | 254 transient_url_rewriters_->push_back(rewriter); |
252 } | 255 } |
253 | 256 |
254 int NavigationManagerImpl::GetItemCount() const { | 257 int LegacyNavigationManagerImpl::GetItemCount() const { |
255 return [session_controller_ items].size(); | 258 return [session_controller_ items].size(); |
256 } | 259 } |
257 | 260 |
258 NavigationItem* NavigationManagerImpl::GetItemAtIndex(size_t index) const { | 261 NavigationItem* LegacyNavigationManagerImpl::GetItemAtIndex( |
| 262 size_t index) const { |
| 263 return GetNavigationItemImplAtIndex(index); |
| 264 } |
| 265 |
| 266 NavigationItemImpl* LegacyNavigationManagerImpl::GetNavigationItemImplAtIndex( |
| 267 size_t index) const { |
259 return [session_controller_ itemAtIndex:index]; | 268 return [session_controller_ itemAtIndex:index]; |
260 } | 269 } |
261 | 270 |
262 int NavigationManagerImpl::GetIndexOfItem( | 271 int LegacyNavigationManagerImpl::GetIndexOfItem( |
263 const web::NavigationItem* item) const { | 272 const web::NavigationItem* item) const { |
264 return [session_controller_ indexOfItem:item]; | 273 return [session_controller_ indexOfItem:item]; |
265 } | 274 } |
266 | 275 |
267 int NavigationManagerImpl::GetPendingItemIndex() const { | 276 int LegacyNavigationManagerImpl::GetPendingItemIndex() const { |
268 if (GetPendingItem()) { | 277 if (GetPendingItem()) { |
269 if ([session_controller_ pendingItemIndex] != -1) { | 278 if ([session_controller_ pendingItemIndex] != -1) { |
270 return [session_controller_ pendingItemIndex]; | 279 return [session_controller_ pendingItemIndex]; |
271 } | 280 } |
272 // TODO(crbug.com/665189): understand why last committed item index is | 281 // TODO(crbug.com/665189): understand why last committed item index is |
273 // returned here. | 282 // returned here. |
274 return GetLastCommittedItemIndex(); | 283 return GetLastCommittedItemIndex(); |
275 } | 284 } |
276 return -1; | 285 return -1; |
277 } | 286 } |
278 | 287 |
279 int NavigationManagerImpl::GetLastCommittedItemIndex() const { | 288 int LegacyNavigationManagerImpl::GetLastCommittedItemIndex() const { |
280 if (GetItemCount() == 0) | 289 if (GetItemCount() == 0) |
281 return -1; | 290 return -1; |
282 return [session_controller_ lastCommittedItemIndex]; | 291 return [session_controller_ lastCommittedItemIndex]; |
283 } | 292 } |
284 | 293 |
285 bool NavigationManagerImpl::RemoveItemAtIndex(int index) { | 294 bool LegacyNavigationManagerImpl::RemoveItemAtIndex(int index) { |
286 if (index == GetLastCommittedItemIndex() || index == GetPendingItemIndex()) | 295 if (index == GetLastCommittedItemIndex() || index == GetPendingItemIndex()) |
287 return false; | 296 return false; |
288 | 297 |
289 if (index < 0 || index >= GetItemCount()) | 298 if (index < 0 || index >= GetItemCount()) |
290 return false; | 299 return false; |
291 | 300 |
292 [session_controller_ removeItemAtIndex:index]; | 301 [session_controller_ removeItemAtIndex:index]; |
293 return true; | 302 return true; |
294 } | 303 } |
295 | 304 |
296 bool NavigationManagerImpl::CanGoBack() const { | 305 bool LegacyNavigationManagerImpl::CanGoBack() const { |
297 return CanGoToOffset(-1); | 306 return CanGoToOffset(-1); |
298 } | 307 } |
299 | 308 |
300 bool NavigationManagerImpl::CanGoForward() const { | 309 bool LegacyNavigationManagerImpl::CanGoForward() const { |
301 return CanGoToOffset(1); | 310 return CanGoToOffset(1); |
302 } | 311 } |
303 | 312 |
304 bool NavigationManagerImpl::CanGoToOffset(int offset) const { | 313 bool LegacyNavigationManagerImpl::CanGoToOffset(int offset) const { |
305 int index = GetIndexForOffset(offset); | 314 int index = GetIndexForOffset(offset); |
306 return 0 <= index && index < GetItemCount(); | 315 return 0 <= index && index < GetItemCount(); |
307 } | 316 } |
308 | 317 |
309 void NavigationManagerImpl::GoBack() { | 318 void LegacyNavigationManagerImpl::GoBack() { |
310 delegate_->GoToIndex(GetIndexForOffset(-1)); | 319 delegate_->GoToIndex(GetIndexForOffset(-1)); |
311 } | 320 } |
312 | 321 |
313 void NavigationManagerImpl::GoForward() { | 322 void LegacyNavigationManagerImpl::GoForward() { |
314 delegate_->GoToIndex(GetIndexForOffset(1)); | 323 delegate_->GoToIndex(GetIndexForOffset(1)); |
315 } | 324 } |
316 | 325 |
317 void NavigationManagerImpl::GoToIndex(int index) { | 326 void LegacyNavigationManagerImpl::GoToIndex(int index) { |
318 delegate_->GoToIndex(index); | 327 delegate_->GoToIndex(index); |
319 } | 328 } |
320 | 329 |
321 NavigationItemList NavigationManagerImpl::GetBackwardItems() const { | 330 NavigationItemList LegacyNavigationManagerImpl::GetBackwardItems() const { |
322 return [session_controller_ backwardItems]; | 331 return [session_controller_ backwardItems]; |
323 } | 332 } |
324 | 333 |
325 NavigationItemList NavigationManagerImpl::GetForwardItems() const { | 334 NavigationItemList LegacyNavigationManagerImpl::GetForwardItems() const { |
326 return [session_controller_ forwardItems]; | 335 return [session_controller_ forwardItems]; |
327 } | 336 } |
328 | 337 |
329 void NavigationManagerImpl::Reload(ReloadType reload_type, | 338 void LegacyNavigationManagerImpl::Reload(ReloadType reload_type, |
330 bool check_for_reposts) { | 339 bool check_for_reposts) { |
331 if (!GetTransientItem() && !GetPendingItem() && !GetLastCommittedItem()) | 340 if (!GetTransientItem() && !GetPendingItem() && !GetLastCommittedItem()) |
332 return; | 341 return; |
333 | 342 |
334 // Reload with ORIGINAL_REQUEST_URL type should reload with the original | 343 // Reload with ORIGINAL_REQUEST_URL type should reload with the original |
335 // request url of the transient item, or pending item if transient doesn't | 344 // request url of the transient item, or pending item if transient doesn't |
336 // exist, or last committed item if both of them don't exist. The reason is | 345 // exist, or last committed item if both of them don't exist. The reason is |
337 // that a server side redirect may change the item's url. | 346 // that a server side redirect may change the item's url. |
338 // For example, the user visits www.chromium.org and is then redirected | 347 // For example, the user visits www.chromium.org and is then redirected |
339 // to m.chromium.org, when the user wants to refresh the page with a different | 348 // to m.chromium.org, when the user wants to refresh the page with a different |
340 // configuration (e.g. user agent), the user would be expecting to visit | 349 // configuration (e.g. user agent), the user would be expecting to visit |
341 // www.chromium.org instead of m.chromium.org. | 350 // www.chromium.org instead of m.chromium.org. |
342 if (reload_type == web::ReloadType::ORIGINAL_REQUEST_URL) { | 351 if (reload_type == web::ReloadType::ORIGINAL_REQUEST_URL) { |
343 NavigationItem* reload_item = nullptr; | 352 NavigationItem* reload_item = nullptr; |
344 if (GetTransientItem()) | 353 if (GetTransientItem()) |
345 reload_item = GetTransientItem(); | 354 reload_item = GetTransientItem(); |
346 else if (GetPendingItem()) | 355 else if (GetPendingItem()) |
347 reload_item = GetPendingItem(); | 356 reload_item = GetPendingItem(); |
348 else | 357 else |
349 reload_item = GetLastCommittedItem(); | 358 reload_item = GetLastCommittedItem(); |
350 DCHECK(reload_item); | 359 DCHECK(reload_item); |
351 | 360 |
352 reload_item->SetURL(reload_item->GetOriginalRequestURL()); | 361 reload_item->SetURL(reload_item->GetOriginalRequestURL()); |
353 } | 362 } |
354 | 363 |
355 delegate_->Reload(); | 364 delegate_->Reload(); |
356 } | 365 } |
357 | 366 |
358 void NavigationManagerImpl::CopyStateFromAndPrune( | 367 void LegacyNavigationManagerImpl::CopyStateFromAndPrune( |
359 const NavigationManager* manager) { | 368 const NavigationManager* manager) { |
360 DCHECK(manager); | 369 DCHECK(manager); |
361 CRWSessionController* other_session = | 370 CRWSessionController* other_session = |
362 static_cast<const NavigationManagerImpl*>(manager)->session_controller_; | 371 static_cast<const NavigationManagerImpl*>(manager) |
| 372 ->GetSessionController(); |
363 [session_controller_ copyStateFromSessionControllerAndPrune:other_session]; | 373 [session_controller_ copyStateFromSessionControllerAndPrune:other_session]; |
364 } | 374 } |
365 | 375 |
366 bool NavigationManagerImpl::CanPruneAllButLastCommittedItem() const { | 376 bool LegacyNavigationManagerImpl::CanPruneAllButLastCommittedItem() const { |
367 return [session_controller_ canPruneAllButLastCommittedItem]; | 377 return [session_controller_ canPruneAllButLastCommittedItem]; |
368 } | 378 } |
369 | 379 |
370 std::unique_ptr<std::vector<BrowserURLRewriter::URLRewriter>> | 380 std::unique_ptr<std::vector<BrowserURLRewriter::URLRewriter>> |
371 NavigationManagerImpl::GetTransientURLRewriters() { | 381 LegacyNavigationManagerImpl::GetTransientURLRewriters() { |
372 return std::move(transient_url_rewriters_); | 382 return std::move(transient_url_rewriters_); |
373 } | 383 } |
374 | 384 |
375 void NavigationManagerImpl::RemoveTransientURLRewriters() { | 385 void LegacyNavigationManagerImpl::RemoveTransientURLRewriters() { |
376 transient_url_rewriters_.reset(); | 386 transient_url_rewriters_.reset(); |
377 } | 387 } |
378 | 388 |
379 int NavigationManagerImpl::GetIndexForOffset(int offset) const { | 389 int LegacyNavigationManagerImpl::GetIndexForOffset(int offset) const { |
380 int result = [session_controller_ pendingItemIndex] == -1 | 390 int result = [session_controller_ pendingItemIndex] == -1 |
381 ? GetLastCommittedItemIndex() | 391 ? GetLastCommittedItemIndex() |
382 : static_cast<int>([session_controller_ pendingItemIndex]); | 392 : static_cast<int>([session_controller_ pendingItemIndex]); |
383 | 393 |
384 if (offset < 0) { | 394 if (offset < 0) { |
385 if (GetTransientItem() && [session_controller_ pendingItemIndex] == -1) { | 395 if (GetTransientItem() && [session_controller_ pendingItemIndex] == -1) { |
386 // Going back from transient item that added to the end navigation stack | 396 // Going back from transient item that added to the end navigation stack |
387 // is a matter of discarding it as there is no need to move navigation | 397 // is a matter of discarding it as there is no need to move navigation |
388 // index back. | 398 // index back. |
389 offset++; | 399 offset++; |
(...skipping 27 matching lines...) Expand all Loading... |
417 // Result may be out of bounds, so stop trying to skip redirect items and | 427 // Result may be out of bounds, so stop trying to skip redirect items and |
418 // simply add the remainder. | 428 // simply add the remainder. |
419 result += offset; | 429 result += offset; |
420 if (result < 0 /* overflow */) | 430 if (result < 0 /* overflow */) |
421 result = INT_MAX; | 431 result = INT_MAX; |
422 } | 432 } |
423 | 433 |
424 return result; | 434 return result; |
425 } | 435 } |
426 | 436 |
427 bool NavigationManagerImpl::IsRedirectItemAtIndex(int index) const { | 437 bool LegacyNavigationManagerImpl::IsRedirectItemAtIndex(int index) const { |
428 DCHECK_GE(index, 0); | 438 DCHECK_GE(index, 0); |
429 DCHECK_LT(index, GetItemCount()); | 439 DCHECK_LT(index, GetItemCount()); |
430 ui::PageTransition transition = GetItemAtIndex(index)->GetTransitionType(); | 440 ui::PageTransition transition = GetItemAtIndex(index)->GetTransitionType(); |
431 return transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK; | 441 return transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK; |
432 } | 442 } |
433 | 443 |
434 NavigationItem* NavigationManagerImpl::GetLastCommittedNonAppSpecificItem() | 444 NavigationItem* |
435 const { | 445 LegacyNavigationManagerImpl::GetLastCommittedNonAppSpecificItem() const { |
436 int index = GetLastCommittedItemIndex(); | 446 int index = GetLastCommittedItemIndex(); |
437 if (index == -1) | 447 if (index == -1) |
438 return nullptr; | 448 return nullptr; |
439 WebClient* client = GetWebClient(); | 449 WebClient* client = GetWebClient(); |
440 const ScopedNavigationItemImplList& items = [session_controller_ items]; | 450 const ScopedNavigationItemImplList& items = [session_controller_ items]; |
441 while (index >= 0) { | 451 while (index >= 0) { |
442 NavigationItem* item = items[index--].get(); | 452 NavigationItem* item = items[index--].get(); |
443 if (!client->IsAppSpecificURL(item->GetVirtualURL())) | 453 if (!client->IsAppSpecificURL(item->GetVirtualURL())) |
444 return item; | 454 return item; |
445 } | 455 } |
446 return nullptr; | 456 return nullptr; |
447 } | 457 } |
448 | 458 |
| 459 size_t LegacyNavigationManagerImpl::GetPreviousItemIndex() const { |
| 460 return [session_controller_ previousItemIndex]; |
| 461 } |
| 462 |
449 } // namespace web | 463 } // namespace web |
OLD | NEW |