OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/browser/web_contents/navigation_controller_impl.h" | 5 #include "content/browser/web_contents/navigation_controller_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/string_number_conversions.h" // Temporary | 10 #include "base/strings/string_number_conversions.h" // Temporary |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 } | 261 } |
262 void NavigationControllerImpl::ReloadOriginalRequestURL(bool check_for_repost) { | 262 void NavigationControllerImpl::ReloadOriginalRequestURL(bool check_for_repost) { |
263 ReloadInternal(check_for_repost, RELOAD_ORIGINAL_REQUEST_URL); | 263 ReloadInternal(check_for_repost, RELOAD_ORIGINAL_REQUEST_URL); |
264 } | 264 } |
265 | 265 |
266 void NavigationControllerImpl::ReloadInternal(bool check_for_repost, | 266 void NavigationControllerImpl::ReloadInternal(bool check_for_repost, |
267 ReloadType reload_type) { | 267 ReloadType reload_type) { |
268 if (transient_entry_index_ != -1) { | 268 if (transient_entry_index_ != -1) { |
269 // If an interstitial is showing, treat a reload as a navigation to the | 269 // If an interstitial is showing, treat a reload as a navigation to the |
270 // transient entry's URL. | 270 // transient entry's URL. |
271 NavigationEntryImpl* active_entry = | 271 NavigationEntryImpl* transient_entry = |
272 NavigationEntryImpl::FromNavigationEntry(GetActiveEntry()); | 272 NavigationEntryImpl::FromNavigationEntry(GetTransientEntry()); |
273 if (!active_entry) | 273 if (!transient_entry) |
274 return; | 274 return; |
275 LoadURL(active_entry->GetURL(), | 275 LoadURL(transient_entry->GetURL(), |
276 Referrer(), | 276 Referrer(), |
277 PAGE_TRANSITION_RELOAD, | 277 PAGE_TRANSITION_RELOAD, |
278 active_entry->extra_headers()); | 278 transient_entry->extra_headers()); |
279 return; | 279 return; |
280 } | 280 } |
281 | 281 |
282 NavigationEntryImpl* entry = NULL; | 282 NavigationEntryImpl* entry = NULL; |
283 int current_index = -1; | 283 int current_index = -1; |
284 | 284 |
285 // If we are reloading the initial navigation, just use the current | 285 // If we are reloading the initial navigation, just use the current |
286 // pending entry. Otherwise look up the current entry. | 286 // pending entry. Otherwise look up the current entry. |
287 if (IsInitialNavigation() && pending_entry_) { | 287 if (IsInitialNavigation() && pending_entry_) { |
288 entry = pending_entry_; | 288 entry = pending_entry_; |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 NavigationEntry* NavigationControllerImpl::GetLastCommittedEntry() const { | 455 NavigationEntry* NavigationControllerImpl::GetLastCommittedEntry() const { |
456 if (last_committed_entry_index_ == -1) | 456 if (last_committed_entry_index_ == -1) |
457 return NULL; | 457 return NULL; |
458 return entries_[last_committed_entry_index_].get(); | 458 return entries_[last_committed_entry_index_].get(); |
459 } | 459 } |
460 | 460 |
461 bool NavigationControllerImpl::CanViewSource() const { | 461 bool NavigationControllerImpl::CanViewSource() const { |
462 const std::string& mime_type = web_contents_->GetContentsMimeType(); | 462 const std::string& mime_type = web_contents_->GetContentsMimeType(); |
463 bool is_viewable_mime_type = net::IsSupportedNonImageMimeType(mime_type) && | 463 bool is_viewable_mime_type = net::IsSupportedNonImageMimeType(mime_type) && |
464 !net::IsSupportedMediaMimeType(mime_type); | 464 !net::IsSupportedMediaMimeType(mime_type); |
465 NavigationEntry* active_entry = GetActiveEntry(); | 465 NavigationEntry* visible_entry = GetVisibleEntry(); |
466 return active_entry && !active_entry->IsViewSourceMode() && | 466 return visible_entry && !visible_entry->IsViewSourceMode() && |
467 is_viewable_mime_type && !web_contents_->GetInterstitialPage(); | 467 is_viewable_mime_type && !web_contents_->GetInterstitialPage(); |
468 } | 468 } |
469 | 469 |
470 int NavigationControllerImpl::GetLastCommittedEntryIndex() const { | 470 int NavigationControllerImpl::GetLastCommittedEntryIndex() const { |
471 return last_committed_entry_index_; | 471 return last_committed_entry_index_; |
472 } | 472 } |
473 | 473 |
474 int NavigationControllerImpl::GetEntryCount() const { | 474 int NavigationControllerImpl::GetEntryCount() const { |
475 DCHECK(entries_.size() <= max_entry_count()); | 475 DCHECK(entries_.size() <= max_entry_count()); |
476 return static_cast<int>(entries_.size()); | 476 return static_cast<int>(entries_.size()); |
(...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1311 | 1311 |
1312 return true; | 1312 return true; |
1313 } | 1313 } |
1314 | 1314 |
1315 void NavigationControllerImpl::PruneAllButVisible() { | 1315 void NavigationControllerImpl::PruneAllButVisible() { |
1316 PruneAllButVisibleInternal(); | 1316 PruneAllButVisibleInternal(); |
1317 | 1317 |
1318 // We should still have a last committed entry. | 1318 // We should still have a last committed entry. |
1319 DCHECK_NE(-1, last_committed_entry_index_); | 1319 DCHECK_NE(-1, last_committed_entry_index_); |
1320 | 1320 |
1321 NavigationEntryImpl* entry = | |
1322 NavigationEntryImpl::FromNavigationEntry(GetActiveEntry()); | |
1323 // We pass 0 instead of GetEntryCount() for the history_length parameter of | 1321 // We pass 0 instead of GetEntryCount() for the history_length parameter of |
1324 // SetHistoryLengthAndPrune, because it will create history_length additional | 1322 // SetHistoryLengthAndPrune, because it will create history_length additional |
1325 // history entries. | 1323 // history entries. |
1326 // TODO(jochen): This API is confusing and we should clean it up. | 1324 // TODO(jochen): This API is confusing and we should clean it up. |
1327 // http://crbug.com/178491 | 1325 // http://crbug.com/178491 |
| 1326 NavigationEntryImpl* entry = |
| 1327 NavigationEntryImpl::FromNavigationEntry(GetVisibleEntry()); |
1328 web_contents_->SetHistoryLengthAndPrune( | 1328 web_contents_->SetHistoryLengthAndPrune( |
1329 entry->site_instance(), 0, entry->GetPageID()); | 1329 entry->site_instance(), 0, entry->GetPageID()); |
1330 } | 1330 } |
1331 | 1331 |
1332 void NavigationControllerImpl::PruneAllButVisibleInternal() { | 1332 void NavigationControllerImpl::PruneAllButVisibleInternal() { |
1333 // It is up to callers to check the invariants before calling this. | 1333 // It is up to callers to check the invariants before calling this. |
1334 CHECK(CanPruneAllButVisible()); | 1334 CHECK(CanPruneAllButVisible()); |
1335 | 1335 |
1336 // Erase all entries but the last committed entry. There may still be a | 1336 // Erase all entries but the last committed entry. There may still be a |
1337 // new pending entry after this. | 1337 // new pending entry after this. |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1554 if (pending_entry_ && !pending_entry_->site_instance() && | 1554 if (pending_entry_ && !pending_entry_->site_instance() && |
1555 pending_entry_->restore_type() != NavigationEntryImpl::RESTORE_NONE) { | 1555 pending_entry_->restore_type() != NavigationEntryImpl::RESTORE_NONE) { |
1556 pending_entry_->set_site_instance(static_cast<SiteInstanceImpl*>( | 1556 pending_entry_->set_site_instance(static_cast<SiteInstanceImpl*>( |
1557 web_contents_->GetPendingSiteInstance())); | 1557 web_contents_->GetPendingSiteInstance())); |
1558 pending_entry_->set_restore_type(NavigationEntryImpl::RESTORE_NONE); | 1558 pending_entry_->set_restore_type(NavigationEntryImpl::RESTORE_NONE); |
1559 } | 1559 } |
1560 } | 1560 } |
1561 | 1561 |
1562 void NavigationControllerImpl::NotifyNavigationEntryCommitted( | 1562 void NavigationControllerImpl::NotifyNavigationEntryCommitted( |
1563 LoadCommittedDetails* details) { | 1563 LoadCommittedDetails* details) { |
1564 details->entry = GetActiveEntry(); | 1564 details->entry = GetLastCommittedEntry(); |
1565 | 1565 |
1566 // We need to notify the ssl_manager_ before the web_contents_ so the | 1566 // We need to notify the ssl_manager_ before the web_contents_ so the |
1567 // location bar will have up-to-date information about the security style | 1567 // location bar will have up-to-date information about the security style |
1568 // when it wants to draw. See http://crbug.com/11157 | 1568 // when it wants to draw. See http://crbug.com/11157 |
1569 ssl_manager_.DidCommitProvisionalLoad(*details); | 1569 ssl_manager_.DidCommitProvisionalLoad(*details); |
1570 | 1570 |
1571 web_contents_->NotifyNavigationStateChanged(kInvalidateAll); | 1571 web_contents_->NotifyNavigationStateChanged(kInvalidateAll); |
1572 web_contents_->NotifyNavigationEntryCommitted(*details); | 1572 web_contents_->NotifyNavigationEntryCommitted(*details); |
1573 | 1573 |
1574 // TODO(avi): Remove. http://crbug.com/170921 | 1574 // TODO(avi): Remove. http://crbug.com/170921 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1689 } | 1689 } |
1690 } | 1690 } |
1691 } | 1691 } |
1692 | 1692 |
1693 void NavigationControllerImpl::SetGetTimestampCallbackForTest( | 1693 void NavigationControllerImpl::SetGetTimestampCallbackForTest( |
1694 const base::Callback<base::Time()>& get_timestamp_callback) { | 1694 const base::Callback<base::Time()>& get_timestamp_callback) { |
1695 get_timestamp_callback_ = get_timestamp_callback; | 1695 get_timestamp_callback_ = get_timestamp_callback; |
1696 } | 1696 } |
1697 | 1697 |
1698 } // namespace content | 1698 } // namespace content |
OLD | NEW |