| Index: content/browser/tab_contents/navigation_controller_impl.cc
|
| diff --git a/content/browser/tab_contents/navigation_controller_impl.cc b/content/browser/tab_contents/navigation_controller_impl.cc
|
| index e8d722d1a1843bd974b0ffc670af912c2836c958..5cdd8cceef9f8cdf2365b557bee42ce558228b1e 100644
|
| --- a/content/browser/tab_contents/navigation_controller_impl.cc
|
| +++ b/content/browser/tab_contents/navigation_controller_impl.cc
|
| @@ -412,6 +412,7 @@ int NavigationControllerImpl::GetLastCommittedEntryIndex() const {
|
| }
|
|
|
| int NavigationControllerImpl::GetEntryCount() const {
|
| + DCHECK(entries_.size() <= max_entry_count());
|
| return static_cast<int>(entries_.size());
|
| }
|
|
|
| @@ -1077,6 +1078,12 @@ void NavigationControllerImpl::CopyStateFromAndPrune(
|
| // Remove all the entries leaving the active entry.
|
| PruneAllButActive();
|
|
|
| + // We now have zero or one entries. Ensure that adding the entries from
|
| + // source won't put us over the limit.
|
| + DCHECK(GetEntryCount() == 0 || GetEntryCount() == 1);
|
| + if (GetEntryCount() > 0)
|
| + source->PruneOldestEntryIfFull();
|
| +
|
| // Insert the entries from source. Don't use source->GetCurrentEntryIndex as
|
| // we don't want to copy over the transient entry.
|
| int max_source_index = source->pending_entry_index_ != -1 ?
|
| @@ -1237,11 +1244,7 @@ void NavigationControllerImpl::InsertOrReplaceEntry(NavigationEntryImpl* entry,
|
| NotifyPrunedEntries(this, false, num_pruned);
|
| }
|
|
|
| - if (entries_.size() >= max_entry_count()) {
|
| - DCHECK(last_committed_entry_index_ > 0);
|
| - RemoveEntryAtIndex(0);
|
| - NotifyPrunedEntries(this, true, 1);
|
| - }
|
| + PruneOldestEntryIfFull();
|
|
|
| entries_.push_back(linked_ptr<NavigationEntryImpl>(entry));
|
| last_committed_entry_index_ = static_cast<int>(entries_.size()) - 1;
|
| @@ -1250,6 +1253,15 @@ void NavigationControllerImpl::InsertOrReplaceEntry(NavigationEntryImpl* entry,
|
| tab_contents_->UpdateMaxPageID(entry->GetPageID());
|
| }
|
|
|
| +void NavigationControllerImpl::PruneOldestEntryIfFull() {
|
| + if (entries_.size() >= max_entry_count()) {
|
| + DCHECK_EQ(max_entry_count(), entries_.size());
|
| + DCHECK(last_committed_entry_index_ > 0);
|
| + RemoveEntryAtIndex(0);
|
| + NotifyPrunedEntries(this, true, 1);
|
| + }
|
| +}
|
| +
|
| void NavigationControllerImpl::NavigateToPendingEntry(ReloadType reload_type) {
|
| needs_reload_ = false;
|
|
|
|
|