| 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 |