OLD | NEW |
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 /* | 5 /* |
6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
10 * | 10 * |
(...skipping 1609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1620 // then the renderer navigated on its own, independent of the pending entry, | 1620 // then the renderer navigated on its own, independent of the pending entry, |
1621 // so don't copy anything. | 1621 // so don't copy anything. |
1622 if (pending_entry_ && pending_entry_index_ == -1) | 1622 if (pending_entry_ && pending_entry_index_ == -1) |
1623 entry->set_unique_id(pending_entry_->GetUniqueID()); | 1623 entry->set_unique_id(pending_entry_->GetUniqueID()); |
1624 | 1624 |
1625 DiscardNonCommittedEntriesInternal(); | 1625 DiscardNonCommittedEntriesInternal(); |
1626 | 1626 |
1627 int current_size = static_cast<int>(entries_.size()); | 1627 int current_size = static_cast<int>(entries_.size()); |
1628 | 1628 |
1629 // When replacing, don't prune the forward history. | 1629 // When replacing, don't prune the forward history. |
1630 if (replace) { | 1630 if (replace && current_size > 0) { |
1631 DCHECK_GT(current_size, 0); | |
1632 int32 page_id = entry->GetPageID(); | 1631 int32 page_id = entry->GetPageID(); |
1633 | 1632 |
1634 // ScopedVectors don't automatically delete the replaced value, so make sure | 1633 // ScopedVectors don't automatically delete the replaced value, so make sure |
1635 // the previous value gets deleted. | 1634 // the previous value gets deleted. |
1636 scoped_ptr<NavigationEntryImpl> old_entry( | 1635 scoped_ptr<NavigationEntryImpl> old_entry( |
1637 entries_[last_committed_entry_index_]); | 1636 entries_[last_committed_entry_index_]); |
1638 entries_[last_committed_entry_index_] = entry.release(); | 1637 entries_[last_committed_entry_index_] = entry.release(); |
1639 | 1638 |
1640 // This is a new page ID, so we need everybody to know about it. | 1639 // This is a new page ID, so we need everybody to know about it. |
1641 delegate_->UpdateMaxPageID(page_id); | 1640 delegate_->UpdateMaxPageID(page_id); |
1642 return; | 1641 return; |
1643 } | 1642 } |
1644 | 1643 |
| 1644 // We shouldn't see replace == true when there's no committed entries. |
| 1645 DCHECK(!replace); |
| 1646 |
1645 if (current_size > 0) { | 1647 if (current_size > 0) { |
1646 // Prune any entries which are in front of the current entry. | 1648 // Prune any entries which are in front of the current entry. |
1647 // last_committed_entry_index_ must be updated here since calls to | 1649 // last_committed_entry_index_ must be updated here since calls to |
1648 // NotifyPrunedEntries() below may re-enter and we must make sure | 1650 // NotifyPrunedEntries() below may re-enter and we must make sure |
1649 // last_committed_entry_index_ is not left in an invalid state. | 1651 // last_committed_entry_index_ is not left in an invalid state. |
1650 int num_pruned = 0; | 1652 int num_pruned = 0; |
1651 while (last_committed_entry_index_ < (current_size - 1)) { | 1653 while (last_committed_entry_index_ < (current_size - 1)) { |
1652 num_pruned++; | 1654 num_pruned++; |
1653 entries_.pop_back(); | 1655 entries_.pop_back(); |
1654 current_size--; | 1656 current_size--; |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1982 } | 1984 } |
1983 } | 1985 } |
1984 } | 1986 } |
1985 | 1987 |
1986 void NavigationControllerImpl::SetGetTimestampCallbackForTest( | 1988 void NavigationControllerImpl::SetGetTimestampCallbackForTest( |
1987 const base::Callback<base::Time()>& get_timestamp_callback) { | 1989 const base::Callback<base::Time()>& get_timestamp_callback) { |
1988 get_timestamp_callback_ = get_timestamp_callback; | 1990 get_timestamp_callback_ = get_timestamp_callback; |
1989 } | 1991 } |
1990 | 1992 |
1991 } // namespace content | 1993 } // namespace content |
OLD | NEW |